7 $monLibrary = dirname(__FILE__) .
"/../library";
8 $monIncludes = dirname(__FILE__) .
"/../includes";
9 $sharedLibrary = dirname(__FILE__) .
"/../../shared/library";
10 require_once(
"$monLibrary/cu_top.i");
11 require_once(
"$monLibrary/ck_hticket.i");
12 require_once(
"$sharedLibrary/commonJsFunctions.i");
13 require_once(
"$sharedLibrary/errormail.i");
14 require_once(
"./mBroadcastEmail.data");
16 if (!CheckPerm($link, $Hu, basename($_SERVER[
'SCRIPT_NAME']), $_SERVER[
'REMOTE_ADDR'])) {
19 header(
"Location: /hcuadm/hcu_noperm.prg");
23 $string = array(
"filter" => FILTER_SANITIZE_STRING);
24 $stringNoEncodeQuote = array(
"filter" => FILTER_SANITIZE_STRING,
"options" => array(
"flags" => FILTER_FLAG_NO_ENCODE_QUOTES));
25 $array = array(
"filter" => FILTER_DEFAULT);
26 $html = array(
"filter" => FILTER_SANITIZE_SPECIAL_CHARS);
27 $parameters = array();
28 HCU_ImportVars($SYSENV,
"IMPORTS", array(
"operation" => $string,
"filteredServers" => $array,
"filteredCus" => $array,
29 "body" => $html,
"fromEmail" => $string,
"subject" => $stringNoEncodeQuote,
30 "fromName" => $stringNoEncodeQuote,
"testEmail" => $string));
32 $operation = HCU_array_key_value(
"operation", $SYSENV[
"IMPORTS"]);
33 $operation = $operation ===
false ?
"" : trim($operation);
34 $self =
"/hcuadm/mBroadcastEmail.prg";
36 if ($operation !=
"") {
40 $returnArray = ReadSetup($dbh, $SYSENV);
44 DownloadCSV($dbh, $SYSENV);
47 $returnArray = SendTestEmail($dbh, $SYSENV);
50 $returnArray = SendEmails($dbh, $SYSENV);
53 $returnArray = array(
"status" =>
"001",
"error" =>
"Operation not specified: '$operation'");
58 header(
'Content-type: application/json');
59 print HCU_JsonEncode($returnArray);
73 function PrintMainPage($self) {
74 $title =
"Broadcast Emails";
75 printMonitorPageTop($title, GetHomecuKendoVersion(
"monitor"), GetCloudFrontDomainName(), GetHomecuBootstrapVersion(), GetFontawesomeVersion(),
true);
76 printMonitorPageMiddle($title,
null);
78 $cloudfrontDomainName = GetCloudFrontDomainName();
79 $tinymceVersion = GetTinyMCEVersion ();
81 <script type=
"text/javascript" src=
"https://<?php echo $cloudfrontDomainName; ?>/homecu/js/tinymce/<?php echo $tinymceVersion; ?>/tinymce.min.js"></script>
82 <script type=
"text/javascript" src=
"https://<?php echo $cloudfrontDomainName; ?>/homecu/js/tinymce/homecuchar.plugin.js"></script>
89 <script type=
"text/javascript">
92 getShowWaitFunctions();
101 function InitPage() {
102 $.homecuValidator.setup({formValidate:
'form', formStatusField:
'formValidateDiv', homecuCustomRules: {
103 validateemail:
function(input) {
104 if (!$(input).is(
"[name='fromEmail_input']:visible, [name='testEmail']:visible")) {
107 var name = $(input).attr(
"name").trim();
108 var value = $(input).val().trim();
109 var label = name ==
"fromEmail_input" ?
"from email" :
"test email";
110 if (value ==
"" && name ==
"fromEmail_input") {
111 $(input).attr(
"data-validateemail-msg",
"The " + label +
" is required.");
114 var pattern = $.homecuValidator.patterns.email;
115 if (value !=
"" && !pattern.test(value)) {
116 $(input).attr(
"data-validateemail-msg",
"The " + label +
" is invalid.");
123 var tinyFocused =
false;
130 var toolbar1 =
"code newdocument | bold italic underline strikethrough | alignleft aligncenter alignright alignjustify" +
131 "| fontselect fontsizeselect | bullist numlist";
132 var toolbar2 =
"outdent indent blockquote | undo redo | link unlink image | preview | forecolor backcolor | removeformat | homecuchar | nonbreaking";
134 selector:
"#emailBody",
135 relative_urls:
false,
136 remove_script_host :
false,
138 "advlist autolink link image lists preview anchor pagebreak",
139 "searchreplace visualblocks visualchars code insertdatetime nonbreaking",
140 "table contextmenu directionality template textcolor homecuchar paste textcolor" 146 toolbar_items_size:
"small",
147 valid_children :
"+body[style]",
148 auto_focus:
"emailBody",
149 init_instance_callback:
function (editor) {
150 $(
"#emailBody_ifr").attr(
"tabindex", -1); <?php
152 editor.on(
"click",
function(e) {
153 tinymce.execCommand(
'mceFocus',
true,
'emailBody');
165 $(
"#emailBodyDiv").focus(
function() {
167 tinymce.execCommand(
'mceFocus',
true,
'emailBody');
178 $(
"#emailBodyDiv").blur(
function() {
180 tinymce.execCommand(
'mceFocus',
false,
'emailBody');
190 var fromEmailCombobox = $(
"#fromEmailCombobox").kendoComboBox({
192 }).data(
"kendoComboBox");
199 var cuListMultiselect = $(
"#cuListMultiselect").kendoMultiSelect({
201 }).data(
"kendoMultiSelect");
208 var serverMultiselect = $(
"#serverMultiselect").kendoMultiSelect({
210 }).data(
"kendoMultiSelect");
217 var actionDropdownlist = $(
"#actionDropdownlist").kendoDropDownList({
219 dataTextField:
"text",
220 dataValueField:
"value",
221 change:
function () {
222 if (this.value() ==
"email") {
223 $(
"#emailOptionsDiv").show();
224 $(
"#emailBodyDiv").show();
226 $(
"#emailOptionsDiv").hide();
227 $(
"#emailBodyDiv").hide();
230 }).data(
"kendoDropDownList");
232 everythingDataSource.read({operation:
"readSetup"});
241 $(
".okayBtn").click(
function() {
242 if ($.homecuValidator.validate()) {
243 var action = $(
"#actionDropdownlist").data(
"kendoDropDownList").value();
244 var filteredServers = kendo.stringify($(
"#serverMultiselect").data(
"kendoMultiSelect").value());
245 var filteredCus = kendo.stringify($(
"#cuListMultiselect").data(
"kendoMultiSelect").value());
248 var testEmail = $(
"[name='testEmail']").val().trim();
250 if (testEmail !=
"") {
252 parameters.operation =
"sendTestEmail";
253 parameters.fromEmail = $(
"#fromEmailCombobox").data(
"kendoComboBox").value().trim();
254 parameters.fromName = $(
"[name='fromName']").val().trim();
255 parameters.subject = $(
"[name='subject']").val().trim();
256 parameters.testEmail = $(
"[name='testEmail']").val().trim();
257 parameters.body = tinyMCE.activeEditor.getContent();
259 everythingDataSource.read(parameters);
264 $(
"#downloadCSVForm [name='filteredCus']").val(filteredCus);
265 $(
"#downloadCSVForm [name='filteredServers']").val(filteredServers);
266 $(
"#downloadCSVForm").submit();
271 $(
"#pageContents").animate({ scrollTop: 0 }, { duration: 500 } );
276 var everythingDataSource =
null;
284 function InitDataSource() {
291 everythingDataSource =
new kendo.data.DataSource({
294 url:
"<?php echo $self; ?>",
298 parameterMap:
function(data, type) {
304 parse:
function(results) {
306 if (results.status !==
"000") {
307 $.homecuValidator.displayMessage(results.error, $.homecuValidator.settings.statusError );
308 }
else if (results.info !=
null && results.info !=
"") {
309 $.homecuValidator.displayMessage(results.info, $.homecuValidator.settings.statusInfo );
312 switch(results.action) {
314 $(
"#fromEmailCombobox").data(
"kendoComboBox").dataSource.data(results.data.emailList);
315 $(
"#serverMultiselect").data(
"kendoMultiSelect").dataSource.data(results.data.servers);
316 $(
"#cuListMultiselect").data(
"kendoMultiSelect").dataSource.data(results.data.cuList);
317 $(
"#actionDropdownlist").data(
"kendoDropDownList").dataSource.data(results.data.actions);
335 function OpenPreviewWindow() {
336 var dialog = $(
"#previewWindow").data(
"kendoDialog");
338 if (dialog ==
null) {
345 dialog = $(
"<div id='previewWindow'></div>").appendTo(
"body").kendoDialog({
348 {text:
"Send Email", primary:
true, action:
function() {
351 parameters.operation =
"sendEmails";
352 parameters.fromEmail = $(
"#fromEmailCombobox").data(
"kendoComboBox").value().trim();
353 parameters.fromName = $(
"[name='fromName']").val().trim();
354 parameters.subject = $(
"[name='subject']").val().trim();
355 parameters.body = tinyMCE.activeEditor.getContent();
356 parameters.filteredServers = kendo.stringify($(
"#serverMultiselect").data(
"kendoMultiSelect").value());
357 parameters.filteredCus = kendo.stringify($(
"#cuListMultiselect").data(
"kendoMultiSelect").value());
358 everythingDataSource.read(parameters);
364 if (window.activeWindows !=
null) {
365 window.activeWindows.push(
this);
367 var maxHeight1 = 600;
368 var maxHeight2 = $(window).height() - 150;
369 var maxHeight = maxHeight2 >= maxHeight1 ? maxHeight1 : maxHeight2;
371 var maxWidth2 = $(window).width() - 75;
372 var maxWidth = maxWidth2 >= maxWidth1 ? maxWidth1 : maxWidth2;
373 $(
"#previewWindow").css({maxHeight: maxHeight, maxWidth: maxWidth});
376 if (window.activeWindows !=
null) {
377 window.activeWindows.pop();
380 }).data(
"kendoDialog");
383 var
template = kendo.template($(
"#previewTemplate").html());
385 var previewData = {};
386 previewData.testEmail = $(
"[name='testEmail']").val().trim();
387 previewData.fromEmail = $(
"#fromEmailCombobox").data(
"kendoComboBox").value();
388 previewData.fromName = $(
"[name='fromName']").val().trim();
389 previewData.subject = $(
"[name='subject']").val().trim();
390 previewData.emailBody = tinyMCE.activeEditor.getContent();
392 dialog.content(
template(previewData)).open();
395 var activeWindows = [];
396 $(document).ready(
function() {
399 <?php printClickOverlayEvent(); ?>
409 <script type=
"text/x-kendo-template" id=
"previewTemplate">
410 <div
class=
"container hcu-all-100 hcu-no-padding">
411 # if (testEmail != "") { # 412 <div
class=
"col-xs-12 hcu-no-padding">
413 <label
class=
"col-xs-12 k-info-colored">Check email for <b>#: testEmail #</b> to view test message.</label>
415 <div
class=
"col-xs-12"> </div>
417 <div
class=
"col-xs-12 hcu-no-padding">
418 <div
id=
'previewValidateDiv' class=
'k-block k-error-colored col-xs-12' style=
'display:none;'></div>
420 <div
class=
"col-xs-12"> </div>
421 <div
class=
"col-xs-12 col-sm-4 hcu-no-padding">
422 <label
class=
"col-xs-4 col-sm-12">From</label>
423 <div
class=
"col-xs-8 col-sm-12"><div
class=
"admIndent">#: fromName # <div
class=
"visible-xs-block"><br></div> (#: fromEmail #)</div></div>
425 <div
class=
"visible-xs-block col-xs-12"> </div>
426 <div
class=
"visible-xs-block col-xs-12"> </div>
427 <div
class=
"col-xs-12 col-sm-4 hcu-no-padding">
428 <label
class=
"col-xs-4 col-sm-12">Subject</label>
429 <div
class=
"col-xs-8 col-sm-12"><div
class=
"admIndent">#: subject #</div></div>
431 <div
class=
"col-xs-12"> </div>
432 <div
class=
"col-xs-12 hcu-no-padding">
433 <label
class=
"col-xs-12">Body of Email</label>
434 <div
class=
"col-xs-12"><div
id=
"previewEmailDiv">#= emailBody #</div></div>
444 <form
id=
"form" class=
"broadcastEmailsForm">
445 <div
class=
"container hcu-all-100 hcu-template vsgPrimary">
447 <div
class=
"col-xs-12 notificationRow"></div>
449 <div
class=
"col-xs-12">
451 <div
id=
"formValidateDiv" class=
"k-block k-error-colored formValidateDiv" style=
"display:none;"></div>
454 <div
class=
"well sm-well col-xs-12">
456 <div
class=
"col-xs-12 col-sm-1 hcu-no-padding-nonmobile">
457 <label>Action</label>
459 <div
class=
"col-xs-12 col-sm-5">
460 <div
id=
"actionDropdownlist" class=
"hcu-all-100"></div>
464 <div
class=
"well sm-well col-xs-12">
465 <div
class=
"row hcuSpacer">
466 <div
class=
"h4 col-xs-12">Filter Options</div>
469 <div
class=
"col-xs-12 col-sm-1 hcu-no-padding-nonmobile">
470 <label>Credit Union(s)</label>
472 <div
class=
"col-xs-12 col-sm-5">
473 <div
id=
"cuListMultiselect" class=
"hcu-all-100"></div>
474 <p
class=
"small vsgSecondary">Empty means all credit unions.</p>
478 <div
class=
"col-xs-12 col-sm-1 hcu-no-padding-nonmobile">
479 <label>Server(s)</label>
481 <div
class=
"col-xs-12 col-sm-5">
482 <div
id=
"serverMultiselect" class=
"hcu-all-100"></div>
483 <p
class=
"small vsgSecondary">Empty means all servers.</p>
487 <div
class=
"well sm-well col-xs-12" id=
"emailOptionsDiv">
488 <div
class=
"row hcuSpacer">
489 <div
class=
"h4 col-xs-12">Email Options</div>
491 <div
class=
"row hcuSpacer">
492 <div
class=
"col-xs-12 col-sm-2 col-md-1 hcu-no-padding-nonmobile">
493 <label>From Email</label>
495 <div
class=
"col-xs-12 col-sm-5">
496 <input type=
"text" class=
"hcu-all-100" name=
"fromEmail" id=
"fromEmailCombobox">
497 <p
class=
"small vsgSecondary">This email must be verified through AWS SES. You are allowed to write an email in.</p>
501 <div
class=
"row hcuSpacer">
502 <div
class=
"col-xs-12 col-sm-2 col-md-1 hcu-no-padding-nonmobile">
503 <label>From Name</label>
505 <div
class=
"col-xs-12 col-sm-5">
506 <input type=
"text" class=
"k-input k-textbox hcu-all-100" name=
"fromName">
510 <div
class=
"row hcuSpacer">
511 <div
class=
"col-xs-12 col-sm-2 col-md-1 hcu-no-padding-nonmobile">
512 <label>Subject</label>
514 <div
class=
"col-xs-12 col-sm-5">
515 <input type=
"text" class=
"k-input k-textbox hcu-all-100" name=
"subject">
519 <div
class=
"row hcuSpacer">
520 <div
class=
"col-xs-12 col-sm-1 hcu-no-padding-nonmobile">
521 <label>Test Email</label>
523 <div
class=
"col-xs-12 col-sm-5">
524 <input type=
"text" class=
"k-input k-textbox hcu-all-100" name=
"testEmail">
525 <p
class=
"small vsgSecondary">If
this is not empty, then it will send an email here in the preview step.</p>
529 <div
class=
"well sm-well col-xs-12" id=
"emailBodyDiv">
530 <div
class=
"row hcuSpacer">
531 <div
class=
"h4 col-xs-12">Email Body</div>
533 <div
class=
"row hcuSpacer" id=
"emailBodyDiv" tabindex=
"0">
534 <div
class=
"col-xs-12">
535 <textarea
id=
"emailBody" name=
"emailBody" class=
"hcu-all-100"></textarea>
539 <div
class=
"col-xs-12">
540 <div
class=
"k-state-default row">
541 <a
class=
"okayBtn k-button k-primary" href=
"#"><i
class=
"fa fa-check"></i>Okay</a>
546 <form
id=
"downloadCSVForm" action=
"<?php echo $self; ?>" method=
"post" target=
"_blank" style=
"display:none;">
547 <input type=
"hidden" name=
"operation" value=
"downloadCSV">
548 <input type=
"hidden" name=
"filteredCus" value=
"[]">
549 <input type=
"hidden" name=
"filteredServers" value=
"[]">
552 <?php printMonitorPageBottom();