Mailverteiler Personenliste mit Filter erweitert

In der Personenliste der Mailverteiler kann nun mit Filtern die Liste eingeschränkt werden. Diesen Personen kann man dann direkt ein Mail schreiben (mit dem eigenen Mailclient)
This commit is contained in:
Manfred Kindl
2019-01-31 16:02:18 +01:00
parent c4daf904f3
commit ca303c7c4a
2 changed files with 266 additions and 34 deletions
+142 -19
View File
@@ -50,35 +50,142 @@ echo '<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<link href="../../skin/style.css.php" rel="stylesheet" type="text/css">
<link rel="stylesheet" href="../../skin/tablesort.css" type="text/css"/>
<link rel="stylesheet" type="text/css" href="../../skin/jquery-ui-1.9.2.custom.min.css">
<script type="text/javascript" src="../../vendor/jquery/jqueryV1/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="../../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="../../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script type="text/javascript" src="../../include/js/jquery.ui.datepicker.translation.js"></script>
<script type="text/javascript" src="../../vendor/jquery/sizzle/sizzle.js"></script>
<link href="../../skin/style.css.php" rel="stylesheet" type="text/css">';
include('../../include/meta/jquery.php');
include('../../include/meta/jquery-tablesorter.php');
?>
<script src="../../vendor/rmariuzzo/jquery-checkboxes/dist/jquery.checkboxes-1.0.7.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function()
{
$("#table").tablesorter(
{
sortList: [[0,0]],
widgets: [\'zebra\'],
sortList: [[1,0]],
widgets: ["zebra", "filter", "stickyHeaders"],
headers: { 0: {sorter: false, filter: false}},
widgetOptions : {filter_saveFilters : false,
filter_functions : {
// Add select menu to this column
3 : {
"M" : function(e, n, f, i, $r, c, data) { return /M/.test(e); },
"W" : function(e, n, f, i, $r, c, data) { return /W/.test(e); }
},
4 : {
" - " : function(e, n, f, i, $r, c, data) { return /-/.test(e); },
"Ja" : function(e, n, f, i, $r, c, data) { return /Ja/.test(e); },
"Nein" : function(e, n, f, i, $r, c, data) { return /Nein/.test(e); }
}
}
}
})
// Set number of result rows after filtering
.bind("filterEnd",function(e, t)
{
var rows = $('table.hasFilters tbody tr:visible').length;
$("#rowCounter").html(rows);
});
$("#toggle").on("click", function(e)
{
$("#table").checkboxes("toggle");
e.preventDefault();
if ($("input.chkbox:checked").length > 0)
$("#mailSendButton").html('<?php echo $p->t('mailverteiler/mailAnMarkierteSenden'); ?>');
else
$("#mailSendButton").html('<?php echo $p->t('mailverteiler/mailAnAlleSenden'); ?>');
});
$("#uncheck").on("click", function(e)
{
$("#table").checkboxes("uncheck");
e.preventDefault();
if ($("input.chkbox:checked").length > 0)
$("#mailSendButton").html('<?php echo $p->t('mailverteiler/mailAnMarkierteSenden'); ?>');
else
$("#mailSendButton").html('<?php echo $p->t('mailverteiler/mailAnAlleSenden'); ?>');
});
$("#table").checkboxes("range", true);
$('.chkbox').change(function()
{
if ($("input.chkbox:checked").length > 0)
$("#mailSendButton").html('<?php echo $p->t('mailverteiler/mailAnMarkierteSenden'); ?>');
else
$("#mailSendButton").html('<?php echo $p->t('mailverteiler/mailAnAlleSenden'); ?>');
});
}
);
function SendMail()
{
// Wenn Checkboxen markiert sind, an diese senden, sonst an alle
if ($("input.chkbox:checked").length > 0)
{
var elements = $("input.chkbox:checked");
}
else
{
var elements = $("input.chkbox:visible");
}
var mailadressen = "";
var adresse = "";
var counter = 0;
// Schleife ueber die einzelnen Elemente
// Aus Spamgründen dürfen je Nachricht maximal 100 Empfänger enthalten sein
// Deshalb wird nach 100 Einträgen ein neues window.location.href erzeugt
// Außerdem darf die URL nicht länger als 2048 Zeichen sein
$.each(elements, function(index, item)
{
adresse = $(this).closest("tr").find("td.clm_email a:first").attr("href");
adresse = adresse.replace(/^mailto?:/, "") + ";";
if (counter > 0 && (counter % 100 === 0) || (mailadressen.length + adresse.length > 2048))
{
window.location.href = "mailto:?bcc="+mailadressen;
mailadressen = "";
counter = 0;
}
mailadressen += adresse;
counter ++;
});
window.location.href = "mailto:?bcc="+mailadressen;
}
</script>
<title>' . $p->t('mailverteiler/personenImVerteiler') . '</title>
<style type="text/css">
.buttongreen, a.buttongreen
{
cursor: pointer;
color: #FFFFFF;
margin: 0 5px 5px 0;
text-decoration: none;
border-radius: 3px;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
background-color: #5cb85c;
border-top: 3px solid #5cb85c;
border-bottom: 3px solid #5cb85c;
border-right: 8px solid #5cb85c;
border-left: 8px solid #5cb85c;
display: inline-block;
vertical-align: middle;
}
</style>
<?php
echo ' <title>' . $p->t('mailverteiler/personenImVerteiler') . '</title>
</head>
<body id="inhalt">';
$qry = "SELECT
uid, vorname, nachname
uid, vorname, nachname, geschlecht, fixangestellt
FROM
campus.vw_benutzer
JOIN
tbl_benutzergruppe USING (uid)
LEFT JOIN
public.tbl_mitarbeiter ON (uid = mitarbeiter_uid)
WHERE
gruppe_kurzbz=".$db->db_add_param($gruppe_kurzbz);
@@ -96,16 +203,29 @@ $qry = "SELECT
$qry .= " ORDER BY
nachname, vorname";
echo '<p>'.$p->t('mailverteiler/anleitungstextMailPersInGroup').'<p>';
echo '<a class="buttongreen" href="#" onclick="SendMail()" id="mailSendButton">' . $p->t('mailverteiler/mailAnAlleSenden') . '</a>';
if ($result = $db->db_query($qry))
{
echo '<p>' . $row = $db->db_num_rows($result) . ' ' . $p->t('mailverteiler/personen');
echo '<p><span id="rowCounter">' . $row = $db->db_num_rows($result) . '</span> ' . $p->t('mailverteiler/personen') . '</p>';
}
echo '<table class="tablesorter" id="table">
echo '
<table class="tablesorter" id="table">
<thead>
<tr>
<th style="text-align: center; width: 80px">
<nobr>
<a href="#" data-toggle="checkboxes" data-action="toggle" id="toggle" title="Alle markieren / Invertieren"><img src="../../skin/images/checkbox_toggle.png" name="toggle"></a>&nbsp;&nbsp;
<a href="#" data-toggle="checkboxes" data-action="uncheck" id="uncheck" title="Keine markieren"><img src="../../skin/images/checkbox_uncheck.png" name="toggle"></a>
</nobr>
</th>
<th>' . $p->t('global/nachname') . '</th>
<th>' . $p->t('global/vorname') . '</th>
<th>' . $p->t('global/geschlecht') . '</th>
<th>' . $p->t('global/fixangestellt') . '</th>
<th>' . $p->t('global/mail') . '</th>
</tr></thead><tbody>';
@@ -113,11 +233,14 @@ if ($result = $db->db_query($qry))
{
while ($row = $db->db_fetch_object($result))
{
echo "<tr>";
echo " <td>$row->nachname</td>";
echo " <td>$row->vorname</td>";
echo " <td><a href='mailto:$row->uid@" . DOMAIN . "' class='Item'>$row->uid@" . DOMAIN . "</a></td>";
echo "</tr>";
echo '<tr>';
echo ' <td style="text-align: center"><input type="checkbox" class="chkbox" id="checkbox_'.$row->uid.'" name="checkbox['.$row->uid.']"></td>';
echo ' <td>'.$row->nachname.'</td>';
echo ' <td>'.$row->vorname.'</td>';
echo ' <td>'.strtoupper($row->geschlecht).'</td>';
echo ' <td>'.($row->fixangestellt != '' ? ($row->fixangestellt == 't' ? 'Ja' : 'Nein') :'-').'</td>';
echo ' <td class="clm_email"><a href="mailto:'.$row->uid.'@' . DOMAIN . '" class="Item">'.$row->uid .'@' . DOMAIN . '</a></td>';
echo '</tr>';
}
}
echo '
+124 -15
View File
@@ -32,26 +32,124 @@ echo '<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<link href="../../skin/style.css.php" rel="stylesheet" type="text/css">
<link rel="stylesheet" href="../../skin/tablesort.css" type="text/css"/>
<link rel="stylesheet" type="text/css" href="../../skin/jquery-ui-1.9.2.custom.min.css">
<script type="text/javascript" src="../../vendor/jquery/jqueryV1/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="../../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
<script type="text/javascript" src="../../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script type="text/javascript" src="../../include/js/jquery.ui.datepicker.translation.js"></script>
<script type="text/javascript" src="../../vendor/jquery/sizzle/sizzle.js"></script>
<script type="text/javascript">
$(document).ready(function()
<link href="../../skin/style.css.php" rel="stylesheet" type="text/css">';
include('../../include/meta/jquery.php');
include('../../include/meta/jquery-tablesorter.php');
?>
<script type="text/javascript">
$(document).ready(function()
{
$("#table").tablesorter(
{
sortList: [[0,0]],
widgets: [\'zebra\'],
sortList: [[1,0]],
widgets: ["zebra", "filter", "stickyHeaders"],
headers: { 0: {sorter: false, filter: false}},
widgetOptions : {filter_saveFilters : false,
filter_functions : {
// Add select menu to this column
3 : {
"M" : function(e, n, f, i, $r, c, data) { return /M/.test(e); },
"W" : function(e, n, f, i, $r, c, data) { return /W/.test(e); }
}
}
}
})
// Set number of result rows after filtering
.bind("filterEnd",function(e, t)
{
var rows = $('table.hasFilters tbody tr:visible').length;
$("#rowCounter").html(rows);
});
$("#toggle").on("click", function(e)
{
$("#table").checkboxes("toggle");
e.preventDefault();
if ($("input.chkbox:checked").length > 0)
$("#mailSendButton").html('<?php echo $p->t('mailverteiler/mailAnMarkierteSenden'); ?>');
else
$("#mailSendButton").html('<?php echo $p->t('mailverteiler/mailAnAlleSenden'); ?>');
});
$("#uncheck").on("click", function(e)
{
$("#table").checkboxes("uncheck");
e.preventDefault();
if ($("input.chkbox:checked").length > 0)
$("#mailSendButton").html('<?php echo $p->t('mailverteiler/mailAnMarkierteSenden'); ?>');
else
$("#mailSendButton").html('<?php echo $p->t('mailverteiler/mailAnAlleSenden'); ?>');
});
$("#table").checkboxes("range", true);
$('.chkbox').change(function()
{
if ($("input.chkbox:checked").length > 0)
$("#mailSendButton").html('<?php echo $p->t('mailverteiler/mailAnMarkierteSenden'); ?>');
else
$("#mailSendButton").html('<?php echo $p->t('mailverteiler/mailAnAlleSenden'); ?>');
});
}
);
function SendMail()
{
// Wenn Checkboxen markiert sind, an diese senden, sonst an alle
if ($("input.chkbox:checked").length > 0)
{
var elements = $("input.chkbox:checked");
}
else
{
var elements = $("input.chkbox:visible");
}
var mailadressen = "";
var adresse = "";
var counter = 0;
// Schleife ueber die einzelnen Elemente
// Aus Spamgründen dürfen je Nachricht maximal 100 Empfänger enthalten sein
// Deshalb wird nach 100 Einträgen ein neues window.location.href erzeugt
// Außerdem darf die URL nicht länger als 2048 Zeichen sein
$.each(elements, function(index, item)
{
adresse = $(this).closest("tr").find("td.clm_email a:first").attr("href");
adresse = adresse.replace(/^mailto?:/, "") + ";";
if (counter > 0 && (counter % 100 === 0) || (mailadressen.length + adresse.length > 2048))
{
window.location.href = "mailto:?bcc="+mailadressen;
mailadressen = "";
counter = 0;
}
mailadressen += adresse;
counter ++;
});
window.location.href = "mailto:?bcc="+mailadressen;
}
</script>
<style type="text/css">
.buttongreen, a.buttongreen
{
cursor: pointer;
color: #FFFFFF;
margin: 0 5px 5px 0;
text-decoration: none;
border-radius: 3px;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
background-color: #5cb85c;
border-top: 3px solid #5cb85c;
border-bottom: 3px solid #5cb85c;
border-right: 8px solid #5cb85c;
border-left: 8px solid #5cb85c;
display: inline-block;
vertical-align: middle;
}
</style>
</head>
<?php echo '
<title>'.$p->t('mailverteiler/personenImVerteiler').'</title>
<body>';
@@ -64,7 +162,7 @@ if (!isset($_GET['kz']))
if (isset($_GET['all']))
{
$qry = "SELECT
vorname, nachname, uid
vorname, nachname, uid, geschlecht
FROM
campus.vw_student
WHERE
@@ -95,16 +193,25 @@ else
$qry.= ' ORDER BY nachname, vorname';
}
echo '<p>'.$p->t('mailverteiler/anleitungstextMailPersInGroup').'<p>';
echo '<a class="buttongreen" href="#" onclick="SendMail()" id="mailSendButton">' . $p->t('mailverteiler/mailAnAlleSenden') . '</a>';
if ($result = $db->db_query($qry))
{
echo '<p>'.$row=$db->db_num_rows($result).' '.$p->t('mailverteiler/personen');
echo '<p><span id="rowCounter">'.$row=$db->db_num_rows($result).'</span> '.$p->t('mailverteiler/personen').'</p>';
}
echo '
<table class="tablesorter" id="table">
<thead>
<tr>
<th style="text-align: center; width: 80px">
<nobr>
<a href="#" data-toggle="checkboxes" data-action="toggle" id="toggle" title="Alle markieren / Invertieren"><img src="../../skin/images/checkbox_toggle.png" name="toggle"></a>&nbsp;&nbsp;
<a href="#" data-toggle="checkboxes" data-action="uncheck" id="uncheck" title="Keine markieren"><img src="../../skin/images/checkbox_uncheck.png" name="toggle"></a>
</nobr>
</th>
<th>'.$p->t('global/nachname').'</th>
<th>'.$p->t('global/vorname').'</th>
<th>' . $p->t('global/geschlecht') . '</th>
<th>'.$p->t('global/mail').'</th>
</tr>
</thead><tbody>';
@@ -114,9 +221,11 @@ if ($result = $db->db_query($qry))
while ($row = $db->db_fetch_object($result))
{
echo "<tr>";
echo ' <td style="text-align: center"><input type="checkbox" class="chkbox" id="checkbox_'.$row->uid.'" name="checkbox['.$row->uid.']"></td>';
echo " <td>$row->nachname</td>";
echo " <td>$row->vorname</td>";
echo " <td><a href='mailto:$row->uid@".DOMAIN."' class='Item'>$row->uid@".DOMAIN."</a></td>";
echo ' <td>'.strtoupper($row->geschlecht).'</td>';
echo ' <td class="clm_email"><a href="mailto:'.$row->uid.'@' . DOMAIN . '" class="Item">'.$row->uid .'@' . DOMAIN . '</a></td>';
echo "</tr>";
}
}