From 3a5c4444cbce8262db135dbc6316d96b488f7e84 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Wed, 27 Aug 2025 14:11:03 +0200 Subject: [PATCH 1/4] Tab Archive: Documentdropdown for Printing - define structure for single print array - fill array with documents according to Fas Dropdown Drucken - event for adding documents from extension/addons --- .../api/frontend/v1/stv/Archiv.php | 2 +- .../api/frontend/v1/stv/Dokumente.php | 506 ++++++++++++++++++ public/js/api/factory/stv/archiv.js | 2 +- public/js/api/factory/stv/documents.js | 14 + .../Abschlusspruefung/Abschlusspruefung.js | 1 - .../Stv/Studentenverwaltung/Details/Archiv.js | 99 +++- .../Details/Archiv/DocumentDropdown.js | 116 ++++ system/phrasesupdate.php | 22 + 8 files changed, 754 insertions(+), 8 deletions(-) create mode 100644 public/js/components/Stv/Studentenverwaltung/Details/Archiv/DocumentDropdown.js diff --git a/application/controllers/api/frontend/v1/stv/Archiv.php b/application/controllers/api/frontend/v1/stv/Archiv.php index cc636951d..09cefc045 100644 --- a/application/controllers/api/frontend/v1/stv/Archiv.php +++ b/application/controllers/api/frontend/v1/stv/Archiv.php @@ -39,7 +39,7 @@ class Archiv extends FHCAPI_Controller 'archive' => ['admin:w', 'assistenz:w'], 'download' => ['admin:w', 'assistenz:w'], 'update' => ['admin:w'], - 'delete' => ['admin:w', 'assistenz:w'] + 'delete' => ['admin:w', 'assistenz:w'], ]); // Load models diff --git a/application/controllers/api/frontend/v1/stv/Dokumente.php b/application/controllers/api/frontend/v1/stv/Dokumente.php index 18c976eb6..520f5d824 100644 --- a/application/controllers/api/frontend/v1/stv/Dokumente.php +++ b/application/controllers/api/frontend/v1/stv/Dokumente.php @@ -2,6 +2,7 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); +use \CI3_Events as Events; use \DateTime as DateTime; class Dokumente extends FHCAPI_Controller @@ -19,6 +20,8 @@ class Dokumente extends FHCAPI_Controller 'getDoktypen' => ['admin:r', 'assistenz:r'], 'uploadDokument' => ['admin:rw', 'assistenz:rw'], 'download' => ['admin:rw', 'assistenz:rw'], + 'getDocumentDropDown' => ['admin:rw', 'assistenz:rw'], + 'getDocumentDropDownMulti' => ['admin:rw', 'assistenz:rw'], ]); // Load Libraries @@ -566,4 +569,507 @@ class Dokumente extends FHCAPI_Controller return false; } } + + public function getDocumentDropDown($prestudent_id, $studiensemester_kurzbz, $studiengang_kz) + { + //TODO(Manu) Berechtigungen hasPermissionOutputformat + //TODO(Manu) remove: just for test ouput + $hasPermissionOutputformat = false; + + //TODO(Manu) Validierungen + if (!$prestudent_id) { + $this->terminateWithError('Prestudent id is required.'); + } + if (!$studiensemester_kurzbz) + $this->terminateWithError("kein Studiensemester"); + if (!$studiengang_kz) + $this->terminateWithError("kein Studiengang_kz"); + + $uid = $this->_loadUIDFromPrestudent($prestudent_id); + $semArray = $this->_getEntriesStudiensemester(); + $stgTyp = $this->_getStudiengangstyp($studiengang_kz); + + //TODO(Manu) check if if Array[0] bis Array[4] befüllt + //TODO(Manu) handling stgTyp ungleich b,m,d + + // $semString = implode(";", $semArray); + // $this->terminateWithError("Semester " . $semString . " " . $semArray[0] . " " . $semArray[1]); + + $documents = [ + $this->buildDropdownEntry("accountinfo", "Accountinfoblatt", "xml=accountinfoblatt.xml.php&xsl=AccountInfo&output=pdf", $uid, 10, null), + $this->buildDropdownEntry("ausbildungsvertrag", "Ausbildungsvertrag", "xml=ausbildungsvertrag.xml.php&xsl=Ausbildungsver&output=pdf", $uid, 20, null), + $this->buildDropdownEntry("ausbildungsvertrag_en", "Ausbildungsvertrag Englisch", "xml=ausbildungsvertrag.xml.php&xsl=AusbVerEng&output=pdf", $uid, 21, null), + $this->buildDropdownEntry("studienbestaetigung", "Studienbestätigung", "xml=student.rdf.php&xsl=Inskription&output=pdf", $uid, 40, null), + $this->buildDropdownEntry("studienbestaetigung_en", "Studienbestätigung Englisch", "xml=student.rdf.php&xsl=InskriptionEng&output=pdf", $uid, 41, null), + $this->buildDropdownEntry("zutrittskarte", "Zutrittskarte", "xsl=ZutrittskarteStud&output=pdf&data=$uid", $uid,100, "zutrittskarte.php"), + $this->buildDropdownEntry("studienblatt", "Studienblatt", "xml=studienblatt.xml.php&xsl=Studienblatt&output=pdf&ss=$studiensemester_kurzbz", $uid, 60, null), + $this->buildDropdownEntry("studienblatt_eng", "Studienblatt Englisch", "xml=studienblatt.xml.php&xsl=StudienblattEng&output=pdf&ss=$studiensemester_kurzbz", $uid, 61, null), + + // Studienerfolg Menüs automatisch + $this->buildStudienerfolgSubmenu("de", $uid, $semArray, $studiensemester_kurzbz), + $this->buildStudienerfolgSubmenu("en", $uid, $semArray, $studiensemester_kurzbz), + $this->buildStudienerfolgSubmenu("de", $uid, $semArray, $studiensemester_kurzbz, true), + $this->buildStudienerfolgSubmenu("en", $uid, $semArray, $studiensemester_kurzbz, true), + + [ + "id" => "submenu_studstatus", + "type" => "submenu", + "name" => "Verwaltung des StudierendenStatus", + "order" => 110, + "data" => [ + $this->buildDropdownEntry("Abmeldung", "Abmeldung", "xml=AntragAbmeldung.xml.php&xsl=AntragAbmeldungl&prestudent_id=$prestudent_id&output=pdf", $uid, null, null), + $this->buildDropdownEntry("Abmeldung durch Stgl", "AntragAbmeldungStgl", "xml=AntragAbmeldungStgl.xml.php&xsl=AntragAbmeldungStgl&prestudent_id=$prestudent_id&output=pdf", $uid, null, null), + $this->buildDropdownEntry("Unterbrechung", "Unterbrechung", "xml=AntragUnterbrechung.xml.php&xsl=AntragUnterbrechung&prestudent_id=$prestudent_id&output=pdf", $uid, null, null), + $this->buildDropdownEntry("Wiederholung", "Abmeldung durch Ablauf der Wiederholungsfrist", "xml=AntragWiederholung.xml.php&xsl=AntragWiederholung&prestudent_id=$prestudent_id&output=pdf", $uid, null, null), + ] + ], + + $this->loadDropDownEntriesFinalExam($hasPermissionOutputformat, $stgTyp, $uid), + + $this->buildDropdownEntry("bescheid", "Bescheid (nur Voransicht)", "xml=abschlusspruefung.rdf.php&xsl_stg_kz=$studiengang_kz&xsl=Bescheid&output=pdf", $uid, 80, null), + $this->buildDropdownEntry("diplomasupp", "Diploma Supplement (nur Voransicht)", "xml=diplomasupplement.xml.php&xsl_stg_kz=$studiengang_kz&xsl=DiplSupplement&output=pdf", $uid, 81, null) + ]; + + Events::trigger('DocumentGenerationDropDown', + // passing $menu per reference + function & () use (&$documents) { + return $documents; + }, + $prestudent_id, + $studiensemester_kurzbz, + $studiengang_kz + ); + + usort($documents, function ($a, $b) { + $orderA = isset($a['order']) ? (int)$a['order'] : PHP_INT_MAX; + $orderB = isset($b['order']) ? (int)$b['order'] : PHP_INT_MAX; + return $orderA <=> $orderB; + }); + + + $this->terminateWithSuccess($documents); + return $documents || null; + } + + public function getDocumentDropDownMulti() + { + $studentUids = $this->input->get('studentUids'); + $prestudentIds = []; + + if (is_array($studentUids) && !empty($studentUids)) { + foreach ($studentUids as $uid) { + $prestudent_id = $this-> _loadPrestudentFromUid($uid); + $prestudentIds[] = $prestudent_id; + } + } else { + echo "No prestudent IDs received."; + } + + $uidString = implode(";", $studentUids); + $prestudentIdsString = implode(";", $prestudentIds); + + + $documents = [ + [ + "id" => "accountinfo1", + "type" => "documenturl", + "name" => "Accountinfoblatt", + "url" => "pdfExport.php?xml=accountinfoblatt.xml.php&xsl=AccountInfo&output=pdf&uid=" . $uidString, + "scope" => "prestudent" + ], + [ + "id" => "ausbildungsvertrag1_de", + "type" => "documenturl", + "name" => "Ausbildungsvertrag Deutsch", + "url" => "pdfExport.php?xml=ausbildungsvertrag.xml.php&xsl=Ausbildungsver&output=pdf&uid=" . $uidString, + "scope" => "prestudent" + ], + [ + "id" => "ausbildungsvertrag1_en", + "type" => "documenturl", + "name" => "Ausbildungsvertrag Englisch", + "url" => "pdfExport.php?xml=ausbildungsvertrag.xml.php&xsl=AusbVerEng&output=pdf&uid=" . $uidString, + "scope" => "prestudent" + ], + [ + "id" => "submenu_studienerfolg_1", + "type" => "submenu", + "name" => "Studienerfolg", + "data" => [ + [ + "id" => "submenu_studienerfolg_sem1", + "type" => "submenu", + "name" => "Studienerfolg WS2025", + "data" => [ + [ + "id" => "studienerfolg_sem_alle_1", + "type" => "submenu", + "name" => "Studienerfolg WS2025 Alle", + "data" => [ + [ + "id" => "studienerfolg_sem_alle_1_FA", + "type" => "documenturl", + "name" => "Studienerfolg Alle FINANZAMT", + "url" => "pdfExport.php?xml=ausbildungsvertrag.xml.php&xsl=AusbVerEng&output=pdf&uid=" . $uidString, + "scope" => "prestudent" + ], + [ + "id" => "studienerfolg_sem_alle_1_nichtFA", + "type" => "documenturl", + "name" => "Studienerfolg Alle NICHT FINANZAMT", + "url" => "pdfExport.php?xml=ausbildungsvertrag.xml.php&xsl=AusbVerEng&output=pdf&uid=" . $uidString, + "scope" => "prestudent" + ] + ] + + ] + ] + ] + ] + ], + [ + "id" => "submenu_studstatus", + "type" => "submenu", + "name" => "Verwaltung des StudierendenStatus", + "data" => [ + [ + "id" => "Abmeldung", + "type" => "documenturl", + "name" => "Abmeldung", + "url" => "pdfExport.php?xml=AntragAbmeldung.xml.php&xsl=AntragAbmeldung&output=pdf&uid=" . $uidString, + "scope" => "prestudent" + ], + [ + "id" => "Abmeldung durch Stg", + "type" => "documenturl", + "name" => "AntragAbmeldungStgl", + "url" => "pdfExport.php?xml=AntragAbmeldungStgl.xml.php&xsl=AntragAbmeldungStgl&output=pdf&uid=" . $uidString, + "scope" => "prestudent" + ] + ] + ], + [ + "id" => "zutrittskarte", + "type" => "documenturl", + "name" => "Zutrittskarte", + "url" => "zutrittskarte.php?xsl=ZutrittskarteStud&output=pdf&data=" . $uidString, + "scope" => "prestudent" + ], + [ + "id" => "zutrittskarte", + "type" => "parameterurl", + "name" => "Zutrittskarte", + "baseurl" => "zutrittskarte.php", + "parameterurl" =>"xsl=ZutrittskarteStud&output=pdf&data=" . $uidString, + "scope" => "prestudent" + ], + [ + "id" => "studienbestaetigung", + "type" => "documenturl", + "name" => "Studienbestätigung", + "url" => "pdfExport.php?xml=ausbildungsvertrag.xml.php&xsl=AusbVerEng&output=pdf&uid=" . $uidString, + "scope" => "prestudent" + ], + [ + "id" => "studienerfolg", + "type" => "documenturl", + "name" => "Studienbestätigung", + "url" => "pdfExport.php?xml=ausbildungsvertrag.xml.php&xsl=AusbVerEng&output=pdf&uid=" . $uidString, + "scope" => "prestudent" + ], + + ]; + +/* Events::trigger('DocumentGenerationDropDownMulti', + // passing $menu per reference + function & () use (&$documents) { + return $documents; + }, + $prestudent_id, + $studiensemester_kurzbz, + $studiengang_kz + );*/ + + usort($documents, function ($a, $b) { + $orderA = isset($a['order']) ? (int)$a['order'] : PHP_INT_MAX; + $orderB = isset($b['order']) ? (int)$b['order'] : PHP_INT_MAX; + return $orderA <=> $orderB; + }); + + // FireEvent(DocumentGenerationDropDownMulti(&$documents); + + $this->terminateWithSuccess($documents); + + return $documents || null; + } + + private function _loadUIDFromPrestudent($prestudent_id) + { + if(!$prestudent_id){ + return $this->terminateWithError("no prestudent ID received."); + } + $this->load->model('crm/Student_model', 'StudentModel'); + $result = $this->StudentModel->loadWhere( + ['prestudent_id' => $prestudent_id] + ); + + $data = $this->getDataOrTerminateWithError($result); + $student = current($data); + + return $student->student_uid; + } + + private function _loadPrestudentFromUid($studentUid) + { + + $this->load->model('crm/Student_model', 'StudentModel'); + $result = $this->StudentModel->loadWhere( + ['student_uid' => $studentUid] + ); + + $data = $this->getDataOrTerminateWithError($result); + $student = current($data); + + + return $student->prestudent_id; + } + + /** + * is building an array with studiensemesterkurzb + * actual studiensemester plus the 5 studiensemester in the past + + * @return Array Studiensemester_kurzbz + */ + private function _getEntriesStudiensemester(){ + $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); + + $this->StudiensemesterModel->addPlusMinus(1, 5); + $this->StudiensemesterModel->addOrder('ende', 'DESC'); + $result = $this->StudiensemesterModel->load(); + $data = $this->getDataOrTerminateWithError($result); + + foreach($data as $sem) + { + $semArray[] = $sem->studiensemester_kurzbz; + } + + array_shift($semArray); + + return $semArray; + } + /** + * is returning the typ of Studiengang (Bakk oder Master) + + * @return character eg. 'b' or 'm' + */ + private function _getStudiengangstyp($studiengang_kz) + { + $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); + + $result = $this->StudiengangModel->loadWhere( + array('studiengang_kz' => $studiengang_kz) + ); + $data = $this->getDataOrTerminateWithError($result); + + $typStudiengang = current($data)->typ; + + return $typStudiengang; + } + + //TODO(Manu) make helperfunction + /** + * is building an array for Dropdown Entry in Print Dropdown + * @param $id id for the Document to add to the Document Array + * @param $name name of the dropdownEntry + * @param $parameterUrl url of parameters xml, xsl,format as needed + * WITHOUT BASEURL eg. "xml=abschlusspruefung.rdf.php&xsl_stg_kz=$studiengang_kz&xsl=Bescheid&output=pdf" + * @param $uid default parameter, if null only parameterurl will be added + * additional needed parameter: put in the parameterUrl + * @param $alternativeBaseUrl: if baseUrl not pdfExport.php, put here alternative without ? char, eg. "zutrittskarte.php" + + * @return Array + */ + private function buildDropdownEntry($id, $name, $parameterurl, $uid=null, $order=null, $alternativeBaseUrl=null) + { + //DEFAULT BASEURL + $baseurl = "pdfExport.php?"; + + $uidString = $uid ? "&uid=" . $uid : ""; + + if($alternativeBaseUrl) + { + return [ + "id" => $id, + "type" => "documenturl", + "name" => $name, + "url" => $alternativeBaseUrl . "?" . $parameterurl . $uidString, + "order" => $order + ]; + } + else + return [ + "id" => $id, + "type" => "documenturl", + "name" => $name, + "url" => $baseurl . $parameterurl . "&uid=" . $uid, + "order" => $order + ]; + + } + + /** + * helper function to create ArrayStructure + * actual studiensemester plus the 5 studiensemester in the past + + * @return Array Studiensemester_kurzbz + */ + private function buildStudienerfolgSubmenu($lang, $uid, $semArray, $studiensemester_kurzbz, $fa = false) + { + $entries = []; + + $xsl = $lang === "de" ? "Studienerfolg" : "StudienerfolgEng"; + $idPrefix = "submenu_studienerfolg_" . $lang . ($fa ? "_fa" : ""); + + $entries[] = $this->buildDropdownEntry( + $idPrefix . "_aktuell", + "ausgewähltes Semester", + "xml=studienerfolg.rdf.php&xsl=$xsl&ss=$studiensemester_kurzbz" . ($fa ? "&typ=finanzamt" : ""), + $uid + ); + + //all semester + $entries[] = $this->buildDropdownEntry( + $idPrefix . "_all", + "alle Semester", + "xml=studienerfolg.rdf.php&xsl=$xsl&ss=$studiensemester_kurzbz&all=true" . ($fa ? "&typ=finanzamt" : ""), + $uid + ); + + //sem from array + foreach ($semArray as $i => $sem) { + $entries[] = $this->buildDropdownEntry( + $idPrefix . ($i === 0 ? "_akt" : "_minus" . $i), + $sem, + "xml=studienerfolg.rdf.php&xsl=$xsl&ss=$sem" . ($fa ? "&typ=finanzamt" : ""), + $uid + ); + + } + $order = 0; + if ($lang === "de" && !$fa) $order = 75; // Studienerfolg + if ($lang === "en" && !$fa) $order = 76; // Studienerfolg Englisch + if ($lang === "de" && $fa) $order = 77; // Studienerfolg Finanzamt + if ($lang === "en" && $fa) $order = 78; // Studienerfolg Finanzamt Englisch + + return [ + "id" => $idPrefix, + "type" => "submenu", + "name" => "Studienerfolg " . ($fa ? " Finanzamt" : "") . ($lang === "de" ? "" : "Englisch") , + "order" => $order, + "data" => $entries, + ]; + } + + private function loadDropDownEntriesFinalExam($hasPermissionOutputformat, $stgTyp, $uid) + { + if ($stgTyp == 'b') + $postfix = 'Bakk'; + else if ($stgTyp == 'm' || $stgTyp == 'd') + $postfix = 'Master'; + else + //TODO(Manu) sollte nicht null sein!! -> dropdown wird im Falle von Lehrgängen nicht erstellt + return null; + + + $arrayFinalExam = [ + 'pruefungsprotokoll' => [ + 'de' => [ + 'Bakk' => 'PrProtBA', + 'Master' => 'PrProtMA', + ], + 'en' => [ + 'Bakk' => 'PrProtBAEng', + 'Master' => 'PrProtMAEng', + ], + ], + 'pruefungszeugnis' => [ + 'de' => [ + 'Bakk' => 'Bakkzeugnis', + 'Master' => 'Diplomzeugnis', + ], + 'en' => [ + 'Bakk' => 'BakkzeugnisEng', + 'Master' => 'DiplomzeugnisEng', + ], + ], + 'urkunde' => [ + 'de' => [ + 'Bakk' => 'Bakkurkunde', + 'Master' => 'Diplomurkunde', + ], + 'en' => [ + 'Bakk' => 'BakkurkundeEng', + 'Master' => 'DiplomurkundeEng', + ], + ], + ]; + + $langLabels = [ + "de" => "Deutsch", + "en" => "Englisch" + ]; + + $docLabels = [ + "pruefungsprotokoll" => "Prüfungsprotokoll", + "pruefungszeugnis" => "Zeugnis", + "urkunde" => "Urkunde" + ]; + + $submenuData = []; + if ($hasPermissionOutputformat) { + foreach ($arrayFinalExam as $docType => $langs) { + foreach ($langs as $lang => $types) { + $xsl = $types[$postfix]; + $idPrefix = $docType . "_" . $lang; + + $baseName = $docLabels[$docType] . " " . $langLabels[$lang]; + $baseUrl = "xml=abschlusspruefung.rdf.php&xsl={$xsl}"; + + //3 outputformates + foreach (["pdf", "odt", "docx"] as $format) { + $submenuData[] = $this->buildDropdownEntry( + $idPrefix . "_" . $format, + $baseName . " (" . strtoupper($format) . ")", + $baseUrl . "&output=" . $format, + $uid + ); + } + } + } + } + else + { + foreach ($arrayFinalExam as $docType => $langs) { + foreach ($langs as $lang => $types) { + $xsl = $types[$postfix]; // Auswahl Bakk/Master für jeweilige Sprache + $id = $docType . "_" . $lang; + + $name = $docLabels[$docType] . " " . $langLabels[$lang]; + + $url = "xml=abschlusspruefung.rdf.php&xsl=" . $xsl . "&output=pdf"; + + $submenuData[] = $this->buildDropdownEntry($id, $name, $url, $uid); + } + } + } + return [ + "id" => "submenu_finalexam", + "type" => "submenu", + "name" => "Abschlussprüfung", + "data" => $submenuData, + "order" => null, + "order" => 80, + ]; + } + } diff --git a/public/js/api/factory/stv/archiv.js b/public/js/api/factory/stv/archiv.js index ca8f25116..cf380b25d 100644 --- a/public/js/api/factory/stv/archiv.js +++ b/public/js/api/factory/stv/archiv.js @@ -39,5 +39,5 @@ export default { url: 'api/frontend/v1/stv/archiv/delete', params: {akte_id, studiengang_kz} }; - } + }, }; diff --git a/public/js/api/factory/stv/documents.js b/public/js/api/factory/stv/documents.js index 1898023cd..37ec8298b 100644 --- a/public/js/api/factory/stv/documents.js +++ b/public/js/api/factory/stv/documents.js @@ -73,4 +73,18 @@ export default { params }; }, + getDocumentDropdown(params){ + console.log(params); + return { + method: 'get', + url: 'api/frontend/v1/stv/dokumente/getDocumentDropDown/' + params.prestudent_id + '/' + params.studiensemester_kurzbz + '/' + params.studiengang_kz, + }; + }, + getDocumentDropdownMulti(studentUids){ + return { + method: 'get', + url: 'api/frontend/v1/stv/dokumente/getDocumentDropDownMulti/', + params: {studentUids} + }; + } } \ No newline at end of file diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Abschlusspruefung/Abschlusspruefung.js b/public/js/components/Stv/Studentenverwaltung/Details/Abschlusspruefung/Abschlusspruefung.js index e5c4cade1..5bcb75176 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Abschlusspruefung/Abschlusspruefung.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Abschlusspruefung/Abschlusspruefung.js @@ -7,7 +7,6 @@ import AbschlusspruefungDropdown from "./AbschlusspruefungDropdown.js"; import ApiStudiengang from '../../../../../api/factory/studiengang.js'; import ApiStvAbschlusspruefung from '../../../../../api/factory/stv/abschlusspruefung.js'; -import ApiStvAddress from "../../../../../api/factory/stv/kontakt/address.js"; export default { components: { diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js b/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js index 7a156965f..f439d0135 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js @@ -3,18 +3,29 @@ import FormInput from "../../../Form/Input.js"; import AkteEdit from "./Archiv/Edit.js"; import ApiStvArchiv from '../../../../api/factory/stv/archiv.js'; +import ApiStvDocuments from '../../../../api/factory/stv/documents.js'; +import DocumentDropdown from "../Details/Archiv/DocumentDropdown"; + export default { name: 'Archiv', components: { CoreFilterCmpt, FormInput, - AkteEdit + AkteEdit, + DocumentDropdown }, inject: { currentSemester: { from: 'currentSemester' - } + }, + /* isBerechtigtDocAndOdt: { + from: 'hasPermissionOutputformat', + default: false + },*/ + cisRoot: { + from: 'cisRoot' + }, }, props: { modelValue: Object, @@ -64,7 +75,8 @@ export default { 'abschlussdokument_lehrgaenge.xml.php': [ 'AbschlussdokumentLehrgaenge' ] - } + }, + documentDropdownObject: {} }; }, computed: { @@ -184,7 +196,42 @@ export default { ]; return events; + }, + studentUids() { + if (this.modelValue.uid) + { + return [this.modelValue.uid]; + } + return this.modelValue.map(e => e.uid); + }, + studentKzs(){ + if (this.modelValue.uid) + { + return [this.modelValue.studiengang_kz]; + } + return this.modelValue.map(e => e.studiengang_kz); + }, + stg_kz(){ + return this.studentKzs[0]; + }, + showAllFormats() { + if( this.isBerechtigtDocAndOdt === false + || !Array.isArray(this.isBerechtigtDocAndOdt) ) + { + return false; + } + let retval = this.isBerechtigtDocAndOdt.includes(this.stgInfo.oe_kurzbz); + return retval; + }, + showDropDownMulti(){ + + if (this.modelValue.length) { + console.log("started comp property showDropdown Multi " + this.modelValue.length); + return true; + } + return false; } + }, watch: { modelValue() { @@ -252,14 +299,44 @@ export default { } }, created() { + this.$api + .call(ApiStvArchiv.getArchivVorlagen()) + .then(result => { + this.vorlagenArchiv = result.data; + this.selectedVorlage = result.data.filter(o => o.vorlage_kurzbz == 'Zeugnis')[0]; + }) + .catch(this.$fhcAlert.handleSystemError); + + if (this.modelValue.length) { + console.log("multi" + this.modelValue.length); + console.log(this.studentUids); this.$api - .call(ApiStvArchiv.getArchivVorlagen()) - .then(result => {this.vorlagenArchiv = result.data; this.selectedVorlage = result.data.filter(o => o.vorlage_kurzbz == 'Zeugnis')[0];}) + .call(ApiStvDocuments.getDocumentDropdownMulti(this.studentUids)) + .then(result => { + console.log(result); + this.documentDropdownObject = result; + }) .catch(this.$fhcAlert.handleSystemError); + } else { + console.log("single"); + const params = { + prestudent_id: this.modelValue.prestudent_id, + studiensemester_kurzbz: this.currentSemester, + studiengang_kz: this.modelValue.studiengang_kz + }; + this.$api + .call(ApiStvDocuments.getDocumentDropdown(params)) + .then(result => { + console.log(result); + this.documentDropdownObject = result; + }) + .catch(this.$fhcAlert.handleSystemError); + } }, template: `
+ diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Archiv/DocumentDropdown.js b/public/js/components/Stv/Studentenverwaltung/Details/Archiv/DocumentDropdown.js new file mode 100644 index 000000000..215a1f1ca --- /dev/null +++ b/public/js/components/Stv/Studentenverwaltung/Details/Archiv/DocumentDropdown.js @@ -0,0 +1,116 @@ +export default { + name: "DocumentDropdown", + props: { + documents: { + type: [Object, Array], + required: true, + }, + studentUids: { + type: [Array, String], + required: true, + default: () => [] + }, + showDropDownMulti: { + type: Boolean, + required: true + }, + cisRoot: { + type: String, + required: true + }, + stgKz: { + type: Number, + required: true + }, + showAllFormats: { + type: Boolean, + required: true + } + }, + data() { + return {}; + }, + methods: { + printDokument(url, scope){ + //TODO Manu(check if logic not in content (Zutrittkarte also in content folder)) + let linkToPdf = this.cisRoot + 'content/' + url; + console.log("in print " + linkToPdf + " scope" + scope); + window.open(linkToPdf, '_blank'); + } + }, + template: ` +
+
+ + + + + +
+
` +}; + + diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 23eb39a21..fa03c4ba5 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -47543,6 +47543,28 @@ and represent the current state of research on the topic. The prescribed citatio ) ), //**************************** CORE/search end + // ### DOKUMENTE ERSTELLEN PHRASEN START ### + array( + 'app' => 'core', + 'category' => 'dokumente', + 'phrase' => 'dokument_erstellen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Dokument erstellen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Create Document', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + // ### DOKUMENTE ERSTELLEN PHRASEN END ### ); From 7b187ebadd42c3ad3f39821031a15df93deb046f Mon Sep 17 00:00:00 2001 From: ma0068 Date: Thu, 28 Aug 2025 11:05:04 +0200 Subject: [PATCH 2/4] add Dropdown for Multiaction Print add Event for adding Documents to PrintArray add Berechtigung hasPermissionOutputformat to enable Print for odt and doc Formats (documents abschlusspruefung) add Validations --- .../api/frontend/v1/stv/Dokumente.php | 184 ++++++------------ public/js/api/factory/stv/documents.js | 5 +- .../Stv/Studentenverwaltung/Details/Archiv.js | 12 +- .../Details/Archiv/DocumentDropdown.js | 95 ++++----- 4 files changed, 103 insertions(+), 193 deletions(-) diff --git a/application/controllers/api/frontend/v1/stv/Dokumente.php b/application/controllers/api/frontend/v1/stv/Dokumente.php index 520f5d824..17be3b9df 100644 --- a/application/controllers/api/frontend/v1/stv/Dokumente.php +++ b/application/controllers/api/frontend/v1/stv/Dokumente.php @@ -572,29 +572,21 @@ class Dokumente extends FHCAPI_Controller public function getDocumentDropDown($prestudent_id, $studiensemester_kurzbz, $studiengang_kz) { - //TODO(Manu) Berechtigungen hasPermissionOutputformat - //TODO(Manu) remove: just for test ouput - $hasPermissionOutputformat = false; + //permission to create also odt, and doc outputs of certain documents(menu abschlusspruefung) + $hasPermissionOutputformat = $this->permissionlib->isBerechtigt('system/change_outputformat', 's'); - //TODO(Manu) Validierungen - if (!$prestudent_id) { - $this->terminateWithError('Prestudent id is required.'); - } + if (!$prestudent_id) + $this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Prestudent_id']), self::ERROR_TYPE_GENERAL); if (!$studiensemester_kurzbz) - $this->terminateWithError("kein Studiensemester"); - if (!$studiengang_kz) - $this->terminateWithError("kein Studiengang_kz"); + $this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Studiensemester']), self::ERROR_TYPE_GENERAL); + if(!$studiengang_kz) + $this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Studiengang_kz']), self::ERROR_TYPE_GENERAL); + $uid = $this->_loadUIDFromPrestudent($prestudent_id); $semArray = $this->_getEntriesStudiensemester(); $stgTyp = $this->_getStudiengangstyp($studiengang_kz); - //TODO(Manu) check if if Array[0] bis Array[4] befüllt - //TODO(Manu) handling stgTyp ungleich b,m,d - - // $semString = implode(";", $semArray); - // $this->terminateWithError("Semester " . $semString . " " . $semArray[0] . " " . $semArray[1]); - $documents = [ $this->buildDropdownEntry("accountinfo", "Accountinfoblatt", "xml=accountinfoblatt.xml.php&xsl=AccountInfo&output=pdf", $uid, 10, null), $this->buildDropdownEntry("ausbildungsvertrag", "Ausbildungsvertrag", "xml=ausbildungsvertrag.xml.php&xsl=Ausbildungsver&output=pdf", $uid, 20, null), @@ -605,7 +597,6 @@ class Dokumente extends FHCAPI_Controller $this->buildDropdownEntry("studienblatt", "Studienblatt", "xml=studienblatt.xml.php&xsl=Studienblatt&output=pdf&ss=$studiensemester_kurzbz", $uid, 60, null), $this->buildDropdownEntry("studienblatt_eng", "Studienblatt Englisch", "xml=studienblatt.xml.php&xsl=StudienblattEng&output=pdf&ss=$studiensemester_kurzbz", $uid, 61, null), - // Studienerfolg Menüs automatisch $this->buildStudienerfolgSubmenu("de", $uid, $semArray, $studiensemester_kurzbz), $this->buildStudienerfolgSubmenu("en", $uid, $semArray, $studiensemester_kurzbz), $this->buildStudienerfolgSubmenu("de", $uid, $semArray, $studiensemester_kurzbz, true), @@ -617,7 +608,7 @@ class Dokumente extends FHCAPI_Controller "name" => "Verwaltung des StudierendenStatus", "order" => 110, "data" => [ - $this->buildDropdownEntry("Abmeldung", "Abmeldung", "xml=AntragAbmeldung.xml.php&xsl=AntragAbmeldungl&prestudent_id=$prestudent_id&output=pdf", $uid, null, null), + $this->buildDropdownEntry("Abmeldung", "Abmeldung", "xml=AntragAbmeldung.xml.php&xsl=AntragAbmeldung&prestudent_id=$prestudent_id&output=pdf", $uid, null, null), $this->buildDropdownEntry("Abmeldung durch Stgl", "AntragAbmeldungStgl", "xml=AntragAbmeldungStgl.xml.php&xsl=AntragAbmeldungStgl&prestudent_id=$prestudent_id&output=pdf", $uid, null, null), $this->buildDropdownEntry("Unterbrechung", "Unterbrechung", "xml=AntragUnterbrechung.xml.php&xsl=AntragUnterbrechung&prestudent_id=$prestudent_id&output=pdf", $uid, null, null), $this->buildDropdownEntry("Wiederholung", "Abmeldung durch Ablauf der Wiederholungsfrist", "xml=AntragWiederholung.xml.php&xsl=AntragWiederholung&prestudent_id=$prestudent_id&output=pdf", $uid, null, null), @@ -651,8 +642,11 @@ class Dokumente extends FHCAPI_Controller return $documents || null; } - public function getDocumentDropDownMulti() + public function getDocumentDropDownMulti($studiensemester_kurzbz,$studiengang_kz) { + //permission to create also odt, and doc outputs of certain documents (menu abschlusspruefung) + $hasPermissionOutputformat = $this->permissionlib->isBerechtigt('system/change_outputformat', 's'); + $studentUids = $this->input->get('studentUids'); $prestudentIds = []; @@ -661,134 +655,71 @@ class Dokumente extends FHCAPI_Controller $prestudent_id = $this-> _loadPrestudentFromUid($uid); $prestudentIds[] = $prestudent_id; } - } else { - echo "No prestudent IDs received."; } + else + { + $this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Array StudentUIDs']), self::ERROR_TYPE_GENERAL); + } + + if (!$studiensemester_kurzbz) + $this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Studiensemester']), self::ERROR_TYPE_GENERAL); + if(!$studiengang_kz) + $this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Studiengang_kz']), self::ERROR_TYPE_GENERAL); + $uidString = implode(";", $studentUids); $prestudentIdsString = implode(";", $prestudentIds); + $semArray = $this->_getEntriesStudiensemester(); + $stgTyp = $this->_getStudiengangstyp($studiengang_kz); $documents = [ - [ - "id" => "accountinfo1", - "type" => "documenturl", - "name" => "Accountinfoblatt", - "url" => "pdfExport.php?xml=accountinfoblatt.xml.php&xsl=AccountInfo&output=pdf&uid=" . $uidString, - "scope" => "prestudent" - ], - [ - "id" => "ausbildungsvertrag1_de", - "type" => "documenturl", - "name" => "Ausbildungsvertrag Deutsch", - "url" => "pdfExport.php?xml=ausbildungsvertrag.xml.php&xsl=Ausbildungsver&output=pdf&uid=" . $uidString, - "scope" => "prestudent" - ], - [ - "id" => "ausbildungsvertrag1_en", - "type" => "documenturl", - "name" => "Ausbildungsvertrag Englisch", - "url" => "pdfExport.php?xml=ausbildungsvertrag.xml.php&xsl=AusbVerEng&output=pdf&uid=" . $uidString, - "scope" => "prestudent" - ], - [ - "id" => "submenu_studienerfolg_1", - "type" => "submenu", - "name" => "Studienerfolg", - "data" => [ - [ - "id" => "submenu_studienerfolg_sem1", - "type" => "submenu", - "name" => "Studienerfolg WS2025", - "data" => [ - [ - "id" => "studienerfolg_sem_alle_1", - "type" => "submenu", - "name" => "Studienerfolg WS2025 Alle", - "data" => [ - [ - "id" => "studienerfolg_sem_alle_1_FA", - "type" => "documenturl", - "name" => "Studienerfolg Alle FINANZAMT", - "url" => "pdfExport.php?xml=ausbildungsvertrag.xml.php&xsl=AusbVerEng&output=pdf&uid=" . $uidString, - "scope" => "prestudent" - ], - [ - "id" => "studienerfolg_sem_alle_1_nichtFA", - "type" => "documenturl", - "name" => "Studienerfolg Alle NICHT FINANZAMT", - "url" => "pdfExport.php?xml=ausbildungsvertrag.xml.php&xsl=AusbVerEng&output=pdf&uid=" . $uidString, - "scope" => "prestudent" - ] - ] + $this->buildDropdownEntry("accountinfo", "Accountinfoblatt", "xml=accountinfoblatt.xml.php&xsl=AccountInfo&output=pdf", $uidString, 10, null), + $this->buildDropdownEntry("ausbildungsvertrag", "Ausbildungsvertrag", "xml=ausbildungsvertrag.xml.php&xsl=Ausbildungsver&output=pdf", $uidString, 20, null), + $this->buildDropdownEntry("ausbildungsvertrag_en", "Ausbildungsvertrag Englisch", "xml=ausbildungsvertrag.xml.php&xsl=AusbVerEng&output=pdf", $uidString, 21, null), + $this->buildDropdownEntry("studienbestaetigung", "Studienbestätigung", "xml=student.rdf.php&xsl=Inskription&output=pdf", $uidString, 40, null), + $this->buildDropdownEntry("studienbestaetigung_en", "Studienbestätigung Englisch", "xml=student.rdf.php&xsl=InskriptionEng&output=pdf", $uidString, 41, null), + $this->buildDropdownEntry("zutrittskarte", "Zutrittskarte", "xsl=ZutrittskarteStud&output=pdf&data=$uidString", $uidString,100, "zutrittskarte.php"), + $this->buildDropdownEntry("studienblatt", "Studienblatt", "xml=studienblatt.xml.php&xsl=Studienblatt&output=pdf&ss=$studiensemester_kurzbz", $uidString, 60, null), + $this->buildDropdownEntry("studienblatt_eng", "Studienblatt Englisch", "xml=studienblatt.xml.php&xsl=StudienblattEng&output=pdf&ss=$studiensemester_kurzbz", $uidString, 61, null), + + // Studienerfolg Menüs automatisch + $this->buildStudienerfolgSubmenu("de", $uidString, $semArray, $studiensemester_kurzbz), + $this->buildStudienerfolgSubmenu("en", $uidString, $semArray, $studiensemester_kurzbz), + $this->buildStudienerfolgSubmenu("de", $uidString, $semArray, $studiensemester_kurzbz, true), + $this->buildStudienerfolgSubmenu("en", $uidString, $semArray, $studiensemester_kurzbz, true), - ] - ] - ] - ] - ], [ - "id" => "submenu_studstatus", + "id" => "submenu_studstatus", "type" => "submenu", "name" => "Verwaltung des StudierendenStatus", + "order" => 110, "data" => [ - [ - "id" => "Abmeldung", - "type" => "documenturl", - "name" => "Abmeldung", - "url" => "pdfExport.php?xml=AntragAbmeldung.xml.php&xsl=AntragAbmeldung&output=pdf&uid=" . $uidString, - "scope" => "prestudent" - ], - [ - "id" => "Abmeldung durch Stg", - "type" => "documenturl", - "name" => "AntragAbmeldungStgl", - "url" => "pdfExport.php?xml=AntragAbmeldungStgl.xml.php&xsl=AntragAbmeldungStgl&output=pdf&uid=" . $uidString, - "scope" => "prestudent" - ] + $this->buildDropdownEntry("Abmeldung", "Abmeldung", "xml=AntragAbmeldung.xml.php&xsl=AntragAbmeldung&prestudent_id=$prestudentIdsString&output=pdf", $uidString, null, null), + $this->buildDropdownEntry("Abmeldung durch Stgl", "AntragAbmeldungStgl", "xml=AntragAbmeldungStgl.xml.php&xsl=AntragAbmeldungStgl&prestudent_id=$prestudentIdsString&output=pdf", $uidString, null, null), + $this->buildDropdownEntry("Unterbrechung", "Unterbrechung", "xml=AntragUnterbrechung.xml.php&xsl=AntragUnterbrechung&prestudent_id=$prestudentIdsString&output=pdf", $uidString, null, null), + $this->buildDropdownEntry("Wiederholung", "Abmeldung durch Ablauf der Wiederholungsfrist", "xml=AntragWiederholung.xml.php&xsl=AntragWiederholung&prestudent_id=$prestudentIdsString&output=pdf", $uidString, null, null), ] ], - [ - "id" => "zutrittskarte", - "type" => "documenturl", - "name" => "Zutrittskarte", - "url" => "zutrittskarte.php?xsl=ZutrittskarteStud&output=pdf&data=" . $uidString, - "scope" => "prestudent" - ], - [ - "id" => "zutrittskarte", - "type" => "parameterurl", - "name" => "Zutrittskarte", - "baseurl" => "zutrittskarte.php", - "parameterurl" =>"xsl=ZutrittskarteStud&output=pdf&data=" . $uidString, - "scope" => "prestudent" - ], - [ - "id" => "studienbestaetigung", - "type" => "documenturl", - "name" => "Studienbestätigung", - "url" => "pdfExport.php?xml=ausbildungsvertrag.xml.php&xsl=AusbVerEng&output=pdf&uid=" . $uidString, - "scope" => "prestudent" - ], - [ - "id" => "studienerfolg", - "type" => "documenturl", - "name" => "Studienbestätigung", - "url" => "pdfExport.php?xml=ausbildungsvertrag.xml.php&xsl=AusbVerEng&output=pdf&uid=" . $uidString, - "scope" => "prestudent" - ], + $this->loadDropDownEntriesFinalExam($hasPermissionOutputformat, $stgTyp, $uidString), + + //TODO(Manu) also in Fas multi not working +/* $this->buildDropdownEntry("bescheid", "Bescheid (nur Voransicht)", "xml=abschlusspruefung.rdf.php&xsl_stg_kz=$studiengang_kz&xsl=Bescheid&output=pdf", $uidString, 80, null), + */ + + $this->buildDropdownEntry("diplomasupp", "Diploma Supplement (nur Voransicht)", "xml=diplomasupplement.xml.php&xsl_stg_kz=$studiengang_kz&xsl=DiplSupplement&output=pdf", $uidString, 81, null) ]; -/* Events::trigger('DocumentGenerationDropDownMulti', + Events::trigger('DocumentGenerationDropDownMulti', // passing $menu per reference function & () use (&$documents) { return $documents; }, - $prestudent_id, + $studentUids, $studiensemester_kurzbz, $studiengang_kz - );*/ + ); usort($documents, function ($a, $b) { $orderA = isset($a['order']) ? (int)$a['order'] : PHP_INT_MAX; @@ -796,7 +727,6 @@ class Dokumente extends FHCAPI_Controller return $orderA <=> $orderB; }); - // FireEvent(DocumentGenerationDropDownMulti(&$documents); $this->terminateWithSuccess($documents); @@ -977,9 +907,7 @@ class Dokumente extends FHCAPI_Controller else if ($stgTyp == 'm' || $stgTyp == 'd') $postfix = 'Master'; else - //TODO(Manu) sollte nicht null sein!! -> dropdown wird im Falle von Lehrgängen nicht erstellt - return null; - + return []; $arrayFinalExam = [ 'pruefungsprotokoll' => [ diff --git a/public/js/api/factory/stv/documents.js b/public/js/api/factory/stv/documents.js index 37ec8298b..633afcba1 100644 --- a/public/js/api/factory/stv/documents.js +++ b/public/js/api/factory/stv/documents.js @@ -74,16 +74,15 @@ export default { }; }, getDocumentDropdown(params){ - console.log(params); return { method: 'get', url: 'api/frontend/v1/stv/dokumente/getDocumentDropDown/' + params.prestudent_id + '/' + params.studiensemester_kurzbz + '/' + params.studiengang_kz, }; }, - getDocumentDropdownMulti(studentUids){ + getDocumentDropdownMulti(studentUids, params){ return { method: 'get', - url: 'api/frontend/v1/stv/dokumente/getDocumentDropDownMulti/', + url: 'api/frontend/v1/stv/dokumente/getDocumentDropDownMulti/' + params.studiensemester_kurzbz + '/' + params.studiengang_kz, params: {studentUids} }; } diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js b/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js index f439d0135..dabb000d1 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js @@ -224,14 +224,11 @@ export default { return retval; }, showDropDownMulti(){ - if (this.modelValue.length) { - console.log("started comp property showDropdown Multi " + this.modelValue.length); return true; } return false; } - }, watch: { modelValue() { @@ -308,17 +305,18 @@ export default { .catch(this.$fhcAlert.handleSystemError); if (this.modelValue.length) { - console.log("multi" + this.modelValue.length); - console.log(this.studentUids); + const params = { + studiensemester_kurzbz: this.currentSemester, + studiengang_kz: this.stg_kz + }; this.$api - .call(ApiStvDocuments.getDocumentDropdownMulti(this.studentUids)) + .call(ApiStvDocuments.getDocumentDropdownMulti(this.studentUids, params)) .then(result => { console.log(result); this.documentDropdownObject = result; }) .catch(this.$fhcAlert.handleSystemError); } else { - console.log("single"); const params = { prestudent_id: this.modelValue.prestudent_id, studiensemester_kurzbz: this.currentSemester, diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Archiv/DocumentDropdown.js b/public/js/components/Stv/Studentenverwaltung/Details/Archiv/DocumentDropdown.js index 215a1f1ca..001a45ed8 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Archiv/DocumentDropdown.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Archiv/DocumentDropdown.js @@ -34,7 +34,6 @@ export default { printDokument(url, scope){ //TODO Manu(check if logic not in content (Zutrittkarte also in content folder)) let linkToPdf = this.cisRoot + 'content/' + url; - console.log("in print " + linkToPdf + " scope" + scope); window.open(linkToPdf, '_blank'); } }, @@ -42,71 +41,57 @@ export default {
- -
From 3cdb391a6da2336722d391ea09fa07e441af20e7 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Thu, 28 Aug 2025 14:29:26 +0200 Subject: [PATCH 3/4] use helper file instead of private function for building dropdown entry --- .../api/frontend/v1/stv/Dokumente.php | 108 ++++++------------ application/helpers/hlp_common_helper.php | 42 +++++++ .../Stv/Studentenverwaltung/Details/Archiv.js | 2 - 3 files changed, 76 insertions(+), 76 deletions(-) diff --git a/application/controllers/api/frontend/v1/stv/Dokumente.php b/application/controllers/api/frontend/v1/stv/Dokumente.php index 17be3b9df..e6f6f4351 100644 --- a/application/controllers/api/frontend/v1/stv/Dokumente.php +++ b/application/controllers/api/frontend/v1/stv/Dokumente.php @@ -572,6 +572,7 @@ class Dokumente extends FHCAPI_Controller public function getDocumentDropDown($prestudent_id, $studiensemester_kurzbz, $studiengang_kz) { + $this->load->helper('hlp_common'); //permission to create also odt, and doc outputs of certain documents(menu abschlusspruefung) $hasPermissionOutputformat = $this->permissionlib->isBerechtigt('system/change_outputformat', 's'); @@ -588,14 +589,14 @@ class Dokumente extends FHCAPI_Controller $stgTyp = $this->_getStudiengangstyp($studiengang_kz); $documents = [ - $this->buildDropdownEntry("accountinfo", "Accountinfoblatt", "xml=accountinfoblatt.xml.php&xsl=AccountInfo&output=pdf", $uid, 10, null), - $this->buildDropdownEntry("ausbildungsvertrag", "Ausbildungsvertrag", "xml=ausbildungsvertrag.xml.php&xsl=Ausbildungsver&output=pdf", $uid, 20, null), - $this->buildDropdownEntry("ausbildungsvertrag_en", "Ausbildungsvertrag Englisch", "xml=ausbildungsvertrag.xml.php&xsl=AusbVerEng&output=pdf", $uid, 21, null), - $this->buildDropdownEntry("studienbestaetigung", "Studienbestätigung", "xml=student.rdf.php&xsl=Inskription&output=pdf", $uid, 40, null), - $this->buildDropdownEntry("studienbestaetigung_en", "Studienbestätigung Englisch", "xml=student.rdf.php&xsl=InskriptionEng&output=pdf", $uid, 41, null), - $this->buildDropdownEntry("zutrittskarte", "Zutrittskarte", "xsl=ZutrittskarteStud&output=pdf&data=$uid", $uid,100, "zutrittskarte.php"), - $this->buildDropdownEntry("studienblatt", "Studienblatt", "xml=studienblatt.xml.php&xsl=Studienblatt&output=pdf&ss=$studiensemester_kurzbz", $uid, 60, null), - $this->buildDropdownEntry("studienblatt_eng", "Studienblatt Englisch", "xml=studienblatt.xml.php&xsl=StudienblattEng&output=pdf&ss=$studiensemester_kurzbz", $uid, 61, null), + buildDropdownEntryPrintArray("accountinfo", "Accountinfoblatt", "xml=accountinfoblatt.xml.php&xsl=AccountInfo&output=pdf", $uid, 10, null), + buildDropdownEntryPrintArray("ausbildungsvertrag", "Ausbildungsvertrag", "xml=ausbildungsvertrag.xml.php&xsl=Ausbildungsver&output=pdf", $uid, 20, null), + buildDropdownEntryPrintArray("ausbildungsvertrag_en", "Ausbildungsvertrag Englisch", "xml=ausbildungsvertrag.xml.php&xsl=AusbVerEng&output=pdf", $uid, 21, null), + buildDropdownEntryPrintArray("studienbestaetigung", "Studienbestätigung", "xml=student.rdf.php&xsl=Inskription&output=pdf", $uid, 40, null), + buildDropdownEntryPrintArray("studienbestaetigung_en", "Studienbestätigung Englisch", "xml=student.rdf.php&xsl=InskriptionEng&output=pdf", $uid, 41, null), + buildDropdownEntryPrintArray("zutrittskarte", "Zutrittskarte", "xsl=ZutrittskarteStud&output=pdf&data=$uid", $uid,100, "zutrittskarte.php"), + buildDropdownEntryPrintArray("studienblatt", "Studienblatt", "xml=studienblatt.xml.php&xsl=Studienblatt&output=pdf&ss=$studiensemester_kurzbz", $uid, 60, null), + buildDropdownEntryPrintArray("studienblatt_eng", "Studienblatt Englisch", "xml=studienblatt.xml.php&xsl=StudienblattEng&output=pdf&ss=$studiensemester_kurzbz", $uid, 61, null), $this->buildStudienerfolgSubmenu("de", $uid, $semArray, $studiensemester_kurzbz), $this->buildStudienerfolgSubmenu("en", $uid, $semArray, $studiensemester_kurzbz), @@ -608,17 +609,17 @@ class Dokumente extends FHCAPI_Controller "name" => "Verwaltung des StudierendenStatus", "order" => 110, "data" => [ - $this->buildDropdownEntry("Abmeldung", "Abmeldung", "xml=AntragAbmeldung.xml.php&xsl=AntragAbmeldung&prestudent_id=$prestudent_id&output=pdf", $uid, null, null), - $this->buildDropdownEntry("Abmeldung durch Stgl", "AntragAbmeldungStgl", "xml=AntragAbmeldungStgl.xml.php&xsl=AntragAbmeldungStgl&prestudent_id=$prestudent_id&output=pdf", $uid, null, null), - $this->buildDropdownEntry("Unterbrechung", "Unterbrechung", "xml=AntragUnterbrechung.xml.php&xsl=AntragUnterbrechung&prestudent_id=$prestudent_id&output=pdf", $uid, null, null), - $this->buildDropdownEntry("Wiederholung", "Abmeldung durch Ablauf der Wiederholungsfrist", "xml=AntragWiederholung.xml.php&xsl=AntragWiederholung&prestudent_id=$prestudent_id&output=pdf", $uid, null, null), + buildDropdownEntryPrintArray("Abmeldung", "Abmeldung", "xml=AntragAbmeldung.xml.php&xsl=AntragAbmeldung&prestudent_id=$prestudent_id&output=pdf", $uid, null, null), + buildDropdownEntryPrintArray("Abmeldung durch Stgl", "AntragAbmeldungStgl", "xml=AntragAbmeldungStgl.xml.php&xsl=AntragAbmeldungStgl&prestudent_id=$prestudent_id&output=pdf", $uid, null, null), + buildDropdownEntryPrintArray("Unterbrechung", "Unterbrechung", "xml=AntragUnterbrechung.xml.php&xsl=AntragUnterbrechung&prestudent_id=$prestudent_id&output=pdf", $uid, null, null), + buildDropdownEntryPrintArray("Wiederholung", "Abmeldung durch Ablauf der Wiederholungsfrist", "xml=AntragWiederholung.xml.php&xsl=AntragWiederholung&prestudent_id=$prestudent_id&output=pdf", $uid, null, null), ] ], $this->loadDropDownEntriesFinalExam($hasPermissionOutputformat, $stgTyp, $uid), - $this->buildDropdownEntry("bescheid", "Bescheid (nur Voransicht)", "xml=abschlusspruefung.rdf.php&xsl_stg_kz=$studiengang_kz&xsl=Bescheid&output=pdf", $uid, 80, null), - $this->buildDropdownEntry("diplomasupp", "Diploma Supplement (nur Voransicht)", "xml=diplomasupplement.xml.php&xsl_stg_kz=$studiengang_kz&xsl=DiplSupplement&output=pdf", $uid, 81, null) + buildDropdownEntryPrintArray("bescheid", "Bescheid (nur Voransicht)", "xml=abschlusspruefung.rdf.php&xsl_stg_kz=$studiengang_kz&xsl=Bescheid&output=pdf", $uid, 80, null), + buildDropdownEntryPrintArray("diplomasupp", "Diploma Supplement (nur Voransicht)", "xml=diplomasupplement.xml.php&xsl_stg_kz=$studiengang_kz&xsl=DiplSupplement&output=pdf", $uid, 81, null) ]; Events::trigger('DocumentGenerationDropDown', @@ -674,14 +675,14 @@ class Dokumente extends FHCAPI_Controller $stgTyp = $this->_getStudiengangstyp($studiengang_kz); $documents = [ - $this->buildDropdownEntry("accountinfo", "Accountinfoblatt", "xml=accountinfoblatt.xml.php&xsl=AccountInfo&output=pdf", $uidString, 10, null), - $this->buildDropdownEntry("ausbildungsvertrag", "Ausbildungsvertrag", "xml=ausbildungsvertrag.xml.php&xsl=Ausbildungsver&output=pdf", $uidString, 20, null), - $this->buildDropdownEntry("ausbildungsvertrag_en", "Ausbildungsvertrag Englisch", "xml=ausbildungsvertrag.xml.php&xsl=AusbVerEng&output=pdf", $uidString, 21, null), - $this->buildDropdownEntry("studienbestaetigung", "Studienbestätigung", "xml=student.rdf.php&xsl=Inskription&output=pdf", $uidString, 40, null), - $this->buildDropdownEntry("studienbestaetigung_en", "Studienbestätigung Englisch", "xml=student.rdf.php&xsl=InskriptionEng&output=pdf", $uidString, 41, null), - $this->buildDropdownEntry("zutrittskarte", "Zutrittskarte", "xsl=ZutrittskarteStud&output=pdf&data=$uidString", $uidString,100, "zutrittskarte.php"), - $this->buildDropdownEntry("studienblatt", "Studienblatt", "xml=studienblatt.xml.php&xsl=Studienblatt&output=pdf&ss=$studiensemester_kurzbz", $uidString, 60, null), - $this->buildDropdownEntry("studienblatt_eng", "Studienblatt Englisch", "xml=studienblatt.xml.php&xsl=StudienblattEng&output=pdf&ss=$studiensemester_kurzbz", $uidString, 61, null), + buildDropdownEntryPrintArray("accountinfo", "Accountinfoblatt", "xml=accountinfoblatt.xml.php&xsl=AccountInfo&output=pdf", $uidString, 10, null), + buildDropdownEntryPrintArray("ausbildungsvertrag", "Ausbildungsvertrag", "xml=ausbildungsvertrag.xml.php&xsl=Ausbildungsver&output=pdf", $uidString, 20, null), + buildDropdownEntryPrintArray("ausbildungsvertrag_en", "Ausbildungsvertrag Englisch", "xml=ausbildungsvertrag.xml.php&xsl=AusbVerEng&output=pdf", $uidString, 21, null), + buildDropdownEntryPrintArray("studienbestaetigung", "Studienbestätigung", "xml=student.rdf.php&xsl=Inskription&output=pdf", $uidString, 40, null), + buildDropdownEntryPrintArray("studienbestaetigung_en", "Studienbestätigung Englisch", "xml=student.rdf.php&xsl=InskriptionEng&output=pdf", $uidString, 41, null), + buildDropdownEntryPrintArray("zutrittskarte", "Zutrittskarte", "xsl=ZutrittskarteStud&output=pdf&data=$uidString", $uidString,100, "zutrittskarte.php"), + buildDropdownEntryPrintArray("studienblatt", "Studienblatt", "xml=studienblatt.xml.php&xsl=Studienblatt&output=pdf&ss=$studiensemester_kurzbz", $uidString, 60, null), + buildDropdownEntryPrintArray("studienblatt_eng", "Studienblatt Englisch", "xml=studienblatt.xml.php&xsl=StudienblattEng&output=pdf&ss=$studiensemester_kurzbz", $uidString, 61, null), // Studienerfolg Menüs automatisch $this->buildStudienerfolgSubmenu("de", $uidString, $semArray, $studiensemester_kurzbz), @@ -695,20 +696,20 @@ class Dokumente extends FHCAPI_Controller "name" => "Verwaltung des StudierendenStatus", "order" => 110, "data" => [ - $this->buildDropdownEntry("Abmeldung", "Abmeldung", "xml=AntragAbmeldung.xml.php&xsl=AntragAbmeldung&prestudent_id=$prestudentIdsString&output=pdf", $uidString, null, null), - $this->buildDropdownEntry("Abmeldung durch Stgl", "AntragAbmeldungStgl", "xml=AntragAbmeldungStgl.xml.php&xsl=AntragAbmeldungStgl&prestudent_id=$prestudentIdsString&output=pdf", $uidString, null, null), - $this->buildDropdownEntry("Unterbrechung", "Unterbrechung", "xml=AntragUnterbrechung.xml.php&xsl=AntragUnterbrechung&prestudent_id=$prestudentIdsString&output=pdf", $uidString, null, null), - $this->buildDropdownEntry("Wiederholung", "Abmeldung durch Ablauf der Wiederholungsfrist", "xml=AntragWiederholung.xml.php&xsl=AntragWiederholung&prestudent_id=$prestudentIdsString&output=pdf", $uidString, null, null), + buildDropdownEntryPrintArray("Abmeldung", "Abmeldung", "xml=AntragAbmeldung.xml.php&xsl=AntragAbmeldung&prestudent_id=$prestudentIdsString&output=pdf", $uidString, null, null), + buildDropdownEntryPrintArray("Abmeldung durch Stgl", "AntragAbmeldungStgl", "xml=AntragAbmeldungStgl.xml.php&xsl=AntragAbmeldungStgl&prestudent_id=$prestudentIdsString&output=pdf", $uidString, null, null), + buildDropdownEntryPrintArray("Unterbrechung", "Unterbrechung", "xml=AntragUnterbrechung.xml.php&xsl=AntragUnterbrechung&prestudent_id=$prestudentIdsString&output=pdf", $uidString, null, null), + buildDropdownEntryPrintArray("Wiederholung", "Abmeldung durch Ablauf der Wiederholungsfrist", "xml=AntragWiederholung.xml.php&xsl=AntragWiederholung&prestudent_id=$prestudentIdsString&output=pdf", $uidString, null, null), ] ], $this->loadDropDownEntriesFinalExam($hasPermissionOutputformat, $stgTyp, $uidString), //TODO(Manu) also in Fas multi not working -/* $this->buildDropdownEntry("bescheid", "Bescheid (nur Voransicht)", "xml=abschlusspruefung.rdf.php&xsl_stg_kz=$studiengang_kz&xsl=Bescheid&output=pdf", $uidString, 80, null), +/* buildDropdownEntryPrintArray("bescheid", "Bescheid (nur Voransicht)", "xml=abschlusspruefung.rdf.php&xsl_stg_kz=$studiengang_kz&xsl=Bescheid&output=pdf", $uidString, 80, null), */ - $this->buildDropdownEntry("diplomasupp", "Diploma Supplement (nur Voransicht)", "xml=diplomasupplement.xml.php&xsl_stg_kz=$studiengang_kz&xsl=DiplSupplement&output=pdf", $uidString, 81, null) + buildDropdownEntryPrintArray("diplomasupp", "Diploma Supplement (nur Voransicht)", "xml=diplomasupplement.xml.php&xsl_stg_kz=$studiengang_kz&xsl=DiplSupplement&output=pdf", $uidString, 81, null) ]; Events::trigger('DocumentGenerationDropDownMulti', @@ -806,47 +807,6 @@ class Dokumente extends FHCAPI_Controller return $typStudiengang; } - //TODO(Manu) make helperfunction - /** - * is building an array for Dropdown Entry in Print Dropdown - * @param $id id for the Document to add to the Document Array - * @param $name name of the dropdownEntry - * @param $parameterUrl url of parameters xml, xsl,format as needed - * WITHOUT BASEURL eg. "xml=abschlusspruefung.rdf.php&xsl_stg_kz=$studiengang_kz&xsl=Bescheid&output=pdf" - * @param $uid default parameter, if null only parameterurl will be added - * additional needed parameter: put in the parameterUrl - * @param $alternativeBaseUrl: if baseUrl not pdfExport.php, put here alternative without ? char, eg. "zutrittskarte.php" - - * @return Array - */ - private function buildDropdownEntry($id, $name, $parameterurl, $uid=null, $order=null, $alternativeBaseUrl=null) - { - //DEFAULT BASEURL - $baseurl = "pdfExport.php?"; - - $uidString = $uid ? "&uid=" . $uid : ""; - - if($alternativeBaseUrl) - { - return [ - "id" => $id, - "type" => "documenturl", - "name" => $name, - "url" => $alternativeBaseUrl . "?" . $parameterurl . $uidString, - "order" => $order - ]; - } - else - return [ - "id" => $id, - "type" => "documenturl", - "name" => $name, - "url" => $baseurl . $parameterurl . "&uid=" . $uid, - "order" => $order - ]; - - } - /** * helper function to create ArrayStructure * actual studiensemester plus the 5 studiensemester in the past @@ -860,7 +820,7 @@ class Dokumente extends FHCAPI_Controller $xsl = $lang === "de" ? "Studienerfolg" : "StudienerfolgEng"; $idPrefix = "submenu_studienerfolg_" . $lang . ($fa ? "_fa" : ""); - $entries[] = $this->buildDropdownEntry( + $entries[] = buildDropdownEntryPrintArray( $idPrefix . "_aktuell", "ausgewähltes Semester", "xml=studienerfolg.rdf.php&xsl=$xsl&ss=$studiensemester_kurzbz" . ($fa ? "&typ=finanzamt" : ""), @@ -868,7 +828,7 @@ class Dokumente extends FHCAPI_Controller ); //all semester - $entries[] = $this->buildDropdownEntry( + $entries[] = buildDropdownEntryPrintArray( $idPrefix . "_all", "alle Semester", "xml=studienerfolg.rdf.php&xsl=$xsl&ss=$studiensemester_kurzbz&all=true" . ($fa ? "&typ=finanzamt" : ""), @@ -877,7 +837,7 @@ class Dokumente extends FHCAPI_Controller //sem from array foreach ($semArray as $i => $sem) { - $entries[] = $this->buildDropdownEntry( + $entries[] = buildDropdownEntryPrintArray( $idPrefix . ($i === 0 ? "_akt" : "_minus" . $i), $sem, "xml=studienerfolg.rdf.php&xsl=$xsl&ss=$sem" . ($fa ? "&typ=finanzamt" : ""), @@ -965,7 +925,7 @@ class Dokumente extends FHCAPI_Controller //3 outputformates foreach (["pdf", "odt", "docx"] as $format) { - $submenuData[] = $this->buildDropdownEntry( + $submenuData[] = buildDropdownEntryPrintArray( $idPrefix . "_" . $format, $baseName . " (" . strtoupper($format) . ")", $baseUrl . "&output=" . $format, @@ -986,7 +946,7 @@ class Dokumente extends FHCAPI_Controller $url = "xml=abschlusspruefung.rdf.php&xsl=" . $xsl . "&output=pdf"; - $submenuData[] = $this->buildDropdownEntry($id, $name, $url, $uid); + $submenuData[] = buildDropdownEntryPrintArray($id, $name, $url, $uid); } } } diff --git a/application/helpers/hlp_common_helper.php b/application/helpers/hlp_common_helper.php index 00c0a1b93..ad030c075 100644 --- a/application/helpers/hlp_common_helper.php +++ b/application/helpers/hlp_common_helper.php @@ -515,3 +515,45 @@ function has_permissions_for_stg($studiengang_kz, $permissions = '') return false; } + +/** + * is building an array for Dropdown Entry in Print Dropdown + * @param $id id for the Document to add to the Document Array + * @param $name title of the dropdownEntry + * @param $parameterUrl url of parameters xml, xsl, format etc as needed + * WITHOUT BASEURL eg. "xml=abschlusspruefung.rdf.php&xsl_stg_kz=$studiengang_kz&xsl=Bescheid&output=pdf" + * @param $uid default parameter, if null only parameterurl will be added + * additional needed parameter: put in the parameterUrl + * @param $alternativeBaseUrl: if baseUrl not pdfExport.php, put here alternative without ? char, eg. "zutrittskarte.php" + * + * @return Array + */ +function buildDropdownEntryPrintArray($id, $name, $parameterurl, $uid=null, $order=null, $alternativeBaseUrl=null) +{ + //DEFAULT BASEURL + $baseurl = "pdfExport.php?"; + + $uidString = $uid ? "&uid=" . $uid : ""; + + + + if($alternativeBaseUrl) + { + return [ + "id" => $id, + "type" => "documenturl", + "name" => $name, + "url" => $alternativeBaseUrl . "?" . $parameterurl . $uidString, + "order" => $order + ]; + } + else + return [ + "id" => $id, + "type" => "documenturl", + "name" => $name, + "url" => $baseurl . $parameterurl . "&uid=" . $uid, + "order" => $order + ]; + +} diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js b/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js index dabb000d1..a3ac6593b 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js @@ -312,7 +312,6 @@ export default { this.$api .call(ApiStvDocuments.getDocumentDropdownMulti(this.studentUids, params)) .then(result => { - console.log(result); this.documentDropdownObject = result; }) .catch(this.$fhcAlert.handleSystemError); @@ -325,7 +324,6 @@ export default { this.$api .call(ApiStvDocuments.getDocumentDropdown(params)) .then(result => { - console.log(result); this.documentDropdownObject = result; }) .catch(this.$fhcAlert.handleSystemError); From ca55c8b1a78afd35d03954a0132b3e93b4ae52a1 Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Mon, 29 Sep 2025 13:48:14 +0200 Subject: [PATCH 4/4] Archiv.js: import add missing file extension, DocumentDropdown: remove wrapper div causing button not being aligned --- .../components/Stv/Studentenverwaltung/Details/Archiv.js | 2 +- .../Details/Archiv/DocumentDropdown.js | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js b/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js index a3ac6593b..9f28a51a1 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js @@ -4,7 +4,7 @@ import AkteEdit from "./Archiv/Edit.js"; import ApiStvArchiv from '../../../../api/factory/stv/archiv.js'; import ApiStvDocuments from '../../../../api/factory/stv/documents.js'; -import DocumentDropdown from "../Details/Archiv/DocumentDropdown"; +import DocumentDropdown from "../Details/Archiv/DocumentDropdown.js"; export default { diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Archiv/DocumentDropdown.js b/public/js/components/Stv/Studentenverwaltung/Details/Archiv/DocumentDropdown.js index 001a45ed8..1136d6f98 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Archiv/DocumentDropdown.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Archiv/DocumentDropdown.js @@ -38,12 +38,11 @@ export default { } }, template: ` -
-
+
-
` +
` };