From 08182fe0f504132293ed16ead5ae262aa1e1ccbc Mon Sep 17 00:00:00 2001 From: Cristina Date: Wed, 18 Jun 2025 12:03:09 +0200 Subject: [PATCH 01/43] Added phrases for LV-Evaluierung --- system/phrasesupdate.php | 428 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 427 insertions(+), 1 deletion(-) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 0203b3c2f..7c350c452 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -41873,8 +41873,434 @@ and represent the current state of research on the topic. The prescribed citatio 'insertvon' => 'system' ) ) - ) + ), // PROJEKTARBEITSBEURTEILUNG SS2025 ENDE --------------------------------------------------------------------------- + array( + 'app' => 'core', + 'category' => 'global', + 'phrase' => 'abschicken', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Abschicken', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Submit', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'global', + 'phrase' => 'zurueckZumStart', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Zurück zum Start', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Back to Start', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'global', + 'phrase' => 'lvevaluierungAbschicken', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'LV-Evaluierung abschicken', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Submit Course Evaluation', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'global', + 'phrase' => 'lvevaluierung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'LV-Evaluierung', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Course Evaluation', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'loginTextCodeEingeben', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Bitte geben Sie Ihren Code ein, um die Evaluierung zu starten:', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Please enter your code to start the evaluation:', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'loginCodeEingeben', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Evaluierung-Code eingeben', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Enter your Evaluation-Code', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'loginTextLvevaluierung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => ' +
+

Die folgende LV-Evaluierung umfasst

+
+ + ', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => ' +
+

The following course evaluation includes

+
+ + ', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'loginTextAntwortoptionen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => ' +
+

Die Antwortoptionen umfassen 5 Stufen:

+
+ + ', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => ' +
+

The answer options comprise 5 levels:

+
+ + ', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'evaluierungPeriodeBeendet', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Der Evaluierungszeitraum endete am {date}', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Evaluation period was closed on {date}', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'evaluierungPeriodeStartetErst', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Der Evaluierungszeitraum startet erst am {date}', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Evaluation period starts on {date}', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'evaluierungEingereicht', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Die Evaluierung wurde am {date} eingereicht', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Evaluation was submitted on {date}', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'evaluierungNichtMehrVerfuegbar', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Diese Evaluierung ist nicht mehr verfügbar.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'This evaluation is no longer available.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'evaluierungNichtVerfuegbar', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Diese Evaluierung ist nicht verfügbar.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'This evaluation is not available yet.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'logoutTitle', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Danke!
Was passiert nun mit Ihrem Feedback?', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Thank you!
What happens to your feedback now?', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'logoutText', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => ' +

Ihr Feedback dient den Lehrenden zur Selbstevaluierung und Ihre Jahrgangsvertretungen werden von der Studiengangsleitung zum Jour-Fixe eingeladen, um die Ergebnisse zu besprechen.

+

Ihr Feedback dient der kontinuierlichen Weiterentwicklung der Lehrveranstaltung. Mehr Details dazu finden Sie hier: + ', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => ' +

Your feedback is used by the lecturers for self-evaluation and your year representatives are invited to the Jour-Fixe by the head of degree program to discuss the results.

+

