diff --git a/cis/private/lehre/pruefung/pruefung.js.php b/cis/private/lehre/pruefung/pruefung.js.php index f2fc2dc7e..73b808d14 100644 --- a/cis/private/lehre/pruefung/pruefung.js.php +++ b/cis/private/lehre/pruefung/pruefung.js.php @@ -863,7 +863,8 @@ function writeAnmeldungen(data, showMessage = true) }); liste += ""; $("#anmeldung_hinzufuegen").html("' onclick='saveAnmeldung(\""+lehrveranstaltung_id+"\",\""+terminId+"\");'/>"); - $("#reihungSpeichernButton").html("' onclick='saveReihung(\""+terminId+"\", \""+lehrveranstaltung_id+"\");'>' onclick='alleBestaetigen(\""+terminId+"\", \""+lehrveranstaltung_id+"\");'>"); + $("#reihungSpeichernButton").html("E-Mail: " + + "' onclick='saveReihung(\""+terminId+"\", \""+lehrveranstaltung_id+"\");'>' 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("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 += ` - + ${e.studiengang} ${e.bezeichnung} ${vonDate} diff --git a/cis/private/lehre/pruefung/pruefungsanmeldung.json.php b/cis/private/lehre/pruefung/pruefungsanmeldung.json.php index 54c064d14..c286f666e 100644 --- a/cis/private/lehre/pruefung/pruefungsanmeldung.json.php +++ b/cis/private/lehre/pruefung/pruefungsanmeldung.json.php @@ -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").""; - $html .= $p->t('pruefung/anmeldungErfolgreich')." ".$ort->bezeichnung.""; + $html .= $p->t('pruefung/anmeldungErfolgreich')." ".$ortbezeichnung.""; $html .= ""; $html .= "".$p->t('pruefung/emailBodyLinkZurAnmeldung').""; $html .= ""; + $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 .= " + + + UID + + + "; + + foreach($mail_benutzer as $benutzer) + { + $html .= " + " . htmlspecialchars($benutzer['uid']) . " + "; + } + $html .= ""; + + $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").""; - $html .= $p->t('pruefung/anmeldungErfolgreich')." ".$ort->bezeichnung.""; + $html .= $p->t('pruefung/anmeldungErfolgreich')." ".$ortbezeichnung.""; $html .= ""; $html .= "".$p->t('pruefung/emailBodyLinkZurAnmeldung').""; $html .= ""; @@ -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) diff --git a/cis/private/lehre/pruefung/pruefungsanmeldungen_verwalten.php b/cis/private/lehre/pruefung/pruefungsanmeldungen_verwalten.php index dd38950b1..653d29c02 100644 --- a/cis/private/lehre/pruefung/pruefungsanmeldungen_verwalten.php +++ b/cis/private/lehre/pruefung/pruefungsanmeldungen_verwalten.php @@ -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' } + } + }); }); diff --git a/locale/de-AT/pruefung.php b/locale/de-AT/pruefung.php index 9e75fa89e..fbfb66b8f 100644 --- a/locale/de-AT/pruefung.php +++ b/locale/de-AT/pruefung.php @@ -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. '; +$this->phrasen['pruefung/sammelemailBody2'] = 'Ort: %s'; +$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'; diff --git a/locale/en-US/pruefung.php b/locale/en-US/pruefung.php index 7b0cec97e..59d9953ca 100644 --- a/locale/en-US/pruefung.php +++ b/locale/en-US/pruefung.php @@ -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. '; +$this->phrasen['pruefung/sammelemailBody2'] = 'Place: %s'; +$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';