Example #1
0
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 '&nbsp;</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 '&nbsp;&nbsp;';
        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;
    }
}
Example #2
0
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>&nbsp;&nbsp;&nbsp;</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 .= '&nbsp;&nbsp;&nbsp;';
        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) . ' &lt;' . $email['from_address'] . '&gt;';
        } elseif ($email['message_type'] == 'note') {
            echo experiment__list_experimenters($email['admin_id'], false, true);
        } else {
            if ($email['from_name']) {
                echo $email['from_name'] . ' &lt;' . $email['from_address'] . '&gt;';
            } 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>';
}