Your feedback is used for the continuous further development of the course. You can find more details here: + ', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'evaluierungZeitAbgelaufen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Die Evaluierungszeit ist abgelaufen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'The Evaluation time is over', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'evaluierungAntwortenNichtUebermittelt', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Ihre Antworten wurden nicht übermittelt.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Your responses were not submitted.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'evaluierungCodeExistiertNicht', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Dieser Evaluierungscode exisitiert nicht', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'This evaluation code does not exist', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'evaluierungNichtAktiv', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Die Evaluierung ist nicht aktiv', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Evaluation is not active', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), ); From fd2de106f8a4a760e1df0c001896022cc95a4ba9 Mon Sep 17 00:00:00 2001 From: Cristina Date: Tue, 24 Jun 2025 15:02:45 +0200 Subject: [PATCH 02/43] Added column evaluierung to lehre.tbl_lehrveranstaltung - evaluierung (boolean) indicates if lehrveranstaltung shall be evaluated. Default is true. --- system/dbupdate_3.4.php | 3 ++- system/dbupdate_3.4/62063_lv_evaluierung.php | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 system/dbupdate_3.4/62063_lv_evaluierung.php diff --git a/system/dbupdate_3.4.php b/system/dbupdate_3.4.php index 0e2b4e7c6..6b346573a 100644 --- a/system/dbupdate_3.4.php +++ b/system/dbupdate_3.4.php @@ -74,6 +74,7 @@ require_once('dbupdate_3.4/55968_index_anrechnung.php'); require_once('dbupdate_3.4/25999_locale_update.php'); require_once('dbupdate_3.4/55289_pep_fine_tuning.php'); require_once('dbupdate_3.4/55614_perm_verwaltetoe.php'); +require_once('dbupdate_3.4/62063_lv_evaluierung.php'); // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; @@ -241,7 +242,7 @@ $tabellen=array( "lehre.tbl_lehrmittel" => array("lehrmittel_kurzbz","beschreibung","ort_kurzbz"), "lehre.tbl_lehrmodus" => array("lehrmodus_kurzbz","bezeichnung_mehrsprachig","aktiv"), "lehre.tbl_lehrtyp" => array("lehrtyp_kurzbz","bezeichnung"), - "lehre.tbl_lehrveranstaltung" => array("lehrveranstaltung_id","kurzbz","bezeichnung","lehrform_kurzbz","studiengang_kz","semester","sprache","ects","semesterstunden","anmerkung","lehre","lehreverzeichnis","aktiv","planfaktor","planlektoren","planpersonalkosten","plankostenprolektor","koordinator","sort","zeugnis","projektarbeit","updateamum","updatevon","insertamum","insertvon","ext_id","bezeichnung_english","orgform_kurzbz","incoming","lehrtyp_kurzbz","oe_kurzbz","raumtyp_kurzbz","anzahlsemester","semesterwochen","lvnr","farbe","semester_alternativ","old_lehrfach_id","sws","lvs","alvs","lvps","las","benotung","lvinfo","lehrauftrag","lehrmodus_kurzbz","lehrveranstaltung_template_id"), + "lehre.tbl_lehrveranstaltung" => array("lehrveranstaltung_id","kurzbz","bezeichnung","lehrform_kurzbz","studiengang_kz","semester","sprache","ects","semesterstunden","anmerkung","lehre","lehreverzeichnis","aktiv","planfaktor","planlektoren","planpersonalkosten","plankostenprolektor","koordinator","sort","zeugnis","projektarbeit","updateamum","updatevon","insertamum","insertvon","ext_id","bezeichnung_english","orgform_kurzbz","incoming","lehrtyp_kurzbz","oe_kurzbz","raumtyp_kurzbz","anzahlsemester","semesterwochen","lvnr","farbe","semester_alternativ","old_lehrfach_id","sws","lvs","alvs","lvps","las","benotung","lvinfo","lehrauftrag","lehrmodus_kurzbz","lehrveranstaltung_template_id", "evaluierung"), "lehre.tbl_lehrveranstaltung_kompatibel" => array("lehrveranstaltung_id","lehrveranstaltung_id_kompatibel"), "lehre.tbl_lvangebot" => array("lvangebot_id","lehrveranstaltung_id","studiensemester_kurzbz","gruppe_kurzbz","incomingplaetze","gesamtplaetze","anmeldefenster_start","anmeldefenster_ende","insertamum","insertvon","updateamum","updatevon"), "lehre.tbl_lvregel" => array("lvregel_id","lvregeltyp_kurzbz","operator","parameter","lvregel_id_parent","lehrveranstaltung_id","studienplan_lehrveranstaltung_id","insertamum","insertvon","updateamum","updatevon"), diff --git a/system/dbupdate_3.4/62063_lv_evaluierung.php b/system/dbupdate_3.4/62063_lv_evaluierung.php new file mode 100644 index 000000000..5a0714772 --- /dev/null +++ b/system/dbupdate_3.4/62063_lv_evaluierung.php @@ -0,0 +1,15 @@ +db_query("SELECT evaluierung FROM lehre.tbl_lehrveranstaltung LIMIT 1")) +{ + $qry = "ALTER TABLE lehre.tbl_lehrveranstaltung ADD COLUMN evaluierung boolean NOT NULL DEFAULT true; + COMMENT ON COLUMN lehre.tbl_lehrveranstaltung.evaluierung IS 'TRUE wenn für diese LV eine LV-Evaluierung durchgeführt wird'; + "; + + if(!$db->db_query($qry)) + echo 'lehre.tbl_lehrveranstaltung '.$db->db_last_error().'
'; + else + echo '
Spalte evaluierung zu Tabelle lehre.tbl_lehrveranstaltung hinzugefügt'; +} From 4b8af46a2ee0edf7968ec18c4204fd6d0e40d0cc Mon Sep 17 00:00:00 2001 From: Cristina Date: Wed, 25 Jun 2025 13:30:05 +0200 Subject: [PATCH 03/43] Added 'evaluierung' to lehrveranstaltung.class.php and updated related methods --- include/lehrveranstaltung.class.php | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/include/lehrveranstaltung.class.php b/include/lehrveranstaltung.class.php index 48edd9d0a..aa3b6771e 100644 --- a/include/lehrveranstaltung.class.php +++ b/include/lehrveranstaltung.class.php @@ -70,6 +70,7 @@ class lehrveranstaltung extends basis_db public $farbe; public $lehrauftrag=true; public $lehrveranstaltung_template_id; // integer + public $evaluierung=true; // boolean public $studienplan_lehrveranstaltung_id; @@ -170,6 +171,7 @@ class lehrveranstaltung extends basis_db $this->benotung = $this->db_parse_bool($row->benotung); $this->lvinfo = $this->db_parse_bool($row->lvinfo); $this->lehrauftrag = $this->db_parse_bool($row->lehrauftrag); + $this->evaluierung = $this->db_parse_bool($row->evaluierung); // FIXME: LV-Bezeichnung richtig mehrsprachig machen // Zwischenzeitlich 'Italian' zum bezeichnung_arr dazugegeben @@ -244,6 +246,7 @@ class lehrveranstaltung extends basis_db $lv_obj->benotung = $this->db_parse_bool($row->benotung); $lv_obj->lvinfo = $this->db_parse_bool($row->lvinfo); $lv_obj->lehrauftrag = $this->db_parse_bool($row->lehrauftrag); + $lv_obj->evaluierung = $this->db_parse_bool($row->evaluierung); $lv_obj->bezeichnung_arr['German'] = $row->bezeichnung; $lv_obj->bezeichnung_arr['English'] = $row->bezeichnung_english; @@ -394,6 +397,7 @@ class lehrveranstaltung extends basis_db $lv_obj->benotung = $this->db_parse_bool($row->benotung); $lv_obj->lvinfo = $this->db_parse_bool($row->lvinfo); $lv_obj->lehrauftrag = $this->db_parse_bool($row->lehrauftrag); + $lv_obj->evaluierung = $this->db_parse_bool($row->evaluierung); $lv_obj->bezeichnung_arr['German'] = $row->bezeichnung; $lv_obj->bezeichnung_arr['Italian'] = $row->bezeichnung; @@ -524,6 +528,7 @@ class lehrveranstaltung extends basis_db $lv_obj->benotung = $this->db_parse_bool($row->benotung); $lv_obj->lvinfo = $this->db_parse_bool($row->lvinfo); $lv_obj->lehrauftrag = $this->db_parse_bool($row->lehrauftrag); + $lv_obj->evaluierung = $this->db_parse_bool($row->evaluierung); $lv_obj->bezeichnung_arr['German'] = $row->bezeichnung; $lv_obj->bezeichnung_arr['English'] = $row->bezeichnung_english; @@ -607,6 +612,7 @@ class lehrveranstaltung extends basis_db $lv_obj->benotung = $this->db_parse_bool($row->benotung); $lv_obj->lvinfo = $this->db_parse_bool($row->lvinfo); $lv_obj->lehrauftrag = $this->db_parse_bool($row->lehrauftrag); + $lv_obj->evaluierung = $this->db_parse_bool($row->evaluierung); $lv_obj->bezeichnung_arr['German'] = $row->bezeichnung; $lv_obj->bezeichnung_arr['English'] = $row->bezeichnung_english; @@ -779,7 +785,7 @@ class lehrveranstaltung extends basis_db insertvon, planfaktor, planlektoren, planpersonalkosten, plankostenprolektor, updateamum, updatevon, sort, zeugnis, projektarbeit, sprache, koordinator, bezeichnung_english, orgform_kurzbz, incoming, lehrtyp_kurzbz, oe_kurzbz, raumtyp_kurzbz, anzahlsemester, semesterwochen, lvnr, semester_alternativ, farbe, lehrveranstaltung_template_id,sws,lvs,alvs,lvps,las,benotung,lvinfo, - lehrauftrag, lehrmodus_kurzbz) VALUES ('. + lehrauftrag, lehrmodus_kurzbz, evaluierung) VALUES ('. $this->db_add_param($this->studiengang_kz). ', '. $this->db_add_param($this->bezeichnung). ', '. $this->db_add_param($this->kurzbz). ', '. @@ -824,7 +830,8 @@ class lehrveranstaltung extends basis_db $this->db_add_param($this->benotung, FHC_BOOLEAN).','. $this->db_add_param($this->lvinfo, FHC_BOOLEAN).','. $this->db_add_param($this->lehrauftrag, FHC_BOOLEAN).','. - $this->db_add_param($this->lehrmodus_kurzbz) + $this->db_add_param($this->lehrmodus_kurzbz).','. + $this->db_add_param($this->evaluierung, FHC_BOOLEAN) .');'; } else @@ -880,7 +887,8 @@ class lehrveranstaltung extends basis_db 'las = '.$this->db_add_param($this->las).', '. 'benotung = '.$this->db_add_param($this->benotung, FHC_BOOLEAN).', '. 'lvinfo = '.$this->db_add_param($this->lvinfo, FHC_BOOLEAN).', '. - 'lehrauftrag = '.$this->db_add_param($this->lehrauftrag, FHC_BOOLEAN).' '. + 'lehrauftrag = '.$this->db_add_param($this->lehrauftrag, FHC_BOOLEAN).', '. + 'evaluierung = '.$this->db_add_param($this->evaluierung, FHC_BOOLEAN).' '. 'WHERE lehrveranstaltung_id = ' . $this->db_add_param($this->lehrveranstaltung_id, FHC_INTEGER, false) . ';'; } @@ -991,6 +999,7 @@ class lehrveranstaltung extends basis_db $lv_obj->benotung = $this->db_parse_bool($row->benotung); $lv_obj->lvinfo = $this->db_parse_bool($row->lvinfo); $lv_obj->lehrauftrag = $this->db_parse_bool($row->lehrauftrag); + $lv_obj->evaluierung = $this->db_parse_bool($row->evaluierung); $lv_obj->bezeichnung_arr['German'] = $row->bezeichnung; $lv_obj->bezeichnung_arr['English'] = $row->bezeichnung_english; @@ -1086,6 +1095,7 @@ class lehrveranstaltung extends basis_db $l->benotung = $this->db_parse_bool($row->benotung); $l->lvinfo = $this->db_parse_bool($row->lvinfo); $l->lehrauftrag = $this->db_parse_bool($row->lehrauftrag); + $l->evaluierung = $this->db_parse_bool($row->evaluierung); $l->bezeichnung_arr['German'] = $row->bezeichnung; $l->bezeichnung_arr['English'] = $row->bezeichnung_english; @@ -1170,6 +1180,7 @@ class lehrveranstaltung extends basis_db $lv_obj->benotung = $this->db_parse_bool($row->benotung); $lv_obj->lvinfo = $this->db_parse_bool($row->lvinfo); $lv_obj->lehrauftrag = $this->db_parse_bool($row->lehrauftrag); + $lv_obj->evaluierung = $this->db_parse_bool($row->evaluierung); $lv_obj->bezeichnung_arr['German'] = $row->bezeichnung; $lv_obj->bezeichnung_arr['English'] = $row->bezeichnung_english; @@ -1271,6 +1282,7 @@ class lehrveranstaltung extends basis_db $obj->benotung = $this->db_parse_bool($row->benotung); $obj->lvinfo = $this->db_parse_bool($row->lvinfo); $obj->lehrauftrag = $this->db_parse_bool($row->lehrauftrag); + $obj->evaluierung = $this->db_parse_bool($row->evaluierung); $obj->bezeichnung_arr['German'] = $row->bezeichnung; $obj->bezeichnung_arr['English'] = $row->bezeichnung_english; @@ -1396,6 +1408,7 @@ class lehrveranstaltung extends basis_db $obj->lvinfo =$this->db_parse_bool( $lv->lvinfo); $obj->zeugnis = $this->db_parse_bool($lv->zeugnis); $obj->lehrauftrag = $this->db_parse_bool($lv->lehrauftrag); + $obj->evaluierung = $this->db_parse_bool($lv->evaluierung); $values[] = $obj; @@ -1422,6 +1435,7 @@ class lehrveranstaltung extends basis_db $obj->lvinfo =$this->db_parse_bool( $this->lvinfo); $obj->zeugnis = $this->db_parse_bool($this->zeugnis); $obj->lehrauftrag = $this->db_parse_bool($this->lehrauftrag); + $obj->evaluierung = $this->db_parse_bool($this->evaluierung); $values[] = $obj; } @@ -1476,6 +1490,7 @@ class lehrveranstaltung extends basis_db $obj->export = $lv->export; $obj->genehmigung = $lv->genehmigung; $obj->lehrauftrag = $lv->lehrauftrag; + $obj->evaluierung = $lv->evaluierung; $obj->lehre = $lv->lehre; $obj->children = array(); if(count($lv->childs) > 0) @@ -1507,6 +1522,7 @@ class lehrveranstaltung extends basis_db $obj->zeugnis = $this->db_parse_bool($this->zeugnis); $obj->curriculum = $this->db_parse_bool($this->curriculum); $obj->lehrauftrag = $this->lehrauftrag; + $obj->evaluierung = $this->db_parse_bool($this->evaluierung); $values[] = $obj; } @@ -1613,6 +1629,7 @@ class lehrveranstaltung extends basis_db $lv_obj->benotung = $this->db_parse_bool($row->benotung); $lv_obj->lvinfo = $this->db_parse_bool($row->lvinfo); $lv_obj->lehrauftrag = $this->db_parse_bool($row->lehrauftrag); + $lv_obj->evaluierung = $this->db_parse_bool($row->evaluierung); $lv_obj->bezeichnung_arr['German'] = $row->bezeichnung; $lv_obj->bezeichnung_arr['English'] = $row->bezeichnung_english; @@ -1700,6 +1717,7 @@ class lehrveranstaltung extends basis_db $lv_obj->benotung = $this->db_parse_bool($row->benotung); $lv_obj->lvinfo = $this->db_parse_bool($row->lvinfo); $lv_obj->lehrauftrag = $this->db_parse_bool($row->lehrauftrag); + $lv_obj->evaluierung = $this->db_parse_bool($row->evaluierung); $lv_obj->bezeichnung_arr['German'] = $row->bezeichnung; $lv_obj->bezeichnung_arr['English'] = $row->bezeichnung_english; @@ -1873,6 +1891,7 @@ class lehrveranstaltung extends basis_db $lv_obj->benotung = $this->db_parse_bool($row->benotung); $lv_obj->lvinfo = $this->db_parse_bool($row->lvinfo); $lv_obj->lehrauftrag = $this->db_parse_bool($row->lehrauftrag); + $lv_obj->evaluierung = $this->db_parse_bool($row->evaluierung); $lv_obj->bezeichnung_arr['German'] = $row->bezeichnung; $lv_obj->bezeichnung_arr['English'] = $row->bezeichnung_english; @@ -2003,6 +2022,7 @@ class lehrveranstaltung extends basis_db $lv_obj->benotung = $this->db_parse_bool($row->benotung); $lv_obj->lvinfo = $this->db_parse_bool($row->lvinfo); $lv_obj->lehrauftrag = $this->db_parse_bool($row->lehrauftrag); + $lv_obj->evaluierung = $this->db_parse_bool($row->evaluierung); $lv_obj->studiengang_kurzbzlang = $row->studiengang_kurzbzlang; @@ -2131,6 +2151,7 @@ class lehrveranstaltung extends basis_db $lv_obj->benotung = $this->db_parse_bool($row->benotung); $lv_obj->lvinfo = $this->db_parse_bool($row->lvinfo); $lv_obj->lehrauftrag = $this->db_parse_bool($row->lehrauftrag); + $lv_obj->evaluierung = $this->db_parse_bool($row->evaluierung); $lv_obj->bezeichnung_arr['German'] = $row->bezeichnung; $lv_obj->bezeichnung_arr['English'] = $row->bezeichnung_english; @@ -2402,6 +2423,7 @@ class lehrveranstaltung extends basis_db $obj->benotung = $this->db_parse_bool($row->benotung); $obj->lvinfo = $this->db_parse_bool($row->lvinfo); $obj->lehrauftrag = $this->db_parse_bool($row->lehrauftrag); + $obj->evaluierung = $this->db_parse_bool($row->evaluierung); $obj->bezeichnung_arr['German'] = $row->bezeichnung; $obj->bezeichnung_arr['English'] = $row->bezeichnung_english; From daf9d2ea15f8d7063a07cf179cb87cdd8cda8d31 Mon Sep 17 00:00:00 2001 From: Cristina Date: Wed, 25 Jun 2025 13:35:20 +0200 Subject: [PATCH 04/43] Added checkbox 'evaluierung' Lehrveranstaltung Details in VILESCI --- vilesci/lehre/lehrveranstaltung_details.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/vilesci/lehre/lehrveranstaltung_details.php b/vilesci/lehre/lehrveranstaltung_details.php index bad2a7d93..c1433047c 100644 --- a/vilesci/lehre/lehrveranstaltung_details.php +++ b/vilesci/lehre/lehrveranstaltung_details.php @@ -122,6 +122,7 @@ $lv->benotung = isset($_POST['benotung']); $lv->lvinfo = isset($_POST['lvinfo']); $lv->lehrauftrag = isset($_POST['lehrauftrag']); + $lv->evaluierung = isset($_POST['evaluierung']); $lv->lehrveranstaltung_template_id = $lv->lehrtyp_kurzbz == 'tpl' ? '' : $_POST['lehrveranstaltung_template_id']; if(!$lv->save()) @@ -446,6 +447,10 @@ Lehrauftrag lehrauftrag?'checked':'').'> + + Evaulierung + evaluierung?'checked':'').'> + Template From 56bfe46675ff6281ca454073c486c55399b3e7fb Mon Sep 17 00:00:00 2001 From: Cristina Date: Wed, 2 Jul 2025 12:10:28 +0200 Subject: [PATCH 05/43] Added phrases for lvevaluierung --- system/phrasesupdate.php | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 7c350c452..8ac45c0fa 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -41915,6 +41915,7 @@ and represent the current state of research on the topic. The prescribed citatio ) ) ), + // LVEVALUIERUNG --------------------------------------------------------------------------------------------------- array( 'app' => 'lvevaluierung', 'category' => 'global', @@ -42301,6 +42302,26 @@ and represent the current state of research on the topic. The prescribed citatio ) ) ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'zeitLaeuftAb', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Zeit läuft bald ab – zum Speichern bitte ‚Abschicken‘ klicken', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Time is running out — please click ‘Submit’ to save your answers', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), ); From 153e273fec5396c5bd0991867a3b38b5335ab54f Mon Sep 17 00:00:00 2001 From: ma0048 Date: Wed, 9 Jul 2025 13:52:46 +0200 Subject: [PATCH 06/43] firefox check entfernt --- cis/testtool/login.php | 8 -------- 1 file changed, 8 deletions(-) diff --git a/cis/testtool/login.php b/cis/testtool/login.php index 5a2ae0dea..5306dadab 100644 --- a/cis/testtool/login.php +++ b/cis/testtool/login.php @@ -447,14 +447,6 @@ if (isset($_POST['save']) && isset($_SESSION['prestudent_id'])) { e.preventDefault(); }); - // If Browser is any other than Mozilla Firefox and the test includes any MathML, - // show message to use Mozilla Firefox - var ua = navigator.userAgent; - if ((ua.indexOf("Firefox") > -1) == false) - { - $("#alertmsgdiv").html("
BITTE VERWENDEN SIE DEN MOZILLA FIREFOX BROWSER!
(Manche Prüfungsfragen werden sonst nicht korrekt dargestellt.

PLEASE USE MOZILLA FIREFOX BROWSER!
(Otherwise some exam items will not be displayed correctly
"); - //alert('BITTE VERWENDEN SIE DEN MOZILLA FIREFOX BROWSER!\n(Manche Prüfungsfragen werden sonst nicht korrekt dargestellt.\n\nPLEASE USE MOZILLA FIREFOX BROWSER!\n(Ohterwise some exam items will not be displayed correctly.)'); - } }); Date: Wed, 16 Jul 2025 16:13:27 +0200 Subject: [PATCH 07/43] Added phrases for lvevaluierung --- system/phrasesupdate.php | 80 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 8ac45c0fa..417eb9110 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -42322,6 +42322,86 @@ and represent the current state of research on the topic. The prescribed citatio ) ) ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'spracheAuswaehlen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Sprache auswählen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Select language', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'fhtwLogo', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'FH Technikum Wien Logo', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'UAS Technikum Wien Logo', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'evaluierungscodeEingeben', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Evaluierungscode eingeben', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Enter Evaluation code', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'fragebogen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Fragebogen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Questionnaire', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), ); From fd2ff27e22d16aab895e781bf9a5d21c3ac91d51 Mon Sep 17 00:00:00 2001 From: Cristina Date: Wed, 3 Sep 2025 15:24:07 +0200 Subject: [PATCH 08/43] Added column prestudent_id to getStudentsByLv method query in Lehrveranstaltung_model.php --- application/models/education/Lehrveranstaltung_model.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/application/models/education/Lehrveranstaltung_model.php b/application/models/education/Lehrveranstaltung_model.php index 3eb4d33a2..63d1ca15c 100644 --- a/application/models/education/Lehrveranstaltung_model.php +++ b/application/models/education/Lehrveranstaltung_model.php @@ -316,7 +316,8 @@ class Lehrveranstaltung_model extends DB_Model (SELECT status_kurzbz FROM public.tbl_prestudentstatus WHERE prestudent_id=tbl_student.prestudent_id ORDER BY datum DESC, insertamum DESC, ext_id DESC LIMIT 1) as status, tbl_bisio.bisio_id, tbl_bisio.von, tbl_bisio.bis, tbl_student.studiengang_kz AS stg_kz_student, tbl_zeugnisnote.note, tbl_mitarbeiter.mitarbeiter_uid, tbl_person.matr_nr, tbl_benutzer.uid, - UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as kuerzel, tbl_studiengang.orgform_kurzbz, vw_student_lehrveranstaltung.semester, vw_student_lehrveranstaltung.studiensemester_kurzbz, vw_student_lehrveranstaltung.bezeichnung + UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as kuerzel, tbl_studiengang.orgform_kurzbz, vw_student_lehrveranstaltung.semester, vw_student_lehrveranstaltung.studiensemester_kurzbz, vw_student_lehrveranstaltung.bezeichnung, + tbl_student.prestudent_id FROM campus.vw_student_lehrveranstaltung From 10d58d1a42f64649ef0110ccb9528519bd05efa4 Mon Sep 17 00:00:00 2001 From: Cristina Date: Wed, 3 Sep 2025 15:24:07 +0200 Subject: [PATCH 09/43] Added column prestudent_id to getStudentsByLv method query in Lehrveranstaltung_model.php --- application/models/education/Lehrveranstaltung_model.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/models/education/Lehrveranstaltung_model.php b/application/models/education/Lehrveranstaltung_model.php index 3eb4d33a2..e02c1ad0b 100644 --- a/application/models/education/Lehrveranstaltung_model.php +++ b/application/models/education/Lehrveranstaltung_model.php @@ -316,8 +316,8 @@ class Lehrveranstaltung_model extends DB_Model (SELECT status_kurzbz FROM public.tbl_prestudentstatus WHERE prestudent_id=tbl_student.prestudent_id ORDER BY datum DESC, insertamum DESC, ext_id DESC LIMIT 1) as status, tbl_bisio.bisio_id, tbl_bisio.von, tbl_bisio.bis, tbl_student.studiengang_kz AS stg_kz_student, tbl_zeugnisnote.note, tbl_mitarbeiter.mitarbeiter_uid, tbl_person.matr_nr, tbl_benutzer.uid, - UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as kuerzel, tbl_studiengang.orgform_kurzbz, vw_student_lehrveranstaltung.semester, vw_student_lehrveranstaltung.studiensemester_kurzbz, vw_student_lehrveranstaltung.bezeichnung - + UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as kuerzel, tbl_studiengang.orgform_kurzbz, vw_student_lehrveranstaltung.semester, vw_student_lehrveranstaltung.studiensemester_kurzbz, vw_student_lehrveranstaltung.bezeichnung, + tbl_student.prestudent_id FROM campus.vw_student_lehrveranstaltung JOIN public.tbl_benutzer USING(uid) From cb64c83b504c4b1ba05b5a2bc73f0b4ea34e2d55 Mon Sep 17 00:00:00 2001 From: Cristina Date: Wed, 1 Oct 2025 13:48:10 +0200 Subject: [PATCH 10/43] Added method to get LV-Leitung from given LV --- .../education/Lehrveranstaltung_model.php | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/application/models/education/Lehrveranstaltung_model.php b/application/models/education/Lehrveranstaltung_model.php index e02c1ad0b..462e92e5e 100644 --- a/application/models/education/Lehrveranstaltung_model.php +++ b/application/models/education/Lehrveranstaltung_model.php @@ -386,6 +386,37 @@ class Lehrveranstaltung_model extends DB_Model return $this->execQuery($query, array($lehrveranstaltung_id, $studiensemester_kurzbz)); } + + /** + * Get LV-Leitung of given Lehrveranstaltung ID and Studiensemester. + * + * @param $lehrveranstaltung_id + * @param $studiensemester + * @return array|stdClass|null + */ + public function getLvLeitung($lehrveranstaltung_id, $studiensemester) + { + $params = [$lehrveranstaltung_id, $studiensemester]; + + $qry = " + SELECT + vorname, nachname, mitarbeiter_uid, lehrfunktion_kurzbz + FROM + lehre.tbl_lehreinheit + JOIN lehre.tbl_lehreinheitmitarbeiter lema USING (lehreinheit_id) + JOIN public.tbl_benutzer b ON b.uid = lema.mitarbeiter_uid + JOIN public.tbl_person p using (person_id) + WHERE + tbl_lehreinheit.lehrveranstaltung_id= ? + AND tbl_lehreinheit.studiensemester_kurzbz = ? + AND lehrfunktion_kurzbz = 'LV-Leitung' + ORDER BY + lema.insertamum DESC + LIMIT 1 + "; + + return $this->execQuery($qry, $params); + } /** * Gets all Leiter of Lehrveranstaltungsorganisationseinheit * @param $lehrveranstaltung_id From cb77f3148a5a6fe2da87f614a4897457907ddf4c Mon Sep 17 00:00:00 2001 From: Cristina Date: Wed, 1 Oct 2025 13:50:57 +0200 Subject: [PATCH 11/43] Added method to get Stundenplantermine for Lehreinheit/Lehrveranstaltung --- .../models/ressource/Stundenplan_model.php | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/application/models/ressource/Stundenplan_model.php b/application/models/ressource/Stundenplan_model.php index 389be582d..067e2b790 100644 --- a/application/models/ressource/Stundenplan_model.php +++ b/application/models/ressource/Stundenplan_model.php @@ -535,4 +535,53 @@ class Stundenplan_model extends DB_Model return $this->execQuery($query, [$uid, $uid]); } + + /** + * Get Stundenplantermine for given Lehreinheit. + * + * @param $lehreinheit_id + * @return array|stdClass|null + */ + public function getTermineByLe($lehreinheit_id) + { + $qry = ' + SELECT DISTINCT + datum + FROM + lehre.vw_stundenplan + WHERE + lehreinheit_id = ? + ORDER BY + datum ASC + '; + + return $this->execQuery($qry, [$lehreinheit_id]); + } + + /** + * Get Stundenplantermine for given Lehrveranstaltung of given Studiensemester. + * + * @param $lehrveranstaltung_id + * @param $studiensemester_kurzbz + * @return array|stdClass|null + */ + public function getTermineByLv($lehrveranstaltung_id, $studiensemester_kurzbz) + { + $qry = ' + SELECT DISTINCT + datum + FROM + lehre.vw_stundenplan + WHERE + lehreinheit_id IN ( + SELECT lehreinheit_id + FROM lehre.tbl_lehreinheit + WHERE lehrveranstaltung_id = ? + AND studiensemester_kurzbz = ? + ) + ORDER BY datum ASC + '; + + return $this->execQuery($qry, [$lehrveranstaltung_id, $studiensemester_kurzbz]); + } } From deebe987d32a0bec2e64bd162c4b0bade7aa7149 Mon Sep 17 00:00:00 2001 From: Cristina Date: Wed, 1 Oct 2025 13:51:43 +0200 Subject: [PATCH 12/43] Added slot selectedItem to autocomplete component in Input.js --- public/js/components/Form/Input.js | 1 + 1 file changed, 1 insertion(+) diff --git a/public/js/components/Form/Input.js b/public/js/components/Form/Input.js index 81b47d504..3c3fa45d5 100644 --- a/public/js/components/Form/Input.js +++ b/public/js/components/Form/Input.js @@ -280,6 +280,7 @@ export default { + From 2aee86baba09b66e92ad99c2881b7685dd234a5a Mon Sep 17 00:00:00 2001 From: Cristina Date: Tue, 14 Oct 2025 09:55:55 +0200 Subject: [PATCH 13/43] Changed phrase lvevaluierung/logoutText --- system/phrasesupdate.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 469815a46..ede5cc2e3 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -49663,8 +49663,9 @@ and represent the current state of research on the topic. The prescribed citatio array( 'sprache' => 'German', 'text' => ' -

Ihr Feedback dient den Lehrenden zur Selbstevaluierung und Ihre Jahrgangsvertretungen werden von der Studiengangsleitung zum Jour-Fixe eingeladen, um die Ergebnisse zu besprechen.

-

Ihr Feedback dient der kontinuierlichen Weiterentwicklung der Lehrveranstaltung. Mehr Details dazu finden Sie hier: +

Danke, dass Sie sich Zeit für das Feedback genommen haben! Ihre ehrliche und konstruktive Rückmeldung ist essenziell, damit Ihre Lehrenden und Ihre Studiengangsleitung die Lehrveranstaltung immer weiter verbessern und anpassen können!

+

Und was passiert jetzt mit Ihrem Feedback? Die Studiengangsleitung wird die Ergebnisse & Maßnahmen zusammen mit Ihrer Jahrgangsvertretung besprechen. So tragen Sie aktiv dazu bei, die Lehrveranstaltung für zukünftige Semester noch spannender & lehrreicher zu machen!

+

Gemeinsam für mehr Qualität in der Lehre!

', 'description' => '', 'insertvon' => 'system' @@ -49672,8 +49673,9 @@ and represent the current state of research on the topic. The prescribed citatio array( 'sprache' => 'English', 'text' => ' -

Your feedback is used by the lecturers for self-evaluation and your year representatives are invited to the Jour-Fixe by the head of degree program to discuss the results.

-

Your feedback is used for the continuous further development of the course. You can find more details here: +

Thank you for taking the time to provide feedback! Your honest and constructive input is essential for your lecturers and degree program director to continuously improve and adapt the course.

+

What happens with your feedback? The degree program director will discuss the results and potential measures together with your academic year representatives. You have thus actively contributed to making the course even more engaging and educational for future semesters!

+

Working together for higher quality in teaching!

', 'description' => '', 'insertvon' => 'system' From 43281c6ba2d9e6010ec3e165d2ba7ac5dad15718 Mon Sep 17 00:00:00 2001 From: Cristina Date: Thu, 13 Nov 2025 09:48:54 +0100 Subject: [PATCH 14/43] Removed test buttons from FhcChart basic template --- public/js/components/Chart/FhcChart.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/public/js/components/Chart/FhcChart.js b/public/js/components/Chart/FhcChart.js index 0733811f1..723ac0159 100644 --- a/public/js/components/Chart/FhcChart.js +++ b/public/js/components/Chart/FhcChart.js @@ -8,12 +8,6 @@ export const FhcChart = { }, template: `
-
- - - - -
From 0a118a1427a8d49f7403e32c12382682ab97cb4f Mon Sep 17 00:00:00 2001 From: Cristina Date: Thu, 13 Nov 2025 10:50:36 +0100 Subject: [PATCH 15/43] Clustered LV-Evaluierung phrases after merge --- system/phrasesupdate.php | 529 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 529 insertions(+) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 096d5086c..77015ae18 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -51467,6 +51467,535 @@ I have been informed that I am under no obligation to consent to the transmissio ) ) ), + // LVEVALUIERUNG --------------------------------------------------------------------------------------------------- + array( + 'app' => 'core', + 'category' => 'global', + 'phrase' => 'abschicken', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Abschicken', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Submit', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'global', + 'phrase' => 'zurueckZumStart', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Zurück zum Start', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Back to Start', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'global', + 'phrase' => 'lvevaluierungAbschicken', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'LV-Evaluierung abschicken', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Submit Course Evaluation', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'global', + 'phrase' => 'lvevaluierung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'LV-Evaluierung', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Course Evaluation', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'loginTextCodeEingeben', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Bitte geben Sie Ihren Code ein, um die Evaluierung zu starten:', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Please enter your code to start the evaluation:', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'loginCodeEingeben', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Evaluierung-Code eingeben', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Enter your Evaluation-Code', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'loginTextLvevaluierung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => ' +
+

