0byt3m1n1
Path:
/
data
/
applications
/
aps.bak
/
webcalendar
/
1.2.3-0
/
standard
/
htdocs
/
ws
/
[
Home
]
File: get_reminders.php
<?php /* $Id: get_reminders.php,v 1.20.2.2 2007/08/06 02:28:33 cknudsen Exp $ * * Description: * Web Service functionality for reminders. * Uses XML (but not SOAP at this point since that would be * overkill and require extra packages to install). * * Comments: * Some of this code was borrowed from send_reminders.php. * * This functionality works somewhat independent of the email-based * send_reminders.php script. If the end user intends to use * client-side reminders, they should set "Event Reminders" to "No" * in the "Email" section on the Prefernces page. * * This is read-only for the client side, so the client must * keep track of whether or not they have displayed the reminder * to the user. (No where in the database will it be recorded that * the user received a reminder through this functionality.) * * Client apps must use the same authentication as the web browser. If * WebCalendar is setup to use web-based authentication, then the login.php * found in this directory should be used to obtain a session cookie. */ // How many days ahead should we look for events? // To handle case of an event 30 days from now where the user asked // for a reminder 30 days before the event. $DAYS_IN_ADVANCE = 30; // $DAYS_IN_ADVANCE = 365; // Show reminders for the next N days. $CUTOFF = 7; $WS_DEBUG = false; require_once 'ws.php'; // Initialize... ws_init (); header ( 'Content-type: text/xml' ); // header ( "Content-type: text/plain" ); echo '<?xml version="1.0" encoding="UTF-8"?' . ">\n"; $out = ' <reminders>'; // If login is public user, make sure public can view others... if ( $login == '__public__' && $login != $user ) { if ( $PUBLIC_ACCESS_OTHERS != 'Y' ) { echo ' <error>' . translate ( 'Not authorized' ) . '</error> </reminders> '; exit; } $out .= ' <!-- ' . str_replace ( 'XXX', translate ( 'public' ), translate ( 'Allowing XXX user to view other users calendar.' ) ) . ' -->'; } if ( empty ( $user ) ) $user = $login; // If viewing different user then yourself... if ( $login != $user ) { if ( $ALLOW_VIEW_OTHER != 'Y' ) { echo ' <error>' . translate ( 'Not authorized' ) . '</error> </reminders> '; exit; } $out .= ' <!-- ' . str_replace ( 'XXX ', '', translate ( 'Allowing XXX user to view other users calendar.' ) ) . ' -->'; } // Make sure this user has enabled email reminders. // if ( $EMAIL_REMINDER == 'N' ) { // $out .= str_replace ('XXX', $user, // translate ( 'Error Email reminders disabled for user XXX.' ) ); // dbi_close ( $c ); // exit; // } $startdate = mktime (); $enddate = $startdate + ( $DAYS_IN_ADVANCE * 86400 ); // Now read all the repeating events. $repeated_events = query_events ( $user, true, 'AND ( wer.cal_end > ' . $startdate . ' OR wer.cal_end IS NULL ) ' ); // Read non-repeating events. $events = read_events ( $user, $startdate, $enddate ); if ( $WS_DEBUG ) ws_log_message ( str_replace ( 'XXX', count ( $events ), translate ( 'Found XXX events in time range.' ) ) ); /* Send a reminder for a single event for a single day. */ function process_reminder ( $id, $event_date, $remind_time ) { global $DISABLE_ACCESS_FIELD, $DISABLE_PARTICIPANTS_FIELD, $DISABLE_PRIORITY_FIELD, $SERVER_URL, $single_user, $single_user_login, $site_extras, $WS_DEBUG; return ' <reminder> <remindDate>' . date ( 'Ymd', $remind_time ) . '</remindDate> <remindTime>' . date ( 'Hi', $remind_time ) . '</remindTime> <untilRemind>' . ( $remind_time - time () ) . '</untilRemind> ' . ws_print_event_xml ( $id, $event_date ) . ' </reminder> '; } /* * Process an event for a single day. Check to see if it has a reminder, * when it needs to be sent and when the last time it was sent. */ function process_event ( $id, $name, $event_date, $event_time ) { global $CUTOFF, $site_extras, $WS_DEBUG; $out = ''; $debug = str_replace ( 'XXX', array ( $id, $name, $event_time, $event_date ), translate ( 'Event id=XXX XXX at XXX on XXX.' ) ) . "\n" . str_replace ( 'XXX', count ( $site_extras ), translate ( 'Number of site_extras XXX.' ) ); // Check to see if this event has any reminders. $extras = get_site_extra_fields ( $id ); for ( $j = 0, $seCnt = count ( $site_extras ); $j < $seCnt; $j++ ) { $extra_name = $site_extras[$j][0]; $extra_type = $site_extras[$j][2]; $extra_arg1 = $site_extras[$j][3]; $extra_arg2 = $site_extras[$j][4]; if ( ! empty ( $extras[$extra_name]['cal_remind'] ) ) { $debug .= "\n" . translate ( 'Reminder set for event.' ); // How many minutes before event should we send the reminder? $event_time = mktime ( intval ( $event_time / 10000 ), ( $event_time / 100 ) % 100, 0, substr ( $event_date, 4, 2 ), substr ( $event_date, 6, 2 ), substr ( $event_date, 0, 4 ) ); if ( ( $extra_arg2 & EXTRA_REMINDER_WITH_OFFSET ) > 0 ) { $minsbefore = $extras[$extra_name]['cal_data']; $remind_time = $event_time - ( $minsbefore * 60 ); } elseif ( ( $extra_arg2 & EXTRA_REMINDER_WITH_DATE ) > 0 ) { $rd = $extras[$extra_name]['cal_date']; $remind_time = mktime ( 0, 0, 0, substr ( $rd, 4, 2 ), substr ( $rd, 6, 2 ), substr ( $rd, 0, 4 ) ); } else { $minsbefore = $extra_arg1; $remind_time = $event_time - ( $minsbefore * 60 ); } $debug .= ' ' . str_replace ( 'XXX', $minsbefore, translate ( 'Mins Before XXX.' ) ) . ' ' . str_replace ( 'XXX', date ( 'm/d/Y H:i', $event_time ), translate ( 'Event time is XXX.' ) ) . ' ' . str_replace ( 'XXX', date ( 'm/d/Y H:i', $remind_time ), translate ( 'Remind time is XXX.' ) ); // Send a reminder. if ( time () >= $remind_time - ( $CUTOFF * 86400 ) ) { if ( $debug ) $debug .= ' SENDING REMINDER!'; $out .= process_reminder ( $id, $event_date, $remind_time ); } } } if ( $WS_DEBUG ) ws_log_message ( $debug ); return $out; } $out .= ' <!-- ' . str_replace ( 'XXX', array ( $user, $login ), translate ( 'Reminders for user XXX, login XXX.' ) ) . ' --> '; $startdate = time (); // today for ( $d = 0; $d < $DAYS_IN_ADVANCE; $d++ ) { $date = date ( 'Ymd', time () + ( $d * 86400 ) ); // echo "Date: $date\n"; // Get non-repeating events for this date. // An event will be included one time for each participant. $ev = get_entries ( $date ); // Keep track of duplicates. $completed_ids = array (); for ( $i = 0, $evCnt = count ( $ev ); $i < $evCnt; $i++ ) { $id = $ev[$i]->getID (); if ( ! empty ( $completed_ids[$id] ) ) continue; $completed_ids[$id] = 1; $out .= process_event ( $id, $ev[$i]->getName (), $date, $ev[$i]->getTime () ); } $rep = get_repeating_entries ( $user, $date ); for ( $i = 0, $repCnt = count ( $rep ); $i < $repCnt; $i++ ) { $id = $rep[$i]->getID (); if ( ! empty ( $completed_ids[$id] ) ) continue; $completed_ids[$id] = 1; $out .= process_event ( $id, $rep[$i]->getName (), $date, $rep[$i]->getTime () ); } } $out .= ' </reminders> '; // If web service debugging is on... if ( ! empty ( $WS_DEBUG ) && $WS_DEBUG ) ws_log_message ( $out ); // Send output now... echo $out; ?>