forked from science-ation/science-ation
997 lines
33 KiB
PHP
997 lines
33 KiB
PHP
<?
|
|
|
|
/*
|
|
* This file is part of the 'Science Fair In A Box' project
|
|
* SFIAB Website: http://www.sfiab.ca
|
|
*
|
|
* Copyright (C) 2005 Sci-Tech Ontario Inc <info@scitechontario.org>
|
|
* Copyright (C) 2005 James Grant <james@lightbox.org>
|
|
*
|
|
* 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_once ('../common.inc.php');
|
|
require_once ('../user.inc.php');
|
|
include 'communication.inc.php';
|
|
|
|
user_auth_required('committee', 'admin');
|
|
|
|
function launchQueue()
|
|
{
|
|
if (!file_exists('../data/logs')) {
|
|
mkdir('../data/logs');
|
|
}
|
|
exec('php -q send_emailqueue.php >>../data/logs/emailqueue.log 2>&1 &');
|
|
}
|
|
|
|
/*
|
|
* dialog_choose
|
|
* select: comm_dialog_choose_select(emails_id)
|
|
* cancel: comm_dialog_choose_cancel()
|
|
*/
|
|
|
|
switch (get_value_from_array($_GET, 'action')) {
|
|
case 'dialog_choose_load':
|
|
$emails_id = intval($_GET['emails_id']);
|
|
$q = $pdo->prepare("SELECT * FROM emails WHERE id=?");
|
|
$q->execute([$emails_id]);
|
|
$e = $q->fetch(PDO::FETCH_ASSOC);
|
|
?>
|
|
<table class="editor">
|
|
<tr><td class="label" style="width:15%"><?= i18n('Name') ?>:</td><td class="input"><?= $e['name'] ?></td></tr>
|
|
<tr><td class="label"><?= i18n('Subject') ?>:</td><td class="input"><?= $e['subject'] ?></td></tr>
|
|
<tr><td class="label"><?= i18n('From Address') ?>:</td><td class="input"><?= $e['from'] ?></td></tr>
|
|
<tr><td></td><td>
|
|
<div style="border:1px solid black; overflow:auto; height=300px;"><?= $e['bodyhtml'] ?></div>
|
|
</td></tr></table>
|
|
<?
|
|
exit;
|
|
|
|
case 'dialog_choose':
|
|
?>
|
|
<div id="comm_dialog_choose" title="Select a Communication" style="display: none">
|
|
<h4><?= i18n('Select a Communication') ?>:</h4>
|
|
<form id="choose" onchange="dialog_choose_change()" onkeypress="dialog_choose_change()" >
|
|
<table style="width:100%"><tr><td>
|
|
<select id="comm_dialog_choose_emails_id">
|
|
<option value="-1">-- <?= i18n('Choose a Communication') ?> --</option>
|
|
<?
|
|
$type = $pdo->quote($_GET['type']);
|
|
$q = $pdo->prepare("SELECT * FROM emails WHERE type=?");
|
|
$q->execute([$type]);
|
|
while ($e = $q->fetch(PDO::FETCH_ASSOC)) {
|
|
echo "<option value=\"{$e['id']}\">{$e['name']}</option>";
|
|
}
|
|
?>
|
|
</select>
|
|
</td><td style="text-align:right">
|
|
<input class="comm_dialog_choose_email_button" disabled="disabled" type="submit" value="<?= i18n('Choose') ?>" >
|
|
<input class="comm_dialog_choose_cancel_button" type="submit" value="<?= i18n('Cancel') ?>" >
|
|
</td></tr></table>
|
|
<hr />
|
|
<div id="comm_dialog_choose_info"></div>
|
|
<hr />
|
|
<input class="comm_dialog_choose_email_button" disabled="disabled" type="submit" value="<?= i18n('Choose') ?>" >
|
|
<input class="comm_dialog_choose_cancel_button" type="submit" value="<?= i18n('Cancel') ?>" >
|
|
</form>
|
|
</div>
|
|
<script type="text/javascript">
|
|
var comm_dialog_choose_selected = -1;
|
|
$(".comm_dialog_choose_email_button").click(function () {
|
|
var sel = $("#comm_dialog_choose_emails_id").val();
|
|
comm_dialog_choose_selected = sel;
|
|
$('#comm_dialog_choose').dialog("close");
|
|
return false;
|
|
});
|
|
$(".comm_dialog_choose_cancel_button").click(function () {
|
|
$('#comm_dialog_choose').dialog("close");
|
|
return false;
|
|
});
|
|
|
|
|
|
function dialog_choose_change()
|
|
{
|
|
var sel = $("#comm_dialog_choose_emails_id").val();
|
|
$("#comm_dialog_choose_info").html("Loading...");
|
|
$("#comm_dialog_choose_info").load("<?= $config['SFIABDIRECTORY'] ?>/admin/communication.php?action=dialog_choose_load&emails_id="+sel);
|
|
if(sel == -1) {
|
|
$(".comm_dialog_choose_email_button").attr('disabled','disabled');
|
|
} else {
|
|
$(".comm_dialog_choose_email_button").removeAttr('disabled');
|
|
}
|
|
return false;
|
|
}
|
|
|
|
$("#comm_dialog_choose").dialog({
|
|
bgiframe: true, autoOpen: true,
|
|
modal: true, resizable: false,
|
|
draggable: false,
|
|
width: 700, //(document.documentElement.clientWidth * 0.8);
|
|
height: (document.documentElement.clientHeight * 0.8),
|
|
close: function() {
|
|
$(this).dialog('destroy');
|
|
$('#comm_dialog_choose').remove();
|
|
/* Run callbacks */
|
|
if(comm_dialog_choose_selected != -1) {
|
|
if(typeof(comm_dialog_choose_select) == 'function') {
|
|
comm_dialog_choose_select(comm_dialog_choose_selected);
|
|
}
|
|
} else {
|
|
if(typeof(comm_dialog_choose_cancel) == 'function') {
|
|
comm_dialog_choose_cancel();
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
</script>
|
|
<?
|
|
exit;
|
|
|
|
case 'email_save':
|
|
$id = intval($_POST['emails_id']);
|
|
|
|
// we need to character encode BEFORE we myql_real_escape_strintg
|
|
// otherwise, a smartquote ' will turn into a normal ' that ends up
|
|
// not being escaped!
|
|
$name = $_POST['name'];
|
|
$description = $_POST['description'];
|
|
$from = $_POST['from'];
|
|
$subject = $_POST['subject'];
|
|
$bodyhtml = $_POST['bodyhtml'];
|
|
|
|
// add //TRANSLIT to approximate any characters (eg smartquotes) that it doesnt know
|
|
$bodyhtml = iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $bodyhtml);
|
|
$name = iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $name);
|
|
$description = iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $description);
|
|
$from = iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $from);
|
|
$subject = iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $subject);
|
|
|
|
// Now its safe to escape it for the db query
|
|
$name = $pdo->quote(stripslashes($name));
|
|
$description = $pdo->quote(stripslashes($description));
|
|
$from = $pdo->quote(stripslashes($from));
|
|
$subject = $pdo->quote(stripslashes($subject));
|
|
$bodyhtml = $pdo->quote(stripslashes($bodyhtml));
|
|
|
|
$type = $pdo->quote($_POST['type']);
|
|
$key = $pdo->quote($_POST['key']);
|
|
$fcid = $pdo->quote($_POST['fcid']);
|
|
|
|
if ($id == 0) {
|
|
if ($key && $name) {
|
|
$q = $pdo->prepare("INSERT INTO emails(type,val) VALUES(?,?)");
|
|
$q->execute([$type,$key]);
|
|
show_pdo_errors_if_any($pdo);
|
|
$id = lastInsertId();
|
|
} else {
|
|
error_('Email Key and Name are required');
|
|
exit;
|
|
}
|
|
}
|
|
|
|
/* Allow the fundraising campaigns id to be NULL, it'll never be 0 */
|
|
$fcstr = ($fcid == 0) ? 'NULL' : "'$fcid'";
|
|
|
|
$body = getTextFromHtml($bodyhtml);
|
|
$q = $pdo->prepare("UPDATE emails SET
|
|
name=?,
|
|
description=?,
|
|
`from`=?,
|
|
subject=?,
|
|
body=?,
|
|
bodyhtml=?,
|
|
fundraising_campaigns_id=?
|
|
WHERE id=?");
|
|
$q->execute([$name,$description,$from,$subject,$body,$bodyhtml,$fcstr,$id]);
|
|
show_pdo_errors_if_any($pdo);
|
|
happy_('Email Saved');
|
|
exit;
|
|
|
|
case 'dialog_edit':
|
|
if (array_key_exists('id', $_GET)) {
|
|
$id = intval($_GET['id']);
|
|
$cloneid = 0;
|
|
} else if (array_key_exists('cloneid', $_GET)) {
|
|
$id = intval($_GET['cloneid']);
|
|
$clone_id = $id;
|
|
} else {
|
|
/* new email, set defaults which may be specified */
|
|
$id = 0;
|
|
$key = htmlspecialchars($_GET['key']);
|
|
if (array_key_exists('fundraising_campaigns_id', $_GET)) {
|
|
$fcid = intval($_GET['fundraising_campaigns_id']);
|
|
$type = 'fundraising';
|
|
$q = $pdo->prepare("SELECT * FROM fundraising_campaigns WHERE id=?");
|
|
$q->execute([$fcid]);
|
|
$fc = $q->fetch(PDO::FETCH_OBJ);
|
|
$name = i18n('%1 communication for %2', array(ucfirst($key), $fc->name));
|
|
} else {
|
|
$fcid = 0;
|
|
$type = (array_key_exists('type', $_GET)) ? $_GET['type'] : 'user';
|
|
}
|
|
|
|
$from = $_SESSION['name'] . ' <' . $_SESSION['email'] . '>';
|
|
}
|
|
if ($id) {
|
|
$q = $pdo->prepare("SELECT * FROM emails WHERE id=?");
|
|
$q->execute([$id]);
|
|
if ($q->rowCount() != 1) {
|
|
echo 'Ambiguous edit';
|
|
exit;
|
|
}
|
|
$e = $q->fetch(PDO::FETCH_ASSOC);
|
|
|
|
/*
|
|
* If we're supposed to clone it, load it then zero out the
|
|
* id so we make a new record on save, and override the key
|
|
*/
|
|
if ($clone_id) {
|
|
$e['id'] = 0;
|
|
$e['val'] = $_GET['key'];
|
|
$e['fundraising_campaigns_id'] = $_GET['fundraising_campaigns_id'];
|
|
}
|
|
$emails_id = $e['id'];
|
|
$name = htmlspecialchars($e['name']);
|
|
$key = htmlspecialchars($e['val']);
|
|
$description = htmlspecialchars($e['description']);
|
|
$from = htmlspecialchars($e['from']);
|
|
if (!$from && $config['fairmanageremail'])
|
|
$from = 'Fair Manager <' . $config['fairmanageremail'] . '>';
|
|
$subject = htmlspecialchars($e['subject']);
|
|
$body = $e['body'];
|
|
$bodyhtml = $e['bodyhtml'];
|
|
$fcid = intval($e['fundraising_campaigns_id']);
|
|
if ($bodyhtml == '')
|
|
$bodyhtml = nl2br($body);
|
|
}
|
|
|
|
?>
|
|
<div id="comm_dialog_edit" title="Edit a Communication" style="display: none">
|
|
<br />
|
|
<form id="comm_dialog_edit_form">
|
|
<input type="hidden" name="type" value="<?= $type ?>" />
|
|
<input type="hidden" name="fcid" value="<?= $fcid ?>" />
|
|
<table class="editor" style="width: 95%">
|
|
<?
|
|
if ($emails_id) {
|
|
?>
|
|
<input type="hidden" name="emails_id" value="<?= $emails_id ?>" />
|
|
<input type="hidden" name="key" value="<?= $key ?>" />
|
|
<tr>
|
|
<td class="label"><?= i18n('Email Key') ?>:</td>
|
|
<td class="input"><?= $key ?></td>
|
|
</tr>
|
|
<?
|
|
} else if ($key) {
|
|
echo "<input type=\"hidden\" name=\"key\" value=\"$key\" />\n";
|
|
} else {
|
|
?>
|
|
<tr>
|
|
<td class="label"><?= i18n('Email Key') ?>:</td>
|
|
<td class="input"><input type="text" name="key" size="60" value="" /></td>
|
|
</tr>
|
|
<?
|
|
}
|
|
/* ="fcid=$fcid, key=$key, type=$type" */
|
|
?>
|
|
|
|
<tr>
|
|
<td class="label"><?= i18n('Name') ?>:</td>
|
|
<td class="input"><input type="text" name="name" size="60" value="<?= $name ?>" /></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="label"><?= i18n('Description') ?>:</td>
|
|
<td class="input"><input type="text" name="description" size="60" value="<?= $description ?>" /></td>
|
|
</tr><tr>
|
|
<tr><td colspan="2"><hr /></td>
|
|
</tr><tr>
|
|
<td class="label"><?= i18n('From Address') ?>:</td>
|
|
<td class="input"><input type="text" name="from" size="60" value="<?= $from ?>" /></td>
|
|
</tr><tr>
|
|
<td class="label"><?= i18n('Subject') ?>:</td>
|
|
<td class="input"><input type="text" name="subject" size="60" value="<?= $subject ?>" /></td>
|
|
</tr><tr>
|
|
<td colspan="2" class="input">
|
|
<table width="100%"><tr><td width="85%">
|
|
<div id="fck">
|
|
<textarea id="bodyhtml" name="bodyhtml" rows=6 cols=80><?= $bodyhtml ?></textarea>
|
|
</div>
|
|
</td><td width="15%">
|
|
<select id="comm_dialog_insert_field" name="insert_field" size="20" style="height:300" >
|
|
<option value="EMAIL">[EMAIL]</option>
|
|
<option value="FAIRNAME">[FAIRNAME]</option>
|
|
<option value="FIRSTNAME">[FIRSTNAME]</option>
|
|
<option value="LASTNAME">[LASTNAME]</option>
|
|
<option value="NAME">[NAME]</option>
|
|
<option value="SALUTATION">[SALUTATION]</option>
|
|
<option value="PASSWORD">[PASSWORD]</option>
|
|
<option value="REGNUM">[REGNUM]</option>
|
|
<option value="URLMAIN">[URLMAIN]</option>
|
|
<option value="URLLOGIN">[URLLOGIN]</option>
|
|
<option value="ACCESSCODE" title="School Access Code">[ACCESSCODE]</option>
|
|
</select>
|
|
</td></tr></table>
|
|
</td>
|
|
</tr></table>
|
|
<hr />
|
|
<div align="right">
|
|
<input type="submit" id="comm_dialog_edit_save_button" value="<?= i18n('Save') ?>" />
|
|
<input type="submit" id="comm_dialog_edit_cancel_button" value="<?= i18n('Cancel') ?>" />
|
|
</div>
|
|
</form>
|
|
</div>
|
|
<script type="text/javascript" src="<?= $config['SFIABDIRECTORY'] ?>/fckeditor/fckeditor.js"></script>
|
|
<script type="text/javascript">
|
|
var comm_dialog_edit_saved = false;
|
|
$("#comm_dialog_edit_save_button").click(function () {
|
|
var oFCKeditor = FCKeditorAPI.GetInstance('bodyhtml') ;
|
|
var value = oFCKeditor.GetHTML();
|
|
$('#bodyhtml').val(value);
|
|
$("#debug").load("<?= $config['SFIABDIRECTORY'] ?>/admin/communication.php?action=email_save", $("#comm_dialog_edit_form").serializeArray(),
|
|
function() {
|
|
comm_dialog_edit_saved = true;
|
|
$('#comm_dialog_edit').dialog("close");
|
|
});
|
|
return false;
|
|
}
|
|
);
|
|
$("#comm_dialog_edit_cancel_button").click(function () {
|
|
$('#comm_dialog_edit').dialog("close");
|
|
return false;
|
|
}
|
|
);
|
|
|
|
$("#comm_dialog_edit").dialog({
|
|
bgiframe: true, autoOpen: true,
|
|
modal: true, resizable: false,
|
|
draggable: false,
|
|
width: 800, //(document.documentElement.clientWidth * 0.8);
|
|
height: (document.documentElement.clientHeight * 0.8),
|
|
close: function() {
|
|
$(this).dialog('destroy');
|
|
$('#comm_dialog_edit').remove();
|
|
/* Run callbacks */
|
|
if(comm_dialog_edit_saved == true) {
|
|
if(typeof(comm_dialog_edit_save) == 'function') {
|
|
comm_dialog_edit_save(<?= $emails_id ?>);
|
|
}
|
|
} else {
|
|
if(typeof(comm_dialog_edit_cancel) == 'function') {
|
|
comm_dialog_edit_cancel();
|
|
}
|
|
}
|
|
if(typeof(refreshEmailList) == 'function') {
|
|
refreshEmailList();
|
|
}
|
|
|
|
}
|
|
});
|
|
|
|
$("#comm_dialog_insert_field").click(function () {
|
|
var oFCKeditor = FCKeditorAPI.GetInstance('bodyhtml') ;
|
|
var value = oFCKeditor.GetHTML();
|
|
oFCKeditor.InsertHtml("["+this.value+"]");
|
|
return false;
|
|
}
|
|
);
|
|
|
|
|
|
var oFCKeditor = new FCKeditor( 'bodyhtml' ) ;
|
|
oFCKeditor.BasePath = "../fckeditor/" ;
|
|
oFCKeditor.ToolbarSet = 'sfiab';
|
|
oFCKeditor.Width="100%";
|
|
oFCKeditor.Height=300;
|
|
// $('#fck').html(oFCKeditor.CreateHtml());
|
|
oFCKeditor.ReplaceTextarea() ;
|
|
</script>
|
|
<?
|
|
exit;
|
|
|
|
case 'dialog_send':
|
|
?>
|
|
<div id="comm_dialog_send" title="Send Communication" style="display: none">
|
|
<?
|
|
$fcid = intval($_GET['fundraising_campaigns_id']);
|
|
$emailid = intval($_GET['emails_id']);
|
|
|
|
$fcq = $pdo->prepare("SELECT * FROM fundraising_campaigns WHERE id=?");
|
|
$fcq->execute([$fcid]);
|
|
$fc = $fcq->fetch(PDO::FETCH_OBJ);
|
|
|
|
$emailq = $pdo->prepare("SELECT * FROM emails WHERE id=?");
|
|
$emailq->execute([$emailid]);
|
|
$email = $email->fetch(PDO::FETCH_OBJ);
|
|
|
|
?>
|
|
<form id="send">
|
|
<table style="width:100%">
|
|
<?
|
|
$q = $pdo->prepare("SELECT COUNT(*) AS num FROM fundraising_campaigns_users_link WHERE fundraising_campaigns_id=?");
|
|
$q->execute([$fcid]);
|
|
$r = $q->fetch(PDO::FETCH_OBJ);
|
|
$numrecipients = $r->num;
|
|
|
|
echo '<tr><td>' . i18n('Appeal') . '</td><td>' . $fc->name . ' - ' . i18n(ucfirst($email->val)) . "</td></tr>\n";
|
|
echo '<tr><td>' . i18n('From') . '</td><td>' . htmlspecialchars($email->from) . "</td></tr>\n";
|
|
echo '<tr><td>' . i18n('Subject') . '</td><td>' . htmlspecialchars($email->subject) . "</td></tr>\n";
|
|
echo '<tr><td>' . i18n('Recipients') . '</td><td>' . $numrecipients . "</td></tr>\n";
|
|
?>
|
|
</table>
|
|
<hr />
|
|
<div id="comm_dialog_send_info">
|
|
<?
|
|
if ($numrecipients > 0) {
|
|
echo i18n('Please confirm you wish to send this email to %1 recipients. Clicking the Send button below will begin sending the emails immediately.', array($numrecipients));
|
|
echo "<br />\n";
|
|
echo "<br />\n";
|
|
echo '<input class="comm_dialog_send_send_button" type="submit" value="' . i18n('Send') . "\" />\n";
|
|
} else {
|
|
echo i18n('You have not selected any recipients on the Prospects tab. Press Cancel and click on Prospects to add recipients');
|
|
echo "<br />\n";
|
|
echo "<br />\n";
|
|
}
|
|
?>
|
|
<input class="comm_dialog_send_cancel_button" type="submit" value="<?= i18n('Cancel') ?>" >
|
|
</div>
|
|
<div id="comm_dialog_send_processing" style="display: none;">
|
|
<?= i18n('Please wait while the email queue is initialized...') ?>
|
|
<br />
|
|
<img src="../images/ajax-loader.gif">
|
|
</div>
|
|
<div id="comm_dialog_send_status" style="display: none;">
|
|
<?= i18n('The email has been queued to send'); ?>
|
|
<br /><br /><input class="comm_dialog_send_status_button" type="submit" value="<?= i18n('Close and view sending status') ?>" >
|
|
<input class="comm_dialog_send_close_button" type="submit" value="<?= i18n('Close and continue') ?>" >
|
|
</div>
|
|
</form>
|
|
</div>
|
|
<script type="text/javascript">
|
|
var comm_dialog_choose_selected = -1;
|
|
$(".comm_dialog_send_send_button").click(function () {
|
|
$("#comm_dialog_send_info").hide();
|
|
$("#comm_dialog_send_processing").show();
|
|
$.post("communication.php?action=sendqueue",{fundraising_campaigns_id: <?= $fcid ?>, emails_id: <?= $emailid ?>}, function() {
|
|
$("#comm_dialog_send_processing").hide();
|
|
$("#comm_dialog_send_status").show();
|
|
});
|
|
// $('#comm_dialog_send').dialog("close");
|
|
return false;
|
|
});
|
|
|
|
$(".comm_dialog_send_cancel_button").click(function () {
|
|
$('#comm_dialog_send').dialog("close");
|
|
return false;
|
|
});
|
|
|
|
$(".comm_dialog_send_close_button").click(function () {
|
|
$('#comm_dialog_send').dialog("close");
|
|
return false;
|
|
});
|
|
|
|
$(".comm_dialog_send_status_button").click(function () {
|
|
$('#comm_dialog_send').dialog("close");
|
|
window.location.href="communication_send_status.php";
|
|
return false;
|
|
});
|
|
|
|
$("#comm_dialog_send").dialog({
|
|
bgiframe: true, autoOpen: true,
|
|
modal: true, resizable: false,
|
|
draggable: false,
|
|
width: 600, //(document.documentElement.clientWidth * 0.8);
|
|
close: function() {
|
|
$(this).dialog('destroy');
|
|
$('#comm_dialog_send').remove();
|
|
/* Run callbacks */
|
|
if(typeof(update_tab_communications) == 'function') {
|
|
update_tab_communications();
|
|
}
|
|
}
|
|
});
|
|
|
|
</script>
|
|
<?
|
|
exit;
|
|
|
|
// dialog_sender is used to send a one-off communication based on a given template to a given user
|
|
// receives 'uid' and an optional 'template'
|
|
case 'dialog_sender':
|
|
$u = user_load_by_uid(intval($_GET['uid']));
|
|
|
|
if ($_GET['template']) {
|
|
$emailq = $pdo->prepare("SELECT * FROM emails WHERE `val`=?");
|
|
$emailq->execute([$_GET['template']]);
|
|
$e = $emailq->fetch(PDO::FETCH_ASSOC);
|
|
} else
|
|
$e = null;
|
|
|
|
$from = htmlspecialchars($_SESSION['name'] . ' <' . $_SESSION['email'] . '>');
|
|
$to = htmlspecialchars($u['emailrecipient']);
|
|
$subject = htmlspecialchars($e['subject']);
|
|
|
|
// useless but we might as well have it
|
|
$name = htmlspecialchars($e['name']);
|
|
$key = htmlspecialchars($e['val']);
|
|
$description = htmlspecialchars($e['description']);
|
|
|
|
// do the replacements from the template now, so what the person see's is what gets sent.
|
|
$body = communication_replace_vars($e['body'], $u);
|
|
$bodyhtml = communication_replace_vars($e['bodyhtml'], $u);
|
|
|
|
// if there's no html,. grab the html from the non-html version
|
|
if ($bodyhtml == '')
|
|
$bodyhtml = nl2br($body);
|
|
?>
|
|
<div id="comm_dialog_sender" title="Send an Email" style="display: none">
|
|
<br />
|
|
<form id="comm_dialog_sender_form">
|
|
<? /* ="fcid=$fcid, key=$key, type=$type" */ ?>
|
|
|
|
<table class="editor" style="width:95%">
|
|
<?
|
|
if ($e) {
|
|
echo '<tr><td class="label">' . i18n('Using Template') . ":</td><td class=\"input\"><a href=\"communication.php?action=edit&val=$key\">$name (" . i18n('click to edit template') . ")</a></td></tr>\n";
|
|
echo "<tr><td colspan=\"2\"><hr /></td></tr>\n";
|
|
}
|
|
?>
|
|
<tr>
|
|
<td class="label"><?= i18n('From') ?>:</td>
|
|
<td class="input"><input type="text" name="from" size="60" value="<?= $from ?>" /></td>
|
|
</tr><tr>
|
|
<td class="label"><?= i18n('To') ?>:</td>
|
|
<td class="input"><input type="text" name="to" size="60" value="<?= $to ?>" /></td>
|
|
</tr><tr>
|
|
<td class="label"><?= i18n('Subject') ?>:</td>
|
|
<td class="input"><input type="text" name="subject" size="60" value="<?= $subject ?>" /></td>
|
|
</tr><tr>
|
|
<td colspan="2" class="input">
|
|
<div id="fck">
|
|
<textarea id="bodyhtml" name="bodyhtml" rows=6 cols=80><?= $bodyhtml ?></textarea>
|
|
</div>
|
|
</td>
|
|
</tr></table>
|
|
<hr />
|
|
<div align="right">
|
|
<input type="submit" id="comm_dialog_sender_send_button" value="<?= i18n('Send') ?>" />
|
|
<input type="submit" id="comm_dialog_sender_cancel_button" value="<?= i18n('Cancel') ?>" />
|
|
</div>
|
|
</form>
|
|
</div>
|
|
<script type="text/javascript" src="<?= $config['SFIABDIRECTORY'] ?>/fckeditor/fckeditor.js"></script>
|
|
<script type="text/javascript">
|
|
$("#comm_dialog_sender_send_button").click(function () {
|
|
var oFCKeditor = FCKeditorAPI.GetInstance('bodyhtml') ;
|
|
var value = oFCKeditor.GetHTML();
|
|
$('#bodyhtml').val(value);
|
|
$("#debug").load("<?= $config['SFIABDIRECTORY'] ?>/admin/communication.php?action=email_send", $("#comm_dialog_sender_form").serializeArray(),
|
|
function() {
|
|
$('#comm_dialog_sender').dialog("close");
|
|
});
|
|
return false;
|
|
}
|
|
);
|
|
$("#comm_dialog_sender_cancel_button").click(function () {
|
|
$('#comm_dialog_sender').dialog("close");
|
|
return false;
|
|
}
|
|
);
|
|
|
|
$("#comm_dialog_sender").dialog({
|
|
bgiframe: true, autoOpen: true,
|
|
modal: true, resizable: false,
|
|
draggable: false,
|
|
width: 800, //(document.documentElement.clientWidth * 0.8);
|
|
close: function() {
|
|
$(this).dialog('destroy');
|
|
$('#comm_dialog_sender').remove();
|
|
/* Run callbacks */
|
|
}
|
|
});
|
|
|
|
var oFCKeditor = new FCKeditor( 'bodyhtml' ) ;
|
|
oFCKeditor.BasePath = "../fckeditor/" ;
|
|
oFCKeditor.ToolbarSet = 'sfiab';
|
|
oFCKeditor.Width="100%";
|
|
oFCKeditor.Height=300;
|
|
// $('#fck').html(oFCKeditor.CreateHtml());
|
|
oFCKeditor.ReplaceTextarea() ;
|
|
</script>
|
|
<?
|
|
exit;
|
|
|
|
case 'email_send':
|
|
$body = getTextFromHtml($_POST['bodyhtml']);
|
|
email_send_new(stripslashes($_POST['to']), stripslashes($_POST['from']), stripslashes($_POST['subject']), stripslashes($body), stripslashes($_POST['bodyhtml']));
|
|
happy_('Email Successfully Sent');
|
|
exit;
|
|
|
|
case 'email_get_list':
|
|
$q = $pdo->prepare('SELECT * FROM emails ORDER BY type,name');
|
|
$q->execute();
|
|
echo '<table class="tableview">';
|
|
echo '<thead><tr>';
|
|
echo ' <th>' . i18n('Name') . '</th>';
|
|
echo ' <th>' . i18n('Type') . '</th>';
|
|
echo ' <th>' . i18n('Actions') . '</th>';
|
|
echo '</tr></thead>';
|
|
while ($r = $q->fetch(PDO::FETCH_OBJ)) {
|
|
if ($r->fundraising_campaigns_id)
|
|
$fcid = $r->fundraising_campaigns_id;
|
|
else
|
|
$fcid = 'null';
|
|
if ($r->name)
|
|
$name = $r->name;
|
|
else
|
|
$name = i18n('no email name specified');
|
|
|
|
echo '<tr><td><a href="#" onclick="return opencommunicationeditor(\'' . addslashes($r->val) . "',$r->id,$fcid)\">", htmlspecialchars($name) . '</a></td>';
|
|
echo "<td>$r->type</td>";
|
|
|
|
echo ' <td align="center">';
|
|
// only user emails can be deleted, system ones are required and cannot be removed
|
|
if ($r->type == 'user') {
|
|
echo ' ';
|
|
echo "<a onclick=\"return confirmClick('Are you sure you want to remove email?')\" href=\"communication.php?action=delete&delete=$r->id\"><img border=0 src=\"" . $config['SFIABDIRECTORY'] . '/images/16/button_cancel.' . $config['icon_extension'] . '"></a>';
|
|
echo ' ';
|
|
echo "<a href=\"communication.php?action=send&send=$r->id\">" . i18n('Send') . '</a>';
|
|
}
|
|
echo " </td>\n";
|
|
echo '</tr>';
|
|
}
|
|
echo '</table>';
|
|
exit;
|
|
|
|
case 'cancel':
|
|
if ($_GET['cancel']) {
|
|
$q = $pdo->prepare("UPDATE emailqueue SET finished=NOW() WHERE id=?");
|
|
$q->execute([intval($_GET['cancel'])]);
|
|
|
|
$q = $pdo->prepare("UPDATE emailqueue_recipients SET result='cancelled' WHERE emailqueue_id=? AND sent IS NULL AND result IS NULL");
|
|
$q->execute([intval($_GET['cancel'])]);
|
|
echo 'ok';
|
|
}
|
|
exit;
|
|
|
|
case 'loadaddresses':
|
|
if ($_GET['query'] && array_key_exists($_GET['query'], $mailqueries)) {
|
|
$q = $pdo->prepare($mailqueries[$_GET['query']]['query']);
|
|
$q->execute();
|
|
while ($r = $q->fetch(PDO::FETCH_OBJ)) {
|
|
if ($r->organization)
|
|
$s = "($r->organization) ";
|
|
else
|
|
$s = '';
|
|
echo "$r->firstname $r->lastname {$s}<$r->email><br />";
|
|
}
|
|
}
|
|
|
|
exit;
|
|
}
|
|
|
|
if (get_value_from_array($_GET, 'action') == 'sendqueue') {
|
|
$fcid = intval($_POST['fundraising_campaigns_id']);
|
|
$emailid = intval($_POST['emails_id']);
|
|
|
|
$fcq = $pdo->prepare("SELECT * FROM fundraising_campaigns WHERE id=?");
|
|
$fcq->execute([$fcid]);
|
|
$fc = $fcq->fetch(PDO::FETCH_OBJ);
|
|
|
|
$emailq = $pdo->prepare("SELECT * FROM emails WHERE id=?");
|
|
$emailq->execute([$emailid]);
|
|
$email = $emailq->fetch(PDO::FETCH_OBJ);
|
|
|
|
$recipq = $pdo->prepare("SELECT * FROM fundraising_campaigns_users_link
|
|
WHERE fundraising_campaigns_id=?");
|
|
$recipq->execute([$fcid]);
|
|
show_pdo_errors_if_any($pdo);
|
|
|
|
$numtotal = $recipq->rowCount();
|
|
|
|
$q = $pdo->prepare("INSERT INTO emailqueue (val, name, users_uid, `from`, subject, body, bodyhtml, `type`, fundraising_campaigns_id, started, finished, numtotal, numsent)
|
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, NOW(), NULL, ?, 0)");
|
|
|
|
$q->execute([
|
|
$email->val,
|
|
$email->name,
|
|
$_SESSION['users_uid'],
|
|
$email->from,
|
|
$email->subject,
|
|
$email->body,
|
|
$email->bodyhtml,
|
|
$email->type,
|
|
$fcid,
|
|
$numtotal
|
|
]);
|
|
|
|
$emailqueueid = $pdo->lastInsertId();
|
|
show_pdo_errors_if_any($pdo);
|
|
|
|
$urlproto = $_SERVER['SERVER_PORT'] == 443 ? 'https://' : 'http://';
|
|
$urlmain = "$urlproto{$_SERVER['HTTP_HOST']}{$config['SFIABDIRECTORY']}";
|
|
$urllogin = "$urlmain/login.php";
|
|
while ($r = $recipq->fetch(PDO::FETCH_OBJ)) {
|
|
$u = user_load_by_uid($r->users_uid);
|
|
|
|
// we only send school access codes to science heads or principals
|
|
|
|
$acq = $pdo->prepare("SELECT accesscode FROM schools WHERE (sciencehead_uid=? OR principal_uid=? AND `year`=?");
|
|
$acq->execute([$u['uid'],$config['FAIRYEAR']]);
|
|
$acr = $acq->fetch(PDO::FETCH_OBJ);
|
|
$accesscode = $acr->accesscode;
|
|
|
|
$replacements = array(
|
|
'FAIRNAME' => $config['fairname'],
|
|
'SALUTATION' => $u['salutation'],
|
|
'FIRSTNAME' => $u['firstname'],
|
|
'LASTNAME' => $u['lastname'],
|
|
'NAME' => $u['name'],
|
|
'EMAIL' => $u['email'],
|
|
'ORGANIZATION' => $u['sponsor']['organization'],
|
|
'URLMAIN' => $urlmain,
|
|
'URLLOGIN' => $urllogin,
|
|
'ACCESSCODE' => $accesscode,
|
|
);
|
|
|
|
if ($u['email'] && $u['email'][0] != '*') {
|
|
$q = $pdo->prepare("INSERT INTO emailqueue_recipients (emailqueue_id, toemail, toname, replacements, sent) VALUES (?, ?, ?, ?, NULL)");
|
|
|
|
$q->execute([
|
|
$emailqueueid,
|
|
$u['email'],
|
|
$u['name'],
|
|
json_encode($replacements)
|
|
]);
|
|
|
|
show_pdo_errors_if_any($pdo);
|
|
}
|
|
$q = $pdo->prepare("UPDATE emails SET lastsent=NOW() WHERE id=?");
|
|
$q->execute([$emailid]);
|
|
}
|
|
echo 'ok';
|
|
launchQueue();
|
|
exit;
|
|
}
|
|
send_header('Communication',
|
|
array('Committee Main' => 'committee_main.php',
|
|
'Administration' => 'admin/index.php'),
|
|
'communication');
|
|
echo '<br />';
|
|
?>
|
|
<script type="text/javascript">
|
|
function toggleAddresses() {
|
|
if($("#toaddresses").is(":visible")) {
|
|
$("#toaddresses").hide();
|
|
$("#toaddresses-view").html("Show Recipients");
|
|
} else {
|
|
$("#toaddresses").show();
|
|
$("#toaddresses-view").html("Hide Recipients");
|
|
}
|
|
return false;
|
|
}
|
|
function loadAddresses() {
|
|
$("#toaddresses").load("communication.php?action=loadaddresses&query="+$("#to").val());
|
|
}
|
|
</script>
|
|
<?
|
|
|
|
if (get_value_from_array($_GET, 'action') == 'delete' && get_value_from_array($_GET, 'delete')) {
|
|
$q = $pdo->prepare("DELETE FROM emails WHERE id=? AND `type`='user'");
|
|
$q->execute([$_GET['delete']]);
|
|
echo happy('Email successfully deleted');
|
|
}
|
|
|
|
if (get_value_from_array($_GET, 'action') == 'send' && get_value_from_array($_GET, 'send')) {
|
|
show_pdo_errors_if_any($pdo);
|
|
|
|
$q = $pdo->prepare("SELECT * FROM emails WHERE id=?");
|
|
$q->execute($_GET['send']);
|
|
|
|
$r = $q->fetch(PDO::FETCH_OBJ);
|
|
|
|
echo i18n('Please confirm you would like to send the following email, and choose who to send it to');
|
|
echo '<br>';
|
|
echo '<br>';
|
|
echo '<form method="post" action="communication.php">';
|
|
echo '<table cellspacing=0 cellpadding=3 border=1>';
|
|
echo '<tr><td><b>From:</b></td><td>' . htmlspecialchars($r->from) . '</td></tr>';
|
|
echo '<tr><td><b>To:</b></td><td>';
|
|
echo '<select name="to" id="to" onchange="loadAddresses();">';
|
|
echo ' <option value="">Choose Email Recipients</option>';
|
|
$str = '';
|
|
foreach ($mailqueries AS $k => $mq) {
|
|
$tq = $pdo->prepare($mq['query']);
|
|
|
|
$tq->execute();
|
|
if ($pdo->errorInfo()) {
|
|
show_pdo_errors_if_any($pdo);
|
|
exit;
|
|
}
|
|
$num = $tq->rowCount();
|
|
$str .= '<h2>' . $mq['name'] . " $num </h2>";
|
|
while ($tr = $tq->fetch(PDO::FETCH_OBJ)) {
|
|
$str .= '[' . $tr->uid . '][' . $tr->year . '] ' . $tr->firstname . ' ' . $tr->lastname . " <{$tr->email}><br />";
|
|
}
|
|
echo " <option value=\"$k\">" . i18n($mq['name']) . ' (' . i18n('%1 recipients', array($num), array('number')) . ')</option>';
|
|
}
|
|
echo '</select>';
|
|
echo '<div id="toaddresses-view-wrapper"><a href="#" onclick="return toggleAddresses()"><span id="toaddresses-view">View Recipients</span></a></div>';
|
|
echo '<div id="toaddresses" style="width: 100%; height: 300px; overflow: auto; border: 1px solid grey; background-color: #FFFFFF; display: none;">empty</div>';
|
|
echo '</td></tr>';
|
|
echo '<tr><td><b>Date:</b></td><td>' . date('r') . '</td></tr>';
|
|
echo '<tr><td><b>Subject:</b></td><td>' . htmlspecialchars($r->subject) . '</td></tr>';
|
|
if ($r->bodyhtml) {
|
|
$body = $r->bodyhtml;
|
|
} else {
|
|
$body = nl2br(htmlspecialchars($r->body));
|
|
}
|
|
|
|
echo '<tr><td colspan=2>' . $body . '<br />(' . mb_detect_encoding($body) . ')</td></tr>';
|
|
|
|
echo '</table>';
|
|
|
|
if (!function_exists('exec')) {
|
|
echo "<div class=\"error\">Sending requires php's exec() function to be available</div>\n";
|
|
} else {
|
|
echo '<table border=0 cellspacing=0 cellpadding=30 width="100%">';
|
|
echo '<tr><td align=center>';
|
|
echo '<input type=hidden name=action value="reallysend">';
|
|
echo '<input type=hidden name=reallysend value="' . $_GET['send'] . '">';
|
|
echo '<input type=submit value="Yes, Send Email">';
|
|
echo '</form>';
|
|
echo '</td><td>';
|
|
echo '<form method=get action="communication.php">';
|
|
echo '<input type=submit value="No, Do Not Send">';
|
|
echo '</form>';
|
|
echo '</td></tr>';
|
|
echo '</table>';
|
|
}
|
|
// echo $str;
|
|
} else if (get_value_from_array($_POST, 'action') == 'reallysend' && get_value_from_array($_POST, 'reallysend') && get_value_from_array($_POST, 'to')) {
|
|
$emailid = intval($_POST['reallysend']);
|
|
$emailq = $pdo->prepare("SELECT * FROM emails WHERE id=?");
|
|
$emailq->execute([$emailid]);
|
|
$email = $emailq->fetch(PDO::FETCH_OBJ);
|
|
$to = $_POST['to'];
|
|
|
|
if (array_key_exists($to, $mailqueries)) {
|
|
$recipq = $pdo->prepare($mailqueries[$to]['query']);
|
|
$recipq->execute();
|
|
}
|
|
|
|
$numtotal = $recipq->rowCount();
|
|
$q = $pdo->prepare("INSERT INTO emailqueue (val, name, users_uid, `from`, subject, body, bodyhtml, `type`, fundraising_campaigns_id, started, finished, numtotal, numsent) VALUES (?, ?, ?, ?, ?, ?, ?, ?, NULL, NOW(), NULL, ?, 0)");
|
|
|
|
$q->execute([
|
|
$email->val,
|
|
$email->name,
|
|
$_SESSION['users_uid'],
|
|
$email->from,
|
|
$email->subject,
|
|
$email->body,
|
|
$email->bodyhtml,
|
|
$email->type,
|
|
$numtotal
|
|
]);
|
|
|
|
$emailqueueid = lastInsertId();
|
|
show_pdo_errors_if_any($pdo);
|
|
|
|
$urlproto = $_SERVER['SERVER_PORT'] == 443 ? 'https://' : 'http://';
|
|
$urlmain = "$urlproto{$_SERVER['HTTP_HOST']}{$config['SFIABDIRECTORY']}";
|
|
$urllogin = "$urlmain/login.php";
|
|
|
|
while ($r = $recipq->fetch(PDO::FETCH_OBJ)) {
|
|
if ($r->uid)
|
|
$u = user_load_by_uid($r->uid);
|
|
else if ($r->users_uid)
|
|
$u = user_load_by_uid($r->users_uid);
|
|
else {
|
|
$toname = $r->firstname . ' ' . $r->lastname;
|
|
$toemail = $r->email;
|
|
|
|
$replacements = array(
|
|
'FAIRNAME' => $config['fairname'],
|
|
'FIRSTNAME' => $r->firstname,
|
|
'LASTNAME' => $r->lastname,
|
|
'NAME' => $r->firstname . ' ' . $r->lastname,
|
|
'EMAIL' => $r->email,
|
|
'ORGANIZATION' => $r->organization,
|
|
'URLMAIN' => $urlmain,
|
|
'URLLOGIN' => $urllogin,
|
|
'ACCESSCODE' => 'unknown',
|
|
);
|
|
}
|
|
if ($u) {
|
|
// we only send school access codes to science heads or principals
|
|
$acq = $pdo->prepare("SELECT accesscode FROM schools WHERE (sciencehead_uid=? OR principal_uid=?) AND `year`=?");
|
|
$acq->execute([$u['uid'],$u['uid'],$config['FAIRYEAR']]);
|
|
show_pdo_errors_if_any($pdo);
|
|
$acr = $acq->fetch(PDO::FETCH_OBJ);
|
|
$accesscode = $acr->accesscode;
|
|
|
|
$replacements = array(
|
|
'FAIRNAME' => $config['fairname'],
|
|
'SALUTATION' => $u['salutation'],
|
|
'FIRSTNAME' => $u['firstname'],
|
|
'LASTNAME' => $u['lastname'],
|
|
'NAME' => $u['name'],
|
|
'EMAIL' => $u['email'],
|
|
'ORGANIZATION' => $u['sponsor']['organization'],
|
|
'URLMAIN' => $urlmain,
|
|
'URLLOGIN' => $urllogin,
|
|
'ACCESSCODE' => $accesscode,
|
|
);
|
|
|
|
$toname = $u['name'];
|
|
$toemail = $u['email'];
|
|
}
|
|
|
|
if ($toemail) {
|
|
$q = $pdo->prepare("INSERT INTO emailqueue_recipients (emailqueue_id, toemail, toname, replacements, sent) VALUES (?, ?, ?, ?, NULL)");
|
|
|
|
$q->execute([
|
|
$emailqueueid,
|
|
$toemail,
|
|
$toname,
|
|
json_encode($replacements)
|
|
]);
|
|
|
|
show_pdo_errors_if_any($pdo);
|
|
}
|
|
|
|
$q = $pdo->prepare("UPDATE emails SET lastsent=NOW() WHERE id=?");
|
|
$q->execute([$emailid]);
|
|
}
|
|
launchQueue();
|
|
echo '<br />';
|
|
echo happy('Email Communication sending has started!');
|
|
echo '<br>';
|
|
echo '<a href="communication_send_status.php">Click here to see the sending progress</a>';
|
|
} else if (get_value_from_array($_GET, 'action') == 'restartqueue') {
|
|
launchQueue();
|
|
echo '<br />';
|
|
echo happy('Email Communication sending has started!');
|
|
echo '<br>';
|
|
echo '<a href="communication_send_status.php">Click here to see the sending progress</a>';
|
|
} else {
|
|
if (!$config['fairmanageremail'])
|
|
echo notice(i18n("Warning: The 'Fair Manager Email' has not been set in SFIAB Configuration / Configuration Variables / Global. Please set it. The 'Fair Manager Email' is the default 'From' address for all emails and without a 'From' address, no emails can be sent!"));
|
|
|
|
echo '<a href="communication_send_status.php">' . i18n('Email Queue Status and History') . '</a><br />';
|
|
echo '<a href="#" onclick="return opencommunicationeditor(null,null,null)">' . i18n('Add New Email') . '</a>';
|
|
echo "<br />\n";
|
|
echo "<br />\n";
|
|
echo '<div id="emaillist"></div>';
|
|
?>
|
|
<script type="text/javascript">
|
|
function refreshEmailList() {
|
|
$("#emaillist").load("communication.php?action=email_get_list",null,function(){
|
|
$('.tableview').tablesorter();
|
|
});
|
|
|
|
}
|
|
$(document).ready(function() {
|
|
refreshEmailList();
|
|
}
|
|
);
|
|
</script>
|
|
<?
|
|
}
|
|
|
|
send_footer();
|
|
?>
|