From c89b88ec1b8c9f0f625ee7fdb38221d9e7eb440e Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Fri, 11 Jul 2025 17:46:54 +0200 Subject: [PATCH 01/12] prevent loading huge list of lvs when deleting an lv --- vilesci/lehre/lehrveranstaltung.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/vilesci/lehre/lehrveranstaltung.php b/vilesci/lehre/lehrveranstaltung.php index 25fe143b6..dfe399e77 100644 --- a/vilesci/lehre/lehrveranstaltung.php +++ b/vilesci/lehre/lehrveranstaltung.php @@ -550,6 +550,8 @@ if($orgform_kurzbz != -1) if($lehrveranstaltung_id != '') $sql_query.= " AND tbl_lehrveranstaltung.lehrveranstaltung_id=".$db->db_add_param($lehrveranstaltung_id, FHC_INTEGER); +elseif(isset($_GET['delete_lvid'])) + $sql_query.= " AND tbl_lehrveranstaltung.lehrveranstaltung_id=".$db->db_add_param(intval($_GET['delete_lvid']), FHC_INTEGER); if($lehrveranstaltung_name != '') { From d262c5106c3ce85d297a030ff36a201ff401f5d9 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Tue, 29 Jul 2025 11:52:36 +0200 Subject: [PATCH 02/12] add zgv-fields to allow null values for update --- .../api/frontend/v1/stv/Prestudent.php | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/application/controllers/api/frontend/v1/stv/Prestudent.php b/application/controllers/api/frontend/v1/stv/Prestudent.php index ed48e6d9a..369c8eabd 100644 --- a/application/controllers/api/frontend/v1/stv/Prestudent.php +++ b/application/controllers/api/frontend/v1/stv/Prestudent.php @@ -136,14 +136,19 @@ class Prestudent extends FHCAPI_Controller $update_prestudent = array(); foreach ($array_allowed_props_prestudent as $prop) { - $val = $this->input->post($prop); - if ($val !== null || $prop == 'foerderrelevant') { + $val = $this->input->post($prop, true); + + if ($val !== null || $prop === 'foerderrelevant') { $update_prestudent[$prop] = $val; } - if (($prop == 'zgvdatum' && $val == '') - || ($prop == 'zgvmadatum' && $val == '') - || ($prop == 'zgvdoktordatum' && $val == '') - ) { + + // allowed to be null, but has to be in postparameter + if ( + in_array($prop, ['zgvdatum', 'zgvmadatum', 'zgvdoktordatum', 'zgv_code', 'zgvmas_code', 'zgvdoktor_code']) + && !isset($update_prestudent[$prop]) + && array_key_exists($prop, $_POST) + ) + { $update_prestudent[$prop] = null; } } From c1ca8c78aff82215acbb1b2ac30136397daa4aa4 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Tue, 29 Jul 2025 13:13:15 +0200 Subject: [PATCH 03/12] bugfix field gsstudientyp_kurzbz --- .../js/components/Stv/Studentenverwaltung/Details/Prestudent.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Prestudent.js b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent.js index a36b355b1..01f31b696 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Prestudent.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent.js @@ -573,7 +573,7 @@ export default { v-model="data.gsstudientyp_kurzbz" name="gsstudientyp_kurzbz" > - + From 62aa022c690463a26999565a566c62fa8669483e Mon Sep 17 00:00:00 2001 From: ma0068 Date: Wed, 30 Jul 2025 11:13:46 +0200 Subject: [PATCH 04/12] Tab Details: add missing person attributes to modelValue --- application/controllers/api/frontend/v1/stv/Prestudent.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/controllers/api/frontend/v1/stv/Prestudent.php b/application/controllers/api/frontend/v1/stv/Prestudent.php index 369c8eabd..4d0aa5fe1 100644 --- a/application/controllers/api/frontend/v1/stv/Prestudent.php +++ b/application/controllers/api/frontend/v1/stv/Prestudent.php @@ -147,7 +147,7 @@ class Prestudent extends FHCAPI_Controller in_array($prop, ['zgvdatum', 'zgvmadatum', 'zgvdoktordatum', 'zgv_code', 'zgvmas_code', 'zgvdoktor_code']) && !isset($update_prestudent[$prop]) && array_key_exists($prop, $_POST) - ) + ) { $update_prestudent[$prop] = null; } From 4e7ae928b5bd0a7f379737946641e4d60cb2c009 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Wed, 30 Jul 2025 11:19:21 +0200 Subject: [PATCH 05/12] Tab Details: add missing person attributes to modelValue.. second try --- application/controllers/api/frontend/v1/stv/Student.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/application/controllers/api/frontend/v1/stv/Student.php b/application/controllers/api/frontend/v1/stv/Student.php index deafb7762..7c1589dd7 100644 --- a/application/controllers/api/frontend/v1/stv/Student.php +++ b/application/controllers/api/frontend/v1/stv/Student.php @@ -95,6 +95,14 @@ class Student extends FHCAPI_Controller $this->PrestudentModel->addSelect('v.verband'); $this->PrestudentModel->addSelect('v.gruppe'); $this->PrestudentModel->addSelect('b.alias'); + $this->PrestudentModel->addSelect('p.geburtsnation'); + $this->PrestudentModel->addSelect('p.sprache'); + $this->PrestudentModel->addSelect('p.gebort'); + $this->PrestudentModel->addSelect('p.homepage'); + $this->PrestudentModel->addSelect('p.anmerkung'); + $this->PrestudentModel->addSelect('p.familienstand'); + $this->PrestudentModel->addSelect('p.staatsbuergerschaft'); + $this->PrestudentModel->addSelect('p.matr_nr'); if (defined('ACTIVE_ADDONS') && strpos(ACTIVE_ADDONS, 'bewerbung') !== false) { $this->PrestudentModel->addSelect( From ba23a6496c0bd53ce3bcb1226a5e33907de04c74 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Wed, 30 Jul 2025 11:22:39 +0200 Subject: [PATCH 06/12] Tab Exam: change layout to fitDataStretchFrozen --- .../Stv/Studentenverwaltung/Details/Pruefung/Pruefunglist.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Pruefung/Pruefunglist.js b/public/js/components/Stv/Studentenverwaltung/Details/Pruefung/Pruefunglist.js index 5a427fcd4..f90aa298d 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Pruefung/Pruefunglist.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Pruefung/Pruefunglist.js @@ -89,7 +89,7 @@ export default{ }, frozen: true }], - layout: 'fitDataFill', + layout: 'fitDataStretchFrozen', layoutColumnsOnNewData: false, height: 'auto', index: 'pruefung_id', From 16db622bc98635dfad92f49e97768dcd336a1bd5 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Wed, 30 Jul 2025 17:55:59 +0200 Subject: [PATCH 07/12] Tab Details - add anrede to modelValue - add Validations Alias and Lehrverbandsgruppe - add Phrase invalidAlias - add translation to validation Integer for field semester --- .../api/frontend/v1/stv/Student.php | 38 ++++++++++++++++++- system/phrasesupdate.php | 20 ++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/application/controllers/api/frontend/v1/stv/Student.php b/application/controllers/api/frontend/v1/stv/Student.php index 7c1589dd7..17cec8b26 100644 --- a/application/controllers/api/frontend/v1/stv/Student.php +++ b/application/controllers/api/frontend/v1/stv/Student.php @@ -103,6 +103,7 @@ class Student extends FHCAPI_Controller $this->PrestudentModel->addSelect('p.familienstand'); $this->PrestudentModel->addSelect('p.staatsbuergerschaft'); $this->PrestudentModel->addSelect('p.matr_nr'); + $this->PrestudentModel->addSelect('p.anrede'); if (defined('ACTIVE_ADDONS') && strpos(ACTIVE_ADDONS, 'bewerbung') !== false) { $this->PrestudentModel->addSelect( @@ -178,6 +179,7 @@ class Student extends FHCAPI_Controller $this->load->model('crm/Student_model', 'StudentModel'); $this->load->model('crm/Prestudent_model', 'PrestudentModel'); $this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel'); + $this->load->model('organisation/Lehrverband_model', 'LehrverbandModel'); $this->load->library('form_validation'); @@ -188,7 +190,15 @@ class Student extends FHCAPI_Controller $this->form_validation->set_rules('gebdatum', 'Geburtsdatum', 'is_valid_date'); - $this->form_validation->set_rules('semester', 'Semester', 'integer'); + $this->form_validation->set_rules('semester', 'Semester', 'integer', [ + 'integer' => $this->p->t('ui', 'error_fieldNotInteger') + ] + ); + + $this->form_validation->set_rules('alias', 'Alias', 'regex_match[/^[-a-z0-9\_\.]*[a-z0-9]{1,}\.[-a-z0-9\_]{1,}$/]', + [ + 'regex_match' => $this->p->t('ui', 'error_fieldInvalidAlias') + ]); $this->load->library('UDFLib'); @@ -300,11 +310,37 @@ class Student extends FHCAPI_Controller // Do Updates if (count($update_lehrverband)) { + $curstudlvb = $this->StudentlehrverbandModel->load([ 'studiensemester_kurzbz' => $studiensemester_kurzbz, 'student_uid' => $uid ]); + $data = $this->getDataOrTerminateWithError($curstudlvb); + $data = current($data); + + $verbandCurrent = $data->verband; + $studiengang_kz = $data->studiengang_kz; + $semesterCurrent = $data->semester; + $gruppeCurrent = $data->gruppe; + + $verband = isset($update_lehrverband['verband']) ? $update_lehrverband['verband'] : $verbandCurrent; + $gruppe = isset($update_lehrverband['gruppe']) ? $update_lehrverband['gruppe'] : $gruppeCurrent; + $semester = isset($update_lehrverband['semester']) ? $update_lehrverband['semester'] : $semesterCurrent; + + //check if existing Lehrverband of new data to avoid Error + $result = $this->LehrverbandModel->loadWhere([ + 'verband' => $verband, + 'gruppe' => $gruppe, + 'semester' => $semester, + 'studiengang_kz' => $studiengang_kz, + ]); + + if(!hasData($result)) + { + $this->terminateWithError($this->p->t('lehre', 'error_noLehrverband'), self::ERROR_TYPE_GENERAL); + } + if(hasData($curstudlvb) && count(getData($curstudlvb)) > 0 ) { $update_lehrverband['updatevon'] = $authuid; diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 355ed7186..c190d7b4f 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -44577,6 +44577,26 @@ and represent the current state of research on the topic. The prescribed citatio ) ) ), + array( + 'app' => 'core', + 'category' => 'ui', + 'phrase' => 'error_fieldInvalidAlias', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Alias ist ungültig', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Alias is invalid', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), // FHC-4 Finetuning END ); From f12db529e0c781d953e7e5bba3ae3e70fefd1440 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Thu, 31 Jul 2025 07:40:07 +0200 Subject: [PATCH 08/12] Tab Notizen: remove clipContents --- public/js/components/Notiz/Notiz.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/js/components/Notiz/Notiz.js b/public/js/components/Notiz/Notiz.js index 8b37cd6e3..a2702c7f0 100644 --- a/public/js/components/Notiz/Notiz.js +++ b/public/js/components/Notiz/Notiz.js @@ -82,7 +82,7 @@ export default { field: "text_stripped", width: 250, formatter: "html", - clipContents: true, + //clipContents: true, tooltip:function(e, cell, onRendered){ var el = document.createElement("div"); el.style.backgroundColor = "white"; @@ -254,7 +254,7 @@ export default { title: this.$p.t('global', 'text'), width: 250, tooltip: true, - clipContents: true, + //clipContents: true, }); // Force layout recalculation for handling overflow text From c4bb543c0a8679125ed3d7305c405f1251a53813 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Thu, 31 Jul 2025 09:37:13 +0200 Subject: [PATCH 09/12] HeaderDetails: delete empty space before titelpost --- public/js/components/DetailHeader/DetailHeader.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/public/js/components/DetailHeader/DetailHeader.js b/public/js/components/DetailHeader/DetailHeader.js index aa0bb549d..5c1573753 100644 --- a/public/js/components/DetailHeader/DetailHeader.js +++ b/public/js/components/DetailHeader/DetailHeader.js @@ -132,8 +132,7 @@ export default {

{{headerData[0].titelpre}} {{headerData[0].vorname}} - {{headerData[0].nachname}} - , + {{headerData[0].nachname}}, {{headerData[0].titelpost}}

From 9c1eb35e884ee498d1e8155ba541e8115fef16be Mon Sep 17 00:00:00 2001 From: ma0068 Date: Thu, 31 Jul 2025 11:18:37 +0200 Subject: [PATCH 10/12] Tab Contact: Phrase for Validation Length PLZ --- .../api/frontend/v1/stv/Address.php | 11 +++++++++- system/phrasesupdate.php | 20 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/application/controllers/api/frontend/v1/stv/Address.php b/application/controllers/api/frontend/v1/stv/Address.php index 324e306f3..d14111e99 100644 --- a/application/controllers/api/frontend/v1/stv/Address.php +++ b/application/controllers/api/frontend/v1/stv/Address.php @@ -31,6 +31,11 @@ class Address extends FHCAPI_Controller 'getNations' => self::PERM_LOGGED, 'getPlaces' => self::PERM_LOGGED ]); + + // Load language phrases + $this->loadPhrases([ + 'ui' + ]); } public function getNations() @@ -53,7 +58,11 @@ class Address extends FHCAPI_Controller $this->form_validation->set_data(['address.plz' => $plz]); - $this->form_validation->set_rules('address.plz', 'PLZ', 'required|numeric|less_than[10000]'); + $this->form_validation->set_rules('address.plz', 'PLZ', 'required|numeric|less_than[10000]', [ + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'PLZ']), + 'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'PLZ']), + 'less_than' => $this->p->t('ui', 'error_fieldLessThan10000', ['field' => 'PLZ']) + ]); if (!$this->form_validation->run()) $this->terminateWithValidationErrors($this->form_validation->error_array()); diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index c190d7b4f..5ca44148d 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -44597,6 +44597,26 @@ and represent the current state of research on the topic. The prescribed citatio ) ) ), + array( + 'app' => 'core', + 'category' => 'ui', + 'phrase' => 'error_fieldLessThan10000', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Das Eingabefeld {field} darf maximal 4-stellig sein.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'The Field {Field} must contain a number less then 10000.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), // FHC-4 Finetuning END ); From 6217309c6f58be0d8aed12fb39a83d9308b7d635 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Thu, 31 Jul 2025 16:34:24 +0200 Subject: [PATCH 11/12] add infotext to reload button filtercomponent tab archive: add infotext to reload button, edit and delete button --- public/js/components/Betriebsmittel/Betriebsmittel.js | 1 + public/js/components/Funktionen/Funktionen.js | 1 + public/js/components/Messages/Details/TableMessages.js | 1 + public/js/components/Notiz/Notiz.js | 1 + .../Details/Abschlusspruefung/Abschlusspruefung.js | 1 + .../Studentenverwaltung/Details/Anrechnungen/Anrechnungen.js | 1 + .../js/components/Stv/Studentenverwaltung/Details/Archiv.js | 3 +++ .../Details/Aufnahmetermine/Aufnahmetermine.js | 1 + .../Studentenverwaltung/Details/Dokumente/List/Accepted.js | 1 + .../Studentenverwaltung/Details/Dokumente/List/Unaccepted.js | 1 + .../Stv/Studentenverwaltung/Details/Gruppen/Gruppen.js | 1 + .../Studentenverwaltung/Details/JointStudies/JointStudies.js | 1 + .../Stv/Studentenverwaltung/Details/Kontakt/Address.js | 1 + .../Stv/Studentenverwaltung/Details/Kontakt/Bankaccount.js | 1 + .../Stv/Studentenverwaltung/Details/Kontakt/Contact.js | 1 + public/js/components/Stv/Studentenverwaltung/Details/Konto.js | 1 + .../ListLehrveranstaltungstermine.js | 1 + .../Stv/Studentenverwaltung/Details/Mobility/Mobility.js | 1 + .../Stv/Studentenverwaltung/Details/Noten/Teacher.js | 1 + .../Stv/Studentenverwaltung/Details/Noten/Zeugnis.js | 1 + .../Stv/Studentenverwaltung/Details/Prestudent/MultiStatus.js | 1 + .../Stv/Studentenverwaltung/Details/Pruefung/Pruefunglist.js | 1 + public/js/components/filter/Filter.js | 4 ++-- 23 files changed, 26 insertions(+), 2 deletions(-) diff --git a/public/js/components/Betriebsmittel/Betriebsmittel.js b/public/js/components/Betriebsmittel/Betriebsmittel.js index d197c341e..5ef85369c 100644 --- a/public/js/components/Betriebsmittel/Betriebsmittel.js +++ b/public/js/components/Betriebsmittel/Betriebsmittel.js @@ -317,6 +317,7 @@ export default { table-only :side-menu="false" reload + :reload-btn-infotext="this.$p.t('table', 'reload')" new-btn-show :new-btn-label="this.$p.t('ui', 'betriebsmittel')" @click:new="actionNewBetriebsmittel" diff --git a/public/js/components/Funktionen/Funktionen.js b/public/js/components/Funktionen/Funktionen.js index 0b5a71155..e83eca7e4 100644 --- a/public/js/components/Funktionen/Funktionen.js +++ b/public/js/components/Funktionen/Funktionen.js @@ -444,6 +444,7 @@ export default { table-only :side-menu="false" :reload= "!this.stylePv21" + :reload-btn-infotext="this.$p.t('table', 'reload')" new-btn-show :new-btn-class="this.newBtnStyle" :new-btn-label="this.$p.t('person', 'funktion')" diff --git a/public/js/components/Messages/Details/TableMessages.js b/public/js/components/Messages/Details/TableMessages.js index 8d539983f..5095f4223 100644 --- a/public/js/components/Messages/Details/TableMessages.js +++ b/public/js/components/Messages/Details/TableMessages.js @@ -401,6 +401,7 @@ export default { table-only :side-menu="false" reload + :reload-btn-infotext="this.$p.t('table', 'reload')" new-btn-show :new-btn-label="this.$p.t('global', 'nachricht')" @click:new="actionNewMessage" diff --git a/public/js/components/Notiz/Notiz.js b/public/js/components/Notiz/Notiz.js index a2702c7f0..33abdd2db 100644 --- a/public/js/components/Notiz/Notiz.js +++ b/public/js/components/Notiz/Notiz.js @@ -1268,6 +1268,7 @@ export default { table-only :side-menu="false" reload + :reload-btn-infotext="this.$p.t('table', 'reload')" new-btn-show :new-btn-label="this.$p.t('global', 'notiz')" @click:new="actionNewNotiz" diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Abschlusspruefung/Abschlusspruefung.js b/public/js/components/Stv/Studentenverwaltung/Details/Abschlusspruefung/Abschlusspruefung.js index a9cae9bc5..c95d29705 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Abschlusspruefung/Abschlusspruefung.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Abschlusspruefung/Abschlusspruefung.js @@ -542,6 +542,7 @@ export default { table-only :side-menu="false" reload + :reload-btn-infotext="this.$p.t('table', 'reload')" new-btn-show :new-btn-label="this.$p.t('stv', 'tab_finalexam')" @click:new="actionNewAbschlusspruefung" diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Anrechnungen/Anrechnungen.js b/public/js/components/Stv/Studentenverwaltung/Details/Anrechnungen/Anrechnungen.js index 8f32479a9..4c29cec3e 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Anrechnungen/Anrechnungen.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Anrechnungen/Anrechnungen.js @@ -357,6 +357,7 @@ export default { table-only :side-menu="false" reload + :reload-btn-infotext="this.$p.t('table', 'reload')" > diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js b/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js index 7f615f8b5..5bd20e154 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js @@ -130,6 +130,7 @@ export default { let editButton = document.createElement('button'); editButton.className = 'btn btn-outline-secondary'; editButton.innerHTML = ''; + editButton.title = this.$p.t('ui', 'bearbeiten'); editButton.addEventListener('click', () => this.$refs.edit.open(cell.getData()) ); @@ -139,6 +140,7 @@ export default { let deleteButton = document.createElement('button'); deleteButton.className = 'btn btn-outline-secondary'; deleteButton.innerHTML = ''; + deleteButton.title = this.$p.t('ui', 'loeschen'); deleteButton.addEventListener('click', evt => { evt.stopPropagation(); this.$fhcAlert @@ -262,6 +264,7 @@ export default { :tabulator-options="tabulatorOptions" :tabulator-events="tabulatorEvents" reload + :reload-btn-infotext="this.$p.t('table', 'reload')" >