Die folgende LV-Evaluierung umfasst

+
+
    +
  • zwei (geschlossene) Pflichtfragen
  • +
  • die Möglichkeit, optional zu einzelnen Bereichen konkreteres Feedback zu geben
  • +
  • zwei optionale Freitextfragen
  • +
+ ', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => ' +
+

The following course evaluation includes

+
+
    +
  • two (closed) mandatory questions
  • +
  • the opportunity to optionally provide more specific feedback on individual areas
  • +
  • two optional free-text questions
  • +
+ ', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'loginTextAntwortoptionen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => ' +
+

Die Antwortoptionen umfassen 5 Stufen:

+
+
    +
  • Sehr gut
  • +
  • Gut
  • +
  • Mittel
  • +
  • Schlecht
  • +
  • Sehr schlecht
  • +
+ ', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => ' +
+

The answer options comprise 5 levels:

+
+
    +
  • Excellent
  • +
  • Good
  • +
  • Satisfactory
  • +
  • Poor
  • +
  • Insufficient
  • +
+ ', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'evaluierungPeriodeBeendet', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Der Evaluierungszeitraum endete am {date}', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Evaluation period was closed on {date}', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'evaluierungPeriodeStartetErst', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Der Evaluierungszeitraum startet erst am {date}', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Evaluation period starts on {date}', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'evaluierungEingereicht', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Die Evaluierung wurde am {date} eingereicht', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Evaluation was submitted on {date}', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'evaluierungNichtMehrVerfuegbar', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Diese Evaluierung ist nicht mehr verfügbar.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'This evaluation is no longer available.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'evaluierungNichtVerfuegbar', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Diese Evaluierung ist nicht verfügbar.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'This evaluation is not available yet.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'logoutTitle', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Danke!
Was passiert nun mit Ihrem Feedback?', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Thank you!
What happens to your feedback now?', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'logoutText', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => ' +

