function mailqueue__show_mailqueue($experiment_id = "", $limit = -1) { global $lang, $color, $options, $proceed; if ($proceed) { $pars = array(); if ($limit == -1 && $experiment_id && isset($options['mailqueue_experiment_number_of_entries_per_page']) && $options['mailqueue_experiment_number_of_entries_per_page']) { $limit = $options['mailqueue_experiment_number_of_entries_per_page']; } elseif ($limit == -1 && isset($options['mailqueue_number_of_entries_per_page']) && $options['mailqueue_number_of_entries_per_page']) { $limit = $options['mailqueue_number_of_entries_per_page']; } else { $limit = 100; } if (isset($_REQUEST['os']) && $_REQUEST['os'] > 0) { $offset = $_REQUEST['os']; } else { $offset = 0; } if ($experiment_id) { $equery = " AND experiment_id=:experiment_id "; $pars[':experiment_id'] = $experiment_id; } else { $equery = ""; } if (isset($_REQUEST['deleteall']) && $_REQUEST['deleteall']) { $dall = true; } else { $dall = false; } if (isset($_REQUEST['deleteallonpage']) && $_REQUEST['deleteallonpage']) { $dallpage = true; } else { $dallpage = false; } if (isset($_REQUEST['deletesel']) && $_REQUEST['deletesel']) { $dsel = true; } else { $dsel = false; } } if ($proceed) { if ($dall || $dallpage || $dsel) { if ($experiment_id) { $allow = check_allow('mailqueue_edit_experiment', 'experiment_mailqueue_show?experiment_id=' . $experiment_id); } else { $allow = check_allow('mailqueue_edit_all', 'mailqueue_show.php'); } $where_clause = " WHERE mail_id IS NOT NULL " . $equery; $ok = false; if ($dall) { $ok = true; } if ($dallpage) { $tallids = array(); if (isset($_REQUEST['allids']) && trim($_REQUEST['allids'])) { $tallids = explode(",", trim($_REQUEST['allids'])); } if (count($tallids) > 0) { $i = 0; $parnames = array(); foreach ($tallids as $id) { $i++; $tparname = ':mailid' . $i; $parnames[] = $tparname; $pars[$tparname] = $id; } $where_clause .= " AND mail_id IN (" . implode(",", $parnames) . ") "; $ok = true; } else { message(lang('error__mailqueue_delete_no_emails_selected')); $ok = false; } } if ($dsel) { $dids = array(); if (isset($_REQUEST['del']) && is_array($_REQUEST['del'])) { foreach ($_REQUEST['del'] as $k => $v) { if ($v == 'y') { $dids[] = $k; } } } if (count($dids) > 0) { $i = 0; $parnames = array(); foreach ($dids as $id) { $i++; $tparname = ':mailid' . $i; $parnames[] = $tparname; $pars[$tparname] = $id; } $where_clause .= " AND mail_id IN (" . implode(",", $parnames) . ") "; $ok = true; } else { message(lang('error__mailqueue_delete_no_emails_selected')); $ok = false; } } if ($ok) { $query = "DELETE FROM " . table('mail_queue') . $where_clause; //echo $query; $done = or_query($query, $pars); $number = pdo_num_rows($done); message($number . ' ' . lang('xxx_emails_deleted_from_queue')); if ($experiment_id) { if ($number > 0) { log__admin("mailqueue_delete_entries", "Experiment: " . $experiment_id . ", Count: " . $number); } } else { if ($number > 0) { log__admin("mailqueue_delete_entries", "Count: " . $number); } } } if ($experiment_id) { redirect("admin/experiment_mailqueue_show.php?experiment_id=" . $experiment_id); } else { redirect("admin/mailqueue_show.php"); } } } if ($proceed) { $pars = array(); if ($experiment_id) { $equery = " AND experiment_id=:experiment_id "; $pars[':experiment_id'] = $experiment_id; } else { $equery = ""; } $pars[':offset'] = $offset; $pars[':limit'] = $limit; $query = "SELECT * FROM " . table('mail_queue') . "\n WHERE mail_id IS NOT NULL " . $equery . " ORDER BY timestamp DESC\n LIMIT :offset , :limit"; $result = or_query($query, $pars); $num_rows = pdo_num_rows($result); if ($experiment_id && check_allow('mailqueue_edit_experiment')) { echo '<FORM action="experiment_mailqueue_show.php" method="POST"> <INPUT type="hidden" name="experiment_id" value="' . $experiment_id . '">'; } elseif (check_allow('mailqueue_edit_all')) { echo '<FORM action="mailqueue_show.php" method="POST">'; } echo '<TABLE width=90% border=0> <TR><TD width=50%>'; //echo '<FONT class="small">'.lang('query').': '.$query.'</FONT><BR><BR>'; echo ' </TD> <TD align=right width=50%>'; if (check_allow('mailqueue_edit_all')) { echo ' <TABLE width="100%" border="0"> <TR><TD width="33%" align="right"> <input class="button" type=submit name="deleteall" value="' . lang('delete_all') . '"> </TD><TD width="33%" align="right"> <input class="button" type=submit name="deleteallonpage" value="' . lang('delete_all_on_page') . '"> </TD><TD width="33%" align="right"> <input class="button" type=submit name="deletesel" value="' . lang('delete_selected') . '"> </TD></TR> </TABLE> '; } echo '</TD></TR></TABLE>'; if ($offset > 0) { echo '[' . log__link('os=' . ($offset - $limit)) . lang('previous') . '</A>]'; } else { echo '[' . lang('previous') . ']'; } echo ' '; if ($num_rows >= $limit) { echo '[' . log__link('os=' . ($offset + $limit)) . lang('next') . '</A>]'; } else { echo '[' . lang('next') . ']'; } echo '<TABLE class="or_listtable" style="width: 90%;"><thead>'; // header echo ' <thead> <TR style="background: ' . $color['list_header_background'] . '; color: ' . $color['list_header_textcolor'] . ';"> <TD>' . lang('id') . '</TD> <TD>' . lang('date_and_time') . '</TD> <TD>' . lang('email_type') . '</TD> <TD>' . lang('email_recipient') . '</TD> <TD>' . lang('reference') . '</TD> <TD>' . lang('error') . '</TD>'; if (check_allow('mailqueue_edit_all')) { echo '<TD> ' . lang('select_all') . ' <INPUT id="selall" type="checkbox" name="selall" value="y"> <script language="JavaScript"> $("#selall").change(function() { if (this.checked) { $("input[name*=\'del[\']").each(function() { this.checked = true; }); } else { $("input[name*=\'del[\']").each(function() { this.checked = false; }); } }); </script> </TD>'; } echo ' </TR> </thead> <tbody> '; $shade = false; $ids = array(); $experiment_ids = array(); $entries = array(); while ($line = pdo_fetch_assoc($result)) { $ids[] = $line['mail_id']; if ($line['experiment_id']) { $experiment_ids[] = $line['experiment_id']; } $entries[] = $line; } $experiments = experiment__load_experiments_for_ids($experiment_ids); foreach ($entries as $line) { echo '<TR'; if ($shade) { $shade = false; } else { $shade = true; } if ($shade) { echo ' bgcolor="' . $color['list_shade1'] . '"'; } else { echo ' bgcolor="' . $color['list_shade2'] . '"'; } echo '> <TD>' . $line['mail_id'] . '</TD> <TD>' . ortime__format($line['timestamp'], 'hide_second:false', lang('lang')) . '</TD> <TD>' . $line['mail_type'] . '</TD> <TD>' . $line['mail_recipient'] . '</TD> <TD>'; $reference = array(); if ($line['experiment_id']) { $reference[] = 'Experiment: <A HREF="experiment_show.php?experiment_id=' . $line['experiment_id'] . '">' . $experiments[$line['experiment_id']]['experiment_name'] . '</A>'; } if ($line['session_id']) { $reference[] = 'Session: <A HREF="session_edit.php?session_id=' . $line['session_id'] . '">' . $line['session_id'] . '</A>'; } if ($line['bulk_id']) { $reference[] = 'Bulk email: ' . $line['bulk_id']; } echo implode('<BR>', $reference); echo '</TD> <TD>' . $line['error'] . '</TD>'; if (check_allow('mailqueue_edit_all')) { echo '<TD><INPUT type="checkbox" name="del[' . $line['mail_id'] . ']" value="y"></TD'; } echo '</TR>'; } echo '</tbody></TABLE>'; if (check_allow('mailqueue_edit_all')) { echo '<INPUT type="hidden" name="allids" value="' . implode(",", $ids) . '">'; echo '</FORM>'; } return $num_rows; } }
function email__list_emails($mode = 'inbox', $id = '', $rmode = 'assigned', $url_string = '', $show_refresh = true) { global $color, $lang, $settings; if (substr($url_string, 0, 1) == '?') { $url_string = substr($url_string, 1); } $conditions = array(); $pars = array(); if ($mode == 'trash') { $conditions[] = ' flag_deleted=1 '; } else { $conditions[] = ' flag_deleted=0 '; } if ($mode == 'inbox') { $conditions[] = ' flag_processed=0 '; } elseif ($mode == 'mailbox') { $conditions[] = ' mailbox=:mailbox '; $pars[':mailbox'] = $id; } elseif ($mode == 'experiment') { $conditions[] = ' experiment_id=:experiment_id '; $pars[':experiment_id'] = $id; } elseif ($mode == 'session') { $conditions[] = ' session_id=:session_id '; $pars[':session_id'] = $id; } elseif ($mode == 'participant') { $conditions[] = ' participant_id=:participant_id '; $pars[':participant_id'] = $id; } if ($rmode == 'assigned') { global $expadmindata; $ass_clause = query__get_experimenter_or_clause(array($expadmindata['admin_id']), 'emails', 'assigned_to'); $conditions[] = $ass_clause['clause']; foreach ($ass_clause['pars'] as $k => $v) { $pars[$k] = $v; } } elseif ($rmode == 'experiments') { global $expadmindata; $likelist = query__make_like_list($expadmindata['admin_id'], 'assigned_to'); $conditions[] = " experiment_id IN (SELECT experiment_id as id\n FROM " . table('experiments') . " WHERE (" . $likelist['par_names'] . ") ) "; foreach ($likelist['pars'] as $k => $v) { $pars[$k] = $v; } } $query = "SELECT * FROM " . table('emails') . "\n WHERE " . implode(" AND ", $conditions) . "\n ORDER BY thread_time DESC, thread_id, if (thread_id=message_id,0,1), timestamp"; $result = or_query($query, $pars); $emails = array(); $experiment_ids = array(); $session_ids = array(); while ($email = pdo_fetch_assoc($result)) { $emails[] = $email; if ($mode != 'experiment' && $email['experiment_id']) { $experiment_ids[] = $email['experiment_id']; } if ($mode != 'session' && $email['session_id']) { $session_ids[] = $email['session_id']; } } $mailboxes = email__load_mailboxes(); $shade = false; $related_experiments = experiment__load_experiments_for_ids($experiment_ids); $related_sessions = sessions__load_sessions_for_ids($session_ids); echo '<table style="max-width: 90%;">'; if ($show_refresh) { echo ' <tr><td align="right"> ' . icon('refresh', thisdoc() . '?' . $url_string, 'fa-2x', 'color: green;', 'refresh list'), ' </td></tr>'; } echo ' <tr><td> <table class="or_listtable"><thead> <tr style="background: ' . $color['list_header_background'] . '; color: ' . $color['list_header_textcolor'] . ';">'; echo '<td> </td>'; // is thread head echo '<td>' . lang('email_subject') . '</td>'; // type: incoming, note, reply && subject echo '<td>' . lang('email_from') . '</td>'; // from echo '<td>' . lang('date') . '</td>'; // date echo '<td></td>'; // read // assigned_to_read echo '<td></td>'; // processed - check and background of row echo '<td></td>'; // view email button echo '</tr> </thead><tbody>'; $cols = 7; $shade = false; $style_unprocessed = ' style="font-weight: bold;"'; foreach ($emails as $email) { $second_row = ''; if ($email['thread_id'] == $email['message_id']) { if ($shade) { $shade = false; } else { $shade = true; } $second_row = ""; // experiment or mailbox - not if experiment or session or mailbox if (!in_array($mode, array('experiment', 'session', 'mailbox'))) { if ($email['experiment_id']) { if (isset($related_experiments[$email['experiment_id']])) { $second_row .= $related_experiments[$email['experiment_id']]['experiment_name']; } } elseif ($email['mailbox']) { $second_row .= '<b>' . lang('email_mailbox') . ':</b> ' . $mailboxes[$email['mailbox']]; } } // session - not if session or mailbox if (!in_array($mode, array('session', 'mailbox'))) { if ($email['session_id']) { if ($second_row) { $second_row .= ', '; } $second_row .= session__build_name($related_sessions[$email['session_id']]); } } // assigned to if ($settings['email_module_allow_assign_emails'] == 'y' && $email['assigned_to']) { if ($second_row) { $second_row .= ', '; } $second_row .= experiment__list_experimenters($email['assigned_to'], false, true); } } echo '<tr'; if ($shade) { echo ' bgcolor="' . $color['list_shade1'] . '"'; } else { echo ' bgcolor="' . $color['list_shade2'] . '"'; } if (!$email['flag_processed'] && $mode != 'inbox') { echo $style_unprocessed; } echo '>'; // thread head and subject if ($email['message_id'] == $email['thread_id']) { echo '<TD colspan=2>'; } else { echo '<TD></TD><TD>'; } echo '<A name="' . $email['message_id'] . '"></A>'; $linktext = ''; if ($email['message_type'] == 'reply') { $linktext .= icon('reply', '', '', ' color: #666666;', 'reply'); } elseif ($email['message_type'] == 'note') { $linktext .= icon('file-text-o', '', '', ' color: #666666;', 'internal note'); } elseif ($email['message_type'] == 'incoming') { $linktext .= icon('envelope-square', '', '', ' color: #666666;', 'incoming'); } $linktext .= ' '; if ($email['message_type'] == 'note') { $linktext .= lang('email_internal_note'); } else { $linktext .= $email['subject']; } echo $linktext; if ($email['has_attachments']) { echo icon('paperclip'); } echo '</TD>'; // from echo '<td>'; if ($email['message_type'] == 'reply') { echo experiment__list_experimenters($email['admin_id'], false, true) . ' <' . $email['from_address'] . '>'; } elseif ($email['message_type'] == 'note') { echo experiment__list_experimenters($email['admin_id'], false, true); } else { if ($email['from_name']) { echo $email['from_name'] . ' <' . $email['from_address'] . '>'; } else { echo $email['from_address']; } } if ($email['message_type'] == 'incoming' && $email['participant_id']) { echo icon('check-circle-o', '', '', ' font-size: 8pt; color: #666666;', 'checked'); } echo '</td>'; // date echo '<td>' . ortime__format($email['timestamp']) . '</td>'; if ($email['thread_id'] == $email['message_id']) { // read // assigned_to_read echo '<td align=center valign=middle>'; echo '<A HREF="' . thisdoc() . '?' . $url_string . '&switch_read=true&message_id=' . urlencode($email['message_id']) . '">'; if ($email['flag_read']) { echo icon('circle-o', '', '', ' color: #666666;'); } else { echo icon('dot-circle-o', '', '', ' color: #008000;'); } echo '</A>'; if ($settings['email_module_allow_assign_emails'] == 'y' && $email['assigned_to']) { echo '<A HREF="' . thisdoc() . '?' . $url_string . '&switch_assigned_to_read=true&message_id=' . urlencode($email['message_id']) . '">'; if ($email['flag_assigned_to_read']) { echo icon('circle-o', '', '', ' color: #666666;'); } else { echo icon('dot-circle-o', '', '', ' color: #000080;'); } echo '</A>'; } echo '</td>'; // processed - check and background of row echo '<td>'; if ($email['flag_processed']) { echo icon('check', '', '', ' color: #008000;'); } echo '</td>'; // view email button echo '<td valign="top"'; if ($second_row) { echo ' rowspan="2"'; } echo '>'; echo javascript__email_popup_button_link($email['message_id']); echo '</td>'; } else { echo '<td colspan="3"></td>'; } echo '</tr>'; if ($second_row) { echo '<tr'; if ($shade) { echo ' bgcolor="' . $color['list_shade1'] . '"'; } else { echo ' bgcolor="' . $color['list_shade2'] . '"'; } if (!$email['flag_processed'] && $mode != 'inbox') { echo $style_unprocessed; } echo '>'; echo '<TD></TD>'; echo '<TD colspan="' . ($cols - 2) . '">'; echo '<i>' . $second_row . '</i>'; echo '</TD>'; echo '</TR>'; } } echo '</tbody></table> </td></tr> </table>'; }