pruefung bestaetigen bestaetigungsmail schicken ermoeglicht

This commit is contained in:
ma0048
2025-08-26 11:41:10 +02:00
parent eb8c3213df
commit e79b7a525f
5 changed files with 145 additions and 28 deletions
+46 -12
View File
@@ -863,7 +863,8 @@ function writeAnmeldungen(data, showMessage = true)
});
liste += "</ul>";
$("#anmeldung_hinzufuegen").html("<input id='anmeldung_hinzufuegen_uid' type='text' placeholder='StudentIn-UID' /><input type='button' value='<?php echo $p->t('global/hinzufuegen'); ?>' onclick='saveAnmeldung(\""+lehrveranstaltung_id+"\",\""+terminId+"\");'/>");
$("#reihungSpeichernButton").html("<input type='button' value='<?php echo $p->t('pruefung/reihungSpeichern'); ?>' onclick='saveReihung(\""+terminId+"\", \""+lehrveranstaltung_id+"\");'><input type='button' value='<?php echo $p->t('pruefung/alleBestaetigen'); ?>' onclick='alleBestaetigen(\""+terminId+"\", \""+lehrveranstaltung_id+"\");'>");
$("#reihungSpeichernButton").html("<label for='emails'>E-Mail: <input type='email' id='emails' multiple /> <br /><br />" +
"<input type='button' value='<?php echo $p->t('pruefung/reihungSpeichern'); ?>' onclick='saveReihung(\""+terminId+"\", \""+lehrveranstaltung_id+"\");'><input type='button' value='<?php echo $p->t('pruefung/alleBestaetigen'); ?>' onclick='alleBestaetigen(\""+terminId+"\", \""+lehrveranstaltung_id+"\");'>");
$("#lvdaten").html(lv_bezeichnung+" ("+prf_termin+")");
$("#anmeldeDaten").html(liste);
$("#listeDrucken").html(listenLinks);
@@ -1036,6 +1037,30 @@ function anmeldungLoeschen(pruefungsanmeldung_id, termin_id, lehrveranstaltung_i
*/
function alleBestaetigen(termin_id, lehrveranstaltung_id)
{
const input = $('#emails').val();
let emails = '';
if (input)
{
emails = input.split(",").map(s => s.trim());
const re = /^([\w-+]+(?:\.[\w-+]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,63}(?:\.[a-z]{2})?)$/i;
let valid = true;
$.each(emails, function(index, email)
{
if (re.test(email) === false)
{
alert("<?php echo $p->t('pruefung/bitteEmailAngeben')?>");
valid = false;
return false;
}
});
if (!valid)
return false;
}
$.ajax({
dataType: 'json',
url: "./pruefungsanmeldung.json.php",
@@ -1043,7 +1068,8 @@ function alleBestaetigen(termin_id, lehrveranstaltung_id)
data: {
method: "alleBestaetigen",
termin_id: termin_id,
lehrveranstaltung_id: lehrveranstaltung_id
lehrveranstaltung_id: lehrveranstaltung_id,
emails: emails
},
error: loadError,
success: function(data){
@@ -1115,15 +1141,12 @@ function loadStudiengaenge()
}
/**
* Lädt alle Prüfungen zu einem Studiengang
* @param {type} studiengang_kz Studiengangskennzahl
* Lädt alle Prüfungen zu einem Studiensemester
* @param {type} studiensemester Studiensemester
* @returns {undefined}
*/
function loadPruefungStudiengang(studiengang_kz, studiensemester)
function loadPruefungStudiengang(studiensemester)
{
if(studiengang_kz === undefined)
studiengang_kz = $("#select_studiengang option:selected").val();
if(studiensemester === undefined)
studiensemester = $("#filter_studiensemester option:selected").val();
@@ -1132,8 +1155,7 @@ function loadPruefungStudiengang(studiengang_kz, studiensemester)
url: "./pruefungsanmeldung.json.php",
type: "POST",
data: {
method: "getPruefungenStudiengang",
studiengang_kz: studiengang_kz,
method: "getPruefungenStudiensemester",
studiensemester: studiensemester
},
error: loadError,
@@ -1148,7 +1170,14 @@ function loadPruefungStudiengang(studiengang_kz, studiensemester)
data.result.forEach(function(e)
{
let termine = e?.pruefung[0]?.termine || [];
let termine = [];
if (e.pruefung) {
e.pruefung.forEach(p => {
if (p.termine) {
termine = termine.concat(p.termine);
}
});
}
if (termine.length === 0)
{
@@ -1169,7 +1198,12 @@ function loadPruefungStudiengang(studiengang_kz, studiensemester)
rows += `
<tr>
<td><input type="checkbox" /></td>
<td><input type="checkbox"
class="termin-checkbox"
data-termin-id="${d.pruefungstermin_id}"
data-lv-id="${e.lehrveranstaltung_id}"
data-datum="${vonDate}"
/></td>
<td>${e.studiengang}</td>
<td>${e.bezeichnung}</td>
<td>${vonDate}</td>
@@ -106,7 +106,7 @@ switch($method)
case 'getStudiengaenge':
$data = getStudiengaenge();
break;
case 'getPruefungenStudiengang':
case 'getPruefungenStudiensemester':
$studiensemester = filter_input(INPUT_POST,"studiensemester");
$data = getPruefungenStudiengangBySemester($studiensemester);
break;
@@ -966,9 +966,13 @@ function alleBestaetigen($uid)
global $p;
$lehrveranstaltung_id = $_REQUEST["lehrveranstaltung_id"];
$pruefungstermin_id = $_REQUEST["termin_id"];
$emails = $_REQUEST["emails"];
$pruefungstermin = new pruefungstermin($pruefungstermin_id);
$pruefungsanmeldung = new pruefungsanmeldung();
$pranmeldungen = $pruefungsanmeldung->getAnmeldungenByTermin($pruefungstermin_id, $lehrveranstaltung_id);
$mail_benutzer = [];
$mail_inhalt = [];
foreach($pranmeldungen as $a)
{
$anmeldung = new pruefungsanmeldung($a->pruefungsanmeldung_id);
@@ -982,6 +986,13 @@ function alleBestaetigen($uid)
$ma = new mitarbeiter($uid);
$datum = new datum();
$ort = new ort($termin->ort_kurzbz);
$ortbezeichnung = $ort->bezeichnung;
if (is_null($termin->ort_kurzbz) && !is_null($termin->anderer_raum))
{
$ortbezeichnung = $termin->anderer_raum;
}
$pruefung = new pruefungCis($termin->pruefung_id);
$to = $anm->uid."@".DOMAIN;
@@ -1001,17 +1012,66 @@ function alleBestaetigen($uid)
}
else
$html .= $p->t('pruefung/emailBodyTermin')." ".$datum->formatDatum($termin->von, "d.m.Y")." ".$p->t('pruefung/emailBodyUm')." ".$datum->formatDatum($termin->von, "H:i")."<br>";
$html .= $p->t('pruefung/anmeldungErfolgreich')." ".$ort->bezeichnung."<br>";
$html .= $p->t('pruefung/anmeldungErfolgreich')." ".$ortbezeichnung."<br>";
$html .= "<br>";
$html .= "<a href='".APP_ROOT."cis/private/lehre/pruefung/pruefungsanmeldung.php'>".$p->t('pruefung/emailBodyLinkZurAnmeldung')."</a><br>";
$html .= "<br>";
$mail_benutzer[] = [
'uid' => $anm->uid
];
if (empty($mail_inhalt))
{
$mail_inhalt = array(
'von' => $ma->vorname." ".$ma->nachname,
'lv' => $lv->bezeichnung,
'ort' => $ortbezeichnung,
'datum' => $datum->formatDatum($termin->von, "d.m.Y") . ' ' . $p->t('pruefung/emailBodyUm') . ' ' . (isset($von) ? $von : $datum->formatDatum($termin->von, "H:i")),
'dauer' => $pruefung->einzeln ? ($pruefung->pruefungsintervall . ' ' . $p->t('pruefung/emailBodyMinuten')): '');
}
$mail = new mail($to, $from, $subject,$p->t('pruefung/emailBodyBitteHtmlSicht'));
$mail->setHTMLContent($html);
$mail->send();
}
}
}
if (!empty($emails) && !empty($mail_inhalt))
{
foreach ($emails as $email)
{
$from = "noreply@".DOMAIN;
$subject = $p->t('pruefung/emailSubjectAnmeldungBestaetigung');
$html = $p->t('pruefung/sammelemailBody',array($mail_inhalt['lv'], $mail_inhalt['datum'], $mail_inhalt['von']));
if ($mail_inhalt['ort'])
{
$html .= $p->t('pruefung/sammelemailBody2',array($mail_inhalt['ort']));
}
$html .= "<br /><table border='1'>
<thead>
<tr>
<th>UID</th>
</tr>
</thead>
<tbody>";
foreach($mail_benutzer as $benutzer)
{
$html .= "<tr>
<td>" . htmlspecialchars($benutzer['uid']) . "</td>
</tr>";
}
$html .= "</tbody></table><br />";
$mail = new mail($email, $from, $subject, $p->t('pruefung/emailBodyBitteHtmlSicht'));
$mail->setHTMLContent($html);
$mail->send();
}
}
$data['result']=true;
$data['error']='false';
$data['errormsg']='';
@@ -1038,6 +1098,12 @@ function anmeldungBestaetigen($uid)
$ort = new ort($termin->ort_kurzbz);
$pruefung = new pruefungCis($termin->pruefung_id);
$ortbezeichnung = $ort->bezeichnung;
if (is_null($termin->ort_kurzbz) && !is_null($termin->anderer_raum))
{
$ortbezeichnung = $termin->anderer_raum;
}
$to = $anmeldung->uid."@".DOMAIN;
$from = "noreply@".DOMAIN;
$subject = $p->t('pruefung/emailSubjectAnmeldungBestaetigung');
@@ -1055,7 +1121,7 @@ function anmeldungBestaetigen($uid)
}
else
$html .= $p->t('pruefung/emailBodyTermin')." ".$datum->formatDatum($termin->von, "d.m.Y")." ".$p->t('pruefung/emailBodyUm')." ".$datum->formatDatum($termin->von, "H:i")."<br>";
$html .= $p->t('pruefung/anmeldungErfolgreich')." ".$ort->bezeichnung."<br>";
$html .= $p->t('pruefung/anmeldungErfolgreich')." ".$ortbezeichnung."<br>";
$html .= "<br>";
$html .= "<a href='".APP_ROOT."cis/private/lehre/pruefung/pruefungsanmeldung.php'>".$p->t('pruefung/emailBodyLinkZurAnmeldung')."</a><br>";
$html .= "<br>";
@@ -1178,7 +1244,7 @@ function getPruefungenStudiengangBySemester($aktStudiensemester)
$pruefungen = new pruefungCis();
$pruefungen->getPruefungByStudiensemester($aktStudiensemester);
if((!empty($pruefungen->lehrveranstaltungen)))
if(!empty($pruefungen->lehrveranstaltungen))
{
$lehrveranstaltungen = [];
foreach ($pruefungen->lehrveranstaltungen as $prf)
@@ -247,18 +247,16 @@ if (empty($pruefung->result) && !$rechte->isBerechtigt('lehre/pruefungsanmeldung
}
});
$("#table4").tablesorter(
{
widgets: ["zebra"],
headers: {
0: { sorter: false },
3: { sorter: 'shortDate',
dateFormat: 'ddmmyyyy' },
4: { sorter: 'time' },
5: { sorter: 'time' }
}
});
$("#table4").tablesorter({
widgets: ["zebra"],
headers: {
0: { sorter: false },
3: { sorter: 'shortDate',
dateFormat: 'ddmmyyyy' },
4: { sorter: 'time' },
5: { sorter: 'time' }
}
});
});
</script>
+10
View File
@@ -78,6 +78,7 @@ $this->phrasen['pruefung/unbegrenzt'] = 'unbegrenzt';
$this->phrasen['pruefung/bewertungenZu'] = 'Bewertungen zu';
$this->phrasen['pruefung/keineAuswahl'] = 'Keine Auswahl';
$this->phrasen['pruefung/alleBestaetigen'] = 'Alle bestätigen';
$this->phrasen['pruefung/bitteEmailAngeben'] = 'Bitte geben Sie eine gültige E-Mail-Adresse ein.';
// pruefungsbewertung
$this->phrasen['pruefung/pruefungsbewertungTitle'] = 'Prüfungsbewertung';
@@ -141,6 +142,15 @@ $this->phrasen['pruefung/emailBodyOrt'] = 'Ort:';
$this->phrasen['pruefung/emailBodyLinkZurAnmeldung'] = 'Link zur Anmeldung';
$this->phrasen['pruefung/emailBodyBitteHtmlSicht'] = 'Bitte sehen Sie sich die Nachricht in HTML Sicht an, um den Link vollständig darzustellen.';
// Sammelmail
$this->phrasen['pruefung/sammelemailBody'] = 'Die Anmeldungen zur Prüfung %s am %s wurde von %s bestätigt. <br />';
$this->phrasen['pruefung/sammelemailBody2'] = 'Ort: %s<br />';
$this->phrasen['pruefung/sammelemailBodyBestaetigt'] = 'Bestätigt von';
$this->phrasen['pruefung/sammelemailBodyPruefung'] = 'Prüfung';
$this->phrasen['pruefung/sammelemailBodyTermin'] = 'Termin';
$this->phrasen['pruefung/sammelemailBodyDauer'] = 'Dauer';
$this->phrasen['pruefung/emailLektorSubjectAnmeldung'] = 'Anmeldung zur Prüfung';
$this->phrasen['pruefung/emailLektorStudentIn'] = 'StudentIn';
$this->phrasen['pruefung/emailLektorHatSichZurPruefung'] = 'hat sich zur Prüfung';
+9
View File
@@ -78,6 +78,7 @@ $this->phrasen['pruefung/unbegrenzt'] = 'unlimited';
$this->phrasen['pruefung/bewertungenZu'] = 'Bewertungen zu';
$this->phrasen['pruefung/keineAuswahl'] = 'Keine Auswahl';
$this->phrasen['pruefung/alleBestaetigen'] = 'Confirm all';
$this->phrasen['pruefung/bitteEmailAngeben'] = 'Please enter a valid E-Mail Address.';
// pruefungsbewertung
$this->phrasen['pruefung/pruefungsbewertungTitle'] = 'Prüfungsbewertung';
@@ -140,6 +141,14 @@ $this->phrasen['pruefung/emailBodyOrt'] = 'Ort:';
$this->phrasen['pruefung/emailBodyLinkZurAnmeldung'] = 'Link zur Anmeldung';
$this->phrasen['pruefung/emailBodyBitteHtmlSicht'] = 'Bitte sehen Sie sich die Nachricht in HTML Sicht an, um den Link vollständig darzustellen.';
// Sammelmail
$this->phrasen['pruefung/sammelemailBody'] = 'The exam registrations for %s on %s have been confirmed by %s. <br />';
$this->phrasen['pruefung/sammelemailBody2'] = 'Place: %s<br />';
$this->phrasen['pruefung/sammelemailBodyBestaetigt'] = 'Confirmed by';
$this->phrasen['pruefung/sammelemailBodyPruefung'] = 'Exam';
$this->phrasen['pruefung/sammelemailBodyTermin'] = 'Exam date';
$this->phrasen['pruefung/sammelemailBodyDauer'] = 'Duration';
$this->phrasen['pruefung/emailLektorSubjectAnmeldung'] = 'Anmeldung zur Prüfung';
$this->phrasen['pruefung/emailLektorStudentIn'] = 'StudentIn';
$this->phrasen['pruefung/emailLektorHatSichZurPruefung'] = 'hat sich zur Prüfung';