From 153e273fec5396c5bd0991867a3b38b5335ab54f Mon Sep 17 00:00:00 2001 From: ma0048 Date: Wed, 9 Jul 2025 13:52:46 +0200 Subject: [PATCH 01/12] 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: Mon, 20 Oct 2025 16:08:12 +0200 Subject: [PATCH 02/12] use shorter table names for columns stg and orgform , add column ausbildungssemester --- .../models/person/Profil_update_model.php | 3 +- .../Cis/ProfilUpdate/ProfilUpdateView.js | 13 ++++-- system/phrasesupdate.php | 40 +++++++++++++++++++ 3 files changed, 51 insertions(+), 5 deletions(-) diff --git a/application/models/person/Profil_update_model.php b/application/models/person/Profil_update_model.php index 31005c4b7..039810537 100644 --- a/application/models/person/Profil_update_model.php +++ b/application/models/person/Profil_update_model.php @@ -135,7 +135,8 @@ class Profil_update_model extends DB_Model attachment_id, UPPER(public.tbl_studiengang.typ || public.tbl_studiengang.kurzbz) AS studiengang, COALESCE(of.orgform_kurzbz, public.tbl_studiengang.orgform_kurzbz) AS orgform, - NULL as oezuordnung + NULL as oezuordnung, + tbl_student.semester FROM public.tbl_profil_update JOIN public.tbl_profil_update_status ON public.tbl_profil_update_status.status_kurzbz = public.tbl_profil_update.status JOIN public.tbl_student ON public.tbl_student.student_uid=public.tbl_profil_update.uid diff --git a/public/js/components/Cis/ProfilUpdate/ProfilUpdateView.js b/public/js/components/Cis/ProfilUpdate/ProfilUpdateView.js index 745f53002..24a5d8bc3 100644 --- a/public/js/components/Cis/ProfilUpdate/ProfilUpdateView.js +++ b/public/js/components/Cis/ProfilUpdate/ProfilUpdateView.js @@ -46,7 +46,6 @@ export default { loading: false, filter: "Pending", profil_update_id: Number(this.id), - }; }, computed: { @@ -205,7 +204,7 @@ export default { //responsive:0, }, { - title: this.$p.t("lehre", "studiengang") + ' (' + this.$p.t("profil", "studentIn") + ')', + title: this.$p.t("profil", "stg_short") + ' (' + this.$p.t("profil", "studentIn") + ')', field: "studiengang", minWidth: 50, resizable: true, @@ -214,7 +213,7 @@ export default { //responsive:0, }, { - title: this.$p.t("lehre", "organisationsform") + ' (' + this.$p.t("profil", "studentIn") + ')', + title: this.$p.t("profil", "orgform_short") + ' (' + this.$p.t("profil", "studentIn") + ')', field: "orgform", minWidth: 50, resizable: true, @@ -278,6 +277,12 @@ export default { minWidth: 200, //responsive:0, }, + { + title: this.$p.t("lehre", "ausbildungssemester"), + field: "semester", + headerFilter: "list", + headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"} + }, { title: this.$p.t("profilUpdate", "actions"), headerSort: false, @@ -415,7 +420,7 @@ export default { }, template: /*html*/ `
- +
{{$p.t('ui','anzeigen')}}
diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 5d3833dc9..aace77876 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -28596,6 +28596,46 @@ array( ) ) ), + array( + 'app' => 'core', + 'category' => 'profil', + 'phrase' => 'stg_short', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'StG', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'degree Progr', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'profil', + 'phrase' => 'orgform_short', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'OrgForm', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'org Form', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), //Profil Phrasen ende // LvPlan Phrasen start array( From 1423579a49ad245aa9fed4bac817f500027b6741 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Tue, 21 Oct 2025 14:42:02 +0200 Subject: [PATCH 03/12] refactor Profile Update for filter, backendfilter not active --- .../components/filters/ProfileUpdate.php | 51 ++++++++++ .../Cis/ProfilUpdate/ProfilUpdateView.js | 96 +++++++++++++++++-- system/filtersupdate.php | 57 +++++++++++ 3 files changed, 196 insertions(+), 8 deletions(-) create mode 100644 application/components/filters/ProfileUpdate.php diff --git a/application/components/filters/ProfileUpdate.php b/application/components/filters/ProfileUpdate.php new file mode 100644 index 000000000..1a53e5145 --- /dev/null +++ b/application/components/filters/ProfileUpdate.php @@ -0,0 +1,51 @@ + 'core', + 'datasetName' => 'profileupdate', + 'query' => ' + SELECT + profil_update_id, + tbl_profil_update.uid, + (tbl_person.vorname || \' \' || tbl_person.nachname) AS name , + topic, + requested_change, + tbl_profil_update.updateamum, + tbl_profil_update.updatevon, + tbl_profil_update.insertamum, + tbl_profil_update.insertvon, + status, + public.tbl_profil_update_status.bezeichnung_mehrsprachig[(" . $lang . ")] as status_translated, + status_timestamp, + status_message, + attachment_id, + UPPER(public.tbl_studiengang.typ || public.tbl_studiengang.kurzbz) AS studiengang, + COALESCE(of.orgform_kurzbz, public.tbl_studiengang.orgform_kurzbz) AS orgform, + NULL as oezuordnung, + tbl_student.semester + FROM public.tbl_profil_update + JOIN public.tbl_profil_update_status ON public.tbl_profil_update_status.status_kurzbz = public.tbl_profil_update.status + JOIN public.tbl_student ON public.tbl_student.student_uid=public.tbl_profil_update.uid + JOIN public.tbl_benutzer ON public.tbl_benutzer.uid = public.tbl_student.student_uid + JOIN public.tbl_person ON public.tbl_benutzer.person_id=public.tbl_person.person_id + JOIN public.tbl_studiengang ON public.tbl_studiengang.studiengang_kz=public.tbl_student.studiengang_kz + LEFT JOIN ( + select + pss.prestudent_id, COALESCE(sp.orgform_kurzbz, pss.orgform_kurzbz) as orgform_kurzbz + from ( + select + prestudent_id, max(insertamum) as insertamum + from + public.tbl_prestudentstatus + where + datum <= NOW() + group by + prestudent_id + ) mpss + join + public.tbl_prestudentstatus pss on pss.prestudent_id = mpss.prestudent_id and pss.insertamum = mpss.insertamum + left join + lehre.tbl_studienplan sp on pss.studienplan_id = sp.studienplan_id + ) of ON of.prestudent_id = public.tbl_student.prestudent_id + ', + 'requiredPermissions' => 'student/stammdaten' +); \ No newline at end of file diff --git a/public/js/components/Cis/ProfilUpdate/ProfilUpdateView.js b/public/js/components/Cis/ProfilUpdate/ProfilUpdateView.js index 24a5d8bc3..bec825495 100644 --- a/public/js/components/Cis/ProfilUpdate/ProfilUpdateView.js +++ b/public/js/components/Cis/ProfilUpdate/ProfilUpdateView.js @@ -417,25 +417,105 @@ export default { if (sessionStorage.getItem("filter")) { this.filter = sessionStorage.getItem("filter"); } - }, - template: /*html*/ ` -
- -
+ /* +
{{$p.t('ui','anzeigen')}}
- + - +
+ + + :title="$p.t('profilUpdate','profilUpdateRequests')" + +

{{$p.t('profilUpdate', 'profilUpdateRequests')}}

+ + +
+
+ +
+
+ + + //Version mit filter rechts in eigener zeile + + + +
+ +
+ +
+ + //backendfilter not working: no parameters provided + + + + */ + + + + + }, + template: /*html*/ ` +
+ + + +

{{$p.t('profilUpdate', 'profilUpdateRequests')}}

+ - +
+ +
+ +
+
+ + + +
`, }; diff --git a/system/filtersupdate.php b/system/filtersupdate.php index 9e3c62a33..2942bcb4e 100644 --- a/system/filtersupdate.php +++ b/system/filtersupdate.php @@ -1558,6 +1558,63 @@ $filters = array( }', 'oe_kurzbz' => null, ), + array( + 'app' => 'core', + 'dataset_name' => 'profileupdate', + 'filter_kurzbz' => 'ProfilupdatePending', + 'description' => '{Ausstehende Anfragen}', + 'sort' => 1, + 'default_filter' => true, + 'filter' => ' + { + "name": "Ausstehende Anfragen", + "columns": [ + {"name": "uid"}, + {"name": "name"}, + {"name": "studiengang"}, + {"name": "orgform"}, + {"name": "oezuordnung"}, + {"name": "status_translated"}, + {"name": "topic"}, + {"name": "insertamum_iso"}, + {"name": "semester"} + ], + "filters": [ + { + "name": "status_translated", + "option": "", + "operation": "equal", + "condition": "true" + } + ] + }', + 'oe_kurzbz' => null, + ), + array( + 'app' => 'core', + 'dataset_name' => 'profileupdate', + 'filter_kurzbz' => 'ProfilupdateAlle', + 'description' => '{Alle Anfragen}', + 'sort' => 1, + 'default_filter' => false, + 'filter' => ' + { + "name": "Alle Anfragen", + "columns": [ + {"name": "uid"}, + {"name": "name"}, + {"name": "studiengang"}, + {"name": "orgform"}, + {"name": "oezuordnung"}, + {"name": "status_translated"}, + {"name": "topic"}, + {"name": "insertamum_iso"}, + {"name": "semester"} + ], + "filters": [] + }', + 'oe_kurzbz' => null, + ), ); From 9a8fbabbe46f0519cecae6d6798bd8f7ee12d234 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Wed, 22 Oct 2025 14:25:43 +0200 Subject: [PATCH 04/12] move dropdown profileUpdateStates to FilterComponent, delete not needed code --- .../components/filters/ProfileUpdate.php | 51 ------ .../Cis/ProfilUpdate/ProfilUpdateView.js | 146 +++++------------- system/filtersupdate.php | 58 ------- system/phrasesupdate.php | 39 +++++ 4 files changed, 74 insertions(+), 220 deletions(-) delete mode 100644 application/components/filters/ProfileUpdate.php diff --git a/application/components/filters/ProfileUpdate.php b/application/components/filters/ProfileUpdate.php deleted file mode 100644 index 1a53e5145..000000000 --- a/application/components/filters/ProfileUpdate.php +++ /dev/null @@ -1,51 +0,0 @@ - 'core', - 'datasetName' => 'profileupdate', - 'query' => ' - SELECT - profil_update_id, - tbl_profil_update.uid, - (tbl_person.vorname || \' \' || tbl_person.nachname) AS name , - topic, - requested_change, - tbl_profil_update.updateamum, - tbl_profil_update.updatevon, - tbl_profil_update.insertamum, - tbl_profil_update.insertvon, - status, - public.tbl_profil_update_status.bezeichnung_mehrsprachig[(" . $lang . ")] as status_translated, - status_timestamp, - status_message, - attachment_id, - UPPER(public.tbl_studiengang.typ || public.tbl_studiengang.kurzbz) AS studiengang, - COALESCE(of.orgform_kurzbz, public.tbl_studiengang.orgform_kurzbz) AS orgform, - NULL as oezuordnung, - tbl_student.semester - FROM public.tbl_profil_update - JOIN public.tbl_profil_update_status ON public.tbl_profil_update_status.status_kurzbz = public.tbl_profil_update.status - JOIN public.tbl_student ON public.tbl_student.student_uid=public.tbl_profil_update.uid - JOIN public.tbl_benutzer ON public.tbl_benutzer.uid = public.tbl_student.student_uid - JOIN public.tbl_person ON public.tbl_benutzer.person_id=public.tbl_person.person_id - JOIN public.tbl_studiengang ON public.tbl_studiengang.studiengang_kz=public.tbl_student.studiengang_kz - LEFT JOIN ( - select - pss.prestudent_id, COALESCE(sp.orgform_kurzbz, pss.orgform_kurzbz) as orgform_kurzbz - from ( - select - prestudent_id, max(insertamum) as insertamum - from - public.tbl_prestudentstatus - where - datum <= NOW() - group by - prestudent_id - ) mpss - join - public.tbl_prestudentstatus pss on pss.prestudent_id = mpss.prestudent_id and pss.insertamum = mpss.insertamum - left join - lehre.tbl_studienplan sp on pss.studienplan_id = sp.studienplan_id - ) of ON of.prestudent_id = public.tbl_student.prestudent_id - ', - 'requiredPermissions' => 'student/stammdaten' -); \ No newline at end of file diff --git a/public/js/components/Cis/ProfilUpdate/ProfilUpdateView.js b/public/js/components/Cis/ProfilUpdate/ProfilUpdateView.js index bec825495..222290e98 100644 --- a/public/js/components/Cis/ProfilUpdate/ProfilUpdateView.js +++ b/public/js/components/Cis/ProfilUpdate/ProfilUpdateView.js @@ -212,7 +212,13 @@ export default { headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"}, //responsive:0, }, - { + { + title: this.$p.t("profil", "sem_short") + ' (' + this.$p.t("profil", "studentIn") + ')', + field: "semester", + headerFilter: "list", + headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"} + }, + { title: this.$p.t("profil", "orgform_short") + ' (' + this.$p.t("profil", "studentIn") + ')', field: "orgform", minWidth: 50, @@ -221,8 +227,8 @@ export default { headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"}, //responsive:0, }, - { - title: this.$p.t("lehre", "organisationseinheit") + ' (' + this.$p.t("profil", "mitarbeiterIn") + ')', + { + title: this.$p.t("profil", "orgeinheit_short") + ' (' + this.$p.t("profil", "mitarbeiterIn") + ')', field: "oezuordnung", minWidth: 200, resizable: true, @@ -230,7 +236,7 @@ export default { headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"}, //responsive:0, }, - { + { title: this.$p.t("profilUpdate", "Topic"), field: "topic", resizable: true, @@ -239,7 +245,7 @@ export default { headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"}, //responsive:0, }, - { + { title: this.$p.t("profilUpdate", "insertamum"), field: "insertamum_iso", resizable: true, @@ -250,7 +256,7 @@ export default { formatterParams: this.datetimeFormatterParams(), //responsive:0, }, - { + { title: this.$p.t("profilUpdate", "Status"), field: "status_translated", hozAlign: "center", @@ -272,17 +278,10 @@ export default { } return `
${cell.getValue()}
`; }, - resizable: true, minWidth: 200, //responsive:0, }, - { - title: this.$p.t("lehre", "ausbildungssemester"), - field: "semester", - headerFilter: "list", - headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"} - }, { title: this.$p.t("profilUpdate", "actions"), headerSort: false, @@ -314,7 +313,6 @@ export default { ], }; } - }, methods: { denyProfilUpdate: function (data) { @@ -356,7 +354,6 @@ export default { this.showModal = false; this.modalData = null; }, - showAcceptDenyModal(value) { this.modalData = value; if (!this.modalData) { @@ -369,7 +366,6 @@ export default { this.$refs.AcceptDenyModal.show(); }); }, - updateData: function (event) { this.$refs.UpdatesTable.tabulator.setData(); //? store the selected view in the session storage of the browser @@ -417,105 +413,33 @@ export default { if (sessionStorage.getItem("filter")) { this.filter = sessionStorage.getItem("filter"); } - - /* -
-
{{$p.t('ui','anzeigen')}}
- - - -
- - - :title="$p.t('profilUpdate','profilUpdateRequests')" - -

{{$p.t('profilUpdate', 'profilUpdateRequests')}}

- - -
-
- -
-
- - - //Version mit filter rechts in eigener zeile - - - -
- -
- -
- - //backendfilter not working: no parameters provided - - - - */ - - - - }, template: /*html*/ `
+ +

{{$p.t('profilUpdate', 'profilUpdateRequests')}}

+ - - -

{{$p.t('profilUpdate', 'profilUpdateRequests')}}

- - - -
- -
- + + + - - - - -
`, +
`, }; diff --git a/system/filtersupdate.php b/system/filtersupdate.php index 2942bcb4e..a4deca527 100644 --- a/system/filtersupdate.php +++ b/system/filtersupdate.php @@ -1558,64 +1558,6 @@ $filters = array( }', 'oe_kurzbz' => null, ), - array( - 'app' => 'core', - 'dataset_name' => 'profileupdate', - 'filter_kurzbz' => 'ProfilupdatePending', - 'description' => '{Ausstehende Anfragen}', - 'sort' => 1, - 'default_filter' => true, - 'filter' => ' - { - "name": "Ausstehende Anfragen", - "columns": [ - {"name": "uid"}, - {"name": "name"}, - {"name": "studiengang"}, - {"name": "orgform"}, - {"name": "oezuordnung"}, - {"name": "status_translated"}, - {"name": "topic"}, - {"name": "insertamum_iso"}, - {"name": "semester"} - ], - "filters": [ - { - "name": "status_translated", - "option": "", - "operation": "equal", - "condition": "true" - } - ] - }', - 'oe_kurzbz' => null, - ), - array( - 'app' => 'core', - 'dataset_name' => 'profileupdate', - 'filter_kurzbz' => 'ProfilupdateAlle', - 'description' => '{Alle Anfragen}', - 'sort' => 1, - 'default_filter' => false, - 'filter' => ' - { - "name": "Alle Anfragen", - "columns": [ - {"name": "uid"}, - {"name": "name"}, - {"name": "studiengang"}, - {"name": "orgform"}, - {"name": "oezuordnung"}, - {"name": "status_translated"}, - {"name": "topic"}, - {"name": "insertamum_iso"}, - {"name": "semester"} - ], - "filters": [] - }', - 'oe_kurzbz' => null, - ), - ); // Loop through the filters array diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index aace77876..ad8d52f0a 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -28636,6 +28636,45 @@ array( ) ) ), + array( + 'app' => 'core', + 'category' => 'profil', + 'phrase' => 'orgeinheit_short', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'OrgEH', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'org Unit', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( + 'app' => 'core', + 'category' => 'profil', + 'phrase' => 'sem_short', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Sem', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'sem', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), //Profil Phrasen ende // LvPlan Phrasen start array( From 93e25bb5fcc17a5a8987953a50dbe78d730278d5 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Tue, 25 Nov 2025 17:35:44 +0100 Subject: [PATCH 05/12] added Reminder for Unterbrecher for Student --- application/config/studierendenantrag.php | 2 +- application/controllers/jobs/AntragJob.php | 71 +++++++++++++++++++++- 2 files changed, 69 insertions(+), 4 deletions(-) diff --git a/application/config/studierendenantrag.php b/application/config/studierendenantrag.php index 4e25aef28..e0ef5486b 100644 --- a/application/config/studierendenantrag.php +++ b/application/config/studierendenantrag.php @@ -57,7 +57,7 @@ $config['wiederholung_note_nicht_zugelassen'] = 20; * @var string A string formated as PHP DateTime modifier * @see https://www.php.net/manual/de/datetime.modify.php */ -$config['unterbrechung_job_remind_wiedereinstieg_date_modifier'] = '+3 days'; +$config['unterbrechung_job_remind_wiedereinstieg_date_modifier'] = '+166 days'; /** * The Job will sent a request to everyone who faild the 3rd committee exam diff --git a/application/controllers/jobs/AntragJob.php b/application/controllers/jobs/AntragJob.php index debcfe391..9441a349b 100644 --- a/application/controllers/jobs/AntragJob.php +++ b/application/controllers/jobs/AntragJob.php @@ -200,13 +200,14 @@ class AntragJob extends JOB_Controller } /** - * Send reminder to Assistant for Wiedereinstieg Unterbrecher + * Send reminder to Assistant and to Student for Wiedereinstieg Unterbrecher * */ public function sendReminderWiedereinstieg() { $now = new DateTime(); $modifier = $this->config->item('unterbrechung_job_remind_wiedereinstieg_date_modifier'); + if (!$modifier) return $this->logError('Konnte Job nicht starten: Config "unterbrechung_job_remind_wiedereinstieg_date_modifiers" nicht gesetzt'); @@ -230,6 +231,7 @@ class AntragJob extends JOB_Controller $antraege = getData($result) ?: []; $count = 0; + $countReminderStudent = 0; foreach ($antraege as $antrag) { $res = $this->StudierendenantragModel->getStgAndSem($antrag->studierendenantrag_id); @@ -257,7 +259,57 @@ class AntragJob extends JOB_Controller $data['UID'] = $student->student_uid; } - // NOTE(chris): Sancho mail + //Data für Email Student + $result = $this->PrestudentModel->load($antrag->prestudent_id); + $dataPrestudent = current(getData($result)); + $person_id = $dataPrestudent->person_id; + + $this->KontaktModel->addSelect('kontakt'); + $this->KontaktModel->addLimit(1); + + $result = $this->KontaktModel->loadWhere([ + 'person_id'=> $person_id, + 'zustellung' => true, + 'kontakttyp' => 'email' + ]); + if (hasData($result)) { + $dataKontakt = current(getData($result)); + $email_student_privat = $dataKontakt->kontakt; + } + + $email_student_FH = $this->StudentModel->getEmailFH($this->StudentModel->getUID($antrag->prestudent_id)); + + //studiensemester + $result = $this->StudiensemesterModel->getByDate($datum->format('d.m.Y')); + if (hasData($result)) { + $dataSem = current(getData($result)); + } + + $studiensemester = $dataSem->studiensemester_kurzbz; + $studsemShort = substr($studiensemester, 0, 2); + + if($studsemShort == "SS") + { + $data['studSemShort_Eng'] = "summer semester"; + $data['meldenBis'] = "15.1."; + $data['meldenBis_Eng'] = "January 15"; + } + elseif ($studsemShort == "WS") { + $data['studSemShort_Eng'] = "winter semester"; + $data['meldenBis'] = "1.8."; + $data['meldenBis_Eng'] = "August 1"; + } + else + { + $studsemShort = "SS/WS"; + $data['studSemShort_Eng'] = "summer/winter semester"; + $data['meldenBis'] = "15.1. (bei Einstieg ins SS) / 1.8. (bei Einstieg ins WS)"; + $data['meldenBis_Eng'] = "January 15 (for sommer semester enrollment) / August 1 (for winter semester enrollment)"; + } + + $data['studSemShort'] = $studsemShort; + + // NOTE(chris): Sancho mail Assistant if(sendSanchoMail('Sancho_Mail_Antrag_U_Reminder', $data, $antrag->email, 'Reminder: Unterbrechung Wiedereinstieg')) { $count++; @@ -267,8 +319,21 @@ class AntragJob extends JOB_Controller 'insertvon' => 'AntragJob' ]); } + + //Mail to Student + if(sendSanchoMail( + 'Sancho_Mail_Antrag_U_Remind_Stud', + $data, + $email_student_FH, + 'Reminder: Unterbrechung Wiedereinstieg', + '', + '', + '', + $email_student_privat)) { + $countReminderStudent++; + } } - $this->logInfo($count . ' Reminder gesendet - Ende Job sendReminderWiedereinstieg'); + $this->logInfo($count . ' Reminder an Assistenz und ' . $countReminderStudent . ' Reminder an Student gesendet - Ende Job sendReminderWiedereinstieg'); } /** From 53cf777970b95ac36d4d78e319185ffac84782a1 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Wed, 10 Dec 2025 15:18:15 +0100 Subject: [PATCH 06/12] 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 4f5e49a93c99cea92dd3b3bb7449d49e732a8091 Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Tue, 16 Dec 2025 15:27:31 +0100 Subject: [PATCH 07/12] send to all private email addresses marked as zustellung --- application/config/studierendenantrag.php | 2 +- application/controllers/jobs/AntragJob.php | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/application/config/studierendenantrag.php b/application/config/studierendenantrag.php index e0ef5486b..4e25aef28 100644 --- a/application/config/studierendenantrag.php +++ b/application/config/studierendenantrag.php @@ -57,7 +57,7 @@ $config['wiederholung_note_nicht_zugelassen'] = 20; * @var string A string formated as PHP DateTime modifier * @see https://www.php.net/manual/de/datetime.modify.php */ -$config['unterbrechung_job_remind_wiedereinstieg_date_modifier'] = '+166 days'; +$config['unterbrechung_job_remind_wiedereinstieg_date_modifier'] = '+3 days'; /** * The Job will sent a request to everyone who faild the 3rd committee exam diff --git a/application/controllers/jobs/AntragJob.php b/application/controllers/jobs/AntragJob.php index 9441a349b..430b07cb6 100644 --- a/application/controllers/jobs/AntragJob.php +++ b/application/controllers/jobs/AntragJob.php @@ -265,22 +265,26 @@ class AntragJob extends JOB_Controller $person_id = $dataPrestudent->person_id; $this->KontaktModel->addSelect('kontakt'); - $this->KontaktModel->addLimit(1); $result = $this->KontaktModel->loadWhere([ 'person_id'=> $person_id, 'zustellung' => true, 'kontakttyp' => 'email' ]); - if (hasData($result)) { - $dataKontakt = current(getData($result)); - $email_student_privat = $dataKontakt->kontakt; + + $email_student_privat = null; + $dataKontakt = getData($result); + if ($dataKontakt) { + $stud_private_zustell_emails = array_map(function($kontakt) { + return $kontakt->kontakt; + }, $dataKontakt); + $email_student_privat = implode(', ', $stud_private_zustell_emails); } $email_student_FH = $this->StudentModel->getEmailFH($this->StudentModel->getUID($antrag->prestudent_id)); //studiensemester - $result = $this->StudiensemesterModel->getByDate($datum->format('d.m.Y')); + $result = $this->StudiensemesterModel->getByDate($datum->format('Y-m-d')); if (hasData($result)) { $dataSem = current(getData($result)); } From ddfcef9ad724e7a2929ae5610d247d5b50f1d2dd Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Tue, 16 Dec 2025 15:52:44 +0100 Subject: [PATCH 08/12] log Error if mail can not be sent, only change status if both reminder emails were successfully sent --- application/controllers/jobs/AntragJob.php | 33 ++++++++++++++++------ 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/application/controllers/jobs/AntragJob.php b/application/controllers/jobs/AntragJob.php index 430b07cb6..8dc4870ea 100644 --- a/application/controllers/jobs/AntragJob.php +++ b/application/controllers/jobs/AntragJob.php @@ -314,18 +314,17 @@ class AntragJob extends JOB_Controller $data['studSemShort'] = $studsemShort; // NOTE(chris): Sancho mail Assistant - if(sendSanchoMail('Sancho_Mail_Antrag_U_Reminder', $data, $antrag->email, 'Reminder: Unterbrechung Wiedereinstieg')) + $sancho_assistant_sent = sendSanchoMail('Sancho_Mail_Antrag_U_Reminder', $data, $antrag->email, 'Reminder: Unterbrechung Wiedereinstieg'); + if($sancho_assistant_sent) { $count++; - $this->StudierendenantragstatusModel->insert([ - 'studierendenantrag_id' => $antrag->studierendenantrag_id, - 'studierendenantrag_statustyp_kurzbz' => Studierendenantragstatus_model::STATUS_REMINDERSENT, - 'insertvon' => 'AntragJob' - ]); } - + else + { + $this->logError('Error: failed to send Assistant Reminder studierendenantrag_id: ' . $antrag->studierendenantrag_id); + } //Mail to Student - if(sendSanchoMail( + $sancho_student_sent = sendSanchoMail( 'Sancho_Mail_Antrag_U_Remind_Stud', $data, $email_student_FH, @@ -333,9 +332,25 @@ class AntragJob extends JOB_Controller '', '', '', - $email_student_privat)) { + $email_student_privat); + + if($sancho_student_sent) + { $countReminderStudent++; } + else + { + $this->logError('Error: failed to send Student Reminder studierendenantrag_id: ' . $antrag->studierendenantrag_id); + } + + if($sancho_assistant_sent && $sancho_student_sent) + { + $this->StudierendenantragstatusModel->insert([ + 'studierendenantrag_id' => $antrag->studierendenantrag_id, + 'studierendenantrag_statustyp_kurzbz' => Studierendenantragstatus_model::STATUS_REMINDERSENT, + 'insertvon' => 'AntragJob' + ]); + } } $this->logInfo($count . ' Reminder an Assistenz und ' . $countReminderStudent . ' Reminder an Student gesendet - Ende Job sendReminderWiedereinstieg'); } From 6b0526fb953e0db165e972a73046c78a2643796e Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Wed, 17 Dec 2025 13:22:39 +0100 Subject: [PATCH 09/12] add tabulator persistence config --- public/js/components/Cis/ProfilUpdate/ProfilUpdateView.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/public/js/components/Cis/ProfilUpdate/ProfilUpdateView.js b/public/js/components/Cis/ProfilUpdate/ProfilUpdateView.js index 222290e98..9798ba7a4 100644 --- a/public/js/components/Cis/ProfilUpdate/ProfilUpdateView.js +++ b/public/js/components/Cis/ProfilUpdate/ProfilUpdateView.js @@ -59,6 +59,10 @@ export default { }, profilUpdateOptions: function () { return { + persistence: { + columns: ["width", "visible", "frozen"], + }, + persistenceID: 'cis-profilupdate-2025121702', ajaxURL: 'dummy', ajaxRequestFunc: (url, config, params) => { return this.$api.call(ApiProfilUpdate.getProfilUpdateWithPermission(params.filter)); From 0616236e00d0f788756e62519834f23154c124ee Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Thu, 18 Dec 2025 12:48:08 +0100 Subject: [PATCH 10/12] =?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 11/12] 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 2d9e9df8a087251cde3dcf6bd22c137cfd2fa32b Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Tue, 13 Jan 2026 14:10:33 +0100 Subject: [PATCH 12/12] fix notiz component showing no data when setting sort an switching tabs in stv --- public/js/components/Notiz/Notiz.js | 16 ++++++++++++++-- .../Stv/Studentenverwaltung/Details/Notizen.js | 1 + 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/public/js/components/Notiz/Notiz.js b/public/js/components/Notiz/Notiz.js index 58168fbc7..39f0e507e 100644 --- a/public/js/components/Notiz/Notiz.js +++ b/public/js/components/Notiz/Notiz.js @@ -42,7 +42,11 @@ export default { showErweitert: Boolean, showDocument: Boolean, showTinyMce: Boolean, - visibleColumns: Array + visibleColumns: Array, + tabulatorPersistenceId: { + type: String, + default: 'core-notiz' + } }, data() { return { @@ -179,7 +183,15 @@ export default { //responsiveLayout: "collapse", maxHeight: '200px', index: 'notiz_id', - persistenceID: 'core-notiz' + persistenceID: this.tabulatorPersistenceId, + persistence: { + sort: false, + columns: ["width", "visible", "frozen"], + filter: false, + headerFilter: false, + group: false, + page: false, + } }, tabulatorEvents: [ { diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Notizen.js b/public/js/components/Stv/Studentenverwaltung/Details/Notizen.js index de6470d7e..a28f21e62 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Notizen.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Notizen.js @@ -31,6 +31,7 @@ export default { show-tiny-mce :visibleColumns="['titel','text','verfasser','bearbeiter','dokumente']" @reload="$emit('update:suffix')" + tabulator-persistence-id="stv-notiz-2026011301" >