New Email » '; } printHeader("Email",1); clearstatcache(); // Additional vars (of interest) available for use in emails $varAR = array( 'OC_pcemail' => 'Chair Email', 'OC_confirmmail' => 'Notification Email', 'OC_confName' => 'Event Short Name', 'OC_confNameFull' => 'Event Full Name', 'OC_confURL' => 'Event Web Address' ); $authorVarAR = array( 'paperid' => 'Submission ID', 'title' => 'Submittion Title', 'name_last' => 'Contact Author Last Name', 'name_first' => 'Contact Author First Name', 'email' => 'Contact Author Email' ); $authorVarAR2 = array_merge( $authorVarAR, array( 'author-comments' => 'Reviewer Comments' ) ); $reviewerVarAR = array( 'name_last' => 'Reviewer Last Name', 'name_first' => 'Reviewer First Name', 'username' => 'Reviewer Username', 'email' => 'Reviewer Email' ); // Author comments separator $commentSeparator = "\n***************************************************************\n"; // Retrieve templates $templateAR = array(); $q = "SELECT `templateid`, `name`, `module` FROM `" . OCC_TABLE_TEMPLATE . "` ORDER BY `name` ASC"; $r = ocsql_query($q) or err('Unable to retrieve templates'); while ($l = mysql_fetch_assoc($r)) { // Skip templates for modules not active if (isset($l['module']) && !empty($l['module']) && ($l['module'] != 'OC') && !in_array($l['module'], $OC_activeModulesAR)) { continue; } // Skip PC templates if advocates not used if ($OC_configAR['OC_paperAdvocates'] || !preg_match("/^pc_/", $l['templateid'])) { $templateAR[$l['templateid']] = $l['name']; } } // Set up recipients // authorcommentssql could be replaced with GROUP_CONCAT in sql for MySQL 4.1+ $recipientAR = array(); $specialIndexAR = array(); // tracks which DB col to use for special var handling $recipientAR['authors_all']['text'] = 'Authors - All'; $recipientAR['authors_all']['sql'] = "SELECT " . OCC_TABLE_PAPER . ".paperid, name_last, name_first, title, email FROM " . OCC_TABLE_PAPER . ", " . OCC_TABLE_AUTHOR . " WHERE " . OCC_TABLE_PAPER . ".paperid=" . OCC_TABLE_AUTHOR . ".paperid AND " . OCC_TABLE_AUTHOR . ".position=" . OCC_TABLE_PAPER . ".contactid ORDER BY paperid"; $recipientAR['authors_all']['vars'] = $authorVarAR; if ($OC_configAR['OC_trackStudent']) { $recipientAR['authors_students']['text'] = 'Authors - Student submissions'; $recipientAR['authors_students']['sql'] = "SELECT " . OCC_TABLE_PAPER . ".paperid, name_last, name_first, title, email FROM " . OCC_TABLE_PAPER . ", " . OCC_TABLE_AUTHOR . " WHERE " . OCC_TABLE_PAPER . ".student='T' AND " . OCC_TABLE_PAPER . ".paperid=" . OCC_TABLE_AUTHOR . ".paperid AND " . OCC_TABLE_AUTHOR . ".position=" . OCC_TABLE_PAPER . ".contactid ORDER BY paperid"; $recipientAR['authors_students']['vars'] = $authorVarAR; } $recipientAR['authors_nofile']['text'] = 'Authors - Missing file'; $recipientAR['authors_nofile']['sql'] = "SELECT " . OCC_TABLE_PAPER . ".paperid, name_last, name_first, title, email FROM " . OCC_TABLE_PAPER . ", " . OCC_TABLE_AUTHOR . " WHERE format is NULL AND " . OCC_TABLE_PAPER . ".paperid=" . OCC_TABLE_AUTHOR . ".paperid AND " . OCC_TABLE_AUTHOR . ".position=" . OCC_TABLE_PAPER . ".contactid ORDER BY paperid"; $recipientAR['authors_nofile']['vars'] = $authorVarAR; // acceptance break down foreach ($OC_acceptanceValuesAR as $idx => $acc) { $recipientAR['authors_' . $idx]['text'] = 'Authors - Submission ' . $acc['value']; $recipientAR['authors_' . $idx]['sql'] = "SELECT " . OCC_TABLE_PAPER . ".paperid, name_last, name_first, title, email FROM " . OCC_TABLE_PAPER . ", " . OCC_TABLE_AUTHOR . " WHERE " . OCC_TABLE_PAPER . ".accepted='" . safeHTMLstr($acc['value']) . "' AND " . OCC_TABLE_PAPER . ".paperid=" . OCC_TABLE_AUTHOR . ".paperid AND " . OCC_TABLE_AUTHOR . ".position=" . OCC_TABLE_PAPER . ".contactid ORDER BY paperid"; $recipientAR['authors_' . $idx]['vars'] = $authorVarAR2; $recipientAR['authors_' . $idx]['special'] = 'email-authors.inc'; } if ($OC_configAR['OC_paperAdvocates']) { $recipientAR['reviewer_pc_all']['text'] = 'Review and Program Committee Members - All'; $recipientAR['reviewer_pc_all']['text'] = 'Review and Program Committee Members - All'; $recipientAR['reviewer_pc_all']['sql'] = "SELECT reviewerid, name_last, name_first, username, email FROM " . OCC_TABLE_REVIEWER . " ORDER BY reviewerid"; $recipientAR['reviewer_pc_all']['vars'] = $reviewerVarAR; $recipientAR['reviewers_all']['text'] = 'Reviewers - All (except Program Committee members)'; } else { $recipientAR['reviewers_all']['text'] = 'Reviewers - All'; } $recipientAR['reviewers_all']['sql'] = "SELECT reviewerid, name_last, name_first, username, email FROM " . OCC_TABLE_REVIEWER . " WHERE onprogramcommittee='F' ORDER BY reviewerid"; $recipientAR['reviewers_all']['vars'] = $reviewerVarAR; $recipientAR['reviewers_noreview']['text'] = 'Reviewers - Reviews not yet completed or no recommendation'; $recipientAR['reviewers_noreview']['sql'] = "SELECT " . OCC_TABLE_REVIEWER . ".reviewerid, name_last, name_first, username, email FROM " . OCC_TABLE_REVIEWER . ", " . OCC_TABLE_PAPERREVIEWER . " WHERE (" . OCC_TABLE_PAPERREVIEWER . ".completed != 'T' OR " . OCC_TABLE_PAPERREVIEWER . ".recommendation IS NULL) AND " . OCC_TABLE_PAPERREVIEWER . ".reviewerid=" . OCC_TABLE_REVIEWER . ".reviewerid GROUP BY reviewerid ORDER BY reviewerid"; $recipientAR['reviewers_noreview']['vars'] = $reviewerVarAR; $recipientAR['reviewers_nocomment']['text'] = 'Reviewers - Missing author comments'; $recipientAR['reviewers_nocomment']['sql'] = "SELECT " . OCC_TABLE_REVIEWER . ".reviewerid, name_last, name_first, username, email FROM " . OCC_TABLE_REVIEWER . ", " . OCC_TABLE_PAPERREVIEWER . " WHERE " . OCC_TABLE_PAPERREVIEWER . ".authorcomments IS NULL AND " . OCC_TABLE_PAPERREVIEWER . ".reviewerid=" . OCC_TABLE_REVIEWER . ".reviewerid GROUP BY reviewerid ORDER BY reviewerid"; $recipientAR['reviewers_nocomment']['vars'] = $reviewerVarAR; if ($OC_configAR['OC_paperAdvocates']) { $recipientAR['pc_all']['text'] = 'Program Committee - All'; $recipientAR['pc_all']['sql'] = "SELECT reviewerid, name_last, name_first, username, email FROM " . OCC_TABLE_REVIEWER . " WHERE onprogramcommittee='T' ORDER BY reviewerid"; $recipientAR['pc_all']['vars'] = $reviewerVarAR; $recipientAR['pc_norecommendation']['text'] = 'Program Committee - Missing advocate recommendation'; $recipientAR['pc_norecommendation']['sql'] = "SELECT " . OCC_TABLE_REVIEWER . ".reviewerid, name_last, name_first, username, email FROM " . OCC_TABLE_REVIEWER . ", " . OCC_TABLE_PAPERADVOCATE . " WHERE " . OCC_TABLE_PAPERADVOCATE . ".adv_recommendation is NULL and " . OCC_TABLE_PAPERADVOCATE . ".advocateid=" . OCC_TABLE_REVIEWER . ".reviewerid GROUP BY reviewerid ORDER BY reviewerid"; $recipientAR['pc_norecommendation']['vars'] = $reviewerVarAR; } // Check for addt'l (hook) recipients if (oc_hookSet('chair-email-recipient')) { foreach ($OC_hooksAR['chair-email-recipient'] as $f) { require_once $f; } } // Get sorted list of recipients $recipients = array(); foreach ($recipientAR as $k => $v) { $recipients[$v['text']] = $k; } ksort($recipients); function saveTemplate($subject, $body, $templateid) { $q = "UPDATE `" . OCC_TABLE_TEMPLATE . "` SET `subject`='" . safeSQLstr($subject) . "', `body`='" . safeSQLstr($body) . "' WHERE `templateid`='" . safeSQLstr($templateid) . "'"; ocsql_query($q) or err('Unable to save template'); } function showAddresses($recipient, $sql) { $r = ocsql_query($sql) or err("Unable to retrieve emails " . mysql_errno()); if (mysql_num_rows($r) == 0) { print '
No email addresses available for ' . $recipient . '
'; } else { print 'Email addresses for ' . $recipient . ':
'; while ($l = mysql_fetch_array($r)){ print $l['email'] . "Messages are being queued for delivery. Once queued, this page will refresh and the message sent out. If the page does not refresh, you must click the link that will appear at the bottom of the page, and is also available on the Chair home page.
'; } else { $queueMessages = false; } ob_end_flush(); flush(); ob_start(); while ($l = mysql_fetch_array($r)) { if (empty($l['email'])) { continue; } elseif ($selectRecipients && !in_array($l['email'], $_POST['selected_recipients'])) { continue; } $tmpsubject = $subject; $tmpmessage = $message; // Replace config vars $tmpsubject = preg_replace("/\[:([A-Z]\w+):\]/e", "\$OC_configAR['\\1']", $tmpsubject); $tmpmessage = preg_replace("/\[:([A-Z]\w+):\]/e", "\$OC_configAR['\\1']", $tmpmessage); // Replace other vars $tmpsubject = preg_replace("/\[:(\w+):\]/e", "\$l['\\1']", $tmpsubject); $tmpmessage = preg_replace("/\[:(\w+):\]/e", "\$l['\\1']", $tmpmessage); // Replace special vars (\w-\w) if (isset($recipientAR[$_POST['recipient']]['special'])) { $tmpmessage = preg_replace("/\[:(\w+)-(\w+):\]/e", "specialValue('$1','$2')", $tmpmessage); } // YMMV wrt below $tmpmessage = preg_replace("/\r/","",$tmpmessage); $to = $l['email']; // req'd for OC_mailCopyLast code block below print 'emailing ' . $l['email'] . ' (' . $l[0] . ') ... '; ob_flush(); flush(); if ($queueMessages) { $queueAR[] = "('" . $date . "', '" . safeSQLstr($l['email']) . "', '" . safeSQLstr($tmpsubject) . "', '" . safeSQLstr($tmpmessage) . "')"; print "queuedA copy of the last message ' . ($queueMessages ? 'queued' : 'sent') . ' has been forwarded to ' . $OC_configAR['OC_confirmmail'] . '.
'; } else { print 'The system was unable to forward a copy of the last message ' . ($queueMessages ? 'queued' : 'sent') . ' to ' . $OC_configAR['OC_confirmmail'] . '.
'; } } // attempt javascript redirect if ($queueMessages) { print 'Your messages have been queued. If this page does not refresh automatically and your browser does not look like it is doing something, please follow this link to send them out now, or visit the Chair home page to send them out later.
'; } } // Preview Email elseif ($_POST['submit'] == "Preview Message") { $q = $recipientAR[$_POST['recipient']]['sql'] . " LIMIT 1"; if (isset($_POST['selected_recipients']) && !empty($_POST['selected_recipients'])) { $q = preg_replace("/ WHERE /", " WHERE `email`='" . safeSQLstr($_POST['selected_recipients'][0]) . "' AND ", $q); } $r = ocsql_query($q) or err("Unable to retrieve information to preview"); if (mysql_num_rows($r) == 0) { err("No email addresses found (preview)"); } $l = mysql_fetch_array($r); // Special var handling if (isset($recipientAR[$_POST['recipient']]['special']) && is_file($recipientAR[$_POST['recipient']]['special'])) { require_once $recipientAR[$_POST['recipient']]['special']; } print ''; $tmpsubject = $subject; $tmpmessage = $message; // Replace config vars $tmpsubject = preg_replace("/\[:([A-Z]\w+):\]/e", "\$OC_configAR['\\1']", $tmpsubject); $tmpmessage = preg_replace("/\[:([A-Z]\w+):\]/e", "\$OC_configAR['\\1']", $tmpmessage); // Replace other vars $tmpsubject = preg_replace("/\[:(\w+):\]/e", "\$l['\\1']", $tmpsubject); $tmpmessage = preg_replace("/\[:(\w+):\]/e", "\$l['\\1']", $tmpmessage); // Replace special vars (\w-\w) if (isset($recipientAR[$_POST['recipient']]['special'])) { $tmpmessage = preg_replace("/\[:(\w+)-(\w+):\]/e", "specialValue('$1','$2')", $tmpmessage); } // strip extra returns from headers $headers = safeHTMLstr(preg_replace("/[\r\n]+/","\n", $OC_configAR['OC_mailHeaders'])); // Show headers & msg print preg_replace("/([\w-]+\:)/","$1",$headers) . "\n"; print 'To: '; if (isset($_POST['select_recipients']) && ($_POST['select_recipients'] == 1)) { if (! isset($_POST['selected_recipients']) || empty($_POST['selected_recipients'])) { warn('No recipients selected'); } print safeHTMLstr(implode("\n ", $_POST['selected_recipients'])); } else { print safeHTMLstr($l['email']); } print "\n"; print 'Subject: ' . safeHTMLstr($tmpsubject) . "\n\n"; print safeHTMLstr(wordwrap($tmpmessage, $OC_configAR['OC_emailWrap'])) . "\n\n"; } // Write Email elseif (($_POST['submit'] == "Write Email Online") || ($_POST['submit'] == "Edit Message")) { // Valid recipient? if (!in_array($_POST['recipient'],$recipients)) { err("Unknown recipient group selected"); } // Any addresses $r = ocsql_query($recipientAR[$_POST['recipient']]['sql']) or err("Unable to retrieve email addresses " . mysql_errno()); if (mysql_num_rows($r) == 0) { print '
No email addresses available for ' . $recipientAR[$_POST['recipient']]['text'] . '
'; } else { print 'TIP: The variables appearing next to the message field may be used in your email by enclosing each instance in [:variable:] . These will be substituted for their value prior to the email being sent. For example, to include the conference (short) name in your message use [:OC_confName:] .
'; } // if Any emails } // end submit write } // end submit // Not a submit - select recipient/template else { print ' '; } // else not a submit printFooter(); ?>