science-ation/admin/communication_send_status.php
2025-02-10 19:54:20 +00:00

167 lines
5.2 KiB
PHP

<?
/*
* This file is part of the 'Science Fair In A Box' project
* Science-ation Website: https://science-ation.ca/
*
* Copyright (C) 2005 Sci-Tech Ontario Inc <info@scitechontario.org>
* Copyright (C) 2005 James Grant <james@lightbox.org>
* Copyright (C) 2024 AlgoLibre Inc. <science-ation@algolibre.io>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation, version 2.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
?>
<?
require('../common.inc.php');
require_once('../user.inc.php');
user_auth_required('committee', 'admin');
if (get_value_from_array($_GET, 'action') == 'status') {
$q = $pdo->prepare('SELECT * FROM emailqueue WHERE finished IS NULL');
$q->execute();
if ($config['emailqueue_lock'] || $q->rowCount()) {
echo '<h4>' . i18n('Active Send Queues') . "</h4>\n";
$q = $pdo->prepare('SELECT *,UNIX_TIMESTAMP(started) AS ts FROM emailqueue WHERE finished IS NULL ORDER BY started DESC');
$q->execute();
if (!$config['emailqueue_lock']) {
echo error(i18n("It looks like there's emails waiting to send, but the sending process isnt running.")
. '<br />'
. '<a href="communication.php?action=restartqueue">' . i18n('Click here to manually restart the process') . '</a>');
}
echo '<table class="tableview">';
echo '<thead><tr>';
echo ' <th>' . i18n('Name') . "</th>\n";
echo ' <th>' . i18n('Subject') . "</th>\n";
echo ' <th>' . i18n('Started') . "</th>\n";
echo ' <th>' . i18n('Progress') . "</th>\n";
echo ' <th>' . i18n('Duration') . "</th>\n";
echo ' <th>' . i18n('ETA') . "</th>\n";
echo ' <th>' . i18n('Cancel') . "</th>\n";
echo "</tr></thead>\n";
while ($r = $q->fetch(PDO::FETCH_OBJ)) {
echo '<tr>';
echo " <td>$r->name</td>\n";
echo " <td>$r->subject</td>\n";
echo " <td>$r->started</td>\n";
$remaining = $r->numtotal - $r->numsent;
$now = time();
$duration = $now - $r->ts;
$num = $r->numsent + $r->numfailed;
echo " <td align=\"center\">$num / $r->numtotal</td>\n";
echo '<td>';
echo format_duration($duration);
echo '</td>';
echo '<td>';
if ($r->numsent || $r->numfailed) {
$emailspersecond = ($r->numsent + $r->numfailed) / $duration;
$remainingduration = $remaining / $emailspersecond;
echo format_duration($remainingduration);
} else {
echo 'Unknown';
}
echo '</td>';
echo "<td><a href=\"#\" onclick=\"return cancelQueue($r->id)\">" . i18n('cancel') . '</td>';
echo "</tr>\n";
}
echo '</table>';
echo "<br /><br />\n";
} else {
echo notice('No Email Communications are currently being sent out');
?>
<script type="text/javascript">
stopRefreshing();
</script>
<?
}
$q = $pdo->prepare('SELECT * FROM emailqueue WHERE finished IS NOT NULL ORDER BY started DESC LIMIT 10');
$q->execute();
echo '<h4>' . i18n('Completed Send Queues') . "</h4>\n";
echo "<table class=\"tableview\">\n";
echo '<thead><tr>';
echo ' <th>' . i18n('Name') . "</th>\n";
echo ' <th>' . i18n('Subject') . "</th>\n";
echo ' <th>' . i18n('Started') . "</th>\n";
echo ' <th>' . i18n('Finished') . "</th>\n";
echo ' <th>' . i18n('Total Emails') . "</th>\n";
echo ' <th>' . i18n('Success') . "</th>\n";
echo ' <th>' . i18n('Failed') . "</th>\n";
// FIXME: comment bounced until we implement it
// echo " <th>".i18n("Bounced")."</th>\n";
echo "</tr></thead>\n";
while ($r = $q->fetch(PDO::FETCH_OBJ)) {
echo '<tr>';
echo " <td>$r->name</td>\n";
echo " <td>$r->subject</td>\n";
echo " <td>$r->started</td>\n";
echo " <td>$r->finished</td>\n";
echo " <td align=\"center\">$r->numtotal</td>\n";
echo " <td align=\"center\">$r->numsent</td>\n";
echo " <td align=\"center\">$r->numfailed</td>\n";
// echo " <td align=\"center\">$r->numbounced</td>\n";
echo "</tr>\n";
}
echo "</table>\n";
exit;
}
send_header(
'Communication Sending Status',
array(
'Committee Main' => 'committee_main.php',
'Administration' => 'admin/index.php',
'Communication' => 'admin/communication.php'
)
);
?>
<script type="text/javascript">
$(document).ready(function() {
refreshStatus();
});
var refreshTimeout;
function refreshStatus() {
$("#queuestatus").load("communication_send_status.php?action=status", null, function() {
<? if ($config['emailqueue_lock']) { ?>
refreshTimeout = setTimeout('refreshStatus()', 1000);
<? } ?>
});
}
function stopRefreshing() {
if (refreshTimeout) {
clearTimeout(refreshTimeout);
window.location.href = "communication_send_status.php";
}
}
function cancelQueue(id) {
$("#debug").load("communication.php?action=cancel&cancel=" + id, null, function() {
if (!refreshTimeout) refreshStatus();
});
}
</script>
<?
echo '<br />';
echo '<div id="queuestatus" style="margin-left: 20px;">';
echo '</div>';
echo '<br />';
send_footer();
?>