From 0bc1a6b9d38a3daa7b1fdcb8e6682a137330e9c4 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Thu, 29 Jan 2026 11:24:49 +0100 Subject: [PATCH] ku pruefungen - min/max teilnehmer editierbar - stornierte pruefungen vom kollisionscheck ausgeschlossen - delete von GET auf POST umgestellt - lektor kann studierende auch bei bestehender kollision zuweisen --- cis/private/lehre/pruefung/pruefung.js.php | 15 +++- .../pruefung/pruefungsanmeldung.json.php | 28 ++++++-- .../pruefung/pruefungsfenster_anlegen.php | 70 ++++++++++--------- .../lehre/pruefung/pruefungstermin.json.php | 2 +- .../pruefung/pruefungstermin_aendern.php | 35 +++++++--- include/pruefungCis.class.php | 17 +++-- locale/de-AT/pruefung.php | 1 + locale/en-US/pruefung.php | 1 + 8 files changed, 114 insertions(+), 55 deletions(-) diff --git a/cis/private/lehre/pruefung/pruefung.js.php b/cis/private/lehre/pruefung/pruefung.js.php index ea4c1eff0..4f6a6fd70 100644 --- a/cis/private/lehre/pruefung/pruefung.js.php +++ b/cis/private/lehre/pruefung/pruefung.js.php @@ -565,7 +565,7 @@ function openDialog(lehrveranstaltung_id, termin_id, lvBezeichnung, terminVon, t * @param {type} termin_id ID des Prüfungstermines * @returns {undefined} */ -function saveAnmeldung(lehrveranstaltung_id, termin_id) +function saveAnmeldung(lehrveranstaltung_id, termin_id, force = false) { var uid = $("#anmeldung_hinzufuegen_uid").val(); if(lehrveranstaltung_id === undefined) @@ -602,10 +602,21 @@ function saveAnmeldung(lehrveranstaltung_id, termin_id) uid: uid, studienverpflichtung_id: studienverpflichtung_id, studiengang_kz: studiengang_kz, - ects: ects + ects: ects, + force: force }, error: loadError, success: function(data){ + + if (data?.confirm === 'true') + { + if (confirm(data.errormsg)) + { + saveAnmeldung(lehrveranstaltung_id, termin_id, true); + } + return; + } + if(data.error === 'false') { messageBox("message", data.result, "green", "highlight", 10000); diff --git a/cis/private/lehre/pruefung/pruefungsanmeldung.json.php b/cis/private/lehre/pruefung/pruefungsanmeldung.json.php index e4f17860a..2b07bf9d5 100644 --- a/cis/private/lehre/pruefung/pruefungsanmeldung.json.php +++ b/cis/private/lehre/pruefung/pruefungsanmeldung.json.php @@ -394,7 +394,7 @@ function loadTermine() */ function saveAnmeldung($aktStudiensemester = null, $uid = null) { - global $p; + global $p, $rechte; $termin = new pruefungstermin($_REQUEST["termin_id"]); $pruefung = new pruefung(); $lehrveranstaltung = new lehrveranstaltung($_REQUEST["lehrveranstaltung_id"]); @@ -404,6 +404,7 @@ function saveAnmeldung($aktStudiensemester = null, $uid = null) $studienverpflichtung_id = filter_input(INPUT_POST, "studienverpflichtung_id"); $studiengang_kz = filter_input(INPUT_POST, "studiengang_kz"); $ects = filter_input(INPUT_POST, "ects"); + $force = filter_input(INPUT_POST, "force", FILTER_VALIDATE_BOOLEAN); //Defaulteinstellung für Anzahlprüfungsversuche (wird durch Addon "ktu" überschrieben) $maxAnzahlVersuche = 0; @@ -557,11 +558,28 @@ function saveAnmeldung($aktStudiensemester = null, $uid = null) $ects_verwendet += $lehrveranstaltung->ects; $datum = new datum(); - if(($datum->between($termin->von, $termin->bis, $temp->von)) || ($datum->between($termin->von, $termin->bis, $temp->bis))) + + $kollision = ($datum->between($termin->von, $termin->bis, $temp->von)) || ($datum->between($termin->von, $termin->bis, $temp->bis)); + if ($kollision) { - $data['result'][$temp->pruefungstermin_id] = "true"; - $data['error'] = 'true'; - $data['errormsg'] = $p->t('pruefung/kollisionMitAndererAnmeldung'); + $is_berechtigt = $rechte->isBerechtigt('lehre/pruefungsanmeldungAdmin'); + + if ($is_berechtigt) + { + if (!$force) + { + $data['result'][$temp->pruefungstermin_id] = "true"; + $data['error'] = 'true'; + $data['confirm'] = 'true'; + $data['errormsg'] = $p->t('pruefung/kollisionMitAndererAnmeldungForce'); + } + } + else + { + $data['result'][$temp->pruefungstermin_id] = "true"; + $data['error'] = 'true'; + $data['errormsg'] = $p->t('pruefung/kollisionMitAndererAnmeldung'); + } } } diff --git a/cis/private/lehre/pruefung/pruefungsfenster_anlegen.php b/cis/private/lehre/pruefung/pruefungsfenster_anlegen.php index 64f7c5cdb..ddf4c8621 100644 --- a/cis/private/lehre/pruefung/pruefungsfenster_anlegen.php +++ b/cis/private/lehre/pruefung/pruefungsfenster_anlegen.php @@ -202,9 +202,9 @@ else if(isset($_GET["id"]) && $_GET["id"]!= null && isset($_GET["method"]) && $_ } $method = $_GET["method"]; } -else if(isset($_GET["id"]) && $_GET["id"]!= null && isset($_GET["method"]) && $_GET["method"]=="delete") +else if(isset($_POST["delete"])) { - $pruefungsfenster_id = $_GET["id"]; + $pruefungsfenster_id = $_POST["delete"]; $pruefungsfenster = new pruefungsfenster(); $pruefungsfenster->load($pruefungsfenster_id); @@ -226,7 +226,7 @@ else if(isset($_GET["id"]) && $_GET["id"]!= null && isset($_GET["method"]) && $_ { echo $p->t('pruefung/pruefungsfensterKonnteNichtGeloeschtWerdenDaPruefungen'); } - $method = $_GET["method"]; + $method = 'delete'; } else { @@ -394,39 +394,41 @@ else if(!empty($prfFenster->result)){ ?> - - - - - - - - - - - - - result as $result) - { - if(in_array($result->oe_kurzbz, $oe)) + +
t('global/studiensemester'); ?>t('global/organisationseinheit'); ?>t('pruefung/start'); ?>t('pruefung/ende'); ?>t('global/bearbeiten'); ?>t('global/loeschen'); ?>
+ + + + + + + + + + + + result as $result) { - $organisationseinheit->load($result->oe_kurzbz); - echo - ' - - - - - - - '; + if(in_array($result->oe_kurzbz, $oe)) + { + $organisationseinheit->load($result->oe_kurzbz); + echo + ' + + + + + + + '; + } } - } - ?> - -
t('global/studiensemester'); ?>t('global/organisationseinheit'); ?>t('pruefung/start'); ?>t('pruefung/ende'); ?>t('global/bearbeiten'); ?>t('global/loeschen'); ?>
'.$result->studiensemester_kurzbz.''.$organisationseinheit->organisationseinheittyp_kurzbz." ".$organisationseinheit->bezeichnung.''.$result->start.''.$result->ende.''.$p->t('global/bearbeiten').''. $p->t('global/loeschen').'
'.$result->studiensemester_kurzbz.''.$organisationseinheit->organisationseinheittyp_kurzbz." ".$organisationseinheit->bezeichnung.''.$result->start.''.$result->ende.''.$p->t('global/bearbeiten').'
+ ?> + + + getAllPruefungen($uid); + $pruefung->getAllPruefungen($uid, false); $datum = new datum(); foreach($pruefung->result as $prf) { diff --git a/cis/private/lehre/pruefung/pruefungstermin_aendern.php b/cis/private/lehre/pruefung/pruefungstermin_aendern.php index bde0bb764..56231b191 100644 --- a/cis/private/lehre/pruefung/pruefungstermin_aendern.php +++ b/cis/private/lehre/pruefung/pruefungstermin_aendern.php @@ -56,18 +56,24 @@ $lehrveranstaltung->loadLVAfromMitarbeiter(0, $uid, $studiensemester->getaktorNe if(empty($lehrveranstaltung->lehrveranstaltungen) && !$rechte->isBerechtigt('lehre/pruefungsterminAdmin')) die('Sie haben keine Berechtigung für diese Seite'); -if (!ctype_digit($_GET['termin_id'])) - die('Wrong Parameter'); -else - $termin_id = $_GET['termin_id']; - -if (isset($_GET["speichern"])) +if (isset($_GET['termin_id'])) { + if (!ctype_digit($_GET['termin_id'])) + die('Wrong Parameter'); + + $termin_id = $_GET['termin_id']; +} +else if (isset($_POST["speichern"])) +{ + + $termin_id = $_POST['termin_id']; $prfgtermin = new pruefungstermin($termin_id); - $von = $_GET["datum"]." ".$_GET["vonzeit"]; - $bis = $_GET["datum"]." ".$_GET["biszeit"]; + $von = $_POST["datum"]." ".$_POST["vonzeit"]; + $bis = $_POST["datum"]." ".$_POST["biszeit"]; $prfgtermin->von = $von; $prfgtermin->bis = $bis; + $prfgtermin->teilnehmer_min = $_POST["terminmin"]; + $prfgtermin->teilnehmer_max = $_POST["terminmax"]; $prfgtermin->save(); } @@ -110,6 +116,8 @@ $datum = explode(" ", $prfgtermin->von)[0]; $vonzeit = substr(explode(" ", $prfgtermin->von)[1],0,5); $biszeit = substr(explode(" ", $prfgtermin->bis)[1],0,5); $pruefung_id = $prfgtermin->pruefung_id; +$teilnehmer_min = $prfgtermin->teilnehmer_min; +$teilnehmer_max = $prfgtermin->teilnehmer_max; $pruefung = new pruefungCis($pruefung_id); $pruefung->getLehrveranstaltungenByPruefung(); @@ -178,7 +186,7 @@ foreach ($anmeldungen as $row)
-
+ @@ -196,6 +204,15 @@ foreach ($anmeldungen as $row) + + + + + + + +
t('global/lehrveranstaltung'); ?>t('global/bis'); ?>
t('pruefung/pruefungMinTeilnehmer'); ?> +
t('pruefung/pruefungMaxTeilnehmer'); ?>
diff --git a/include/pruefungCis.class.php b/include/pruefungCis.class.php index 29b0c425d..7b7c3b883 100644 --- a/include/pruefungCis.class.php +++ b/include/pruefungCis.class.php @@ -525,7 +525,11 @@ class pruefungCis extends basis_db return false; } - $qry = 'UPDATE campus.tbl_pruefung SET storniert=true WHERE pruefung_id='.$this->db_add_param($pruefung_id).';'; + $qry = 'UPDATE campus.tbl_pruefung + SET storniert=true, + updatevon='.$this->db_add_param($this->updatevon).', + updateamum= now() + WHERE pruefung_id='.$this->db_add_param($pruefung_id).';'; if(!$this->db_query($qry)) { @@ -706,13 +710,18 @@ class pruefungCis extends basis_db * @param String $mitarbeiter_uid UID des Mitarbeiters (optional) * @return boolean */ - public function getAllPruefungen($mitarbeiter_uid = NULL) + public function getAllPruefungen($mitarbeiter_uid = NULL, $storniert = null) { - $qry = 'SELECT * FROM campus.tbl_pruefung'; + $qry = 'SELECT * FROM campus.tbl_pruefung WHERE 1 = 1'; if(!is_null($mitarbeiter_uid)) { - $qry .= ' WHERE mitarbeiter_uid='.$this->db_add_param($mitarbeiter_uid); + $qry .= ' AND mitarbeiter_uid='.$this->db_add_param($mitarbeiter_uid); + } + + if(!is_null($storniert)) + { + $qry .= ' AND storniert = '.$this->db_add_param($storniert, FHC_BOOLEAN); } $qry .= ';'; diff --git a/locale/de-AT/pruefung.php b/locale/de-AT/pruefung.php index fbfb66b8f..0b4d56e24 100644 --- a/locale/de-AT/pruefung.php +++ b/locale/de-AT/pruefung.php @@ -124,6 +124,7 @@ $this->phrasen['pruefung/anmeldungenVerwalten'] = 'Anmeldungen Verwalten'; $this->phrasen['pruefung/anmeldungErfolgreich'] = 'Anmeldung erfolgreich!'; $this->phrasen['pruefung/zuWenigeCreditPoints'] = 'Credit-Points-Guthaben ist zu gering.'; $this->phrasen['pruefung/kollisionMitAndererAnmeldung'] = 'Kollision mit anderer Anmeldung.'; +$this->phrasen['pruefung/kollisionMitAndererAnmeldungForce'] = 'Kollision mit anderer Anmeldung. Trotzdem fortfahren?'; $this->phrasen['pruefung/keineFreienPlaetzeVorhanden'] = 'Keine freien Plätze vorhanden.'; $this->phrasen['pruefung/anmeldungAufgrundVonSperreNichtMoeglich'] = 'Anmeldung auf Grund von Sperre nicht möglich.'; $this->phrasen['pruefung/prestudentNichtGefunden'] = 'Prestudent nicht gefunden.'; diff --git a/locale/en-US/pruefung.php b/locale/en-US/pruefung.php index 59d9953ca..d2195e60a 100644 --- a/locale/en-US/pruefung.php +++ b/locale/en-US/pruefung.php @@ -123,6 +123,7 @@ $this->phrasen['pruefung/anmeldungenVerwalten'] = 'Anmeldungen Verwalten'; $this->phrasen['pruefung/anmeldungErfolgreich'] = 'Registration successful.'; $this->phrasen['pruefung/zuWenigeCreditPoints'] = 'Credit-Points-Guthaben ist zu gering.'; $this->phrasen['pruefung/kollisionMitAndererAnmeldung'] = 'Kollision mit anderer Anmeldung.'; +$this->phrasen['pruefung/kollisionMitAndererAnmeldungForce'] = 'Kollision mit anderer Anmeldung. Trotzdem fortfahren?'; $this->phrasen['pruefung/keineFreienPlaetzeVorhanden'] = 'Keine freien Plätze vorhanden.'; $this->phrasen['pruefung/anmeldungAufgrundVonSperreNichtMoeglich'] = 'Anmeldung auf Grund von Sperre nicht möglich.'; $this->phrasen['pruefung/prestudentNichtGefunden'] = 'Prestudent nicht gefunden.';