// Check UAC. $can_email = 'Y'; if (access_is_enabled()) { $can_email = access_user_calendar('email', $participants[$i], $login); } // Don't send mail if we are editing a non-user calendar and we are the admin. if (!$is_nonuser_admin && $can_email == 'Y') { // Only send mail if their email address is filled in. $do_send = get_pref_setting($participants[$i], $newevent ? 'EMAIL_EVENT_ADDED' : 'EMAIL_EVENT_UPDATED'); $htmlmail = get_pref_setting($participants[$i], 'EMAIL_HTML'); $t_format = get_pref_setting($participants[$i], 'TIME_FORMAT'); $user_TIMEZONE = get_pref_setting($participants[$i], 'TIMEZONE'); set_env('TZ', $user_TIMEZONE); $user_language = get_pref_setting($participants[$i], 'LANGUAGE'); user_load_variables($participants[$i], 'temp'); if (boss_must_be_notified($login, $participants[$i]) && !empty($tempemail) && $do_send == 'Y' && $send_user_mail && $SEND_EMAIL != 'N') { // We send to creator if they want it. if ($send_own != 'Y' && $participants[$i] == $login) { continue; } reset_language(empty($user_language) || $user_language == 'none' ? $LANGUAGE : $user_language); $fmtdate = $timetype == 'T' ? date('Ymd', $eventstart) : gmdate('Ymd', $eventstart); $msg = str_replace('XXX', $tempfullname, $helloStr) . "\n\n" . str_replace('XXX', $login_fullname, $newevent || empty($old_status[$participants[$i]]) ? $newAppStr : $updAppStr) . "\n" . str_replace('XXX', $name, $subjStr) . "\n\n" . str_replace('XXX', $description, $descStr) . "\n" . str_replace('XXX', date_to_str($fmtdate), $dateStr) . "\n" . ($timetype != 'T' ? '' : str_replace('XXX', display_time('', 2, $eventstart, $t_format), $timeStr) . "\n") . $extra_email_data . str_replace('XXX', generate_application_name(), $REQUIRE_APPROVALS == 'Y' ? translate('Please look on XXX to accept or reject this appointment.') : translate('Please look on XXX to view this appointment.')); // Add URL to event, if we can figure it out. if (!empty($SERVER_URL)) { // DON'T change & to & here. Email will handle it. $url = $SERVER_URL . 'view_entry.php?id=' . $id . '&em=1'; if ($htmlmail == 'Y') { $url = activate_urls($url); } $msg .= "\n\n" . $url;
$res = dbi_query($sql); if ($res) { $row = dbi_fetch_row($res); $name = $row[0]; $eventdate = $row[1]; $eventtime = $row[2]; dbi_free_result($res); } // TODO: switch transation language based on user so each user // gets message in their selected language. for ($i = 0; $i < count($partlogin); $i++) { // Log the deletion activity_log($id, $login, $partlogin[$i], $LOG_DELETE, ""); $do_send = get_pref_setting($partlogin[$i], "EMAIL_EVENT_DELETED"); user_load_variables($partlogin[$i], "temp"); if ($partlogin[$i] != $login && $do_send == "Y" && boss_must_be_notified($login, $partlogin[$i]) && strlen($tempemail) && $send_email != "N") { $msg = translate("Hello") . ", " . $tempfullname . ".\n\n" . translate("An appointment has been canceled for you by") . " " . $login_fullname . ". " . translate("The subject was") . " \"" . $name . "\"\n" . translate("Date") . ": " . date_to_str($thisdate) . "\n"; if ($eventtime != '-1') { $msg .= translate("Time") . ": " . display_time($eventtime); } $msg .= "\n\n"; if (strlen($login_email)) { $extra_hdrs = "From: {$login_email}\r\nX-Mailer: " . translate($application_name); } else { $extra_hdrs = "From: {$email_fallback_from}\r\nX-Mailer: " . translate($application_name); } mail($tempemail, translate($application_name) . " " . translate("Notification") . ": " . $name, html_to_8bits($msg), $extra_hdrs); } } // Instead of deleting from the database... mark it as deleted // by setting the status for each participant to "D" (instead
$time = sprintf("%06d", $row[2]); dbi_free_result($res); } $eventstart = date_to_epoch($fmtdate . $time); $TIME_FORMAT = 24; for ($i = 0, $cnt = count($partlogin); $i < $cnt; $i++) { // Log the deletion. activity_log($id, $login, $partlogin[$i], $log_delete, ''); // Check UAC. $can_email = access_is_enabled() ? access_user_calendar('email', $partlogin[$i], $login) : false; // Don't email the logged in user. if ($can_email && $partlogin[$i] != $login) { set_env('TZ', get_pref_setting($partlogin[$i], 'TIMEZONE')); $user_language = get_pref_setting($partlogin[$i], 'LANGUAGE'); user_load_variables($partlogin[$i], 'temp'); if (!$is_nonuser_admin && $partlogin[$i] != $login && get_pref_setting($partlogin[$i], 'EMAIL_EVENT_DELETED') == 'Y' && boss_must_be_notified($login, $partlogin[$i]) && !empty($tempemail) && $SEND_EMAIL != 'N') { reset_language(empty($user_language) || $user_language == 'none' ? $LANGUAGE : $user_language); // Use WebCalMailer class. $mail->WC_Send($login_fullname, $tempemail, $tempfullname, $name, str_replace('XXX', $tempfullname, translate('Hello, XXX.')) . ".\n\n" . str_replace('XXX', $login_fullname, translate('XXX has canceled an appointment.')) . "\n" . str_replace('XXX', $name, translate('Subject XXX')) . "\"\n" . str_replace('XXX', date_to_str($thisdate), translate('Date XXX')) . "\n" . (!empty($eventtime) && $eventtime != '-1' ? str_replace('XXX', display_time('', 2, $eventstart, get_pref_setting($partlogin[$i], 'TIME_FORMAT')), translate('Time XXX')) : '') . "\n\n", get_pref_setting($partlogin[$i], 'EMAIL_HTML'), $login_email); } } } // Instead of deleting from the database... // mark it as deleted by setting the status for each participant to "D" // (instead of "A"/Accepted, "W"/Waiting-on-approval or "R"/Rejected). if ($override_repeat) { dbi_execute('INSERT INTO webcal_entry_repeats_not ( cal_id, cal_date, cal_exdate ) VALUES ( ?, ?, ? )', array($id, $date, 1)); // Should we log this to the activity log??? } else { // If it's a repeating event, delete any event exceptions that were entered.