Danke, dass Sie sich Zeit für das Feedback genommen haben! Ihre ehrliche und konstruktive Rückmeldung ist essenziell, damit Ihre Lehrenden und Ihre Studiengangsleitung die Lehrveranstaltung immer weiter verbessern und anpassen können!

+

Und was passiert jetzt mit Ihrem Feedback? Die Studiengangsleitung wird die Ergebnisse & Maßnahmen zusammen mit Ihrer Jahrgangsvertretung besprechen. So tragen Sie aktiv dazu bei, die Lehrveranstaltung für zukünftige Semester noch spannender & lehrreicher zu machen!

+

Gemeinsam für mehr Qualität in der Lehre!

+ ', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => ' +

Thank you for taking the time to provide feedback! Your honest and constructive input is essential for your lecturers and degree program director to continuously improve and adapt the course.

+

What happens with your feedback? The degree program director will discuss the results and potential measures together with your academic year representatives. You have thus actively contributed to making the course even more engaging and educational for future semesters!

+

Working together for higher quality in teaching!

+ ', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'evaluierungZeitAbgelaufen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Die Evaluierungszeit ist abgelaufen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'The Evaluation time is over', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'evaluierungAntwortenNichtUebermittelt', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Ihre Antworten wurden nicht übermittelt.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Your responses were not submitted.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'evaluierungCodeExistiertNicht', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Dieser Evaluierungscode exisitiert nicht', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'This evaluation code does not exist', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'evaluierungNichtAktiv', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Die Evaluierung ist nicht aktiv', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Evaluation is not active', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'zeitLaeuftAb', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Zeit läuft bald ab – zum Speichern bitte ‚Abschicken‘ klicken', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Time is running out — please click ‘Submit’ to save your answers', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'spracheAuswaehlen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Sprache auswählen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Select language', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'fhtwLogo', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'FH Technikum Wien Logo', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'UAS Technikum Wien Logo', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'evaluierungscodeEingeben', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Evaluierungscode eingeben', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Enter Evaluation code', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'lvevaluierung', + 'category' => 'fragebogen', + 'phrase' => 'fragebogen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Fragebogen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Questionnaire', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), // ### DOKUMENTE ERSTELLEN PHRASEN END ### ); From 993dff3351bda12dfaf75268a228f6c8005111bb Mon Sep 17 00:00:00 2001 From: Cristina Date: Thu, 13 Nov 2025 11:11:37 +0100 Subject: [PATCH 16/43] Gendered phrase lektorInnen (FHTW style) --- system/phrasesupdate.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 77015ae18..ac3cba8f4 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -13357,13 +13357,13 @@ Any unusual occurrences 'phrases' => array( array( 'sprache' => 'German', - 'text' => 'LektorInnen', + 'text' => 'Lehrende', 'description' => '', 'insertvon' => 'system' ), array( 'sprache' => 'English', - 'text' => 'Lectors', + 'text' => 'Lecturers', 'description' => '', 'insertvon' => 'system' ) From 5c9710f44d77747473ecec9e11ebb69bc092348d Mon Sep 17 00:00:00 2001 From: ma0048 Date: Tue, 2 Dec 2025 13:49:05 +0100 Subject: [PATCH 17/43] externe ueberwachung v1 --- cis/testtool/externeueberwachung.js | 35 +++ cis/testtool/frage.php | 6 +- cis/testtool/index.php | 63 ++++++ cis/testtool/login.php | 19 +- cis/testtool/menu.php | 30 ++- cis/testtool/resetconnection.php | 25 +++ cis/testtool/session_init.php | 11 + cis/testtool/topbar.php | 14 +- composer.json | 3 +- config/cis.config-default.inc.php | 6 + include/externe_ueberwachung.class.php | 203 ++++++++++++++++++ include/reihungstest.class.php | 10 +- system/dbupdate_3.4.php | 3 +- ...hungstest_ueberwachung_mit_constructor.php | 42 ++++ vilesci/stammdaten/reihungstestverwaltung.php | 8 + 15 files changed, 461 insertions(+), 17 deletions(-) create mode 100644 cis/testtool/externeueberwachung.js create mode 100644 cis/testtool/resetconnection.php create mode 100644 cis/testtool/session_init.php create mode 100644 include/externe_ueberwachung.class.php create mode 100644 system/dbupdate_3.4/62889_reihungstest_ueberwachung_mit_constructor.php diff --git a/cis/testtool/externeueberwachung.js b/cis/testtool/externeueberwachung.js new file mode 100644 index 000000000..a40a93e05 --- /dev/null +++ b/cis/testtool/externeueberwachung.js @@ -0,0 +1,35 @@ +(function () { + /* + + const params = new URLSearchParams(location.search); + let expectedOrigin = params.get("examus-client-origin"); + + if (!expectedOrigin) + { + window.top.location.href = 'resetconnection.php'; + return; + } + */ + let proctoringOK = false; + + window.addEventListener("message", function (e) { + /*if (e.origin !== expectedOrigin) { + return; + }*/ + + const data = e.data || {}; + + if (data.proctoringIsActive) + { + proctoringOK = true; + } + }); + + setTimeout(function () { + if (!proctoringOK) + { + console.warn("Constructor nicht aktiv!") + //window.location.href='resetconnection.php'; + } + }, 1000); +})(); \ No newline at end of file diff --git a/cis/testtool/frage.php b/cis/testtool/frage.php index c38229cdf..4267d6a13 100644 --- a/cis/testtool/frage.php +++ b/cis/testtool/frage.php @@ -45,7 +45,7 @@ if (!$db = new basis_db()) $PHP_SELF=$_SERVER["PHP_SELF"]; // Start session -session_start(); +require_once './session_init.php'; // If language is changed by language select menu, reset language variables if (isset($_GET['sprache_user']) && !empty($_GET['sprache_user'])) @@ -182,6 +182,10 @@ echo ' if(!isset($_SESSION['pruefling_id'])) die($p->t('testtool/bitteZuerstAnmelden')); +if (!empty($_SESSION['externe_ueberwachung']) && isset($_SESSION['externe_ueberwachung_verified'])): ?> + +load($_SESSION['pruefling_id']); diff --git a/cis/testtool/index.php b/cis/testtool/index.php index d235e6ce9..9aa6c3f84 100644 --- a/cis/testtool/index.php +++ b/cis/testtool/index.php @@ -1,16 +1,78 @@ TestTool - FH Technikum Wien + + + @@ -26,3 +88,4 @@ if(isset($_GET['prestudent']) && is_numeric($_GET['prestudent'])) + diff --git a/cis/testtool/login.php b/cis/testtool/login.php index 5a2ae0dea..2b4e678fa 100644 --- a/cis/testtool/login.php +++ b/cis/testtool/login.php @@ -40,8 +40,7 @@ if (!$db = new basis_db()) die('Fehler beim Oeffnen der Datenbankverbindung'); // Start session -session_start(); - +require_once './session_init.php'; // Logout (triggered by logout button in menu.php) if (isset($_GET['logout']) && $_GET['logout'] == true) { @@ -173,6 +172,12 @@ if (isset($_REQUEST['prestudent'])) else $reload_menu = true; } + + if ($rt->externe_ueberwachung) + { + $_SESSION['externe_ueberwachung'] = true; + $_SESSION['externe_ueberwachung_verified'] = false; + } } $pruefling = new pruefling(); @@ -339,6 +344,8 @@ if ((isset($_SESSION['prestudent_id']) && !isset($_SESSION['pruefling_id']) && !isset($_SESSION['confirmation_needed']) && !isset($_SESSION['confirmed_code'])) || (isset($_SESSION['confirmation_needed']) && $_SESSION['confirmation_needed'] === true && isset($_SESSION['confirmed_code']) && $_SESSION['confirmed_code'] === true && + isset($_SESSION['externe_ueberwachung']) && $_SESSION['externe_ueberwachung'] === true && + isset($_SESSION['externe_ueberwachung_verified']) && $_SESSION['externe_ueberwachung_verified'] === true && isset($_SESSION['prestudent_id']) && !isset($_SESSION['pruefling_id']))) { $pruefling = new pruefling(); @@ -468,7 +475,13 @@ if (isset($_POST['save']) && isset($_SESSION['prestudent_id'])) top.location.href = 'resetconnection.php';"; + exit; +} +else if (isset($_SESSION['confirmation_needed']) && $_SESSION['confirmation_needed'] === true && isset($_SESSION['confirmed_code']) && $_SESSION['confirmed_code'] === false) { echo ' diff --git a/cis/testtool/menu.php b/cis/testtool/menu.php index 7c8b12b9d..2c027c886 100644 --- a/cis/testtool/menu.php +++ b/cis/testtool/menu.php @@ -34,7 +34,7 @@ if (!$db = new basis_db()) die('Fehler beim Oeffnen der Datenbankverbindung'); // Start session -session_start(); +require_once './session_init.php'; // If language is changed by language select menu, reset language and session variables if(isset($_GET['sprache_user']) && !empty($_GET['sprache_user'])) @@ -73,7 +73,7 @@ if (isset($_SESSION['pruefling_id'])) // Link zur Startseite echo ' - '.$p->t('testtool/startseite').' + '.$p->t('testtool/startseite').' '; // Link zur Einleitung @@ -83,7 +83,7 @@ if (isset($_SESSION['pruefling_id'])) { echo ' - '.$p->t('testtool/einleitung').' + '.$p->t('testtool/einleitung').' '; } @@ -379,10 +379,13 @@ if (isset($_SESSION['pruefling_id'])) } } + echo ' + - '.$gebietbezeichnung.' + '.$gebietbezeichnung.' + '; @@ -401,7 +404,7 @@ if (isset($_SESSION['pruefling_id'])) // Link zum Logout echo ' - Logout + Logout '; echo ''; @@ -461,5 +464,22 @@ else ''); } }); + + function loadContent(url) + { + if (parent && typeof parent.loadInContent === 'function') + { + parent.loadInContent(url); + return false; + } + + let frame = parent?.frames?.["content"]; + if (frame) + { + frame.location.href = url; + return false; + } + } + diff --git a/cis/testtool/resetconnection.php b/cis/testtool/resetconnection.php new file mode 100644 index 000000000..200b3d778 --- /dev/null +++ b/cis/testtool/resetconnection.php @@ -0,0 +1,25 @@ +start($_SESSION['prestudent_id'], $_SESSION['reihungstestID']); + $urlSafe = htmlspecialchars($url, ENT_QUOTES); + + + //var_dump($urlSafe); + + header("Location: $urlSafe"); + //echo ""; + $_SESSION['externe_ueberwachung_verified'] = true; + +} \ No newline at end of file diff --git a/cis/testtool/session_init.php b/cis/testtool/session_init.php new file mode 100644 index 000000000..fd7f0b5f3 --- /dev/null +++ b/cis/testtool/session_init.php @@ -0,0 +1,11 @@ + diff --git a/include/externe_ueberwachung.class.php b/include/externe_ueberwachung.class.php new file mode 100644 index 000000000..0e2e06ec9 --- /dev/null +++ b/include/externe_ueberwachung.class.php @@ -0,0 +1,203 @@ +getSessionByPrestudent($prestudent_id); + return $this->getSessionStatus($session_id); + } + public function start($prestudent_id, $reihungstest_id) + { + $session_id = $this->getSessionByPrestudent($prestudent_id); + + if (!$session_id) + { + $session_id = $this->createSession($prestudent_id); + } + else + { + $status = $this->getSessionStatus($session_id); + + if (in_array($status, array('late_to_start', 'finished'))) + { + $session_id = $this->createSession($prestudent_id); + } + } + + $payload = $this->getPayload($session_id, $prestudent_id, $reihungstest_id); + return $this->getStartUrl($payload); + } + + + private function createSession($prestudent_id) + { + if (is_null($prestudent_id)) + { + $this->errormsg = 'Falsche Parameterübergabe'; + return false; + } + + $uuid = $this->genereateUUID(); + + $qry = "INSERT INTO testtool.tbl_externe_ueberwachung (prestudent_id, session_id, insertvon) + VALUES (". + $this->db_add_param($prestudent_id).",". + $this->db_add_param($uuid).",". + $this->db_add_param(get_uid()).")"; + + if($this->db_query($qry)) + { + return $uuid; + } + else + { + $this->errormsg = 'Fehler beim Speichern der Antwort'; + return false; + } + } + public function getSessionByPrestudent($prestudent_id) + { + if (is_null($prestudent_id)) + { + $this->errormsg = 'Falsche Parameterübergabe'; + return false; + } + + $qry = "SELECT session_id + FROM testtool.tbl_externe_ueberwachung + ORDER BY insertamum DESC + LIMIT 1"; + + if($result = $this->db_query($qry)) + { + if ($row = $this->db_fetch_object($result)) + { + return $row->session_id; + } + else + { + $this->errormsg = 'Daten konnten nicht geladen werden'; + return false; + } + } + else + { + $this->errormsg = 'Fehler bei einer Abfrage'; + return false; + } + } + + public function getSessionStatus($session_id) + { + $payload = $this->getSessionPayload($session_id); + $jwt = $this->createToken($payload); + + $url = $this->getSessionUrl($session_id); + + $ch = curl_init($url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_HTTPHEADER, [ + "Authorization: JWT {$jwt}", + "Content-Type: application/json", + ]); + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); + + $response = curl_exec($ch); + $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); + + curl_close($ch); + + $data = json_decode($response, true); + return isset($data['status']) ? $data['status'] : false; + } + + private function getSessionPayload($session_id) + { + return [ + "session_id" => $session_id, + "iat" => time(), + "exp" => time() + 120, + ]; + } + + private function getPayload($session_id, $prestudent_id, $reihungstest_id) + { + $prestudent = new prestudent($prestudent_id); + $person = new Person($prestudent->person_id); + + $reihungstest = new Reihungstest($reihungstest_id); + + $datetime = new DateTime(); + $today = $datetime->format('Y-m-d'); + + $payload = [ + "userId"=> $prestudent_id, + "lastName"=> $person->nachname, + "firstName"=> $person->vorname, + "language"=> $person->sprache, + "accountName"=> "technikum_wien", + "accountId"=> "technikum_wien", + "examId" => !is_null(trim($reihungstest->anmerkung)) ? $reihungstest->anmerkung : ($today . " RT Test"), + "examName" => !is_null(trim($reihungstest->anmerkung)) ? $reihungstest->anmerkung : ($today . " RT Test"), + "allowMultipleDisplays" => true, + "allowMakingRoomScanSecondCamera" => false, + "duration"=> 120, + "schedule"=> false, + "trial"=> true, + "proctoring"=> "offline", + "identification"=> "skip", + "startDate"=> "2018-03-27T00:00:00Z", //TODO anpassen + "endDate"=> "2027-03-30T12:55:00Z", // TODO anpassen + "sessionId"=> $session_id, + "sessionUrl"=> "https://demo.dev.technikum-wien.at/cis/testtool/index.php" + ]; + return $payload; + } + + private function getSessionUrl($session_id) + { + return EXTERNE_UEBERWACHUNG_PROTOCOL_URL . "/api/v2/integration/simple/". EXTERNE_UEBERWACHUNG_INTEGRATION_NAME . "/sessions/". urlencode($session_id) ."/status/"; + } + + private function getStartUrl($payload) + { + $token = $this->createToken($payload); + $query = http_build_query(['token' => $token]); + + return EXTERNE_UEBERWACHUNG_PROTOCOL_URL . '/integration/simple/'. EXTERNE_UEBERWACHUNG_INTEGRATION_NAME .'/start?' . $query; + } + + private function createToken($payload) + { + return JWT::encode($payload, EXTERNE_UEBERWACHUNG_SECRET_KEY, 'HS256'); + } + + private function genereateUUID() + { + $data = openssl_random_pseudo_bytes(16); + + $data[6] = chr(ord($data[6]) & 0x0f | 0x40); + $data[8] = chr(ord($data[8]) & 0x3f | 0x80); + + return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4)); + } +} + +?> + + + diff --git a/include/reihungstest.class.php b/include/reihungstest.class.php index df4134ebf..94d064c25 100644 --- a/include/reihungstest.class.php +++ b/include/reihungstest.class.php @@ -63,6 +63,7 @@ class reihungstest extends basis_db public $zugangs_ueberpruefung = false; //boolean public $zugangscode; //smallint + public $externe_ueberwachung = false; //boolean /** @@ -119,6 +120,7 @@ class reihungstest extends basis_db $this->aufnahmegruppe_kurzbz = $row->aufnahmegruppe_kurzbz; $this->zugangs_ueberpruefung = $this->db_parse_bool($row->zugangs_ueberpruefung); $this->zugangscode = $row->zugangscode; + $this->externe_ueberwachung = $this->db_parse_bool($row->externe_ueberwachung); return true; } @@ -234,7 +236,7 @@ class reihungstest extends basis_db $qry = 'BEGIN; INSERT INTO public.tbl_reihungstest (studiengang_kz, ort_kurzbz, anmerkung, datum, uhrzeit, insertamum, insertvon, updateamum, updatevon, max_teilnehmer, oeffentlich, freigeschaltet, - studiensemester_kurzbz, stufe, anmeldefrist, aufnahmegruppe_kurzbz, zugangs_ueberpruefung, zugangscode) VALUES('. + studiensemester_kurzbz, stufe, anmeldefrist, aufnahmegruppe_kurzbz, zugangs_ueberpruefung, zugangscode, externe_ueberwachung) VALUES('. $this->db_add_param($this->studiengang_kz, FHC_INTEGER).', '. $this->db_add_param($this->ort_kurzbz).', '. $this->db_add_param($this->anmerkung).', '. @@ -250,7 +252,8 @@ class reihungstest extends basis_db $this->db_add_param($this->anmeldefrist).','. $this->db_add_param($this->aufnahmegruppe_kurzbz). ',' . $this->db_add_param($this->zugangs_ueberpruefung, FHC_BOOLEAN).','. - $this->db_add_param($this->zugangscode) . ');'; + $this->db_add_param($this->zugangscode) . ','. + $this->db_add_param($this->externe_ueberwachung, FHC_BOOLEAN) . ');'; } else { @@ -270,7 +273,8 @@ class reihungstest extends basis_db 'anmeldefrist='.$this->db_add_param($this->anmeldefrist).', '. 'aufnahmegruppe_kurzbz='.$this->db_add_param($this->aufnahmegruppe_kurzbz).', '. 'zugangs_ueberpruefung='.$this->db_add_param($this->zugangs_ueberpruefung, FHC_BOOLEAN).', '. - 'zugangscode='.$this->db_add_param($this->zugangscode).' '. + 'zugangscode='.$this->db_add_param($this->zugangscode).', '. + 'externe_ueberwachung='.$this->db_add_param($this->externe_ueberwachung, FHC_BOOLEAN).' '. 'WHERE reihungstest_id='.$this->db_add_param($this->reihungstest_id, FHC_INTEGER, false).';'; } diff --git a/system/dbupdate_3.4.php b/system/dbupdate_3.4.php index ed50b0df1..708e69717 100644 --- a/system/dbupdate_3.4.php +++ b/system/dbupdate_3.4.php @@ -86,6 +86,7 @@ require_once('dbupdate_3.4/40314_electronic_onboarding_anbindung_ida.php'); require_once('dbupdate_3.4/47972_pruefungsverwaltung_ects_angabe.php'); require_once('dbupdate_3.4/67490_studstatus_suche_abort_controller_haengt.php'); require_once('dbupdate_3.4/68744_StV_settings.php'); +require_once('dbupdate_3.4/62889_reihungstest_ueberwachung_mit_constructor.php'); // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; @@ -358,7 +359,7 @@ $tabellen=array( "public.tbl_profil_update_status" => array("status_kurzbz","beschreibung","bezeichnung_mehrsprachig"), "public.tbl_profil_update_topic" => array("topic_kurzbz","beschreibung","bezeichnung_mehrsprachig"), "public.tbl_raumtyp" => array("raumtyp_kurzbz","beschreibung","kosten","aktiv"), - "public.tbl_reihungstest" => array("reihungstest_id","studiengang_kz","ort_kurzbz","anmerkung","datum","uhrzeit","updateamum","updatevon","insertamum","insertvon","ext_id","freigeschaltet","max_teilnehmer","oeffentlich","studiensemester_kurzbz","aufnahmegruppe_kurzbz","stufe","anmeldefrist","zugangs_ueberpruefung","zugangscode"), + "public.tbl_reihungstest" => array("reihungstest_id","studiengang_kz","ort_kurzbz","anmerkung","datum","uhrzeit","updateamum","updatevon","insertamum","insertvon","ext_id","freigeschaltet","max_teilnehmer","oeffentlich","studiensemester_kurzbz","aufnahmegruppe_kurzbz","stufe","anmeldefrist","zugangs_ueberpruefung","zugangscode", "externe_ueberwachung"), "public.tbl_rueckstellung" => array("rueckstellung_id","person_id","status_kurzbz","datum_bis","insertamum","insertvon"), "public.tbl_rueckstellung_status" => array("status_kurzbz", "bezeichnung_mehrsprachig", "sort", "aktiv"), "public.tbl_rt_ort" => array("rt_id","ort_kurzbz","uid"), diff --git a/system/dbupdate_3.4/62889_reihungstest_ueberwachung_mit_constructor.php b/system/dbupdate_3.4/62889_reihungstest_ueberwachung_mit_constructor.php new file mode 100644 index 000000000..7f306e3d9 --- /dev/null +++ b/system/dbupdate_3.4/62889_reihungstest_ueberwachung_mit_constructor.php @@ -0,0 +1,42 @@ +db_query("SELECT externe_ueberwachung FROM public.tbl_reihungstest LIMIT 1")) +{ + $qry = "ALTER TABLE public.tbl_reihungstest ADD COLUMN externe_ueberwachung boolean NOT NULL DEFAULT false;"; + + if(!$db->db_query($qry)) + echo 'public.tbl_reihungstest: '.$db->db_last_error().'
'; + else + echo '
public.tbl_reihungstest: Spalte externe_ueberwachung hinzugefuegt'; +} + +if(!$result = @$db->db_query("SELECT 1 FROM testtool.tbl_externe_ueberwachung LIMIT 1")) +{ + $qry = "CREATE TABLE testtool.tbl_externe_ueberwachung ( + externe_ueberwachung_id INTEGER NOT NULL, + prestudent_id INTEGER NOT NULL, + session_id UUID NOT NULL, + insertamum TIMESTAMP DEFAULT NOW(), + insertvon VARCHAR(32) NOT NULL, + CONSTRAINT tbl_externe_ueberwachung_pk PRIMARY KEY(externe_ueberwachung_id) + ); + CREATE SEQUENCE testtool.tbl_externe_ueberwachungg_id_seq + INCREMENT BY 1 + NO MAXVALUE + NO MINVALUE + CACHE 1; + ALTER TABLE testtool.tbl_externe_ueberwachung ALTER COLUMN externe_ueberwachung_id SET DEFAULT nextval('testtool.tbl_externe_ueberwachungg_id_seq'); + ALTER TABLE testtool.tbl_externe_ueberwachung ADD CONSTRAINT fk_prestudent_externe_ueberwachung FOREIGN KEY (prestudent_id) REFERENCES public.tbl_prestudent (prestudent_id) ON DELETE RESTRICT ON UPDATE CASCADE; + ALTER TABLE testtool.tbl_externe_ueberwachung ADD CONSTRAINT unique_externe_ueberwachung_session_id UNIQUE (session_id); + GRANT SELECT, INSERT ON testtool.tbl_externe_ueberwachung TO vilesci; + GRANT SELECT, INSERT ON testtool.tbl_externe_ueberwachung TO web; + GRANT SELECT, UPDATE ON testtool.tbl_externe_ueberwachungg_id_seq TO vilesci; + GRANT SELECT, UPDATE ON testtool.tbl_externe_ueberwachungg_id_seq TO web;"; + + if(!$db->db_query($qry)) + echo 'testtool.tbl_externe_ueberwachung: '.$db->db_last_error().'
'; + else + echo '
testtool.tbl_externe_ueberwachung: table created'; +} diff --git a/vilesci/stammdaten/reihungstestverwaltung.php b/vilesci/stammdaten/reihungstestverwaltung.php index 07e88183c..babbc3ce4 100644 --- a/vilesci/stammdaten/reihungstestverwaltung.php +++ b/vilesci/stammdaten/reihungstestverwaltung.php @@ -1458,6 +1458,7 @@ if(isset($_POST['speichern']) || isset($_POST['kopieren'])) $reihungstest->anmeldefrist = $datum_obj->formatDatum($_POST['anmeldefrist']); $reihungstest->zugangs_ueberpruefung = false; $reihungstest->zugangscode = null; + $reihungstest->externe_ueberwachung = false; } else { @@ -1474,6 +1475,7 @@ if(isset($_POST['speichern']) || isset($_POST['kopieren'])) $reihungstest->updatevon = $user; $reihungstest->zugangs_ueberpruefung = isset($_POST['zugangs_ueberpruefung']); $reihungstest->zugangscode = ($_POST['zugangcode'] === '' ? null : $_POST['zugangcode']); + $reihungstest->externe_ueberwachung = isset($_POST['externe_ueberwachung']); } $reihungstest->studiengang_kz = $_POST['studiengang_kz']; //$reihungstest->ort_kurzbz = $_POST['ort_kurzbz']; @@ -2571,6 +2573,12 @@ $studienplaene_list = implode(',', array_keys($studienplaene_arr)); (Verpflichtend, wenn die Zugangsüberprüfung aktiviert ist) + + Externe Überwachnung + + externe_ueberwachung ? 'checked="checked"' : '' ?>> + +   From d8e57d43f901a5a7307bdafb3cd5af6c080f8629 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Tue, 2 Dec 2025 13:53:38 +0100 Subject: [PATCH 18/43] session url in die config verschoben --- config/cis.config-default.inc.php | 1 + include/externe_ueberwachung.class.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/config/cis.config-default.inc.php b/config/cis.config-default.inc.php index b6607ca4a..81f09f697 100644 --- a/config/cis.config-default.inc.php +++ b/config/cis.config-default.inc.php @@ -306,5 +306,6 @@ define('CIS_REDIRECT_TO_CIS4', false); define('EXTERNE_UEBERWACHUNG_PROTOCOL_URL', 'https://example.com'); define('EXTERNE_UEBERWACHUNG_SECRET_KEY', null); define('EXTERNE_UEBERWACHUNG_INTEGRATION_NAME', 'example'); +define('EXTERNE_UEBERWACHUNG_SESSION_URL', 'https://example.com'); ?> diff --git a/include/externe_ueberwachung.class.php b/include/externe_ueberwachung.class.php index 0e2e06ec9..8adbee8a2 100644 --- a/include/externe_ueberwachung.class.php +++ b/include/externe_ueberwachung.class.php @@ -163,7 +163,7 @@ class externeUeberwachung extends basis_db "startDate"=> "2018-03-27T00:00:00Z", //TODO anpassen "endDate"=> "2027-03-30T12:55:00Z", // TODO anpassen "sessionId"=> $session_id, - "sessionUrl"=> "https://demo.dev.technikum-wien.at/cis/testtool/index.php" + "sessionUrl"=> EXTERNE_UEBERWACHUNG_SESSION_URL ]; return $payload; } From 8bab5285e9a2f083231dfb04cd5af9a2901a3ba0 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Wed, 10 Dec 2025 08:08:46 +0100 Subject: [PATCH 19/43] testversuch ueber config abfrage gefixed menu wird nicht mehr angezeigt --- cis/testtool/externeueberwachung.js | 3 ++- cis/testtool/menu.php | 8 ++++++-- cis/testtool/resetconnection.php | 6 ------ config/cis.config-default.inc.php | 1 + include/externe_ueberwachung.class.php | 3 ++- 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/cis/testtool/externeueberwachung.js b/cis/testtool/externeueberwachung.js index a40a93e05..d15404dec 100644 --- a/cis/testtool/externeueberwachung.js +++ b/cis/testtool/externeueberwachung.js @@ -29,7 +29,8 @@ if (!proctoringOK) { console.warn("Constructor nicht aktiv!") - //window.location.href='resetconnection.php'; + //TODO einkommentieren + //top.location.href='resetconnection.php'; } }, 1000); })(); \ No newline at end of file diff --git a/cis/testtool/menu.php b/cis/testtool/menu.php index 2c027c886..82623c1fd 100644 --- a/cis/testtool/menu.php +++ b/cis/testtool/menu.php @@ -61,8 +61,12 @@ $p = new phrasen($sprache_user); db_add_param($_SESSION['studiengang_kz'])." LIMIT 1"; diff --git a/cis/testtool/resetconnection.php b/cis/testtool/resetconnection.php index 200b3d778..39f50dfc5 100644 --- a/cis/testtool/resetconnection.php +++ b/cis/testtool/resetconnection.php @@ -14,12 +14,6 @@ if (isset($_SESSION['externe_ueberwachung']) && $_SESSION['externe_ueberwachung' $ueberwachung = new externeUeberwachung(); $url = $ueberwachung->start($_SESSION['prestudent_id'], $_SESSION['reihungstestID']); $urlSafe = htmlspecialchars($url, ENT_QUOTES); - - - //var_dump($urlSafe); - header("Location: $urlSafe"); - //echo ""; $_SESSION['externe_ueberwachung_verified'] = true; - } \ No newline at end of file diff --git a/config/cis.config-default.inc.php b/config/cis.config-default.inc.php index 81f09f697..0bef3a523 100644 --- a/config/cis.config-default.inc.php +++ b/config/cis.config-default.inc.php @@ -307,5 +307,6 @@ define('EXTERNE_UEBERWACHUNG_PROTOCOL_URL', 'https://example.com'); define('EXTERNE_UEBERWACHUNG_SECRET_KEY', null); define('EXTERNE_UEBERWACHUNG_INTEGRATION_NAME', 'example'); define('EXTERNE_UEBERWACHUNG_SESSION_URL', 'https://example.com'); +define('EXTERNE_UEBERWACHUNG_TRIAL_TEST', false); ?> diff --git a/include/externe_ueberwachung.class.php b/include/externe_ueberwachung.class.php index 8adbee8a2..db6f5ae6a 100644 --- a/include/externe_ueberwachung.class.php +++ b/include/externe_ueberwachung.class.php @@ -79,6 +79,7 @@ class externeUeberwachung extends basis_db $qry = "SELECT session_id FROM testtool.tbl_externe_ueberwachung + WHERE prestudent_id = ".$this->db_add_param($prestudent_id, FHC_INTEGER) . " ORDER BY insertamum DESC LIMIT 1"; @@ -157,7 +158,7 @@ class externeUeberwachung extends basis_db "allowMakingRoomScanSecondCamera" => false, "duration"=> 120, "schedule"=> false, - "trial"=> true, + "trial"=> EXTERNE_UEBERWACHUNG_TRIAL_TEST, "proctoring"=> "offline", "identification"=> "skip", "startDate"=> "2018-03-27T00:00:00Z", //TODO anpassen From 48512f46ab5ea3adefe758396ca0ea1eafd1849a Mon Sep 17 00:00:00 2001 From: ma0048 Date: Wed, 10 Dec 2025 15:15:23 +0100 Subject: [PATCH 20/43] exam name geandert --- include/externe_ueberwachung.class.php | 34 +++++++++++++------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/include/externe_ueberwachung.class.php b/include/externe_ueberwachung.class.php index db6f5ae6a..32911b9c5 100644 --- a/include/externe_ueberwachung.class.php +++ b/include/externe_ueberwachung.class.php @@ -146,25 +146,25 @@ class externeUeberwachung extends basis_db $today = $datetime->format('Y-m-d'); $payload = [ - "userId"=> $prestudent_id, - "lastName"=> $person->nachname, - "firstName"=> $person->vorname, - "language"=> $person->sprache, - "accountName"=> "technikum_wien", - "accountId"=> "technikum_wien", - "examId" => !is_null(trim($reihungstest->anmerkung)) ? $reihungstest->anmerkung : ($today . " RT Test"), - "examName" => !is_null(trim($reihungstest->anmerkung)) ? $reihungstest->anmerkung : ($today . " RT Test"), + "userId" => $prestudent_id, + "lastName" => $person->nachname, + "firstName" => $person->vorname, + "language" => $person->sprache, + "accountName" => "technikum_wien", + "accountId" => "technikum_wien", + "examId" => $reihungstest_id . '_' . $today, + "examName" => !is_null(trim($reihungstest->anmerkung)) ? ($reihungstest->anmerkung . '_' . $today) : ($reihungstest_id . '_' . $today), "allowMultipleDisplays" => true, "allowMakingRoomScanSecondCamera" => false, - "duration"=> 120, - "schedule"=> false, - "trial"=> EXTERNE_UEBERWACHUNG_TRIAL_TEST, - "proctoring"=> "offline", - "identification"=> "skip", - "startDate"=> "2018-03-27T00:00:00Z", //TODO anpassen - "endDate"=> "2027-03-30T12:55:00Z", // TODO anpassen - "sessionId"=> $session_id, - "sessionUrl"=> EXTERNE_UEBERWACHUNG_SESSION_URL + "duration" => 600, + "schedule" => false, + "trial" => EXTERNE_UEBERWACHUNG_TRIAL_TEST, + "proctoring" => "offline", + "identification" => "skip", + "startDate" => "2018-03-27T00:00:00Z", //TODO anpassen + "endDate" => "2027-03-30T12:55:00Z", // TODO anpassen + "sessionId" => $session_id, + "sessionUrl" => EXTERNE_UEBERWACHUNG_SESSION_URL ]; return $payload; } From 53cf777970b95ac36d4d78e319185ffac84782a1 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Wed, 10 Dec 2025 15:18:15 +0100 Subject: [PATCH 21/43] check im menu entfernt --- cis/testtool/menu.php | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/cis/testtool/menu.php b/cis/testtool/menu.php index 7c8b12b9d..7cb6f138d 100644 --- a/cis/testtool/menu.php +++ b/cis/testtool/menu.php @@ -425,28 +425,6 @@ else e.preventDefault(); }); }); - // Get users Browser - var ua = navigator.userAgent; - - // If Browser is any other than Mozilla Firefox and the test includes any MathML, - // show message to use Mozilla Firefox - if ((ua.indexOf("Firefox") > -1) == false) - { - let hasMathML = ""; - let userLang = ""; - if (hasMathML == true) - { - if (userLang == 'German') - { - alert('BITTE VERWENDEN SIE DEN MOZILLA FIREFOX BROWSER!\n(Manche Prüfungsfragen werden sonst nicht korrekt dargestellt.)'); - } - else if(userLang == 'English') - { - alert('PLEASE USE MOZILLA FIREFOX BROWSER!\n(Ohterwise some exam items will not be displayed correctly.)'); - } - } - } - // Error massage if check_gebiet function returns false $(function() { var invalid_gebiete = ""; From df639c8b0708640751026b2f5ca5f7cc63957089 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Thu, 11 Dec 2025 08:28:01 +0100 Subject: [PATCH 22/43] sprache mitschicken --- cis/testtool/resetconnection.php | 2 +- include/externe_ueberwachung.class.php | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cis/testtool/resetconnection.php b/cis/testtool/resetconnection.php index 39f50dfc5..e0141ae0b 100644 --- a/cis/testtool/resetconnection.php +++ b/cis/testtool/resetconnection.php @@ -12,7 +12,7 @@ if (!$db = new basis_db()) if (isset($_SESSION['externe_ueberwachung']) && $_SESSION['externe_ueberwachung'] === true) { $ueberwachung = new externeUeberwachung(); - $url = $ueberwachung->start($_SESSION['prestudent_id'], $_SESSION['reihungstestID']); + $url = $ueberwachung->start($_SESSION['prestudent_id'], $_SESSION['reihungstestID'], $_SESSION['sprache']); $urlSafe = htmlspecialchars($url, ENT_QUOTES); header("Location: $urlSafe"); $_SESSION['externe_ueberwachung_verified'] = true; diff --git a/include/externe_ueberwachung.class.php b/include/externe_ueberwachung.class.php index 32911b9c5..5e5bafded 100644 --- a/include/externe_ueberwachung.class.php +++ b/include/externe_ueberwachung.class.php @@ -20,7 +20,7 @@ class externeUeberwachung extends basis_db $session_id = $this->getSessionByPrestudent($prestudent_id); return $this->getSessionStatus($session_id); } - public function start($prestudent_id, $reihungstest_id) + public function start($prestudent_id, $reihungstest_id, $sprache) { $session_id = $this->getSessionByPrestudent($prestudent_id); @@ -38,7 +38,7 @@ class externeUeberwachung extends basis_db } } - $payload = $this->getPayload($session_id, $prestudent_id, $reihungstest_id); + $payload = $this->getPayload($session_id, $prestudent_id, $reihungstest_id, $sprache); return $this->getStartUrl($payload); } @@ -135,7 +135,7 @@ class externeUeberwachung extends basis_db ]; } - private function getPayload($session_id, $prestudent_id, $reihungstest_id) + private function getPayload($session_id, $prestudent_id, $reihungstest_id, $sprache) { $prestudent = new prestudent($prestudent_id); $person = new Person($prestudent->person_id); @@ -149,7 +149,7 @@ class externeUeberwachung extends basis_db "userId" => $prestudent_id, "lastName" => $person->nachname, "firstName" => $person->vorname, - "language" => $person->sprache, + "language" => $sprache === 'German' ? 'de' : 'en', "accountName" => "technikum_wien", "accountId" => "technikum_wien", "examId" => $reihungstest_id . '_' . $today, From 8280ec42b0900fbb8493fa3a38403c54a8fd8909 Mon Sep 17 00:00:00 2001 From: Cristina Date: Thu, 11 Dec 2025 16:07:07 +0100 Subject: [PATCH 23/43] Added method getEntitledStgs to Studiengang_model.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Get active Studiengänge with Kuerzel by given Studiengang-Kennzahlen. Helpful to easily get Studiengänge the user is entitled for. --- .../models/organisation/Studiengang_model.php | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/application/models/organisation/Studiengang_model.php b/application/models/organisation/Studiengang_model.php index 02f972690..98d650e0c 100644 --- a/application/models/organisation/Studiengang_model.php +++ b/application/models/organisation/Studiengang_model.php @@ -801,4 +801,38 @@ class Studiengang_model extends DB_Model return $this->execReadOnlyQuery($qry, array($studiengang_kz, $orgform_kurzbz, $studiensemester_kurzbz)); } + + /** + * Get active Studiengänge with Kuerzel by given Studiengang-Kennzahlen. + * Helpful to easily get Studiengänge the user is entitled for. + * + * @param $studiengang_kz_arr + * @param $studiensemester_kurzbz + * @return array|stdClass|null + */ + public function getEntitledStgs($studiengang_kz_arr, $studiensemester_kurzbz) + { + if (is_numeric($studiengang_kz_arr)) + { + $studiengang_kz_arr = [$studiengang_kz_arr]; + } + + $qry = ' + SELECT + DISTINCT stg.*, UPPER(typ::varchar(1) || kurzbz) AS kuerzel + FROM + public.tbl_studiengang stg + JOIN lehre.tbl_studienordnung sto USING(studiengang_kz) + JOIN lehre.tbl_studienplan stpl USING(studienordnung_id) + JOIN lehre.tbl_studienplan_semester stplsem USING(studienplan_id) + WHERE + stg.studiengang_kz IN ? + AND stg.aktiv = TRUE + AND stplsem.studiensemester_kurzbz = ? + ORDER BY + stg.kurzbzlang + '; + + return $this->execQuery($qry, [$studiengang_kz_arr, $studiensemester_kurzbz]); + } } From 5a77478071c7503ce32b885e0303f753343b4db2 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Mon, 15 Dec 2025 12:27:17 +0100 Subject: [PATCH 24/43] insertvon entfernt --- cis/testtool/externeueberwachung.js | 4 +--- include/externe_ueberwachung.class.php | 5 ++--- .../62889_reihungstest_ueberwachung_mit_constructor.php | 1 - 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/cis/testtool/externeueberwachung.js b/cis/testtool/externeueberwachung.js index d15404dec..65143290d 100644 --- a/cis/testtool/externeueberwachung.js +++ b/cis/testtool/externeueberwachung.js @@ -28,9 +28,7 @@ setTimeout(function () { if (!proctoringOK) { - console.warn("Constructor nicht aktiv!") - //TODO einkommentieren - //top.location.href='resetconnection.php'; + top.location.href='resetconnection.php'; } }, 1000); })(); \ No newline at end of file diff --git a/include/externe_ueberwachung.class.php b/include/externe_ueberwachung.class.php index 5e5bafded..b28a8439a 100644 --- a/include/externe_ueberwachung.class.php +++ b/include/externe_ueberwachung.class.php @@ -53,11 +53,10 @@ class externeUeberwachung extends basis_db $uuid = $this->genereateUUID(); - $qry = "INSERT INTO testtool.tbl_externe_ueberwachung (prestudent_id, session_id, insertvon) + $qry = "INSERT INTO testtool.tbl_externe_ueberwachung (prestudent_id, session_id) VALUES (". $this->db_add_param($prestudent_id).",". - $this->db_add_param($uuid).",". - $this->db_add_param(get_uid()).")"; + $this->db_add_param($uuid).")"; if($this->db_query($qry)) { diff --git a/system/dbupdate_3.4/62889_reihungstest_ueberwachung_mit_constructor.php b/system/dbupdate_3.4/62889_reihungstest_ueberwachung_mit_constructor.php index 7f306e3d9..1b469a635 100644 --- a/system/dbupdate_3.4/62889_reihungstest_ueberwachung_mit_constructor.php +++ b/system/dbupdate_3.4/62889_reihungstest_ueberwachung_mit_constructor.php @@ -19,7 +19,6 @@ if(!$result = @$db->db_query("SELECT 1 FROM testtool.tbl_externe_ueberwachung LI prestudent_id INTEGER NOT NULL, session_id UUID NOT NULL, insertamum TIMESTAMP DEFAULT NOW(), - insertvon VARCHAR(32) NOT NULL, CONSTRAINT tbl_externe_ueberwachung_pk PRIMARY KEY(externe_ueberwachung_id) ); CREATE SEQUENCE testtool.tbl_externe_ueberwachungg_id_seq From e6ef234c8b0aa52c43c7dd257593a1391eaef4d0 Mon Sep 17 00:00:00 2001 From: Cristina Date: Mon, 15 Dec 2025 16:27:47 +0100 Subject: [PATCH 25/43] Added method getOrgformsByStg to Studiengang_model.php Get OrgForms of given Studiengang and Studiensemester --- .../models/organisation/Studiengang_model.php | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/application/models/organisation/Studiengang_model.php b/application/models/organisation/Studiengang_model.php index 98d650e0c..893c7b2bd 100644 --- a/application/models/organisation/Studiengang_model.php +++ b/application/models/organisation/Studiengang_model.php @@ -835,4 +835,40 @@ class Studiengang_model extends DB_Model return $this->execQuery($qry, [$studiengang_kz_arr, $studiensemester_kurzbz]); } + + /** + * Get OrgForms of given Studiengang and Studiensemester. + * + * @param $studiengang_kz + * @param $studiensemester_kurzbz + * @return array|stdClass|null + */ + public function getOrgformsByStg($studiengang_kz, $studiensemester_kurzbz) + { + $qry = ' + SELECT + stpl.orgform_kurzbz + FROM + public.tbl_studiengang stg + JOIN lehre.tbl_studienordnung sto USING(studiengang_kz) + JOIN lehre.tbl_studienplan stpl USING(studienordnung_id) + JOIN lehre.tbl_studienplan_semester stplsem USING(studienplan_id) + WHERE + stg.studiengang_kz = ? + AND stg.aktiv = TRUE + AND stplsem.studiensemester_kurzbz = ? + GROUP BY + stpl.orgform_kurzbz + ORDER BY + CASE stpl.orgform_kurzbz + WHEN \'VZ\' THEN 1 + WHEN \'BB\' THEN 2 + WHEN \'DUA\' THEN 3 + ELSE 4 + END, + stpl.orgform_kurzbz; + '; + + return $this->execQuery($qry, [$studiengang_kz, $studiensemester_kurzbz]); + } } From db048e876c901f23a8e770899066fdb7bcd3329c Mon Sep 17 00:00:00 2001 From: Cristina Date: Mon, 15 Dec 2025 16:48:07 +0100 Subject: [PATCH 26/43] Renamed getEntitledStgs to getByStgs Permissions check happens in application controller. --- application/models/organisation/Studiengang_model.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/models/organisation/Studiengang_model.php b/application/models/organisation/Studiengang_model.php index 893c7b2bd..942b8c47e 100644 --- a/application/models/organisation/Studiengang_model.php +++ b/application/models/organisation/Studiengang_model.php @@ -808,9 +808,9 @@ class Studiengang_model extends DB_Model * * @param $studiengang_kz_arr * @param $studiensemester_kurzbz - * @return array|stdClass|null + * @return array|stdClass|null Returns one row per Studiengang. Not considering the Orgforms. */ - public function getEntitledStgs($studiengang_kz_arr, $studiensemester_kurzbz) + public function getByStgs($studiengang_kz_arr, $studiensemester_kurzbz) { if (is_numeric($studiengang_kz_arr)) { From f9ac824cc0e29bdd23df0e1449f368bf96111eb1 Mon Sep 17 00:00:00 2001 From: Cristina Date: Wed, 17 Dec 2025 14:33:04 +0100 Subject: [PATCH 27/43] Added LV-Evaluierung NEU link button to CIS LV Menu --- config/global.config-default.inc.php | 6 +++++- include/tw/cis_menu_lv.inc.php | 21 +++++++++++++++++++++ skin/images/button_lvevaluierung.png | Bin 0 -> 3021 bytes 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 skin/images/button_lvevaluierung.png diff --git a/config/global.config-default.inc.php b/config/global.config-default.inc.php index f24a302cc..1e20ce506 100644 --- a/config/global.config-default.inc.php +++ b/config/global.config-default.inc.php @@ -27,12 +27,16 @@ define('CIS_LEHRVERANSTALTUNG_SEMESTERINFO_ANZEIGEN',true); define('CIS_LEHRVERANSTALTUNG_LEHRFACH_ANZEIGEN',false); define('CIS_LEHRVERANSTALTUNG_GESAMTNOTE_ANZEIGEN', true); define('CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN', true); -define('CIS_LEHRVERANSTALTUNG_ANWESENHEIT_ANZEIGEN', true); +define('CIS_EVALUIERUNG_ANZEIGEN_STG', true); +define('CIS_LEHRVERANSTALTUNG_EVALUIERUNG_ANZEIGEN', true); // Wenn gesetzt, werden die Digitale Anwesenheit-Icons nur fuer diese Studiengaenge angezeigt, sonst für alle // define('CIS_LEHRVERANSTALTUNG_ANWESENHEIT_ANZEIGEN_STG', serialize(array('257'))); // define('CIS_LEHRVERANSTALTUNG_ANWESENHEIT_ANZEIGEN_LVA', serialize(array('39455','39481','39480','41906','41905','41904','39459','39512','39454','39482','42230','42231','39458','41921','41922','39457','42896'))); +// Wenn gesetzt, werden die LV-Evaluierung-Icons nur für diese Studiengaenge angezeigt, sonst alle +define('CIS_EVALUIERUNG_ANZEIGEN_STG', serialize((array('335', '585', '914', '298')))); // BIW, MAI, BUB, MIO + // Im CIS Menue Links bei Modulen anzeigen wenn Lehrauftrag define('CIS_LEHRVERANSTALTUNG_MODULE_LINK',true); diff --git a/include/tw/cis_menu_lv.inc.php b/include/tw/cis_menu_lv.inc.php index 29ba54724..c6dad40e3 100644 --- a/include/tw/cis_menu_lv.inc.php +++ b/include/tw/cis_menu_lv.inc.php @@ -500,6 +500,27 @@ if((!defined('CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN') || CIS_LEHRVERANSTALTU ); } +// LV-Evaluierung NEU +if(defined('CIS_EVALUIERUNG_ANZEIGEN_STG') + && CIS_EVALUIERUNG_ANZEIGEN_STG + && $angemeldet + && (!defined('CIS_EVALUIERUNG_ANZEIGEN_STG') || in_array($lv->studiengang_kz, unserialize(CIS_EVALUIERUNG_ANZEIGEN_STG))) + && ($rechte->isBerechtigt('extension/lvevaluierung_init'))) +{ + $text='(Pilotphase)'; + + $link= APP_ROOT. 'index.ci.php/extensions/FHC-Core-Evaluierung/Initiierung?lehrveranstaltung_id='. urlencode($lv->lehrveranstaltung_id).'&studiensemester_kurzbz='.urlencode($angezeigtes_stsem); + + $menu[]=array + ( + 'id'=>'extension_lvevaluierung_menu_initiierung', + 'position'=>'140', + 'name'=>$p->t('lvevaluierung/lvevaluierung'). ' - '. strtoupper($p->t('global/neu')), + 'icon'=>'../../../skin/images/button_lvevaluierung.png', + 'link'=> $link, + 'text'=>$text + ); +} //************* Menuepunkte anzeigen **************** diff --git a/skin/images/button_lvevaluierung.png b/skin/images/button_lvevaluierung.png new file mode 100644 index 0000000000000000000000000000000000000000..c4175601acc735a81c267fc263cbde80e44a5542 GIT binary patch literal 3021 zcmV;;3o`VHP)WFTUBAWdOzW^!d@AWLa(WNaXJX>@2HM@dakVIipd z000XhNkl!*yRsJEwK*ck`m=G$9_zK8GfR*d`()(LvAw5Ts2LQ<{K4AOMXJBHJ1P*3-;=#));G{Sf25v-fs? zp|PJ#^nu8{2c;CIDaj7&R7wVv)<~%s9vQ{qFvbTF*$ad)EPy%BGWQ6CVSO70XbcPk z(3UU5$o4fd?J|800|P)97y|3J5R61eGl2r9R0^duDbvI-#Q2N=tu=jpeYAIUFfb4% zl}h1qxd;V=%$zxc>DOO}!{M+aG1)X)Lq|s^=PzEQr?;16GKJga;`-~arWr=znIr_;&mRd?el zm^LN6WHQN)ox3bh`T3K4v|YMPp3}+0>mI`ADYW}3rI1ou!Rqem)keu1*dNG7xI1(YANCIHU3|g(U-ErUk1Gro+9^JT};y_@^ z=md)V{L_YdJcWh4y?c)}V=+GX@85bGS6&{EZrng1P&B2FBEO$UHq_(sc=*M(-`Y`A zN+YF2N{Jz*BAaG_{{DW_=`;_lUB!iqZEW7Ml|Aq8%W-_*zdvI0me=@mODp%UU5%8I zuC8wTeOGrksZ@#w?p@8rwo7b&Wh?LPJDB6+!$W^$^OmigZ9UKZYgZwqK~A3e697%8PTLdET64Vdr1kvdX-bL%_`Du2Tx_!kzu0yO zcYZ#>k`kIvp8?=RQ!`qRXX)69=8TV16bAzMeO^8}+hPIK8mT0vk{HsIn5IN#QXC!( zb3<(nLI{@BEh13lXT|a_VOWa`Aq2OtSWX~N#LY_<12Avy4fOT*+W>p}`j|JT*7C7v zA;p0rZo74vy#{lA)B!Mm-dwu6dq42%ufT`m{V*yuHtwIjz* z(0u9)DuYETg());G)-xzu(-IG)^iuQZTT{isT6Pg>Nk9K?P_YOXWPy?I=k4u<1N1V z$k%W>oqW>LN@*x$zb_4iXlXsqtzWvCk!X~r=2M?iY@uq_O!@|fXg+<~9z!aPY07LR z$!-!W0+kiz^z`&FFc2mb3bJ6{T;6(j4`01^4YOy>q`jk)KkRyk+S#-5`Fw;2hloTX z%%3;c9=E!xiuR5U!r?)bR$S@qoQTP`zP2i!@9l;Tf0&I|t>e~n7Z^(<$uG!92*H27@~Snl*;UpqSL1lZ(WaByG))Tf^YLXi zM>3h<{SWrzDJ0)ZkTkr7UuXr!~d8v#81}gWL?UU)y^oF@)21mYESzSS zwJcw0t?B9Q<;vwN41~j&ris((Bv?{RRaF(`Wo6{$IdeEN3s4A)a3hfsJ~?}qrsh+$ zw6u~oO`Hw~b82f?xbW|&o?Vs0005DZ5#sTL<@4ajM|C=##_RDAEGfmlunaOr$Or+<#Mf-s&U$gf1cE0!h{~(!6q9(N0 z(mKQ`sVuQz%5nA3-rm93*ccl()N`@z63_kMhrGLcZ;s>r2S4PwAN-KBEv>AtUx#U$ zv|YM|arF8^0l+tLW?HQjs^C!Gs55ZuNqsNW|@bQtO zxd0D*2*9C39}@@!C@l@q)O_-q0JgNW0`S;BKRV^+)Jmh2&d9BdIRQfXm-22}90Q}20zCI;iT586^ z^8?vG%}~QX3D{;s%Fu4=`y?C*^N?)%|G1&z{=ZJ{Dn%QZA|u=#MI8I8r*xW4{Vqi3gBW_VC#BABhkGiFrccDeZFw(SUD-9ryDr?&R0 zL1(h=?;phJbh2&xn>k{0D!XO*GL|p9nbBCxj_O~md}@4?*hH-|MD1`mc&g!X1_y`u z>6X_hFDoNIKR?HT+wG>Zyqv8+`?)PPuU>;!FaA|`-^E>bewk;Ud;*8VF=e^SO|gZ` zX;F+sPY??pkB4WUZs3JYFZ05SFLV8Mr7T%oM^TZVNFAD>yC(9^9yyfKD5=nvSg=k|Ly=(&!^n|O4u^xI?Y@cOIQ;or)fPJ<%9|3Ay8PjC1ie)8{MzPH=I P00000NkvXXu0mjfB`(wT literal 0 HcmV?d00001 From 4dd4d8aaa50c81f946486d1d606964b606891467 Mon Sep 17 00:00:00 2001 From: Cristina Date: Wed, 17 Dec 2025 14:35:24 +0100 Subject: [PATCH 28/43] Removed filtering aktiv studienganege from method to get Studiengaenge by Stgs otherwise when switching to former semester (which will have inactive studiengaenge) it will not appear --- application/models/organisation/Studiengang_model.php | 1 - 1 file changed, 1 deletion(-) diff --git a/application/models/organisation/Studiengang_model.php b/application/models/organisation/Studiengang_model.php index 942b8c47e..2b235aeb8 100644 --- a/application/models/organisation/Studiengang_model.php +++ b/application/models/organisation/Studiengang_model.php @@ -827,7 +827,6 @@ class Studiengang_model extends DB_Model JOIN lehre.tbl_studienplan_semester stplsem USING(studienplan_id) WHERE stg.studiengang_kz IN ? - AND stg.aktiv = TRUE AND stplsem.studiensemester_kurzbz = ? ORDER BY stg.kurzbzlang From 0616236e00d0f788756e62519834f23154c124ee Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Thu, 18 Dec 2025 12:48:08 +0100 Subject: [PATCH 29/43] =?UTF-8?q?bugfix:=20ZGV=20=C3=9Cbernahme=20bei=20In?= =?UTF-8?q?teressentenanlage,=20bestehende=20ZGVs=20die=20null=20sind=20au?= =?UTF-8?q?sfiltern?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/libraries/PrestudentLib.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/application/libraries/PrestudentLib.php b/application/libraries/PrestudentLib.php index 28879fb47..561b19fd4 100644 --- a/application/libraries/PrestudentLib.php +++ b/application/libraries/PrestudentLib.php @@ -68,7 +68,8 @@ class PrestudentLib $this->_ci->PrestudentModel->addOrder('zgv_code', 'DESC'); $this->_ci->PrestudentModel->addLimit(1); $result = $this->_ci->PrestudentModel->loadWhere([ - 'person_id' => $person_id + 'person_id' => $person_id, + 'zgv_code IS NOT NULL' => null ]); if (isError($result)) return $result; From c113c8086253f64556823171cd9935190d989cf2 Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Mon, 22 Dec 2025 21:11:05 +0100 Subject: [PATCH 30/43] fix calculation of next student matrikelnr aka personenkennzeichen and student uid --- application/libraries/PrestudentLib.php | 8 +++----- application/models/crm/Student_model.php | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/application/libraries/PrestudentLib.php b/application/libraries/PrestudentLib.php index 561b19fd4..a57533da0 100644 --- a/application/libraries/PrestudentLib.php +++ b/application/libraries/PrestudentLib.php @@ -687,9 +687,6 @@ class PrestudentLib $now = date('c'); $today = date('Y-m-d'); - $jahr = mb_substr($studiensemester_kurzbz, 4, 2); - - // Genererate Personenkennzeichen $personenkennzeichen = $this->_ci->StudentModel->generateMatrikelnummer2( $student_data->studiengang_kz, @@ -699,8 +696,9 @@ class PrestudentLib if (isError($personenkennzeichen)) return $personenkennzeichen; $personenkennzeichen = getData($personenkennzeichen); - - + + $jahr = mb_substr($personenkennzeichen, 0, 2); + // Generate UID $uid = $this->_ci->StudentModel->generateUID( $student_data->kurzbz, diff --git a/application/models/crm/Student_model.php b/application/models/crm/Student_model.php index 6f2404cbd..ca9cfe4c3 100644 --- a/application/models/crm/Student_model.php +++ b/application/models/crm/Student_model.php @@ -169,7 +169,7 @@ class Student_model extends DB_Model $max = 0; if ($matrikelnrres && hasData($matrikelnrres)) { - $max = mb_substr(getData($matrikelnrres)[0]->matrikelnr, 7); + $max = mb_substr(trim(getData($matrikelnrres)[0]->matrikelnr), -3); if (!is_numeric($max)) { $max = (int)$max; } From 40ae57fb0c597964d3832f2a11c75853ef170682 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Thu, 8 Jan 2026 12:01:20 +0100 Subject: [PATCH 31/43] proctoring check ueberarbeitet --- cis/testtool/externeueberwachung.js | 37 ++++----------- cis/testtool/frage.css | 30 ++++++++++++ cis/testtool/frage.php | 4 +- cis/testtool/frage_externe_ueberwachung.js | 53 ++++++++++++++++++++++ cis/testtool/index.php | 1 + 5 files changed, 96 insertions(+), 29 deletions(-) create mode 100644 cis/testtool/frage.css create mode 100644 cis/testtool/frage_externe_ueberwachung.js diff --git a/cis/testtool/externeueberwachung.js b/cis/testtool/externeueberwachung.js index 65143290d..71951779f 100644 --- a/cis/testtool/externeueberwachung.js +++ b/cis/testtool/externeueberwachung.js @@ -1,34 +1,15 @@ (function () { - /* - - const params = new URLSearchParams(location.search); - let expectedOrigin = params.get("examus-client-origin"); - - if (!expectedOrigin) - { - window.top.location.href = 'resetconnection.php'; - return; + function sendMessage() { + let frame = window.frames['content']; + if (frame) + frame.postMessage({ type: "proctoringReady" }); } - */ - let proctoringOK = false; - window.addEventListener("message", function (e) { - /*if (e.origin !== expectedOrigin) { - return; - }*/ - - const data = e.data || {}; - - if (data.proctoringIsActive) + window.addEventListener("message", function (e) + { + if (e.data.indexOf("proctoringReady_") === 0) { - proctoringOK = true; + sendMessage(); } }); - - setTimeout(function () { - if (!proctoringOK) - { - top.location.href='resetconnection.php'; - } - }, 1000); -})(); \ No newline at end of file +})(); diff --git a/cis/testtool/frage.css b/cis/testtool/frage.css new file mode 100644 index 000000000..04024ae53 --- /dev/null +++ b/cis/testtool/frage.css @@ -0,0 +1,30 @@ +.proctoring-blocker +{ + position: fixed; + inset: 0; + z-index: 99999; + backdrop-filter: blur(6px); + pointer-events: all; + user-select: none; +} + +.proctoring-blocker.hidden +{ + display: none !important; +} + +.proctoring-text +{ + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + color: #fff; + font-size: 16px; + font-family: sans-serif; +} + +.proctoring-blur-fallback +{ + filter: blur(6px); +} diff --git a/cis/testtool/frage.php b/cis/testtool/frage.php index 4267d6a13..bf2ee24c5 100644 --- a/cis/testtool/frage.php +++ b/cis/testtool/frage.php @@ -183,7 +183,9 @@ if(!isset($_SESSION['pruefling_id'])) die($p->t('testtool/bitteZuerstAnmelden')); if (!empty($_SESSION['externe_ueberwachung']) && isset($_SESSION['externe_ueberwachung_verified'])): ?> - + + + Loading...
'; + document.body.appendChild(blocker); + } + document.documentElement.classList.add("proctoring-blur-fallback"); + } + + function block() { + showBlocker(); + blocker.classList.remove("hidden"); + } + + function unblock() { + document.documentElement.classList.remove("proctoring-blur-fallback"); + if (!blocker) return; + blocker.classList.add("hidden"); + } + + const blockTimer = setTimeout(function () { + if (!ok) + block(); + }, 1500); + + window.addEventListener("message", function (e) { + const data = e.data || {}; + + if (data.type === "proctoringReady") + { + ok = true; + clearTimeout(blockTimer); + unblock(); + } + }); + + setTimeout(function () { + if (!ok) { + top.location.href = "resetconnection.php"; + } + }, 3000); +})(); + + diff --git a/cis/testtool/index.php b/cis/testtool/index.php index 9aa6c3f84..6f2cfac26 100644 --- a/cis/testtool/index.php +++ b/cis/testtool/index.php @@ -22,6 +22,7 @@ if ((isset($_SESSION['externe_ueberwachung']) && $_SESSION['externe_ueberwachung + '; echo '
@@ -741,6 +741,12 @@ else // LOGIN Site (vor Login) '.$p->t('testtool/confirmationText').'

