"); exit(); } $ValidAccess = 2010; $selectedLanguage = 'English'; require_once("include/globals.php"); require_once("/m/data1/app.hotlunches.net/include/queuemail.php"); $QueueDelay = 1; $startDelay = 0; if ($argc > 1) { $startDelay = intval($argv[1]); sleep($startDelay); } sleep(2); // Special adjustments // Send for a single school by setting selected_school value // $selected_school = 18419; // Set current mode if required // $mode = "log-only"; // TESTING ONLY MWF if (!isset($mode)) $mode = ""; // Set output display mode // $displayMode = "screen"; // TESTING ONLY if (!isset($displayMode)) $displayMode = "cron"; // Handle parameters if (array_key_exists('selected_school', $_GET)) $selected_school = intval($_GET['selected_school']); if (array_key_exists('selected_school', $_POST)) $selected_school = intval($_POST['selected_school']); if (isset($selected_school) && intval($selected_school) > 0) { $selected_school = intval($selected_school); $schoolWhere = "AND record_num = $selected_school"; $hwhere = ""; $sname = db_getVal("SELECT school_name FROM schools WHERE record_num = $selected_school"); echo("Send for: $sname\n"); } $maxEmails = 3; $maxEmails = 0; // Handle filtering date_default_timezone_set("America/Vancouver"); $stime = time(); $dow = date("D",$stime); if (!isset($schoolWhere) || strlen($schoolWhere) == 0) $schoolWhere = "AND email_reminder_day = '$dow' "; $timezonesAtlantic = array('Canada/Atlantic','Canada/Newfoundland'); $timezonesEastern = array('Canada/Eastern','America/New_York'); $timezonesCentral = array('Canada/Central','America/Chicago','Canada/Saskatchewan'); $timezonesMountain = array('Canada/Mountain','America/Phoenix','America/Denver'); $timezonesPacific = array('Canada/Pacific','Canada/Yukon','America/Los_Angeles','America/Anchorage'); $cHr = date("H",$stime); $hWhere = ""; $tz = "none"; $tz = date("Hi",time()); if ($displayMode == 'cron') { switch ($cHr) { case '05': $tzones = implode("','",$timezonesAtlantic); $hWhere = "AND timezone IN ('$tzones') "; $schoolWhere = "AND email_reminder_day = '$dow' "; $tz = "AST"; $QueueDelay = 1; break; case '06': $tzones = implode("','",$timezonesEastern); $hWhere = "AND timezone IN ('$tzones') "; $schoolWhere = "AND email_reminder_day = '$dow' "; $tz = "EST"; $QueueDelay = 2; break; case '07': $tzones = implode("','",$timezonesCentral); $hWhere = "AND timezone IN ('$tzones') "; $schoolWhere = "AND email_reminder_day = '$dow' "; $tz = "CST"; $QueueDelay = 3; break; case '08': $tzones = implode("','",$timezonesMountain); $hWhere = "AND timezone IN ('$tzones') "; $schoolWhere = "AND email_reminder_day = '$dow' "; $tz = "MST"; $QueueDelay = 4; break; case '09': $tzones = implode("','",$timezonesPacific); $hWhere = "AND timezone IN ('$tzones') "; $schoolWhere = "AND email_reminder_day = '$dow' "; $tz = "PST"; $QueueDelay = 5; break; case '10': $timeZones = array_merge($timezonesAtlantic,$timezonesEastern,$timezonesCentral,$timezonesMountain,$timezonesPacific); $tzones = implode("','",$timeZones); $hWhere = "AND timezone NOT IN ('$tzones') "; $schoolWhere = "AND email_reminder_day = '$dow' "; $tz = "Other"; $QueueDelay = 6; break; default: $tz = "test"; break; } } // $tz = 'test'; // MWF // $displayMode = 'cron'; // MWF $today = date("Y.m.d",time()); $logFile = "/m/data1/app.hotlunches.net/logs/email/email.reminders.$today.$tz.log"; if (is_file($logFile)) $logFile = "/m/data1/app.hotlunches.net/logs/email/email.reminders.$today.$tz.log.1"; if (is_file($logFile)) $logFile = "/m/data1/app.hotlunches.net/logs/email/email.reminders.$today.$tz.log.2"; if (is_file($logFile)) $logFile = "/m/data1/app.hotlunches.net/logs/email/email.reminders.$today.$tz.log.3"; $fp = fopen($logFile,"w"); echoText(getLanguageText('TEXT-SEND-WEEKLY-EMAIL-REMINDER') . "\n",$displayMode); echoText($logFile."\n",$displayMode); $start = date("Y-m-d H:i:s",$stime); $week_start_date = date("Y-m-d",$stime); $week_end_date = date("Y-m-d",$stime + 60 * 60 * 24 * 7); $menu_cutoff_date = date("Y-m-d",$stime + 60 * 60 * 24 * 35); $emailsSent = 0; if ($displayMode != "cron") { echoText("Start: $start\n",$displayMode); echoText("DB Mode: $currentDBMode\n",$displayMode); echoText("DB Name: $db_dbname\n",$displayMode); } if ($displayMode == "cron") { echo("Start: $start\n"); echo("DB Mode: $currentDBMode\n"); writeEmailLog("Start: $start\n"); writeEmailLog("DB Mode: $currentDBMode\n"); echo("DB Name: $db_dbname\n"); writeEmailLog("DB Name: $db_dbname\n"); writeEmailLog("Mode: $mode\n"); writeEmailLog("\n"); } $eTable = new Table("email_reminders_log"); $dTable = new Table("email_reminders_log_detail"); // Get set of schools that are sending on this day of the week $query = "SELECT * FROM schools WHERE status IN ('Active','Linked') $schoolWhere $hWhere ORDER BY school_name"; $schools = db_query($query); echo("$query\n"); echo("Schools: " . db_num_rows($schools) . "\n"); while ($school = db_fetch_assoc($schools)) { $school_record = $school; $school_name = $school['school_name']; $school_num = $school['record_num']; $curr_school_num = $school['record_num']; $subject = $school['email_reminder_title']; $default_language = $school['default_language']; $date_format = $school['date_format']; $url = $school['url']; $schoolID = $school['default_url_code']; $reminders_to = $school['email_reminders_to']; $school_status = $school['status']; $linked_site = $school['linked_site']; $language = $default_language; // email_reminders_log record $email_log = array(); $email_log['school_num'] = $curr_school_num; $email_log['reminder_date'] = $today; $email_log['reminder_day'] = $dow; $email_log['send_start'] = date("Y-m-d H:i:s",time()); $email_log['send_end'] = date("Y-m-d H:i:s",time()); $email_log['log_header'] = ''; $email_log['schedules_query'] = ''; $email_log['users_query'] = ''; $email_log['num_schedules'] = 0; $email_log['num_users'] = 0; $email_log['num_emails'] = 0; $logNum = 0; $email_reminder_weeks = $school['email_reminder_weeks']; $week_end_date = date("Y-m-d",time() + 60 * 60 * 24 * 7 * $email_reminder_weeks); if ($displayMode != "cron") echoText("Processing: $school_name\n",$displayMode); if ($displayMode == "cron") { echo("Processing: $school_name\n"); writeEmailLog("Processing: $school_name\n"); writeEmailLog("Reminder Weeks: $email_reminder_weeks\n"); writeEmailLog("Date Range: $week_start_date - $week_end_date\n"); } $email_log['log_header'] .= "Processing: $school_name\n" . "Reminder Weeks: $email_reminder_weeks\n" . "Date Range: $week_start_date - $week_end_date\n\n"; $school_count = 0; $reminder_msg = str_replace("\r","",trim(db_getVal("SELECT text_data FROM text_data WHERE school_num = $school_num AND text_id = 'Lunch Reminder'"))); $no_service_msg = str_replace("\r","",trim(db_getVal("SELECT text_data FROM text_data WHERE school_num = $school_num AND text_id = 'Lunch Reminder - No Service This Week'"))); $text_data = ""; // Setup email headers $email_from = setReplyAddress($school['reply_email']); if (strlen($email_from) == 0) $email_from = setReplyAddress($school['support_email']); $volunteer_from = setReplyAddress($school['volunteer_reminder_email'],"volunteer"); if (strlen($volunteer_from) == 0) $volunteer_from = $email_from; $from_name = $school['reply_description']; if ($displayMode == "cron") writeEmailLog("Email From: $email_from\n"); if ($displayMode == "cron") writeEmailLog("From Name: $from_name\n"); $email_log['log_header'] .= "Email From: $email_from\n"; // Get set of linked sites $query = "SELECT * FROM schools " . "WHERE linked_site = $school_num " . "AND status = 'Linked' " . "AND email_reminder_day != 'None' " . "ORDER BY link_sequence,link_title"; $linked_sites = db_query($query); $linked_nums = $school_num; if (db_num_rows($linked_sites)) { while ($row = db_fetch_assoc($linked_sites)) { $linked_nums .= "," . $row['record_num']; } } // // Get set of current hot lunch and date sensitive schedules for this school // $query = "SELECT DISTINCT schedule_num,schedule_name FROM hotlunch_menu_dates AS hlmd,hotlunch_schedules AS hls " . // "WHERE hlmd.school_num IN ($linked_nums) " . // "AND hls.school_num = hlmd.school_num " . // "AND hlmd.schedule_num = hls.record_num " . // "AND hls.schedule_type IN ('Hot Lunch','Date Sensitive') " . // "AND hlmd.schedule_num = hls.record_num " . // "AND ((menu_date BETWEEN '$week_start_date' AND '$week_end_date') " . // "OR (schedule_start_date <= '$week_end_date' AND '$week_start_date' <= schedule_end_date))"; // if ($displayMode == "cron") writeEmailLog("All Schedule Query: $query\n\n"); // $schedule_results = db_query($query); // // $today = date("Y-m-d",time()); // $reminderLog = "$school_name - $today\n"; // if (db_num_rows($schedule_results)) { // $title = $row['schedule_name']; // $status = $row['status']; // $type = $row['type']; // $reminderLog .= sprintf(" - %-50s - %-121s %s\n",$title,$type,$status); // } // if ($displayMode == "cron") writeEmailLog("\n$reminderLog\n"); // else echo("\n$reminderLog\n"); // Get set of current hot lunch and date sensitive schedules for this school $query = "SELECT DISTINCT schedule_num,schedule_name FROM hotlunch_menu_dates AS hlmd,hotlunch_schedules AS hls " . "WHERE hlmd.school_num IN ($linked_nums) " . "AND hls.school_num = hlmd.school_num " . "AND hlmd.schedule_num = hls.record_num " . "AND hls.status IN ('Active','Completed','Closed') " . "AND hls.schedule_type IN ('Hot Lunch','Date Sensitive') " . "AND hlmd.schedule_num = hls.record_num " . "AND ((menu_date BETWEEN '$week_start_date' AND '$week_end_date') " . "OR (schedule_start_date <= '$week_end_date' AND '$week_start_date' <= schedule_end_date))"; if ($displayMode == "cron") writeEmailLog("Schedule Query: $query\n\n"); $email_log['schedules_query'] = $query; $email_log['users_query'] = ''; $schedule_results = db_query($query); $currSchedules = ""; $currScheduleTitles = ""; $numSchedules = db_num_rows($schedule_results); $email_log['num_schedules'] = $numSchedules; if ($numSchedules == 0) { // Write email_reminders_log record $query = $eTable->BuildInsert($email_log); writeEmailLog("Email LOG: $query\n"); db_query($query); $logNum = db_insert_id(); writeEmailLog("Log Num: $logNum\n"); } if ($numSchedules) { while ($row = db_fetch_assoc($schedule_results)) { if (strlen($currSchedules)) $currSchedules .= ","; $currSchedules .= $row['schedule_num']; $currScheduleTitles .= " - " . $row['schedule_name'] . "\n"; } if ($displayMode == "cron") { writeEmailLog("$currSchedules\n"); writeEmailLog("$currScheduleTitles\n\n"); } $email_log['log_header'] .= "$currScheduleTitles\n\n"; // Include info about events and classified ads if ($school['other_modules'] == 'Y') { $text_data .= "--------------------------------------------------------------------------------\n"; // Include classified ad info if ($school['classified_ads'] == 'Y') { // Get classified ad info $today = date("Y-m-d",time()); $ads = db_query("SELECT c.* FROM classified_ads AS c WHERE c.school_num = $school_num AND c.status = 'Approved' AND c.post_until_date >= '$today'"); $num_ads = db_num_rows($ads); $text_data .= "\nCLASSIFIED ADS:\n"; if (isset($num_ads) && $num_ads == 1) { $text_data .= sprintf(getLanguageText('TEXT-NUM-CLASSIFIED-SINGLE',$default_language) . "\n",$num_ads); } else { $text_data .= sprintf(getLanguageText('TEXT-NUM-CLASSIFIED-MULTIPLE',$default_language) . "\n",$num_ads); } } // Include event calendar info $today = date("Y-m-d",time()); $events = db_query("SELECT e.* FROM event_calendar AS e WHERE e.school_num = $school_num AND e.status = 'Approved' AND display = 'Active' AND e.end_date >= '$today'"); $num_events = db_num_rows($events); if ($school['event_calendar'] == 'Y') { if ($num_events > 0 && $school['num_reminder_events'] > 0) { // Get event info $text_data .= "\nEVENTS:\n"; if ($num_events == 1) { $text_data .= sprintf(getLanguageText('TEXT-NUM-EVENTS-SINGLE',$default_language) . "\n",$num_events); } else { $text_data .= sprintf(getLanguageText('TEXT-NUM-EVENTS-MULTIPLE',$default_language) . "\n",$num_events); } // Display event titles if required for ($i = 0; $i < $school['num_reminder_events']; $i++) { if ($i >= $num_events) continue; $row = db_fetch_assoc($events); $title = $row['title']; $time = $row['date_and_time']; $location = $row['location']; // Format the time if (strlen($time) == 0) { $time = date($date_format,strtotime($row['start_date'])); if ($row['end_date'] != $row['start_date']) $time .= " - " . date($date_format,strtotime($row['end_date'])); } else { $time = date($date_format,strtotime($row['start_date'])) . " @ $time"; } // Format location if (strlen($location)) $location = " - $location"; $text_data .= " - $title: $time$location\n"; } } } } // Get set of users at this school who want reminders $query = "SELECT * FROM users " . "WHERE school_num = $school_num " . "AND type IN ('Parent','Staff','Administration Team','Schedule Team','Financial Team') " . "AND status = 'Active' " . "AND email_reminders != 'N' " . "AND email != '' " . "AND email IS NOT NULL"; if ($displayMode == "cron") writeEmailLog("User Query: $query\n\n"); $users = db_query($query); $num_users = db_num_rows($users); $email_log['users_query'] = $query; $email_log['num_users'] = $num_users; // Write email_reminders_log record $query = $eTable->BuildInsert($email_log); writeEmailLog("Email LOG: $query\n"); db_query($query); $logNum = db_insert_id(); writeEmailLog("Log Num: $logNum\n"); if ($num_users > 0) { if (!isset($num_ads)) $num_ads = 0; if (!isset($num_events)) $num_events = 0; if ($displayMode == "screen") echoText(" (Users: $num_users - Ads: $num_ads - Events: $num_events)\n",$displayMode); if ($displayMode == "cron") echo(" (Users: $num_users - Ads: $num_ads - Events: $num_events)\n"); if ($displayMode == "cron") writeEmailLog(" (Users: $num_users - Ads: $num_ads - Events: $num_events)\n"); $total_people = 0; $total_users = 0; $skipped_users = 0; $schoolEmails = 0; // Get set of menu_dates this coming week $query = "SELECT hlmd.* " . "FROM hotlunch_menu_dates AS hlmd, hotlunch_schedules as hls " . "WHERE hlmd.school_num IN ($linked_nums) " . "AND hls.school_num = hlmd.school_num " . "AND hls.status IN ('Active','Completed','Closed') " . "AND hls.schedule_type IN ('Hot Lunch','Date Sensitive') " . "AND hlmd.schedule_num = hls.record_num " . "AND hlmd.menu_date BETWEEN '$week_start_date' AND '$week_end_date' " . "ORDER BY menu_date,sequence"; if ($displayMode == "cron") writeEmailLog("Menu Dates Query: $query\n\n"); $menu_results = db_query($query); if (db_num_rows($menu_results) > 0) { $menu_dates = array(); $mdates = "0"; $count = 0; while ($mdate = db_fetch_assoc($menu_results)) { $snum = $mdate['schedule_num']; $menu_dates[$count]['num'] = $mdate['record_num']; $menu_dates[$count]['title'] = $mdate['menu_title']; $menu_dates[$count]['schedule_num'] = $snum; $menu_dates[$count]['schedule'] = db_getVal("SELECT schedule_name FROM hotlunch_schedules WHERE record_num = $snum"); $menu_dates[$count]['mdate'] = $mdate['menu_date']; $menu_dates[$count]['date'] = date("D M jS, Y",strtotime($mdate['menu_date']." 12:00:00")); $menu_dates[$count]['email_msg'] = $mdate['email_message']; $Title = $menu_dates[$count]['title']; $Menu_date = $menu_dates[$count]['date'] . " (" . $menu_dates[$count]['mdate'] . ")"; if ($displayMode == "cron") writeEmailLog("Menu Dates Data: $count $Title $Menu_date\n\n"); $mdates .= "," . $mdate['record_num']; // Get set of classes with access to this schedule $query = "SELECT * FROM hotlunch_schedules_classes WHERE school_num = $school_num AND schedule_num = $snum"; echo("Schedule Classes: $query\n"); $schedule_classes = db_query($query); $numClasses = db_num_rows($schedule_classes); echo("Classes: $numClasses\n"); $menu_dates[$count]['schedule_classes'] = array(); if (db_num_rows($schedule_classes) > 0) { while ($srow = db_fetch_assoc($schedule_classes)) { $menu_dates[$count]['schedule_classes'][] = $srow['class_num']; } $menu_dates[$count]['schedule_classes'][] = 0; } $count++; } while ($user = db_fetch_assoc($users)) { $user_num = $user['record_num']; $userid = $user['userid']; $language = $user['language']; $user_type = $user['type']; $user_name = $user['first_name'] . ' ' . $user['last_name']; $email = trim($user['email']); if (strlen($language) == 0) $language = $default_language; if ($displayMode == "cron") writeEmailLog("User Num: $user_num Type: $user_type Name: $user_name\n"); if ($maxEmails > 0 && $emailsSent > $maxEmails) exit(); $num_orders = 0; $email_detail = array(); $email_detail['school_num'] = $school_num; $email_detail['log_num'] = $logNum; $email_detail['userid'] = $userid; $email_detail['email_address'] = $email; $email_detail['email_message'] = ''; $email_detail['time_sent'] = date("Y-m-d H:i:s",time()); // Get set of students for this user $num_user_people = 0; $people = db_query("SELECT * FROM people " . "WHERE school_num = $school_num " . "AND user_num = $user_num " . "AND status != 'Inactive' " . "ORDER BY last_name,first_name"); $email_message = "$subject\n\n$reminder_msg\n$text_data\n\n" . sprintf("%10s: %s\n",getLanguageText('PROFILE-USER-ID',$language), $userid) . sprintf("%10s: %s\n",getLanguageText('TEXT-NAME',$language), $user['first_name'] . " " . $user['last_name']); $numPeople = db_num_rows($people); if ($numPeople == 0) { $email_detail['email_message'] = 'No people associated with account'; $query = $dTable->BuildInsert($email_detail); db_query($query); } if ($numPeople > 0) { while ($person = db_fetch_assoc($people)) { $person_num = $person['record_num']; $people_type = $person['people_type']; // Check if this student has any orders in any of the current schedules $query = "SELECT count(*) FROM hotlunch_order_header " . "WHERE school_num IN ($linked_nums) " . "AND ordered_by_num = $person_num " . "AND schedule_num IN ($currSchedules) " . "AND status NOT IN ('Inactive','Deleted')"; $num_student_orders = db_getVal($query); $num_orders += $num_student_orders; $num_user_people++; $person_name = $person['first_name'] . ' ' . $person['last_name']; if ($displayMode == "cron") writeEmailLog("People Num: $person_num Type: $people_type Name: $person_name\n"); $class_num = $person['class_num']; $email_message .= "================================================================================\n"; $email_message .= $person_name . "\n"; $email_message .= "\n"; if ($num_student_orders == 0) { $email_message .= $currScheduleTitles; $email_message .= " - " . getLanguageText('TEXT-NO-ORDER-FOR-STUDENT',$language) . "\n\n"; continue; } $num_meals = 0; for ($i = 0; $i < count($menu_dates); $i++) { // If this schedule is restricted to a set of classes then check if this student is in that set $schedule_classes = $menu_dates[$i]['schedule_classes']; if ($people_type == 'Student' && count($schedule_classes) > 0) { if (!in_array($class_num,$schedule_classes)) continue; } // Process this menu date for this student $menu_num = $menu_dates[$i]['num']; $menu_title = ""; if (strlen($menu_dates[$i]['title'])) $menu_title = $menu_dates[$i]['title'] . ' - '; $menu_title .= dateString('default',strtotime($menu_dates[$i]['mdate']." 12:00:00")); if ($displayMode == "cron") writeEmailLog("Menu Title: $menu_title\n\n"); $snum = $menu_dates[$i]['schedule_num']; $email_message .= " " . $menu_dates[$i]['schedule'] . "\n"; $email_message .= " " . $menu_title . "\n"; $query = "SELECT hlmi.item_title,hlmi.item_description,hloi.qty " . "FROM hotlunch_menu_items AS hlmi, hotlunch_order_items AS hloi " . "WHERE hloi.school_num = hlmi.school_num " . "AND hloi.ordered_by_num = $person_num " . "AND hloi.menu_item_num = hlmi.record_num " . "AND hloi.active != 'N' " . "AND hlmi.menu_num = $menu_num " . "ORDER BY sequence"; $order_items = db_query($query); if (db_num_rows($order_items) > 0) { while ($row = db_fetch_assoc($order_items)) { $email_message .= sprintf(" %3d - %s\n",$row['qty'],$row['item_title']); if ($school['email_reminder_description'] == 'Y' && strlen(trim($row['item_description']))) { $email_message .= sprintf(" - %s\n",trim($row['item_description'])); } if ($school['include_options_in_reminder'] == 'Y') { if (array_key_exists('options_ordered', $row) && !is_null($row['options_ordered']) && strlen(trim($row['options_ordered']))) { $options = str_replace("\n"," ",trim($row['options_ordered'])); $email_message .= sprintf(" - %s\n",$options); } if (array_key_exists('options2_ordered', $row) && !is_null($row['options2_ordered']) && strlen(trim($row['options2_ordered']))) { $options = str_replace("\n"," ",trim($row['options2_ordered'])); $email_message .= sprintf(" - %s\n",$options); } if (array_key_exists('options3_ordered', $row) && !is_null($row['options3_ordered']) && strlen(trim($row['options3_ordered']))) { $options = str_replace("\n"," ",trim($row['options3_ordered'])); $email_message .= sprintf(" - %s\n",$options); } } } if (strlen(trim($menu_dates[$i]['email_msg'])) > 0) $email_message .= "\n" . trim($menu_dates[$i]['email_msg']) . "\n"; } else { $email_message .= " -> " . getLanguageText('TEXT-NO-ITEMS-ORDERED',$language) . "\n"; } $email_message .= "\n"; $num_meals++; } if ($num_meals == 0) { $email_message .= " " . getLanguageText('TEXT-NO-HOTLUNCH-OFFERED',$language) . "\n"; $email_message .= "\n"; } } if ($num_orders == 0 && $reminders_to == 'With Orders') { writeEmailLog("No Orders - Skipped\n\n"); continue; } // Finish email message $email_message .= "================================================================================\n\n"; $email_message .= "http://$url\n\n"; // Send the reminder to the user email address $email = ''; if (!is_null($user['email']) && strlen($user['email'])) $email = trim($user['email']); if ($maxEmails > 0) $email = "mark@fester.ca"; if (isset($email) && strlen($email) > 0 && preg_match("/@/",$email)) { $Msg = ""; if ($mode != "log-only") { if (!QueueEmail($email,$email_from,$subject,$email_message,$from_name)) $Msg = "***** ERROR Sending *****\n"; else { $emailsSent++; $schoolEmails++; $email_detail['email_address'] = $email; $email_detail['email_message'] = $email_message; $query = $dTable->BuildInsert($email_detail); db_query($query); } } if ($displayMode == "cron") writeEmailLog("$Msg\nFrom: $email_from\nEmail: $email\nSubject: $subject\n$email_message\n----------------------------------------------------\n"); else echoText("$Msg\nEmail: $email\nSubject: $subject\n$email_message\n----------------------------------------------------\n",$displayMode); } // Send the reminder to the user's second email address $email = ''; if (!is_null($user['email2']) && strlen($user['email2'])) $email = trim($user['email2']); if ($maxEmails > 0) $email = "mark@fester.ca"; if (isset($email) && strlen($email) > 0 && preg_match("/@/",$email)) { $Msg = ""; if ($mode != "log-only") { if (!QueueEmail($email,$email_from,$subject,$email_message,$from_name)) $Msg = "***** ERROR Sending *****\n"; else { $emailsSent++; $schoolEmails++; $email_detail['email_address'] = $email; $email_detail['email_message'] = $email_message; $query = $dTable->BuildInsert($email_detail); db_query($query); } } if ($displayMode == "cron") writeEmailLog("$Msg\nEmail: $email\nSubject: $subject\n$email_message\n----------------------------------------------------\n"); else echoText("$Msg\nEmail: $email\nSubject: $subject\n$email_message\n----------------------------------------------------\n",$displayMode); } // Send the reminder to the user's third email address $email = ''; if (!is_null($user['email3']) && strlen($user['email3'])) $email = trim($user['email3']); if ($maxEmails > 0) $email = "mark@fester.ca"; if (isset($email) && strlen($email) > 0 && preg_match("/@/",$email)) { $Msg = ""; if ($mode != "log-only") { if (!QueueEmail($email,$email_from,$subject,$email_message,$from_name)) $Msg = "***** ERROR Sending *****\n"; else { $emailsSent++; $schoolEmails++; $email_detail['email_address'] = $email; $email_detail['email_message'] = $email_message; $query = $dTable->BuildInsert($email_detail); db_query($query); } } if ($displayMode == "cron") writeEmailLog("$Msg\nEmail: $email\nSubject: $subject\n$email_message\n----------------------------------------------------\n"); else echoText("$Msg\nEmail: $email\nSubject: $subject\n$email_message\n----------------------------------------------------\n",$displayMode); } if (strlen($email_detail['email_address']) == 0) { $email_detail['email_address'] = 'No email address'; $email_detail['email_message'] = ''; $query = $dTable->BuildInsert($email_detail); db_query($query); } } } } else { // Send no meals message while ($user = db_fetch_assoc($users)) { $user_num = $user['record_num']; $userid = $user['userid']; $language = $user['language']; $user_type = $user['type']; $user_name = $user['first_name'] . ' ' . $user['last_name']; $email = trim($user['email']); $email_message = "$subject\n\n" . getLanguageText('TEXT-NO-LUNCH-SERVICE',$language) . "\n\n" . sprintf("%10s: %s\n",getLanguageText('PROFILE-USER-ID',$language), $userid) . sprintf("%10s: %s\n",getLanguageText('TEXT-NAME',$language), $user['first_name'] . " " . $user['last_name']); $email_message .= "======================================================\n\n"; $email_message .= "$no_service_msg\n"; $email_message .= $text_data . "\n"; // Send the reminder to the user email address if ($maxEmails > 0) $email = "mark@fester.ca"; if (isset($email) && strlen($email) > 0 && preg_match("/@/",$email)) { $Msg = ""; if ($mode != "log-only") { if (!QueueEmail($email,$email_from,$subject,$email_message,$from_name)) $Msg = "***** ERROR Sending *****\n"; else { $emailsSent++; $schoolEmails++; $email_detail['email_address'] = $email; $email_detail['email_message'] = $email_message; $query = $dTable->BuildInsert($email_detail); db_query($query); } } if ($displayMode == "cron") writeEmailLog("$Msg\nEmail: $email\nSubject: $subject\n$email_message\n----------------------------------------------------\n"); else echoText("$Msg\nEmail: $email\nSubject: $subject\n$email_message\n----------------------------------------------------\n",$displayMode); } // Send the reminder to the user's second email address $email = $user['email2']; if ($maxEmails > 0) $email = "mark@fester.ca"; if (isset($email) && strlen($email) > 0 && preg_match("/@/",$email)) { $Msg = ""; if ($mode != "log-only") { if (!QueueEmail($email,$email_from,$subject,$email_message,$from_name)) $Msg = "***** ERROR Sending *****\n"; else { $emailsSent++; $schoolEmails++; $email_detail['email_address'] = $email; $email_detail['email_message'] = $email_message; $query = $dTable->BuildInsert($email_detail); db_query($query); } } if ($displayMode == "cron") writeEmailLog("$Msg\nEmail: $email\nSubject: $subject\n$email_message\n----------------------------------------------------\n"); else echoText("$Msg\nEmail: $email\nSubject: $subject\n$email_message\n----------------------------------------------------\n",$displayMode); } // Send the reminder to the user's third email address $email = $user['email3']; if ($maxEmails > 0) $email = "mark@fester.ca"; if (isset($email) && strlen($email) > 0 && preg_match("/@/",$email)) { $Msg = ""; if ($mode != "log-only") { if (!QueueEmail($email,$email_from,$subject,$email_message,$from_name)) $Msg = "***** ERROR Sending *****\n"; else { $emailsSent++; $schoolEmails++; $email_detail['email_address'] = $email; $email_detail['email_message'] = $email_message; $query = $dTable->BuildInsert($email_detail); db_query($query); } } if ($displayMode == "cron") writeEmailLog("$Msg\nEmail: $email\nSubject: $subject\n$email_message\n----------------------------------------------------\n"); else echoText("$Msg\nEmail: $email\nSubject: $subject\n$email_message\n----------------------------------------------------\n",$displayMode); } } } echo("\n"); if ($displayMode == "cron") writeEmailLog("==============================================================\n\n"); else echoText("==============================================================\n\n",$displayMode); } } else { if ($displayMode != "cron") echoText(" No Schedules\n\n",$displayMode); if ($displayMode == "cron") echo(" No Schedules\n\n"); if ($displayMode == "cron") writeEmailLog(" No Schedules\n\n"); } $endTime = date("Y-m-d H:i:s",time()); if (isset($logNum) && $logNum > 0 && isset($schoolEmails)) { $schoolEmails = intval($schoolEmails); $schoolEmails = db_getVal("SELECT count(*) FROM email_reminders_log_detail WHERE log_num = $logNum AND school_num = $school_num"); $query = "UPDATE email_reminders_log SET send_end = '$endTime', num_emails = $schoolEmails WHERE record_num = $logNum"; db_query($query); } // // Volunteer messages // // // Send volunteer reminders // if ($school['send_volunteer_reminders'] != 'N') { $subject = getLanguageText('TEXT-WEEKLY-VOLUNTEER-REMINDER', $default_language) . ' - ' . $school_name; $query = "SELECT distinct u.* " . "FROM hotlunch_volunteers AS hlv, users AS u, hotlunch_menu_dates AS hlmd, hotlunch_schedules AS hls " . "WHERE hlv.school_num = $school_num " . "AND u.school_num = $school_num " . "AND u.status = 'Active' " . "AND hlmd.school_num = $school_num " . "AND hlv.menu_num = hlmd.record_num " . "AND hlv.user_num = u.record_num " . "AND hlv.menu_num = hlmd.record_num " . "AND hlv.deleted != 'Y' " . "AND hls.school_num = $school_num " . "AND hlmd.schedule_num = hls.record_num " . "AND hls.status IN ('Active','Completed','Closed') " . "AND hls.schedule_type IN ('Hot Lunch','Date Sensitive','Volunteer Only') " . "AND hlmd.menu_date BETWEEN '$week_start_date' AND '$week_end_date' " . "ORDER BY last_name,first_name"; $users = db_query($query); if ($displayMode == "cron") writeEmailLog("Volunteer Processing: $school_name\n"); if ($displayMode == "cron") writeEmailLog("Volunteer Query: $query\n\n"); $numVolunteers = db_num_rows($users); if ($displayMode == "cron") writeEmailLog("Number of Volunteers: $numVolunteers\n\n"); else echoText("Number of Volunteers: $numVolunteers\n\n",$displayMode); $prev_user = 0; $volunteerEmails = 0; // Process each user and send an email if ($numVolunteers > 0) { if ($displayMode == "cron") writeEmailLog("VolunteerEmail: $volunteer_from\n\n"); else echoText("Volunteer Email: $volunteer_from\n\n",$displayMode); $query = "SELECT text_data FROM text_data WHERE school_num = $school_num AND text_id = 'Volunteer Reminder'"; $results = db_query($query); if (db_num_rows($results) == 0) { $entry = array(); $entry['school_num'] = $school_num; $entry['data_code'] = 'Reminder'; $entry['date_added'] = date("Y-m-d", time()); $entry['date_modified'] = date("Y-m-d", time()); $entry['text_data'] = "Just reminder that you are scheduled as a lunch volunteer this week. We look forward to seeing you."; $text_data_tbl = new Table("text_data"); $query = $text_data_tbl->BuildInsert($entry); db_query($query); $volunteer_msg = $entry['text_data']; } else { $row = db_fetch_assoc($results); $volunteer_msg = $row['text_data']; } $volunteer_msg = str_replace("\r","",trim($volunteer_msg)); $volunteer_msg .= "\n----------------------------------------------------\n"; while ($user = db_fetch_assoc($users)) { $user_num = $user['record_num']; $userid = $user['userid']; $language = $user['language']; $user_type = $user['type']; $user_name = $user['first_name'] . ' ' . $user['last_name']; $email = $user['email']; $email2 = $user['email2']; $email3 = $user['email3']; $email_message = $volunteer_msg; // Get all the lunch dates this user has volunteered for $query = "SELECT u.*,hlmd.menu_title,hlmd.menu_date " . "FROM hotlunch_volunteers AS hlv, users AS u, hotlunch_menu_dates AS hlmd, hotlunch_schedules AS hls " . "WHERE hlv.school_num = $school_num " . "AND u.school_num = $school_num " . "AND u.record_num = $user_num " . "AND hlmd.school_num = $school_num " . "AND hlv.menu_num = hlmd.record_num " . "AND hlv.user_num = u.record_num " . "AND hlv.menu_num = hlmd.record_num " . "AND hlv.deleted != 'Y' " . "AND hls.school_num = $school_num " . "AND hlmd.schedule_num = hls.record_num " . "AND hls.status IN ('Active','Completed','Closed') " . "AND hls.schedule_type IN ('Hot Lunch','Date Sensitive','Volunteer Only') " . "AND hlmd.menu_date BETWEEN '$week_start_date' AND '$week_end_date' " . "ORDER BY last_name,first_name"; $menus = db_query($query); while ($row = db_fetch_assoc($menus)) { $email_message .= " - "; if (strlen($row['menu_title'])) $email_message .= $row['menu_title'] . ' - '; $email_message .= dateString('default',strtotime($row['menu_date']." 12:00:00")); $email_message .= "\n"; } // Send the email to the user if ($displayMode == "cron") writeEmailLog("Volunteer User Num: $user_num Type: $user_type Name: $user_name\n"); $email_message .= "\n"; // Send the reminder to the user email address if (strlen($email) > 0 && preg_match("/@/",$email)) { $Msg = ""; if ($mode != "log-only") { if (!QueueEmail($email,$volunteer_from,$subject,$email_message,$from_name)) $Msg = "***** ERROR Sending *****\n"; else $volunteerEmails++; } if ($displayMode == "cron") writeEmailLog("$Msg\nVolunteer Email: $email\nSubject: $subject\n$email_message\n----------------------------------------------------\n"); else echoText("$Msg\nVolunteer Email: $email\nSubject: $subject\n$email_message\n----------------------------------------------------\n",$displayMode); } // Send the reminder to the user email address if (strlen($email2) > 0 && preg_match("/@/",$email2)) { $Msg = ""; if ($mode != "log-only") { if (!QueueEmail($email2,$volunteer_from,$subject,$email_message,$from_name)) $Msg = "***** ERROR Sending *****\n"; else $volunteerEmails++; } if ($displayMode == "cron") writeEmailLog("$Msg\nVolunteer Email: $email2\nSubject: $subject\n$email_message\n----------------------------------------------------\n"); else echoText("$Msg\nVolunteer Email: $email2\nSubject: $subject\n$email_message\n----------------------------------------------------\n",$displayMode); } } } echo("\n"); if ($displayMode == "cron") writeEmailLog("==============================================================\n\n"); else echoText("==============================================================\n\n",$displayMode); } } if ($cHr != '09') { date_default_timezone_set("America/Vancouver"); $etime = time(); $end = date("Y-m-d H:i:s",$etime); if ($displayMode == "cron") writeEmailLog("Start Time: $start\nEnd Time: $end\n\n"); echo("Start Time: $start\nEnd Time: $end\n\n"); $duration = $etime -$stime; $hours = intval($duration / (60 * 60)); $minutes = intval(($duration % (60 * 60)) / 60); $seconds = $duration % 60; if ($displayMode == "cron") writeEmailLog(sprintf("Duration: %d:%02d:%02d - Sent: %d\n\n",$hours,$minutes,$seconds,$emailsSent)); printf("Duration: %d:%02d:%02d - Sent: %d\n\n",$hours,$minutes,$seconds,$emailsSent); exit(); } // // Send no order reminders // $yesterday = date("Y-m-d",time() - 60 * 60 * 24); $query = "SELECT p.school_num,school_name,first_name,last_name,user_num,p.added_date,count(hloh.record_num) AS order_count " . "FROM schools,people AS p LEFT JOIN hotlunch_order_header AS hloh ON (hloh.school_num = p.school_num AND hloh.ordered_by_num = p.record_num) " . "WHERE p.school_num = schools.record_num " . "AND schools.send_no_order_reminders = 'Y' " . "AND p.added_date = '$yesterday' " . "AND p.people_type = 'Student' " . "GROUP BY 1,2,3,4,5 " . "HAVING order_count = 0"; $noOrders = db_query($query); if (db_num_rows($noOrders) > 0) { $prevSchoolNum = 0; while ($row = db_fetch_assoc($noOrders)) { extract($row); if ($school_num != $prevSchoolNum) { $results = db_query("SELECT * FROM schools WHERE record_num = $school_num"); $school = db_fetch_assoc($results); $prevSchoolNum = $school_num; $noOrderMsg = db_getVal("SELECT text_data FROM text_data WHERE school_num = $school_num AND text_id = 'No Order Reminder Message'"); } if (strlen($noOrderMsg)) { $results = db_query("SELECT * FROM users WHERE school_num = $school_num AND record_num = $user_num"); if (db_num_rows($results)) { $user = db_fetch_assoc($results); $email = $user['email']; $name = $user['first_name'].' '.$user['last_name']; $userid = $user['userid']; $language = $user['language']; $results = db_query("SELECT * FROM schools WHERE record_num = $school_num"); $school = db_fetch_assoc($results); $msg = "$noOrderMsg\n\n" . " - $first_name $last_name\n" . " - $userid\n" . " - $school_name\n\n"; $subject = getLanguageText("TEXT-ORDERING-REMINDER",$language); $email_from = setReplyAddress($school['reply_email']); $from_name = $school['reply_description']; // QueueEmail($email,$email_from,$subject,$msg,$from_name); if ($displayMode == "cron") writeEmailLog("No Order Reminder Email: $email\nSubject: $subject\n$msg\n----------------------------------------------------\n"); else echoText("No Order Reminder Email: $email\nSubject: $subject\n$msg\n----------------------------------------------------\n",$displayMode); } } } } date_default_timezone_set("America/Vancouver"); $etime = time(); $end = date("Y-m-d H:i:s",$etime); if ($displayMode == "cron") writeEmailLog("Start Time: $start\nEnd Time: $end\n\n"); echo("Start Time: $start\nEnd Time: $end\n\n"); $duration = $etime -$stime; $hours = intval($duration / (60 * 60)); $minutes = intval(($duration % (60 * 60)) / 60); $seconds = $duration % 60; if ($displayMode == "cron") writeEmailLog(sprintf("Duration: %d:%02d:%02d - Sent: %d\n\n",$hours,$minutes,$seconds,$emailsSent)); printf("Duration: %d:%02d:%02d - Sent: %d\n\n",$hours,$minutes,$seconds,$emailsSent); return; function echoText($text,$displayMode) { switch ($displayMode) { case 'screen': echo(nl2br($text)); break; default: case 'terminal': echo($text); break; } } function writeEmailLog($text) { global $fp; fwrite($fp,"- LOG: $text"); } ?>