diff options
| author | Niklas Olmes <niklas@olmes.de> | 2026-04-24 19:30:00 +0200 |
|---|---|---|
| committer | Niklas Olmes <niklas@olmes.de> | 2026-04-24 19:30:00 +0200 |
| commit | cdea8caa5617f0cb77bcbc9803759abd2df50644 (patch) | |
| tree | 2f7f1bd3af3b2396baf5403ad1a7ad00bcb7fae9 /email.php | |
Diffstat (limited to 'email.php')
| -rw-r--r-- | email.php | 708 |
1 files changed, 708 insertions, 0 deletions
diff --git a/email.php b/email.php new file mode 100644 index 0000000..5505957 --- /dev/null +++ b/email.php @@ -0,0 +1,708 @@ +<?php +/* + * 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; either version 2 of the License, or + * (at your option) any later version. + * + * 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. + */ +?> +<? +/* vim: set ts=4 sw=4 et : */ + +$_title = "E-Mail senden"; + +require_once __DIR__ . "/check_auth.php"; +require_once __DIR__ . "/../includes/common.php"; + +require_once __DIR__ . "/lookup.php"; + +require_once __DIR__ . "/header.php"; + +if (isset($_GET['demo'])) $_SESSION['demo'] = true; +if (isset($_GET['demoself'])) $_SESSION['demoself'] = true; +if (isset($_GET['nodemo'])) unset($_SESSION['demo']); +if (isset($_GET['nodemoself'])) unset($_SESSION['demoself']); + +session_write_close(); + +$num = 0; +if ($_POST['ids'] != '') + $num = count(explode(',', $_POST['ids'])); +?> + +<div id="email_modal" style="display: none;" class="transparent_modal"> + <button onclick="abortAll()" class="emergency_off">NOT-AUS</button> + <div class="sk-folding-cube hvcenter"> + <div class="sk-cube1 sk-cube"></div> + <div class="sk-cube2 sk-cube"></div> + <div class="sk-cube4 sk-cube"></div> + <div class="sk-cube3 sk-cube"></div> + </div> +</div> + +<h1>E-Mail senden +<? if (!(isset($_POST['nocount']) && $_POST['nocount'])) { ?> + <? if ($num > 1) { ?> +<span style="font-size: .5em;">für <?=$num?> Datensätze</span> + <? } else { ?> +<span style="font-size: .5em;">für <?=$num?> Datensatz</span> + <? } ?> + <span style="font-size: .5em;" class="num_recps"></span> +<? } ?> +</h1> + +<? if ($_SESSION['demo']) { ?> +<div style="border: 1px solid grey; padding: .2em; max-width: 500px; margin-bottom: .5em;"> + <span style='color: darkred !important;'><b>Demo-Flag ist an</b> — es werden <b>keine E-Mails gesendet</b>, der Versand wird simuliert mit 3% Fehlerwahrscheinlichkeit.</span> + <br /> + <button class="small" style="background: orange;" onclick="$.ajaxSetup({async:false}); $.post('/db/main/nodemo.php'); location.reload(); return false;">Demo-Flag entfernen</button> +</div> +<? } ?> + +<? if ($_SESSION['demoself']) { ?> +<div style="border: 1px solid grey; padding: .2em; max-width: 500px; margin-bottom: .5em;"> + <span style='color: darkred !important;'><b>Demo-Self-Flag ist an</b> — Der E-Mail-Empfänger (To) wird beim Versand durch den E-Mail-Absender (From) ersetzt. Cc und Bcc werden ignoriert.</span> + <br /> + <button class="small" style="background: orange;" onclick="$.ajaxSetup({async:false}); $.post('/db/main/nodemoself.php'); location.reload(); return false;">Demo-Self-Flag entfernen</button> +</div> +<? } ?> + +<? + $sql = " +SELECT Personen.Email +FROM Personen_Organisationen +INNER JOIN Personen ON Personen_Organisationen.Person = Personen.ID +WHERE Personen_Organisationen.Organisation=526 AND Personen.Nachname=? +LIMIT 1 +"; + $stmt = $mysqli->prepare($sql); + $stmt->bind_param('s', $_SESSION['auth_user']); + $stmt->bind_result($semail); + $stmt->execute(); + $stmt->fetch(); + $stmt->reset(); +?> + +<table border="0" style="display: inline-block; max-width: 460px;"> + <tr> + <td>Absender</td> + <td><input style="width: 25em;" class="mand" type="text" name="email_from" placeholder="absender@hochschule-rhein-waal.de" value="<?=$semail?>"></td> + <td></td> + </tr> + <tr> + <td>ID/To<sup><small>Preview</small></sup></td> + <td> + <input type="text" style="width: 5em;" disabled name="email_id" value=""> + <input type="text" style="width: 19em;" disabled name="email_to" value=""> + </td> + </tr> + <tr> + <td>Cc</td> + <td> + <input type="text" style="width: 25em;" name="email_cc" placeholder="erster@kontakt.cc, zweiter@kontakt.cc"> + <i style="cursor: pointer;" onclick="$('#cc_info').toggle();" class="fas fa-info-circle"></i> + <p id="cc_info" style="display: none;" class="explain">Bei Cc und Bcc sind jeweils mehrere Adressaten möglich. Durch Komma trennen.</p> + </td> + </tr> + <tr> + <td>Bcc</td> + <td><input type="text" style="width: 25em;" name="email_bcc" placeholder="bcc@hochschule-rhein-waal.de"></td> + </tr> + <tr> + <td>Betreff</td> + <td> + <input class="mand" style="width: 25em;" type="text" name="email_subject" placeholder="Betreff"> + <i style="cursor: pointer;" onclick="$('#betreff_info').toggle();" class="fas fa-info-circle"></i> + <p id="betreff_info" style="display: none;" class="explain">Umlaute und Emojis können nun auch im Betreff verwendet werden.</p> + </td> + </tr> +</table> + +<div style="display: inline-block; margin-left: .5em; vertical-align: top;"> + <button onclick="return sendAll();" class="medium" style="width: 12em;"><i class="fas fa-mail-bulk"></i> an alle senden</button><br /> +<? if (!isset($_SESSION['singleemail'])) { ?> + <button onclick="return sendOne();" class="medium" style="width: 12em;"><i class="fas fa-envelope"></i> an diesen senden</button> +<? } ?> + + <div style="color: darkorange; margin-top: .5em;"> +<? if (!$_SESSION['demo']) { ?> + <button class="small" style="background: orange;" onclick="$.ajaxSetup({async:false}); $.post('/db/main/demo.php'); location.reload(); return false;">Demo-Flag setzen</button><br /> +<? } ?> +<? if (!$_SESSION['demoself']) { ?> + <button class="small" style="background: orange;" onclick="$.ajaxSetup({async:false}); $.post('/db/main/demoself.php'); location.reload(); return false;">Demo-Self-Flag setzen</button><br /> +<? } ?> +<? if (!$_SESSION['singleemail']) { ?> + <button class="small" style="background: lightcoral;" onclick="$.ajaxSetup({async:false}); $.post('/db/main/singleemail.php'); location.reload(); return false;">Auf Einzel-E-Mail schalten</button><br /> +<? } ?> + + Letzter Status: + <p id="email_status"></p> + </div> +</div> + +<div style="display: inline-block; margin-left: 1em; vertical-align: top;"> + <b>Gespeicherte Templates <i style="cursor: pointer;" onclick="$('#templater_info').toggle();" class="fas fa-info-circle"></i></b> + <p id="templater_info" style="display: none;" class="explain">Nicht jedes Template funktioniert in jeder Abfrage. Manche Abfragen haben spezifische Payloads hinterlegt (z.B. Eventmanagement). Bestimmte Felder existieren z.B. auch nur in Bewerbungsdatensätzen. Daher bitte zunächst stichprobenartig durch die Vorschau-Funktion prüfen, ob die erwarteten Ergebnisse erzeugt werden.<br />Sollte der Templater von alleine aus erkennen, dass spezifische Payloads nötig sind, warnt er. Dies ist jedoch aus technischen Gründen nicht immer möglich.<br />Anhänge werden grundsätzlich <b>nicht</b> zusammen mit dem Template gespeichert und auch nicht beim Laden eines anderen Templates zurückgesetzt.</p> + + <div style="color: darkorange; margin-top: .1em;"> +<? + $sql = " +SELECT id, name, text, subject, `from`, cc, bcc, ts, tags, tid as fav +FROM email_templates +LEFT JOIN email_templates_fav ON email_templates.id = email_templates_fav.tid AND email_templates_fav.userid = ? +WHERE active = 1 +ORDER BY fav DESC, name ASC"; + $stmt = $mysqli->prepare($sql); + $stmt->bind_param('i', $_SESSION['auth_userid']); + $stmt->bind_result($id, $name, $text, $subject, $from, $cc, $bcc, $ts, $tags, $fav); + $stmt->execute(); +?> + <select id="email_template"> + <option data-id="" data-name="" data-text="" data-from="" data-cc="" data-bcc="" data-subject="" data-tags="" value="" selected></option> +<? + $templates = []; + while ($stmt->fetch()) { + $templates[$id] = ['name' => $name, 'text' => $text, 'ts' => $ts]; +?> + <option data-id="<?=$id?>" + data-name="<?=str_replace("\"", "&qout;", $name)?>" + data-from="<?=str_replace("\"", """, $from)?>" + data-cc="<?=str_replace("\"", """, $cc)?>" + data-bcc="<?=str_replace("\"", """, $bcc)?>" + data-subject="<?=str_replace("\"", """, $subject)?>" + data-text="<?=str_replace("\"", """, $text)?>" + data-tags="<?=str_replace("\"", """, $tags)?>" + value="<?=$id?>"><?=$fav?'★ ':''?><?=$name?> (ID <?=$id?>; <?=$ts?>)</option> +<? + } +?> + </select> + <div style="display: block; margin-top: .2em;"> + <button class="small" onclick="return loadEmailTemplate();"><i class="fas fa-upload"></i> Laden</button> + <button class="small" onclick="return saveEmailTemplate();" style="background: orange"><i class="fas fa-download"></i> Überschreiben</button> + <button class="small" onclick="return newEmailTemplate();"><i class="far fa-file"></i> Neu</button> + <button class="small" onclick="return renameEmailTemplate();"><i class="fas fa-pencil-alt"></i> Umbenennen</button> + <button class="small" onclick="return delEmailTemplate();" style="background: red;"><i class="fas fa-trash"></i> Löschen</button> + </div> + <label style="font-family: monospace;" for="etfiltertags">Filter Tags</label> <input id="etfiltertags" name="etfiltertags" placeholder="Tags" /><br /> + <label style="font-family: monospace;" for="etfiltername">Filter Name</label> <input id="etfiltername" name="etfiltername" placeholder="Name" /><br /> + <label style="font-family: monospace;" for="etfilterid">Filter ID </label> <input id="etfilterid" name="etfilterid" placeholder="ID" /><br /> + <a id="manageets" href="/db/templates/emails/">Templates verwalten</a> + <a id="manageet" style="display: none;" href=""></a><br /> + <div id="email_template_warnings" style="display: block; margin-top: .2em;"> + </div> +<? + $stmt->reset(); +?> + + </div> +</div> + +<div id="attachments" style="display: inline-block; margin-left: 0; vertical-align: top;"> + <b>Anhänge</b> + <small>(PDF, Word*, Excel*, PowerPoint*, JPG, PNG, ZIP)</small> + <i style="cursor: pointer;" onclick="$('#office_info').toggle();" class="fas fa-info-circle"></i> + <p id="office_info" style="display: none;" class="explain"> + Office-Formate kommen ggf. nicht durch Firewalls und serverseitig installierte Spamfilter. Wenn möglich PDF verwenden.<br /> + Anhänge müssen zuvor im dafür vorgesehenen Ordner im CMS hochgeladen werden. + </p> + +<? + for ($i = 1; $i < 13; $i++) { +?> + <div style="clear: both;"></div> +<? + $sql = " +SELECT hash, name, mime +FROM pages_files +WHERE +( + mime='application/pdf' + OR mime='image/jpeg' + OR mime='image/png' + OR mime='application/vnd.openxmlformats-officedocument.wordprocessingml.document' OR mime='application/msword' + OR mime='application/vnd.ms-excel' OR mime='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' + OR mime='application/vnd.ms-powerpoint' OR mime='application/vnd.openxmlformats-officedocument.presentationml.presentation' + OR mime='application/zip' +) + AND sid=4 +ORDER BY name +"; + $stmt = $mysqli->prepare($sql); + $stmt->bind_result($fid, $fname, $fmime); + $stmt->execute(); +?> + <select class="attachment" id="attachment<?=$i?>" <? if ($i != 1) { ?> style="display: none;" <? } ?>> + <option value="" selected></option> +<? + while ($stmt->fetch()) { +?> + <option value="<?=$fid?>" data-mime="<?=$fmime?>"><?=$fname?></option> +<? + } + $stmt->reset(); + + $sql = "SELECT name, description FROM pdf_documents ORDER BY name"; + $stmt = $mysqli->prepare($sql); + $stmt->bind_result($fname, $fdesc); + $stmt->execute(); + while ($stmt->fetch()) { +?> + <option value="~<?=$fname?>" data-mime="application/pdf">~PDF: <?=$fname?> (<?=$fdesc?>)</option> +<? + } + $stmt->reset(); +?> + </select> +<? + } +?> +</div> + +<script> +<? minStart(); ?> + +$('#email_template').on('change', function () { + $('#email_template').css('background', 'white'); +}); + +$('select.attachment').on('change', function () { + if ($(this).val() == '') + $(this).nextAll('select.attachment').val('').hide(); + else + $(this).nextAll('select.attachment').first().show(); +}); + +$(document).ready(function () { + quill.on('text-change', function () { + $('#email_template').css('background', 'lightgrey'); + }); + + setTimeout(function () { + var tid = localStorage.getItem('email_template'); + if (tid !== '' && tid > 0) { + $('select#email_template').val(tid); + localStorage.removeItem('email_template'); + setTimeout(function () { + loadEmailTemplate(); + }, 100); + } + }, 200); +}); + +function newEmailTemplate() { + var n = prompt('Name des neuen Templates:', ''); + if (!n) return; + + var text = $("#editor .ql-editor").html(); + var from = $('input[name=email_from]').val(); + var cc = $('input[name=email_cc]').val(); + var bcc = $('input[name=email_bcc]').val(); + var subject = $('input[name=email_subject').val(); + + $.ajaxSetup({async:false}); + var tid = 0; + $.post('/db/main/addtemplate.php', { + 'name': n, + 'text': text, + 'from': from, + 'cc': cc, + 'bcc': bcc, + 'subject': escape(subject), + 'email': true + }, function (rv) { tid = rv; }); + + localStorage.setItem('email_template', tid); + alert(unescape('Neues Template ID ' + tid + ' mit den aktuellen Werten wurde erzeugt.\r\n\r\nDie Seite lädt nun neu.')); + location.reload(); +} + +function renameEmailTemplate() { + var id = $('#email_template :selected').attr('data-id'); + var on = $('#email_template :selected').attr('data-name'); + var n = prompt('Name des Templates:', on); + if (!n) return; + + $.ajaxSetup({async:false}); + $.post('/db/main/rentemplate.php', { + 'id': id, + 'name': n, + 'email': true + }); + + $('#email_template :selected').attr('data-name', n); + $('#email_template :selected').text(n + ' (ID ' + id + ')'); +} + +function delEmailTemplate() { + var id = $('#email_template').val(); + var v = $('#email_template :selected').text(); + if (!v) return; + + if (confirm(unescape('Wirklich Template\n "' + v + '"\nunwiderruflich verwerfen?'))) { + $.ajaxSetup({async:false}); + $.post('/db/main/deltemplate.php', { + 'id': id, + 'email': true + }); + $('#email_template :selected').remove(); + $('#email_template').css('background', 'red'); + $('#manageet').hide(); + } +} + +function loadEmailTemplate() { + var text = $('#email_template :selected').attr('data-text'); + + $("#editor .ql-editor")[0].innerHTML = $('#email_template :selected').attr('data-text'); + $("#editor .ql-editor").html($('#email_template :selected').attr('data-text').replace(/<br>/g, '<br>\n')); + $('input[name=email_from]').val($('#email_template :selected').attr('data-from')); + $('input[name=email_cc]').val($('#email_template :selected').attr('data-cc')); + $('input[name=email_bcc]').val($('#email_template :selected').attr('data-bcc')); + $('input[name=email_subject]').val(unescape($('#email_template :selected').attr('data-subject'))); + + setTimeout(function () { + $('#email_template').css('background', 'lightgreen'); + }, 200); + + var w = ""; + if (text.match(/{{[^}]*event/)) { + w += "Template enthaelt Auszeichnungen fuer Events. Abfrage aus dem Eventmanagement noetig.<br />"; + } + if (text.match(/{{[^}]*stiplist/)) { + w += "Template enthaelt Auszeichnungen fuer Stipendiatenliste. Spezieller Payload noetig.<br />"; + } + if (text.match(/{{[^}]*stipvergabe/)) { + w += "Template enthaelt Auszeichnungen fuer Stipvergabe. Spezieller Payload noetig.<br />"; + } + if (text.match(/{{[^}]*my/)) { + w += "Template enthaelt Auszeichnungen fuer pers. Bereich. Abfrage aus Bewerbungen oder Stipendien noetig.<br />"; + } + if (text.match(/{{[^}]*mylue/)) { + w += "Template enthaelt Auszeichnungen fuer LUe. Abfrage aus Leistungsueberpruefung noetig. Abfrage aus Stipendien generiert falsche URL.<br />"; + } + if (text.match(/{{[^}]*eventlist/)) { + w += "Template enthaelt Auszeichnungen fuer Ideelle Foerderung. Kombinationsabfrage aus mehreren Events noetig.<br />"; + } + if (text.match(/{{[^}]*d\['s2'\]/) || text.match(/{{[^}]*d\.s2/)) { + w += "Template enthaelt Auszeichnungen fuer Bewerbungsdatensaetze. Abfrage aus Bewerbung noetig.<br />"; + } + if (text.match(/{{[^}]*ip /)) { + w += "Template verweist auf einen Independent Payload. Spezielle Abfrage noetig.<br />"; + } + if (text.match(/{{[^}]*filter/)) { + w += "Template enthaelt Filteranweisungen. Sehr wahrscheinlich spezielle Abfrage noetig.<br />"; + } + if (text.match(/┌/)) { + w += "Template enthaelt rekursives Templating. Mit an Sicherheit grenzender Wahrscheinlichkeit spezielle Abfrage noetig.<br />"; + } + $('#email_template_warnings').html(w); + + $('#manageet').attr('href', '/db/templates/email/' + $('#email_template :selected').attr('data-id')).html('ID ' + $('#email_template :selected').attr('data-id') + ' verwalten').show(); +} + +function saveEmailTemplate() { + var text = $("#editor .ql-editor").html(); + var from = $('input[name=email_from]').val(); + var cc = $('input[name=email_cc]').val(); + var bcc = $('input[name=email_bcc]').val(); + var subject = $('input[name=email_subject').val(); + var id = $('#email_template').val(); + + $('#email_template :selected').attr('data-text', text); + $('#email_template :selected').attr('data-from', from); + $('#email_template :selected').attr('data-cc', cc); + $('#email_template :selected').attr('data-bcc', bcc); + $('#email_template :selected').attr('data-subject', escape(subject)); + $('#email_template :selected').text($('#email_template :selected').attr('data-name') + ' (ID ' + $('#email_template :selected').attr('data-id') + ')'); + + $.ajaxSetup({async:false}); + $.post('/db/main/updtemplate.php', { + 'id': id, + 'text': text, + 'from': from, + 'cc': cc, + 'bcc': bcc, + 'subject': escape(subject), + 'email': true + }); + + setTimeout(function () { + $('#email_template').css('background', 'lightgreen'); + $('#manageet').attr('href', '/db/templates/email/' + $('#email_template :selected').attr('data-id')).html('ID ' + $('#email_template :selected').attr('data-id') + ' verwalten').show(); + }, 200); +} + +<? minEnd(); ?> +</script> + +<? +$sql = $_POST['sql']; +$post_sql = $_POST['postsql']; +$payload_sql = $_POST['payload_sql']; +$payload_sql_order = $_POST['payload_sql_order']; +$independent_payload_sql = $_POST['independent_payload_sql']; +$independent_payload_sql_order = $_POST['independent_payload_sql_order']; +$isemail = true; +require_once __DIR__ . "/templater_common.php"; +?> + +<script> +<? minStart(); ?> + +function sendOne(skip) { + if (typeof skip !== 'boolean') + skip = false; + + if (typeof pivot.__skip !== 'undefined') { + if (pivot.__skip) { + delete pivot.__done; + delete pivot.__failed; + data[pivot.index].__skip = true; + redoRows($("tr[data-id='" + pivot.uid + "']")[0], 0, 0, 0, pivot.index); + redoRows($("tr[data-id='" + pivot.ID + "']")[0], 0, 0, 0, pivot.index); + redoRows($("tr[data-id='" + pivot.id + "']")[0], 0, 0, 0, pivot.index); + return true; + } + } + + if (typeof pivot.__done !== 'undefined') { + if (!confirm(unescape('An diese Adresse wurde schon gesendet. Nochmal senden?'))) + return; + } + + var from = $('input[name=email_from]').val(); + var to = $('input[name=email_to]').val(); + var cc = $('input[name=email_cc]').val(); + var bcc = $('input[name=email_bcc]').val(); + var subject = $('input[name=email_subject]').val(); + var html = $('#preview').html(); + if ($('textarea.htmlcontainer').val().length > 10) { + html = $('textarea.htmlcontainer').val(); + } + + var persid = null; + var stipid = null; + var uid = null; + + if (typeof pivot.ID !== 'undefined') persid = pivot.ID; + if (typeof pivot.id !== 'undefined') persid = pivot.id; + if (typeof pivot.PersID !== 'undefined') persid = pivot.PersID; + if (typeof pivot.persid !== 'undefined') persid = pivot.persid; + if (typeof pivot.StipID !== 'undefined') stipid = pivot.StipID; + if (typeof pivot.stipid !== 'undefined') stipid = pivot.stipid; + if (typeof pivot.UID !== 'undefined') uid = pivot.UID; + if (typeof pivot.uid !== 'undefined') uid = pivot.uid; + + var attachments = []; + $('#attachments select.attachment :selected').each(function () { + if (!$(this).val()) return; + if ($(this).val().charAt(0) === '~') { + attachments.push('~' + uid + '_/' + $(this).val().substring(1) + '.pdf'); + } else { + attachments.push($(this).val()); + } + }); + var attachments_fn = []; + $('#attachments select.attachment :selected').each(function () { if (!$(this).text()) return; attachments_fn.push($(this).text()); }); + var attachments_mime = []; + $('#attachments select.attachment :selected').each(function () { if (!$(this).attr('data-mime')) return; attachments_mime.push($(this).attr('data-mime')); }); + + var noerror = false; + var response = ""; + $.ajaxSetup({async:false}); + $.ajax({ + type: 'POST', + url: '/db/main/sendmail.php', + data: { + 'from': from, + 'to': to, + 'cc': cc, + 'bcc' : bcc, + 'html' : html, + 'subject': subject, + 'persid': persid, + 'stipid': stipid, + 'uid': uid, + 'attachments': attachments, + 'attachments_fn': attachments_fn, + 'attachments_mime': attachments_mime + }, + success: function (d, s, x) { + if (d == 1) { + noerror = true; + response = x.responseText; + } + if (d == 2) { + response = "Gewählter Anhang nicht auffindbar."; + } + if (d == 3) { + response = "Es gibt einen Personeneintrag mit der E-Mail-Adresse (alle Felder), in dem 'wünscht keine E-Mails' gesetzt ist."; + } + } + }); + + if (noerror && response == '1') { + pivot.__done = true; + delete pivot.__failed; + + redoRows($("tr[data-id='" + pivot.uid + "']")[0], 0, 0, 0, pivot.index); + redoRows($("tr[data-id='" + pivot.ID + "']")[0], 0, 0, 0, pivot.index); + redoRows($("tr[data-id='" + pivot.id + "']")[0], 0, 0, 0, pivot.index); + + if (!skip) alert('E-Mail an ' + to + ' erfolgreich gesendet.'); + + $('#email_status').html('[#' + (count_s + count_f + 1) + '] E-Mail erfolgreich: ' + to); + return true; + } + + pivot.__failed = true; + delete pivot.__done; + + redoRows($("tr[data-id='" + pivot.uid + "']")[0], 0, 0, 0, pivot.index); + redoRows($("tr[data-id='" + pivot.ID + "']")[0], 0, 0, 0, pivot.index); + redoRows($("tr[data-id='" + pivot.id + "']")[0], 0, 0, 0, pivot.index); + + alert('Fehler beim Senden an ' + to + ': ' + response); + $('#email_status').html('Fehler: ' + to); + return false; +} + +function waitASec(time) { + $.ajaxSetup({async:false}); + $.post('/db/main/delay.php', { + time: time + }); +} + +function sendAllDone() { + $('#email_modal').hide(); + window.scrollTo(0, 0); + alert(unescape('Fertig. Erfolg für ' + count_s + ' Empfänger.\nFehlgeschlagen bei ' + count_f + '.')); + $('#email_status').html('Erfolg: ' + count_s + ', Fehler: ' + count_f); +} + +function sendAllLoop() { + if (typeof window.emergencyOff !== 'undefined') { + sendAllDone(); + delete window.emergencyOff; + return; + } + + if (typeof pivot.__done === 'undefined') { + $('#email_status').html('Sende an: ' + pivot['email']); + + if (sendOne(true)) count_s++; + else count_f++; + + pivot_iter++; + if (pivot_iter < data.length) { + pivot = data[pivot_iter]; + bP(); + setTimeout(sendAllLoop, 60); + return; + } + + setTimeout(sendAllDone, 60); + return; + } + + pivot_iter++; + if (pivot_iter < data.length) { + pivot = data[pivot_iter]; + bP(); + setTimeout(sendAllLoop, 10); + return; + } + + setTimeout(sendAllDone, 80); + return; +} + +function sendAll() { + if (!confirm(unescape('Wirklich E-Mail an ' + $.grep(data, function (e) { return (typeof e.__done === 'undefined'); }).length + ' Empfänger senden?'))) + return; + + count_s = 0; + count_f = 0; + pivot = data[0]; + pivot_iter = 0; + bP(); + + window.scrollTo(0, 0); + $('#email_modal').show(); + setTimeout(sendAllLoop, 100); +} + +function abortAll() { + window.emergencyOff = true; +} + + +function etFilter() { + $('#email_template option').removeAttr('selected'); + $('#email_template option').prop('selected', false); + + t = $('#etfiltertags').val(); + t = t.trim(); + t.replace(/\s+/g, ' '); + + n = $('#etfiltername').val(); + n = n.trim(); + + id = $('#etfilterid').val(); + id = id.trim(); + + $('#email_template option').each(function (i, o) { + var show = true; + var it = $(this); + + t.split(' ').forEach(function (e) { + if (!it.attr('data-tags').toLowerCase().includes(e.toLowerCase())) { + show = false; + } + }); + + if (n && n.length > 0) { + if (!$(this).attr('data-name').toLowerCase().includes(n.toLowerCase())) { + show = false; + } + } + + if (parseInt(id) > 0) { + if ($(this).attr('data-id') != id) { + show = false; + } + } + + if (show) { + $(this).show(); + } else { + $(this).hide(); + } + }); +} + +$(document).ready(function () { + $('#etfiltertags').on('change input keyup', function (e) { + etFilter(); + }); + $('#etfiltername').on('change input keyup', function (e) { + etFilter(); + }); + $('#etfilterid').on('change input keyup', function (e) { + etFilter(); + }); +}); + +<? minEnd(); ?> +</script> + +<? +include_once __DIR__ . "/footer.php"; +?> |