+ + '.$p->t('testtool/dsgvoConfirmText').' +

+ + '.$p->t('testtool/procotoringConfirmText').' +

diff --git a/locale/de-AT/testtool.php b/locale/de-AT/testtool.php index 6977704cc..b2a1dc38a 100644 --- a/locale/de-AT/testtool.php +++ b/locale/de-AT/testtool.php @@ -53,6 +53,8 @@ $this->phrasen['testtool/fuerFolgendeStgAngemeldet']='Für folgende Studiengäng $this->phrasen['testtool/invalideGebiete']='Ein oder mehrere Fragengebiet/e inkorrekt!
Bitte melden Sie dies der Betreuungsperson.'; $this->phrasen['testtool/confirmationText']='Ich bestätige, den Online-Reihungstest persönlich, selbständig, ohne Hilfe einer zusätzlichen Person und ohne Hilfsmittel zu absolvieren.
I confirm that I will complete the online placement test personally, independently, without the help of an additional person and without any aids.
'; +$this->phrasen['testtool/dsgvoConfirmText']='Ich habe die Datenschutzerklärung gelesen.'; +$this->phrasen['testtool/procotoringConfirmText']='Ich stimme der digitalen Beaufsichtigung beim Online-Reihungstest (Proctoring) zu.'; $this->phrasen['testtool/loginNoetig']='Bitte beachten Sie, dass der Reihungstest erst unmittelbar vor Ihrem Reihungstesttermin von uns aktiviert wird.
Please note that the test will be activated by us immediately before your placement test date.'; $this->phrasen['testtool/start']='Reihungstest jetzt starten'; From ef8314c33a2f431241e266e6b4f0292c12694f7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Wed, 21 Jan 2026 15:32:52 +0100 Subject: [PATCH 42/43] Config to check Extension LVEvaluierung is enabled --- include/tw/cis_menu_lv.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/tw/cis_menu_lv.inc.php b/include/tw/cis_menu_lv.inc.php index c6dad40e3..03ce016ca 100644 --- a/include/tw/cis_menu_lv.inc.php +++ b/include/tw/cis_menu_lv.inc.php @@ -501,8 +501,8 @@ if((!defined('CIS_LEHRVERANSTALTUNG_ANRECHNUNG_ANZEIGEN') || CIS_LEHRVERANSTALTU } // LV-Evaluierung NEU -if(defined('CIS_EVALUIERUNG_ANZEIGEN_STG') - && CIS_EVALUIERUNG_ANZEIGEN_STG +if(defined('CIS_LEHRVERANSTALTUNG_EVALUIERUNG_ANZEIGEN') + && CIS_LEHRVERANSTALTUNG_EVALUIERUNG_ANZEIGEN && $angemeldet && (!defined('CIS_EVALUIERUNG_ANZEIGEN_STG') || in_array($lv->studiengang_kz, unserialize(CIS_EVALUIERUNG_ANZEIGEN_STG))) && ($rechte->isBerechtigt('extension/lvevaluierung_init'))) From f867e60702a5c6e567dc113c078ab782665639f7 Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Wed, 21 Jan 2026 17:37:23 +0100 Subject: [PATCH 43/43] fix use of config FAS_BUCHUNGSTYP_FIXE_KOSTENSTELLE to override studiengang_kz in public.tbl_konto --- application/controllers/api/frontend/v1/stv/Konto.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/controllers/api/frontend/v1/stv/Konto.php b/application/controllers/api/frontend/v1/stv/Konto.php index 384452f3e..ecd58671a 100644 --- a/application/controllers/api/frontend/v1/stv/Konto.php +++ b/application/controllers/api/frontend/v1/stv/Konto.php @@ -239,7 +239,7 @@ class Konto extends FHCAPI_Controller $data[$field] = $this->input->post($field); if (defined('FAS_BUCHUNGSTYP_FIXE_KOSTENSTELLE') && isset(unserialize(FAS_BUCHUNGSTYP_FIXE_KOSTENSTELLE)[$data['buchungstyp_kurzbz']])) { - $data['kostenstelle'] = unserialize(FAS_BUCHUNGSTYP_FIXE_KOSTENSTELLE)[$data['buchungstyp_kurzbz']]; + $data['studiengang_kz'] = unserialize(FAS_BUCHUNGSTYP_FIXE_KOSTENSTELLE)[$data['buchungstyp_kurzbz']]; } $result = [];