function experimentmail__send_mails_from_queue($number = 0, $type = "", $experiment_id = "", $session_id = "") { global $settings; $pars = array(); if ($number > 0) { $limit = " LIMIT :number "; $pars[':number'] = $number; } else { $limit = ""; } if ($type) { $tquery = " AND mail_type= :type "; $pars[':type'] = $type; } else { $tquery = ""; } if ($experiment_id) { $equery = " AND experiment_id= :experiment_id "; $pars[':experiment_id'] = $experiment_id; } else { $equery = ""; } if ($session_id) { $squery = " AND session_id= :session_id "; $pars[':session_id'] = $session_id; } else { $squery = ""; } $smails = array(); $smails_ids = array(); $invitations = array(); $reminders = array(); $bulks = array(); $warnings = array(); $errors = array(); $reminder_text = array(); $warning_text = array(); $inv_texts = array(); $exps = array(); $sesss = array(); $parts = array(); $labs = array(); $pform_fields = array(); $slists = array(); // first get mails to send $query = "SELECT * FROM " . table('mail_queue') . "\n WHERE error = '' " . $tquery . $equery . $squery . "\n ORDER BY timestamp, mail_id " . $limit; $result = or_query($query, $pars); while ($line = pdo_fetch_assoc($result)) { $smails[] = $line; $smails_ids[] = $line['mail_id']; } // so we don't handle errors at all, and just delete here?!? //$pars=array(); //foreach ($smails_ids as $id) $pars[]=array(':id'=>$id); //$query="DELETE FROM ".table('mail_queue')." // WHERE mail_id = :id"; //$done=or_query($query,$pars); foreach ($smails as $line) { $texp = $line['experiment_id']; $tsess = $line['session_id']; $tpart = $line['mail_recipient']; $ttype = $line['mail_type']; $tbulk = $line['bulk_id']; $continue = true; // well, if experiment_id, session_id, recipient, footer or inv_text, add to array if (!isset($exps[$texp]) && $texp) { $exps[$texp] = orsee_db_load_array("experiments", $texp, "experiment_id"); } if (!isset($sesss[$tsess]) && $tsess) { $sesss[$tsess] = orsee_db_load_array("sessions", $tsess, "session_id"); } if (!isset($parts[$tpart]) && $tpart) { $parts[$tpart] = orsee_db_load_array("participants", $tpart, "participant_id"); } $tlang = $parts[$tpart]['language']; if (!isset($footers[$tlang])) { $footers[$tlang] = load_mail("public_mail_footer", $tlang); } if ($ttype == "session_reminder" && !isset($reminder_text[$texp][$tlang])) { $mailtext = false; if ($settings['enable_session_reminder_customization'] == 'y') { $mailtext = experimentmail__get_customized_mailtext('experiment_session_reminder_mail', $texp, $tlang); } if (!isset($mailtext) || !$mailtext || !is_array($mailtext)) { $mailtext['subject'] = load_language_symbol('email_session_reminder_subject', $tlang); $mailtext['body'] = load_mail("public_session_reminder", $tlang); } $reminder_text[$texp][$tlang] = $mailtext; } if ($ttype == "noshow_warning" && !isset($warning_text[$tlang])) { $warning_text[$tlang]['text'] = load_mail("public_noshow_warning", $tlang); $warning_text[$tlang]['subject'] = load_language_symbol('email_noshow_warning_subject', $tlang); } if (($ttype == "session_reminder" || $ttype == "noshow_warning") && !isset($labs[$tsess][$tlang])) { $labs[$tsess][$tlang] = laboratories__get_laboratory_text($sesss[$tsess]['laboratory_id'], $tlang); } if ($ttype == "invitation" && !isset($inv_texts[$texp][$tlang])) { $inv_texts[$texp][$tlang] = experimentmail__load_invitation_text($texp, $tlang); } if ($ttype == "invitation" && !isset($slists[$texp][$tlang])) { $slists[$texp][$tlang] = experimentmail__get_session_list($texp, $tlang); } if ($ttype == "bulk_mail" && !isset($bulk_mails[$tbulk][$tlang])) { $bulk_mails[$tbulk][$tlang] = experimentmail__load_bulk_mail($tbulk, $tlang); } // check for missing values ... if (!isset($parts[$tpart]['participant_id'])) { $continue = false; // email error: no recipient $line['error'] .= "no_recipient:"; } else { if (!isset($pform_fields[$tlang])) { $pform_fields[$tlang] = participant__load_participant_email_fields($tlang); } $parts[$tpart] = experimentmail__fill_participant_details($parts[$tpart], $pform_fields[$tlang]); } if (!isset($exps[$texp]['experiment_id']) && ($ttype == "invitation" || $ttype == "session_reminder" || $ttype == "noshow_warning")) { $continue = false; // email error: no experiment id given $line['error'] .= "no_experiment:"; } if (!isset($sesss[$tsess]['session_id']) && ($ttype == "session_reminder" || $ttype == "noshow_warning")) { $continue = false; // email error: no session id given $line['error'] .= "no_session:"; } if (!isset($inv_texts[$texp][$tlang]) && $ttype == "invitation") { $continue = false; // email error: no inv_text given $line['error'] .= "no_inv_text:"; } if (!isset($bulk_mails[$tbulk][$tlang]) && $ttype == "bulk_mail") { $continue = false; // email error: no bulk_mail given $line['error'] .= "no_bulk_mail_text:"; } // fine, if no errors, add to arrays if ($continue) { switch ($line['mail_type']) { case "invitation": $invitations[] = $line; break; case "session_reminder": $reminders[] = $line; break; case "noshow_warning": $warnings[] = $line; break; case "bulk_mail": $bulks[] = $line; break; } } else { $errors[] = $line; } } // fine now we have everything we want, and we can proceed with sending the mails $mails_sent = 0; $mails_errors = 0; $invmails_not_sent = 0; // reminders foreach ($reminders as $mail) { $tlang = $parts[$mail['mail_recipient']]['language']; $done = experimentmail__send_session_reminder_mail($mail, $parts[$mail['mail_recipient']], $exps[$mail['experiment_id']], $sesss[$mail['session_id']], $reminder_text[$mail['experiment_id']][$tlang], $labs[$mail['session_id']][$tlang], $footers[$tlang]); if ($done) { $mails_sent++; $deleted = experimentmail__delete_from_queue($mail['mail_id']); } else { $mail['error'] = "sending"; $errors[] = $mail; } } // noshow warnings foreach ($warnings as $mail) { $tlang = $parts[$mail['mail_recipient']]['language']; $done = experimentmail__send_noshow_warning_mail($mail, $parts[$mail['mail_recipient']], $exps[$mail['experiment_id']], $sesss[$mail['session_id']], $warning_text[$tlang], $labs[$mail['session_id']][$tlang], $footers[$tlang]); if ($done) { $mails_sent++; $deleted = experimentmail__delete_from_queue($mail['mail_id']); } else { $mail['error'] = "sending"; $errors[] = $mail; } } // invitations foreach ($invitations as $mail) { $tlang = $parts[$mail['mail_recipient']]['language']; if ($exps[$mail['experiment_id']]['experiment_type'] == 'laboratory' && !trim($slists[$mail['experiment_id']][$tlang])) { $done = true; // do not send invitation when session_list is empty! $invmails_not_sent++; } else { $done = experimentmail__send_invitation_mail($mail, $parts[$mail['mail_recipient']], $exps[$mail['experiment_id']], $inv_texts[$mail['experiment_id']][$tlang], $slists[$mail['experiment_id']][$tlang], $footers[$tlang]); if ($done) { $mails_sent++; } } if ($done) { $deleted = experimentmail__delete_from_queue($mail['mail_id']); } else { $mail['error'] = "sending"; $errors[] = $mail; } } // bulks foreach ($bulks as $mail) { $tlang = $parts[$mail['mail_recipient']]['language']; $done = experimentmail__send_bulk_mail($mail, $parts[$mail['mail_recipient']], $bulk_mails[$tbulk][$tlang], $footers[$tlang]); if ($done) { $mails_sent++; $deleted = experimentmail__delete_from_queue($mail['mail_id']); } else { $mail['error'] = "sending"; $errors[] = $mail; } } $done = experimentmail__gc_bulk_mail_texts(); // handle errors $pars = array(); $mails_errors = count($errors); if ($mails_errors > 0) { foreach ($errors as $mail) { $pars[] = array(':error' => $mail['error'], ':mail_id' => $mail['mail_id']); } $query = "UPDATE " . table('mail_queue') . "\n SET error= :error\n WHERE mail_id= :mail_id"; $done = or_query($query, $pars); } $mess['mails_sent'] = $mails_sent; $mess['mails_invmails_not_sent'] = $invmails_not_sent; $mess['mails_errors'] = $mails_errors; return $mess; }
echo '<center>'; echo '<TABLE class="or_page_subtitle" style="background: ' . $color['page_subtitle_background'] . '; color: ' . $color['page_subtitle_textcolor'] . '; width: 80%;"> <TR><TD align="center"> ' . $experiment['experiment_name'] . ' </TD>'; echo '</TR></TABLE>'; echo '<TABLE class="or_formtable" style="width: 80%;">'; echo '<TR><TD colspan=2> ' . button_link('experiment_mail_participants.php?experiment_id=' . urlencode($experiment_id), lang('back_to_mail_page'), 'backward', 'font-size: 8pt;') . ' </TD></TR>'; foreach ($inv_langs as $inv_lang) { // split in subject and text $subject = str_replace(strstr($experiment_mail[$inv_lang], "\n"), "", $experiment_mail[$inv_lang]); $body = substr($experiment_mail[$inv_lang], strpos($experiment_mail[$inv_lang], "\n") + 1, strlen($experiment_mail[$inv_lang])); if ($experiment['experiment_type'] == "laboratory") { $sessionlist = experimentmail__get_session_list($experiment_id, $inv_lang); } else { $sessionlist = ''; } $pform_fields = participant__load_participant_email_fields($inv_lang); $experimentmail = experimentmail__preview_fake_participant_details($pform_fields); $experimentmail = experimentmail__get_invitation_mail_details($experimentmail, $experiment, $sessionlist); if ($experiment['sender_mail']) { $sendermail = $experiment['sender_mail']; } else { $sendermail = $settings['support_mail']; } $email_text = process_mail_template(stripslashes($body), $experimentmail); if (count($inv_langs) > 1) { echo '<TR><TD colspan=2> <TABLE width="100%" border=0 class="or_panel_title"><TR>