Files
HotLunches/Email.Reminders.inc.php
2026-10-19 15:22:52 -07:00

1064 lines
48 KiB
PHP

<?php
//
// Basic processing to generate and send email reminders
//
if (isset($_SERVER) && isset($_SERVER['REQUEST_METHOD'])) {
echo("Invalid Access");
echo("<br>");
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");
}
?>