From 405062f5493fcdaaf3ed0e9b501a08e5aa93f081 Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Wed, 7 May 2025 18:36:51 +0200 Subject: [PATCH 001/102] added Projektarbeit tab to Studierendenverwaltung, adding, editing, deleting of Projektarbeiten now possible --- .../api/frontend/v1/stv/Config.php | 5 + .../api/frontend/v1/stv/Projektarbeit.php | 334 +++++++ .../education/Lehrveranstaltung_model.php | 57 ++ .../models/education/Projektarbeit_model.php | 34 +- application/models/ressource/Firma_model.php | 21 +- public/js/api/factory/stv/projektarbeit.js | 80 ++ .../Details/Projektarbeit.js | 24 + .../Details/Projektarbeit/Betreuung.js | 847 ++++++++++++++++++ .../Details/Projektarbeit/Details.js | 461 ++++++++++ .../Details/Projektarbeit/Projektarbeit.js | 377 ++++++++ 10 files changed, 2230 insertions(+), 10 deletions(-) create mode 100644 application/controllers/api/frontend/v1/stv/Projektarbeit.php create mode 100644 public/js/api/factory/stv/projektarbeit.js create mode 100644 public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit.js create mode 100644 public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Betreuung.js create mode 100644 public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Details.js create mode 100644 public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektarbeit.js diff --git a/application/controllers/api/frontend/v1/stv/Config.php b/application/controllers/api/frontend/v1/stv/Config.php index 455b1e8fc..dd2eaed02 100644 --- a/application/controllers/api/frontend/v1/stv/Config.php +++ b/application/controllers/api/frontend/v1/stv/Config.php @@ -123,6 +123,11 @@ class Config extends FHCAPI_Controller 'config' => $config['finalexam'] ]; + $result['projektarbeit'] = [ + 'title' => $this->p->t('stv', 'tab_projektarbeit'), + 'component' => './Stv/Studentenverwaltung/Details/Projektarbeit.js' + ]; + $result['mobility'] = [ 'title' => $this->p->t('stv', 'tab_mobility'), 'component' => './Stv/Studentenverwaltung/Details/Mobility.js' diff --git a/application/controllers/api/frontend/v1/stv/Projektarbeit.php b/application/controllers/api/frontend/v1/stv/Projektarbeit.php new file mode 100644 index 000000000..3be2b26a3 --- /dev/null +++ b/application/controllers/api/frontend/v1/stv/Projektarbeit.php @@ -0,0 +1,334 @@ + ['admin:r', 'assistenz:r'], + 'loadProjektarbeit' => ['admin:r', 'assistenz:r'], + 'insertProjektarbeit' => ['admin:rw', 'assistenz:rw'], + 'updateProjektarbeit' => ['admin:rw', 'assistenz:rw'], + 'deleteProjektarbeit' => ['admin:rw', 'assistenz:rw'], + 'getTypenProjektarbeit' => ['admin:r', 'assistenz:r'], + 'getFirmen' => ['admin:r', 'assistenz:r'], + 'getLehrveranstaltungen' => ['admin:r', 'assistenz:r'], + 'getNoten' => ['admin:rw', 'assistenz:rw'] + ]); + + // Load Libraries + $this->load->library('form_validation'); + + // Load language phrases + $this->loadPhrases([ + 'ui', + 'person', + 'projektarbeit' + ]); + + // Load models + $this->load->model('education/Projektarbeit_model', 'ProjektarbeitModel'); + $this->load->model('education/Projekttyp_model', 'ProjekttypModel'); + $this->load->model('education/Paabgabe_model', 'PaabgabeModel'); + $this->load->model('ressource/Firma_model', 'FirmaModel'); + $this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel'); + $this->load->model('education/Lehreinheit_model', 'LehreinheitModel'); + $this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel'); + $this->load->model('education/Note_model', 'NoteModel'); + $this->load->model('education/Projektbetreuer_model', 'BetreuerModel'); + + // load libraries + $this->load->library('PermissionLib'); + } + + public function getProjektarbeit() + { + $student_uid = $this->input->get('uid'); + + if (!isset($student_uid)) $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Student UID']), self::ERROR_TYPE_GENERAL); + + $result = $this->ProjektarbeitModel->getProjektarbeit($student_uid); + + if (isError($result)) + { + $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + + if (!hasData($result)) $this->terminateWithSuccess([]); + + $projektarbeiten = getData($result); + + foreach ($projektarbeiten as $projektarbeit) + { + $projektarbeit_id = $projektarbeit->projektarbeit_id; + $abgabeRes = $this->PaabgabeModel->getEndabgabe($projektarbeit_id); + + if (isError($abgabeRes)) $this->terminateWithError(getError($abgabeRes), self::ERROR_TYPE_GENERAL); + + if (hasData($abgabeRes)) + { + $paabgabe = getData($abgabeRes)[0]; + $projektarbeit->abgabedatum = $paabgabe->abgabedatum; + } + } + + $this->terminateWithSuccess($projektarbeiten); + } + + public function loadProjektarbeit() + { + $projektarbeit_id = $this->input->get('projektarbeit_id'); + + if (!isset($projektarbeit_id) || !is_numeric($projektarbeit_id)) return $this->terminateWithError('Projektarbeit Id missing', self::ERROR_TYPE_GENERAL); + + $this->ProjektarbeitModel->addSelect( + 'lehre.tbl_projektarbeit.projektarbeit_id, titel, titel_english, themenbereich, projekttyp_kurzbz, firma_id, + lehrveranstaltung_id, lehreinheit_id, beginn, note, final, freigegeben, tbl_projektarbeit.anmerkung, fa.name AS firma_name' + ); + $this->ProjektarbeitModel->addJoin('lehre.tbl_lehreinheit le', 'lehreinheit_id'); + $this->ProjektarbeitModel->addJoin('lehre.tbl_lehrveranstaltung lv', 'lehrveranstaltung_id'); + $this->ProjektarbeitModel->addJoin('public.tbl_firma fa', 'firma_id'); + $result = $this->ProjektarbeitModel->loadWhere( + array('projektarbeit_id' => $projektarbeit_id) + ); + + $data = $this->getDataOrTerminateWithError($result); + + $this->terminateWithSuccess(current($data)); + } + + public function insertProjektarbeit() + { + $student_uid = $this->input->post('uid'); + + if (!$student_uid) return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Student UID']), self::ERROR_TYPE_GENERAL); + + if (!$this->_hasBerechtigungForStudent($student_uid)) + return $this->_outputAuthError([$this->router->method => ['admin:rw', 'assistenz:rw']]); + + $formData = $this->input->post('formData'); + + $this->addMeta('form', $formData); + + if ($this->_validate($formData) == false) + { + $this->terminateWithValidationErrors($this->form_validation->error_array()); + } + + $result = $this->ProjektarbeitModel->insert( + array_merge($formData, ['insertamum' => date('c'), 'insertvon' => getAuthUID(), 'student_uid' => $student_uid]) + ); + + $data = $this->getDataOrTerminateWithError($result); + + $this->terminateWithSuccess($data); + } + + public function updateProjektarbeit() + { + $projektarbeit_id = $this->input->post('projektarbeit_id'); + + if (!$projektarbeit_id || !is_numeric($projektarbeit_id)) + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Projektarbeit ID']), self::ERROR_TYPE_GENERAL); + + if (!$this->ProjektarbeitModel->hasBerechtigungForProjektarbeit($projektarbeit_id)) + return $this->_outputAuthError([$this->router->method => ['admin:rw', 'assistenz:rw']]); + + $formData = $this->input->post('formData'); + + if ($this->_validate($formData) == false) + { + $this->terminateWithValidationErrors($this->form_validation->error_array()); + } + + $result = $this->ProjektarbeitModel->update( + $projektarbeit_id, + array_merge($formData, ['updateamum' => date('c'), 'updatevon' => getAuthUID()]) + ); + + $data = $this->getDataOrTerminateWithError($result); + + $this->terminateWithSuccess($data); + } + + public function deleteProjektarbeit() + { + $projektarbeit_id = $this->input->post('projektarbeit_id'); + + if (!isset($projektarbeit_id) || !is_numeric($projektarbeit_id)) + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Projektarbeit ID'], self::ERROR_TYPE_GENERAL)); + + if (!$this->ProjektarbeitModel->hasBerechtigungForProjektarbeit($projektarbeit_id)) + return $this->_outputAuthError([$this->router->method => ['admin:rw', 'assistenz:rw']]); + + $validate = $this->_validateDelete($projektarbeit_id); + + if (isError($validate)) return $this->terminateWithError(getError($validate), self::ERROR_TYPE_GENERAL); + + $result = $this->ProjektarbeitModel->delete( + array('projektarbeit_id' => $projektarbeit_id) + ); + + if (isError($result)) return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + + if (!hasData($result)) + { + $this->outputJson($result); + } + + return $this->terminateWithSuccess(current(getData($result)) ? : null); + } + + public function getTypenProjektarbeit() + { + $result = $this->ProjekttypModel->loadWhere(['aktiv' => true]); + + if (isError($result)) return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + + return $this->terminateWithSuccess(hasData($result) ? getData($result) : []); + } + + public function getFirmen() + { + $searchString = $this->input->get('searchString'); + + if (!isset($searchString)) $this->terminateWithError($this->p->t('projektarbeit', 'error_searchStringMissing', self::ERROR_TYPE_GENERAL)); + + $result = $this->FirmaModel->searchFirmen($searchString, $aktiv = true); + + if (isError($result)) return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + + return $this->terminateWithSuccess(hasData($result) ? getData($result) : []); + } + + public function getLehrveranstaltungen() + { + $student_uid = $this->input->get('student_uid'); + $studiengang_kz = $this->input->get('studiengang_kz'); + $studiensemester_kurzbz = $this->input->get('studiensemester_kurzbz'); + $additional_lehrveranstaltung_id = $this->input->get('additional_lehrveranstaltung_id'); + + if (!isset($student_uid)) $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Student UID']), self::ERROR_TYPE_GENERAL); + if (!isset($studiensemester_kurzbz)) $this->terminateWithError('Studiensemster missing', self::ERROR_TYPE_GENERAL); + + $lvsResult = $this->LehrveranstaltungModel->getLvsForProjektarbeit($student_uid, $studiengang_kz, $additional_lehrveranstaltung_id); + + if (isError($lvsResult)) return $this->terminateWithError($lvsResult, self::ERROR_TYPE_GENERAL); + + $lvs = hasData($lvsResult) ? getData($lvsResult) : []; + + foreach ($lvs as $lv) + { + $lehreinheiten = $this->LehreinheitModel->getLesForLv( + $lv->lehrveranstaltung_id, $studiensemester_kurzbz + ); + + foreach ($lehreinheiten as $lehreinheit) + { + if (!isEmptyArray($lehreinheit->lektoren)) + { + $this->MitarbeiterModel->addSelect('kurzbz'); + $this->MitarbeiterModel->db->where_in('tbl_mitarbeiter.mitarbeiter_uid', $lehreinheit->lektoren); + $maResult = $this->MitarbeiterModel->load(); + + if (isError($maResult)) return $this->terminateWithError($lvsResult, self::ERROR_TYPE_GENERAL); + + $lehreinheit->lektoren = array_column(getData($maResult), 'kurzbz'); + } + } + + $lv->lehreinheiten = $lehreinheiten; + } + + return $this->terminateWithSuccess($lvs); + } + + public function getNoten() + { + $result = $this->NoteModel->load(); + + if (isError($result)) return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + + return $this->terminateWithSuccess(hasData($result) ? getData($result) : []); + } + + /** + * + * @param + * @return object success or error + */ + private function _validate($formData) + { + $this->form_validation->set_data($formData); + + $this->form_validation->set_rules('titel', 'Titel', 'required', [ + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Titel']) + ]); + + $this->form_validation->set_rules('projekttyp_kurzbz', 'Projekttyp', 'required', [ + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Projekttyp']) + ]); + + $this->form_validation->set_rules('lehreinheit_id', 'Lehreinheit', 'required|numeric', [ + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Lehreinheit']), + //'matches' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Lehreinheit']), + 'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Lehreinheit']) + ]); + + $this->form_validation->set_rules('beginn', 'Beginn', 'is_valid_date', [ + 'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field' => 'Beginn']) + ]); + + return $this->form_validation->run(); + } + + /** + * + * @param + * @return object success or error + */ + private function _validateDelete($projektarbeit_id) + { + $this->BetreuerModel->addSelect('1'); + $result = $this->BetreuerModel->loadWhere(['projektarbeit_id' => $projektarbeit_id]); + + if (isError($result)) return $result; + + if (hasData($result)) return error($this->p->t('projektarbeit', 'error_betreuerNichtGeloescht')); + + $this->PaabgabeModel->addSelect('1'); + $result = $this->PaabgabeModel->loadWhere(['projektarbeit_id' => $projektarbeit_id]); + + if (isError($result)) return $result; + + if (hasData($result)) return error($this->p->t('projektarbeit', 'error_paabgabeNichtGeloescht')); + + return success(); + } + + private function _hasBerechtigungForStudent($student_uid) + { + if (!$student_uid) + return false; + + $this->load->model('crm/Student_model', 'StudentModel'); + + $this->StudentModel->addSelect('studiengang_kz'); + $result = $this->StudentModel->load([$student_uid]); + if (isError($result) || !hasData($result)) + return false; + + $studiengang_kz = getData($result)[0]->studiengang_kz; + + if ($this->permissionlib->isBerechtigt('admin', 'suid', $studiengang_kz)) + return true; + if ($this->permissionlib->isBerechtigt('assistenz', 'suid', $studiengang_kz)) + return true; + + return false; + } +} diff --git a/application/models/education/Lehrveranstaltung_model.php b/application/models/education/Lehrveranstaltung_model.php index 056fb45d7..446e6e9cf 100644 --- a/application/models/education/Lehrveranstaltung_model.php +++ b/application/models/education/Lehrveranstaltung_model.php @@ -988,4 +988,61 @@ class Lehrveranstaltung_model extends DB_Model return $this->execQuery($qry, $params); } + + /** + * Gets Lehrveranstaltungen for a student, as needed for a Projektarbeit. + * @param student_uid + * @param studiengang_kz optional, all Lvs of this Studiengang will be included + * @param additional_lehrveranstaltung_id optional, this lv will be added to result + * @return object success or error + */ + public function getLvsForProjektarbeit($student_uid, $studiengang_kz = null, $additional_lehrveranstaltung_id = null) + { + $params = array($student_uid, $student_uid); + + $qry = " + SELECT * + FROM + lehre.tbl_lehrveranstaltung + WHERE + ( + lehrveranstaltung_id IN ( + + SELECT + lehrveranstaltung_id + FROM + campus.vw_student_lehrveranstaltung + WHERE + uid=? + + UNION + + SELECT + lehrveranstaltung_id + FROM + lehre.tbl_zeugnisnote + WHERE + student_uid=? + )"; + + if (isset($studiengang_kz)) + { + $params[] = $studiengang_kz; + $qry .= " OR (studiengang_kz = ? AND semester IS NOT NULL)"; + } + + if (isset($additional_lehrveranstaltung_id)) + { + $params[] = $additional_lehrveranstaltung_id; + $qry .= " OR lehrveranstaltung_id = ?"; + } + + $qry .= " + ) + AND projektarbeit = TRUE + ORDER BY + semester, bezeichnung"; + + return $this->execQuery($qry, $params); + } } diff --git a/application/models/education/Projektarbeit_model.php b/application/models/education/Projektarbeit_model.php index 109e23373..2be79f8e9 100644 --- a/application/models/education/Projektarbeit_model.php +++ b/application/models/education/Projektarbeit_model.php @@ -24,15 +24,17 @@ class Projektarbeit_model extends DB_Model public function getProjektarbeit($student_uid, $studiengang_kz = null, $studiensemester_kurzbz = null, $projekttyp = null, $final = null) { $qry = "SELECT - tbl_projektarbeit.* , tbl_projekttyp.bezeichnung + tbl_projektarbeit.*, tbl_projekttyp.bezeichnung, + tbl_lehreinheit.studiensemester_kurzbz, tbl_lehrveranstaltung.lehrveranstaltung_id, + tbl_firma.name AS firma_name FROM lehre.tbl_projektarbeit JOIN - lehre.tbl_projekttyp USING (projekttyp_kurzbz), lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung - + lehre.tbl_projekttyp USING (projekttyp_kurzbz), lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung, public.tbl_firma WHERE tbl_projektarbeit.lehreinheit_id=tbl_lehreinheit.lehreinheit_id AND tbl_lehreinheit.lehrveranstaltung_id = tbl_lehrveranstaltung.lehrveranstaltung_id AND + tbl_projektarbeit.firma_id = tbl_firma.firma_id AND tbl_projektarbeit.student_uid = ?"; $params = array($student_uid); @@ -69,4 +71,30 @@ class Projektarbeit_model extends DB_Model return $this->execQuery($qry, $params); } + + /** + * + * @param + * @return object success or error + */ + public function hasBerechtigungForProjektarbeit($projektarbeit_id) + { + if (!$projektarbeit_id || !is_numeric($projektarbeit_id)) + return false; + + $this->ProjektarbeitModel->addSelect('studiengang_kz'); + $this->ProjektarbeitModel->addJoin('public.tbl_student', 'student_uid'); + $result = $this->ProjektarbeitModel->load($projektarbeit_id); + if (isError($result) || !hasData($result)) + return false; + + $studiengang_kz = getData($result)[0]->studiengang_kz; + + if ($this->permissionlib->isBerechtigt('admin', 'suid', $studiengang_kz)) + return true; + if ($this->permissionlib->isBerechtigt('assistenz', 'suid', $studiengang_kz)) + return true; + + return false; + } } diff --git a/application/models/ressource/Firma_model.php b/application/models/ressource/Firma_model.php index 431f0815f..5ae53eeaf 100644 --- a/application/models/ressource/Firma_model.php +++ b/application/models/ressource/Firma_model.php @@ -12,17 +12,24 @@ class Firma_model extends DB_Model $this->pk = 'firma_id'; } - public function searchFirmen($filter) + public function searchFirmen($filter, $aktiv = null) { + $params = []; $filter = strtoLower($filter); $qry = " - SELECT + SELECT f.name, f.firma_id - FROM - public.tbl_firma f - WHERE - lower (f.name) LIKE '%". $this->db->escape_like_str($filter)."%'"; + FROM + public.tbl_firma f + WHERE + lower (f.name) LIKE '%". $this->db->escape_like_str($filter)."%'"; - return $this->execQuery($qry); + if (isset($aktiv) && is_bool($aktiv)) + { + $params[] = $aktiv; + $qry .= " AND aktiv = ?"; + } + + return $this->execQuery($qry, $params); } } diff --git a/public/js/api/factory/stv/projektarbeit.js b/public/js/api/factory/stv/projektarbeit.js new file mode 100644 index 000000000..243383de0 --- /dev/null +++ b/public/js/api/factory/stv/projektarbeit.js @@ -0,0 +1,80 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + getProjektarbeit(uid) { + return { + method: 'get', + url: 'api/frontend/v1/stv/projektarbeit/getProjektarbeit', + params: { uid } + }; + }, + getTypenProjektarbeit() { + return { + method: 'get', + url: 'api/frontend/v1/stv/projektarbeit/getTypenProjektarbeit' + }; + }, + getFirmen(searchString) { + return { + method: 'get', + url: 'api/frontend/v1/stv/projektarbeit/getFirmen', + params: {searchString} + }; + }, + getLehrveranstaltungen(student_uid, studiengang_kz, studiensemester_kurzbz, additional_lehrveranstaltung_id) { + return { + method: 'get', + url: 'api/frontend/v1/stv/projektarbeit/getLehrveranstaltungen', + params: { student_uid, studiengang_kz, studiensemester_kurzbz, additional_lehrveranstaltung_id } + }; + }, + getNoten() { + return { + method: 'get', + url: 'api/frontend/v1/stv/projektarbeit/getNoten' + }; + }, + loadProjektarbeit(projektarbeit_id) { + return { + method: 'get', + url: 'api/frontend/v1/stv/projektarbeit/loadProjektarbeit', + params: { projektarbeit_id } + }; + }, + addNewProjektarbeit(params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/projektarbeit/insertProjektarbeit', + params + }; + }, + updateProjektarbeit(params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/projektarbeit/updateProjektarbeit', + params + }; + }, + deleteProjektarbeit(projektarbeit_id) { + return { + method: 'post', + url: 'api/frontend/v1/stv/projektarbeit/deleteProjektarbeit', + params: { projektarbeit_id } + }; + } +}; \ No newline at end of file diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit.js new file mode 100644 index 000000000..3615e8f5d --- /dev/null +++ b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit.js @@ -0,0 +1,24 @@ +import Projektarbeit from './Projektarbeit/Projektarbeit.js'; + +export default { + name: "TabProjektarbeit", + components: { + Projektarbeit + }, + provide() { + return { + config: this.config + }; + }, + props: { + modelValue: Object, + config: Object + }, + data(){ + return {} + }, + template: ` +
+ +
` +}; \ No newline at end of file diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Betreuung.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Betreuung.js new file mode 100644 index 000000000..5d223d694 --- /dev/null +++ b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Betreuung.js @@ -0,0 +1,847 @@ +import {CoreFilterCmpt} from "../../../../filter/Filter.js"; +import FormForm from '../../../../Form/Form.js'; +import FormInput from '../../../../Form/Input.js'; +import PvAutoComplete from "../../../../../../../index.ci.php/public/js/components/primevue/autocomplete/autocomplete.esm.min.js"; + +import ApiStvAbschlusspruefung from '../../../../../api/factory/stv/abschlusspruefung.js'; + +export default { + components: { + CoreFilterCmpt, + BsModal, + FormForm, + FormInput, + PvAutoComplete, + AbschlusspruefungDropdown, + PruefungList + }, + inject: { + cisRoot: { + from: 'cisRoot' + }, + config: { + from: 'config', + required: true + }, + $reloadList: { + from: '$reloadList', + required: true + }, + isBerechtigtDocAndOdt: { + from: 'hasPermissionOutputformat', + default: false + } + }, + computed: { + studentUids() { + if (this.student.uid) + { + return [this.student.uid]; + } + return this.student.map(e => e.uid); + }, + studentKzs(){ + if (this.student.uid) + { + return [this.student.studiengang_kz]; + } + return this.student.map(e => e.studiengang_kz); + }, + stg_kz(){ + return this.studentKzs[0]; + }, + }, + props: { + student: Object + }, + data() { + return { + tabulatorOptions: { + ajaxURL: 'dummy', + ajaxRequestFunc: () => this.$api.call(ApiStvAbschlusspruefung.getAbschlusspruefung(this.student.uid)), + ajaxResponse: (url, params, response) => response.data, + columns: [ + {title: "vorsitz", field: "vorsitz_nachname"}, + {title: "abschlussbeurteilung", field: "beurteilung_bezeichnung"}, + {title: "prueferIn1", field: "p1_nachname", visible: false}, + {title: "prueferIn2", field: "p2_nachname", visible: false}, + {title: "prueferIn3", field: "p3_nachname", visible: false}, + { + title: "datum", + field: "datum", + formatter: function (cell) { + const dateStr = cell.getValue(); + if (!dateStr) return ""; + + const date = new Date(dateStr); + return date.toLocaleString("de-DE", { + day: "2-digit", + month: "2-digit", + year: "numeric", + hour12: false + }); + } + }, + {title: "uhrzeit", field: "uhrzeit"}, + { + title: "freigabe", + field: "freigabedatum", + formatter: function (cell) { + const dateStr = cell.getValue(); + if (!dateStr) return ""; + + const date = new Date(dateStr); + return date.toLocaleString("de-DE", { + day: "2-digit", + month: "2-digit", + year: "numeric", + hour12: false + }); + } + }, + {title: "pruefungsantritt", field: "antritt_bezeichnung"}, + { + title: "sponsion", + field: "sponsion", + formatter: function (cell) { + const dateStr = cell.getValue(); + if (!dateStr) return ""; + + const date = new Date(dateStr); + return date.toLocaleString("de-DE", { + day: "2-digit", + month: "2-digit", + year: "numeric", + hour12: false + }); + } + }, + {title: "anmerkung", field: "anmerkung"}, + {title: "abschlusspruefung_id", field: "abschlusspruefung_id", visible: false}, + {title: "typ", field: "pruefungstyp_kurzbz", visible: false}, + + { + title: 'Aktionen', field: 'actions', + minWidth: 150, // Ensures Action-buttons will be always fully displayed + formatter: (cell, formatterParams, onRendered) => { + let container = document.createElement('div'); + container.className = "d-flex gap-2"; + + let button = document.createElement('button'); + button.className = 'btn btn-outline-secondary btn-action'; + button.innerHTML = ''; + button.title = this.$p.t('ui', 'bearbeiten'); + button.addEventListener('click', (event) => + this.actionEditAbschlusspruefung(cell.getData().abschlusspruefung_id) + ); + container.append(button); + + button = document.createElement('button'); + button.className = 'btn btn-outline-secondary btn-action'; + button.innerHTML = ''; + button.title = this.$p.t('ui', 'loeschen'); + button.addEventListener('click', () => + this.actionDeleteAbschlusspruefung(cell.getData().abschlusspruefung_id) + ); + container.append(button); + + container.append(cell.getData().actionDiv); + + return container; + }, + frozen: true + }, + ], + layout: 'fitDataFill', + layoutColumnsOnNewData: false, + height: 'auto', + minHeight: '200', + selectable: true, + index: 'abschlusspruefung_id', + persistenceID: 'stv-details-finalexam' + }, + tabulatorEvents: [ + { + event: 'dataLoaded', + handler: data => this.tabulatorData = data.map(item => { + item.actionDiv = document.createElement('div'); + return item; + }), + }, + { + event: 'tableBuilt', + handler: async() => { + await this.$p.loadCategory(['global', 'person', 'stv', 'abschlusspruefung', 'ui']); + + + let cm = this.$refs.table.tabulator.columnManager; + + cm.getColumnByField('vorsitz_nachname').component.updateDefinition({ + title: this.$p.t('abschlusspruefung', 'vorsitz_header') + }); + cm.getColumnByField('beurteilung_bezeichnung').component.updateDefinition({ + title: this.$p.t('abschlusspruefung', 'abschlussbeurteilung') + }); + cm.getColumnByField('p1_nachname').component.updateDefinition({ + title: this.$p.t('abschlusspruefung', 'pruefer1') + }); + cm.getColumnByField('p2_nachname').component.updateDefinition({ + title: this.$p.t('abschlusspruefung', 'pruefer2') + }); + cm.getColumnByField('p3_nachname').component.updateDefinition({ + title: this.$p.t('abschlusspruefung', 'pruefer3') + }); + cm.getColumnByField('datum').component.updateDefinition({ + title: this.$p.t('global', 'datum') + }); + cm.getColumnByField('uhrzeit').component.updateDefinition({ + title: this.$p.t('global', 'uhrzeit') + }); + cm.getColumnByField('freigabedatum').component.updateDefinition({ + title: this.$p.t('abschlusspruefung', 'freigabe') + }); + cm.getColumnByField('antritt_bezeichnung').component.updateDefinition({ + title: this.$p.t('abschlusspruefung', 'pruefungsantritt') + }); + cm.getColumnByField('sponsion').component.updateDefinition({ + title: this.$p.t('abschlusspruefung', 'sponsion') + }); + cm.getColumnByField('anmerkung').component.updateDefinition({ + title: this.$p.t('global', 'anmerkung') + }); + cm.getColumnByField('pruefungstyp_kurzbz').component.updateDefinition({ + title: this.$p.t('global', 'typ') + }); + cm.getColumnByField('abschlusspruefung_id').component.updateDefinition({ + title: this.$p.t('ui', 'abschlusspruefung_id') + }); + /* + cm.getColumnByField('actions').component.updateDefinition({ + title: this.$p.t('global', 'aktionen') + }); + */ + } + } + ], + tabulatorData: [], + lastSelected: null, + formData: { + typStg: null, + pruefungstyp_kurzbz: null, + akadgrad_id: null, + vorsitz: null, + pruefungsantritt_kurzbz: null, + abschlussbeurteilung_kurzbz: null, + datum: null, + sponsion: null, + pruefer1: null, + pruefer2: null, + pruefer3: null, + anmerkung: null, + protokoll: null, + note: null, + link: null + }, + statusNew: true, + arrTypen: [], + arrAntritte: [], + arrBeurteilungen: [], + arrAkadGrad: [], + arrNoten: [], + filteredMitarbeiter: [], + filteredPruefer: [], + abortController: { + mitarbeiter: null, + pruefer: null + }, + stgInfo: { typ: '', oe_kurzbz: '' } + } + }, + watch: { + student(){ + if (this.$refs.table) { + this.$refs.table.reloadTable(); + } + this.getStudiengangByKz(); + } + }, + methods: { + getStudiengangByKz(){ + this.stgInfo = { typ: '', oe_kurzbz: '' }; + this.$api + .call(ApiStudiengang.getStudiengangByKz(this.stg_kz)) + .then(result => this.stgInfo = result.data) + .catch(this.$fhcAlert.handleSystemError); + }, + actionNewAbschlusspruefung() { + this.resetForm(); + this.statusNew = true; + this.$refs.finalexamModal.show(); + this.setDefaultFormData(); + }, + actionEditAbschlusspruefung(abschlusspruefung_id) { + this.resetForm(); + this.statusNew = false; + this.$refs.finalexamModal.show(); + this.loadAbschlusspruefung(abschlusspruefung_id); + }, + actionDeleteAbschlusspruefung(abschlusspruefung_id) { + this.$fhcAlert + .confirmDelete() + .then(result => result + ? abschlusspruefung_id + : Promise.reject({handled: true})) + .then(this.deleteAbschlusspruefung) + .catch(this.$fhcAlert.handleSystemError); + }, + addNewAbschlusspruefung() { + const dataToSend = { + uid: this.student.uid, + formData: this.formData + }; + + return this.$refs.formFinalExam + .call(ApiStvAbschlusspruefung.addNewAbschlusspruefung(dataToSend)) + .then(response => { + this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); + this.hideModal('finalexamModal'); + this.resetForm(); + }) + .catch(this.$fhcAlert.handleSystemError) + .finally(() => { + this.reload(); + }); + }, + hideModal(modalRef){ + this.$refs[modalRef].hide(); + }, + reload() { + this.$refs.table.reloadTable(); + }, + loadAbschlusspruefung(abschlusspruefung_id) { + return this.$api + .call(ApiStvAbschlusspruefung.loadAbschlusspruefung(abschlusspruefung_id)) + .then(result => { + this.formData = result.data; + //TODO(Manu) check if cisRoot is okay + this.formData.link = this.cisRoot + 'index.ci.php/lehre/Pruefungsprotokoll/showProtokoll?abschlusspruefung_id=' + this.formData.abschlusspruefung_id + '&fhc_controller_id=67481e5ed5490'; + return result; + }) + .catch(this.$fhcAlert.handleSystemError); + }, + updateAbschlusspruefung(abschlusspruefung_id) { + const dataToSend = { + id: abschlusspruefung_id, + formData: this.formData + }; + return this.$refs.formFinalExam + .call(ApiStvAbschlusspruefung.updateAbschlusspruefung(dataToSend)) + .then(response => { + this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); + this.hideModal('finalexamModal'); + this.resetForm(); + }) + .catch(this.$fhcAlert.handleSystemError) + .finally(() => { + this.reload(); + }); + }, + deleteAbschlusspruefung(abschlusspruefung_id) { + return this.$api + .call(ApiStvAbschlusspruefung.deleteAbschlusspruefung(abschlusspruefung_id)) + .then(response => { + this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successDelete')); + }) + .catch(this.$fhcAlert.handleSystemError) + .finally(() => { + this.reload(); + }); + }, + resetForm() { + this.formData.pruefungstyp_kurzbz = null; + this.formData.akadgrad_id = null; + this.formData.vorsitz = null; + this.formData.pruefungsantritt_kurzbz = null; + this.formData.abschlussbeurteilung_kurzbz = null; + this.formData.datum = null; //oder new Date(); + this.formData.sponsion = null; + this.formData.pruefer1 = null; + this.formData.pruefer2 = null; + this.formData.pruefer3 = null; + this.formData.anmerkung = null; + this.formData.protokoll = null; + this.formData.note = null; + this.formData.p1 = null; + this.formData.p2 = null; + this.formData.p3 = null; + this.formData.pv = null; + }, + search(event) { + if (this.abortController.mitarbeiter) { + this.abortController.mitarbeiter.abort(); + } + this.abortController.mitarbeiter = new AbortController(); + + return this.$api + .call(ApiStvAbschlusspruefung.getMitarbeiter(event.query)) + .then(result => { + this.filteredMitarbeiter = result.data.retval; + }); + }, + searchNotAkad(event) { + if (this.abortController.pruefer) { + this.abortController.pruefer.abort(); + } + this.abortController.pruefer = new AbortController(); + + return this.$api + .call(ApiStvAbschlusspruefung.getPruefer(event.query)) + .then(result => { + this.filteredPruefer = result.data.retval; + }); + }, + setDefaultFormData() { + + this.resetForm(); + + if (this.stgInfo.typ === 'b') { + this.formData.pruefungstyp_kurzbz = 'Bachelor'; + this.formData.protokoll = this.$p.t('abschlusspruefung', 'pruefungsnotizenMaster'); + } + if (this.stgInfo.typ === 'd' || this.stgInfo === 'm') { + this.formData.pruefungstyp_kurzbz = 'Diplom'; + this.formData.protokoll = this.$p.t('abschlusspruefung', 'pruefungsnotizenMaster'); + } + if (this.stgInfo.typ === 'lg') { + this.formData.pruefungstyp_kurzbz = 'lgabschluss'; + } + + if (!this.formData.akadgrad_id && this.arrAkadGrad.length > 0) { + this.formData.akadgrad_id = this.arrAkadGrad[0].akadgrad_id; + } + }, + printDocument(link) { + window.open(link, '_blank'); + }, + }, + created() { + this.$api + .call(ApiStvAbschlusspruefung.getTypenAbschlusspruefung()) + .then(result => { + this.arrTypen = result.data; + }) + .catch(this.$fhcAlert.handleSystemError); + + this.$api + .call(ApiStvAbschlusspruefung.getTypenAntritte()) + .then(result => { + this.arrAntritte = result.data; + }) + .catch(this.$fhcAlert.handleSystemError); + + this.$api + .call(ApiStvAbschlusspruefung.getBeurteilungen()) + .then(result => { + this.arrBeurteilungen = result.data; + }) + .catch(this.$fhcAlert.handleSystemError); + + this.$api + .call(ApiStvAbschlusspruefung.getNoten()) + .then(result => { + this.arrNoten = result.data; + }) + .catch(this.$fhcAlert.handleSystemError); + + this.$api + .call(ApiStvAbschlusspruefung.getAkadGrade(this.student.studiengang_kz)) + .then(result => { + this.arrAkadGrad = result.data; + }) + .catch(this.$fhcAlert.handleSystemError); + if (!this.student.length) { + this.$api + .call(ApiStudiengang.getStudiengangByKz(this.student.studiengang_kz)) + .then(result => { + this.stgInfo = result.data; + this.setDefaultFormData(); + }) + .catch(this.$fhcAlert.handleSystemError); + } else + this.getStudiengangByKz(); + }, + template: ` +
+

{{this.$p.t('stv','tab_finalexam')}}

+ +
+ +
+ + + + + + + + + + + + + {{this.$p.t('global','details')}} +

[{{$p.t('ui', 'neu')}}]

+
+ + + + + + + +
+ +
+ + + + +
+ +
+ + + + + +
+ +
+ + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ +
+ + + + +
+ +
+
+

{{$p.t('abschlusspruefung', 'zurBeurteilung')}}

+
+ +
+ +
+ + + +
+ + + + +
+` +} diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Details.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Details.js new file mode 100644 index 000000000..a6256ceb1 --- /dev/null +++ b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Details.js @@ -0,0 +1,461 @@ +import {CoreFilterCmpt} from "../../../../filter/Filter.js"; +import FormForm from '../../../../Form/Form.js'; +import FormInput from '../../../../Form/Input.js'; +import PvAutoComplete from "../../../../../../../index.ci.php/public/js/components/primevue/autocomplete/autocomplete.esm.min.js"; + +import ApiStvProjektarbeit from '../../../../../api/factory/stv/projektarbeit.js'; + +export default { + components: { + CoreFilterCmpt, + FormForm, + FormInput, + PvAutoComplete + }, + emits: ['details-saved'], + inject: { + defaultSemester: { + from: 'defaultSemester' + } + //~ cisRoot: { + //~ from: 'cisRoot' + //~ }, + //~ config: { + //~ from: 'config', + //~ required: true + //~ } + }, + computed: { + arrLes() { + let lehreinheiten = []; + if (this.formData.lehrveranstaltung_id) { + let lv = this.arrLvs.find(lv => {return lv.lehrveranstaltung_id == this.formData.lehrveranstaltung_id}); + if (lv) lehreinheiten = lv.lehreinheiten + } + + for (let le of lehreinheiten) + { + let bezeichnung = le.lehrfach_kurzbz + '-' + le.lehrform_kurzbz + ' ' + le.lehrfach_bezeichnung + ' '; + + for (let grp of le.lehreinheitgruppen) + { + bezeichnung += grp.gruppe_kurzbz ? grp.gruppe_kurzbz : '' + grp.semester ?? '' + grp.verband ?? '' + grp.gruppe ?? ''; + } + + bezeichnung += ' (' + le.lektoren.join(' ') + ') ID: ' + le.lehreinheit_id; + + le.bezeichnung = bezeichnung; + } + + return lehreinheiten; + }, + //~ preparedFormData() { + //~ console.log("FOR DATA CALLEd"); + //~ if (this.formData.projektarbeit_id == null) delete(this.formData.projektarbeit_id); + //~ if (this.formData.firma) this.formData.firma_id = this.formData.firma.firma_id; + //~ delete(this.formData.firma); + //~ delete(this.formData.firma_name); + //~ delete(this.formData.lehrveranstaltung_id); + //~ // convert null value fields from string to null + //~ return this.formData; + //~ } + }, + props: { + statusNew: Boolean, + student: Object, + projektarbeit: Object, + stg_kz: Number + }, + data() { + return { + formData: { + projektarbeit_id: null, + titel: null, + titel_english: null, + themenbereich: null, + projekttyp_kurzbz: null, + firma: null, + lehrveranstaltung_id: null, + lehreinheit_id: null, + beginn: null, + ende: null, + freigegeben: true, + gesperrtbis: null, + note: null, + final: true, + anmerkung: null + }, + arrTypen: [], + arrFirmen: [], + arrLvs: [], + arrNoten: [], + filteredFirmen: [], + abortController: { + firma: null + } + } + }, + methods: { + resetForm() { + this.formData.projektarbeit_id = null; + this.formData.titel = null; + this.formData.titel_english = null; + this.formData.themenbereich = null; + this.formData.projekttyp_kurzbz = null; + this.formData.firma = null; + this.formData.lehrveranstaltung_id = null; + this.formData.lehreinheit_id = null; + this.formData.beginn = null; + this.formData.ende = null; + this.formData.freigegeben = true; + this.formData.gesperrtbis = null; + this.formData.note = null; + this.formData.final = true; + this.formData.anmerkung = null; + }, + getFormData(statusNew, studiensemester_kurzbz, additional_lehrveranstaltung_id/*, successCallback*/) { + + //~ let callArray = [ + //~ this.$api.call(ApiStvProjektarbeit.getTypenProjektarbeit()), + //~ this.$api.call(ApiStvProjektarbeit.getLehrveranstaltungen( + //~ this.student.uid, + //~ projektarbeit_id ? null : this.student.studiengang_kz, + //~ studiensemester_kurzbz ?? this.defaultSemester, + //~ additional_lehrveranstaltung_id ?? null + //~ )), + //~ this.$api.call(ApiStvProjektarbeit.getNoten()) + //~ ]; + + //~ if (projektarbeit_id) callArray.push(this.$api.call(ApiStvProjektarbeit.loadProjektarbeit(projektarbeit_id))); + + //~ // Run when All promises are settled + //~ Promise.allSettled(callArray).then((results) => { + //~ let hasError = false; + //~ let allFormData = []; + //~ results.forEach((promise_result) => { + + //~ if (promise_result.status === 'fulfilled' && promise_result.value.meta.status === "success") { + //~ allFormData.push(promise_result.value.data); + //~ } else { + //~ hasError = true; + //~ //this.$fhcAlert.handleSystemError(promise_result); + //~ } + //~ //let data = promise_result.value.data; + //~ console.log(promise_result.status); + //~ }); + + //~ if (!hasError) { + //~ this.setFormData(allFormData[0], allFormData[1], allFormData[2], allFormData[3], allFormData[4] ?? null); + //~ if (successCallback) successCallback(); + //~ } + //~ }); + + this.$api + .call(ApiStvProjektarbeit.getTypenProjektarbeit()) + .then(result => { + this.arrTypen = result.data; + }) + .catch(this.$fhcAlert.handleSystemError); + + this.$api + .call(ApiStvProjektarbeit.getLehrveranstaltungen( + this.student.uid, + statusNew ? this.student.studiengang_kz : null, + studiensemester_kurzbz ?? this.defaultSemester, + additional_lehrveranstaltung_id + )) + .then(result => { + this.arrLvs = result.data + } + ) + .catch(this.$fhcAlert.handleSystemError); + + this.$api + .call(ApiStvProjektarbeit.getNoten()) + .then(result => { + this.arrNoten = result.data; + }) + .catch(this.$fhcAlert.handleSystemError); + }, + setFormData(arrTypen, arrLvs, arrNoten, projektarbeitData) { + this.arrTypen = arrTypen; + this.arrLvs = arrLvs; + this.arrNoten = arrNoten; + if (projektarbeitData) { + projektarbeitData.firma = {firma_id: projektarbeitData.firma_id, name: projektarbeitData.firma_name}; + this.formData = projektarbeitData; + } + }, + loadProjektarbeit(projektarbeit_id) { + + return this.$api + .call(ApiStvProjektarbeit.loadProjektarbeit(projektarbeit_id)) + .then(result => { + this.formData = result.data; + return result; + }) + .catch(this.$fhcAlert.handleSystemError) + }, + addNewProjektarbeit() { + + let dataToSend = { + uid: this.student.uid, + formData: this.getPreparedFormData() + }; + + return this.$refs.formDetails + .call(ApiStvProjektarbeit.addNewProjektarbeit(dataToSend)); + }, + updateProjektarbeit() { + + let dataToSend = { + projektarbeit_id: this.formData.projektarbeit_id, + formData: this.getPreparedFormData() + }; + return this.$refs.formDetails + .call(ApiStvProjektarbeit.updateProjektarbeit(dataToSend)); + }, + searchFirma(event) { + if (this.abortController.firma) { + this.abortController.firma.abort(); + } + this.abortController.firma = new AbortController(); + + return this.$api + .call(ApiStvProjektarbeit.getFirmen(event.query)) + .then(result => { + this.filteredFirmen = result.data; + }); + }, + lvChanged(event) { + this.formData.lehreinheit_id = null; + }, + getPreparedFormData() { + let preparedFormData = JSON.parse(JSON.stringify(this.formData)); // deep copy + + // delete "helper" fields + if (preparedFormData.projektarbeit_id == null) delete(preparedFormData.projektarbeit_id); + if (preparedFormData.firma) preparedFormData.firma_id = preparedFormData.firma.firma_id; + delete(preparedFormData.firma); + delete(preparedFormData.firma_name); + delete(preparedFormData.lehrveranstaltung_id); + + return preparedFormData; + } + //~ setDefaultFormData() { + //~ this.resetForm(); + //~ }, + }, + template: ` + + + {{this.$p.t('global','details')}} +

[{{$p.t('ui', 'neu')}}]

+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + + +
+ + +
+ + + +
+ +
+ + + + +
+ +
+ + + + +
+ +
+ + + + +
+ +
+ + +
+ + +
+
+ +
+ + + + +
+ + +
+
+ +
+ + +
+ +
` +} diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektarbeit.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektarbeit.js new file mode 100644 index 000000000..034b3fd6c --- /dev/null +++ b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektarbeit.js @@ -0,0 +1,377 @@ +import {CoreFilterCmpt} from "../../../../filter/Filter.js"; +import BsModal from "../../../../Bootstrap/Modal.js"; +import FormForm from '../../../../Form/Form.js'; +import FormInput from '../../../../Form/Input.js'; +import PvAutoComplete from "../../../../../../../index.ci.php/public/js/components/primevue/autocomplete/autocomplete.esm.min.js"; + + +import ApiStvProjektarbeit from '../../../../../api/factory/stv/projektarbeit.js'; +import ProjektarbeitDetails from "./Details.js"; + +export default { + components: { + CoreFilterCmpt, + BsModal, + FormForm, + FormInput, + PvAutoComplete, + ProjektarbeitDetails + }, + inject: { + cisRoot: { + from: 'cisRoot' + }, + config: { + from: 'config', + required: true + }, + $reloadList: { + from: '$reloadList', + required: true + }, + isBerechtigtDocAndOdt: { + from: 'hasPermissionOutputformat', + default: false + } + }, + computed: { + //~ studentUids() { + //~ if (this.student.uid) + //~ { + //~ return [this.student.uid]; + //~ } + //~ return this.student.map(e => e.uid); + //~ }, + studentKzs(){ + if (this.student.uid) + { + return [this.student.studiengang_kz]; + } + return this.student.map(e => e.studiengang_kz); + }, + stg_kz(){ + return this.studentKzs.length > 0 ? this.studentKzs.length[0] : null; + } + }, + props: { + student: Object + }, + data() { + return { + tabulatorOptions: { + ajaxURL: 'dummy', + ajaxRequestFunc: () => this.$api.call(ApiStvProjektarbeit.getProjektarbeit(this.student.uid)), + ajaxResponse: (url, params, response) => response.data, + columns: [ + {title: "Projektarbeit ID", field: "projektarbeit_id", visible: false}, + {title: "Typ", field: "projekttyp_kurzbz"}, + {title: "Studiensemester", field: "studiensemester_kurzbz"}, + {title: "Titel", field: "titel"}, + { + title: "Abgabe Enduplad", + field: "abgabedatum", + formatter: function (cell) { + const dateStr = cell.getValue(); + if (!dateStr) return ""; + + const date = new Date(dateStr); + return date.toLocaleString("de-DE", { + day: "2-digit", + month: "2-digit", + year: "numeric", + hour12: false + }); + } + }, + { + title: "Beginn", + field: "beginn", + formatter: function (cell) { + const dateStr = cell.getValue(); + if (!dateStr) return ""; + + const date = new Date(dateStr); + return date.toLocaleString("de-DE", { + day: "2-digit", + month: "2-digit", + year: "numeric", + hour12: false + }); + }, + visible: false + }, + { + title: "Ende", + field: "ende", + formatter: function (cell) { + const dateStr = cell.getValue(); + if (!dateStr) return ""; + + const date = new Date(dateStr); + return date.toLocaleString("de-DE", { + day: "2-digit", + month: "2-digit", + year: "numeric", + hour12: false + }); + }, + visible: false + }, + { + title:"Freigegeben", + field:"freigegeben", + formatter:"tickCross", + hozAlign:"center", + formatterParams: { + tickElement: '', + crossElement: '' + }, + visible: false + }, + { + title: "Gesperrt bis", + field: "gesperrtbis", + formatter: function (cell) { + const dateStr = cell.getValue(); + if (!dateStr) return ""; + + const date = new Date(dateStr); + return date.toLocaleString("de-DE", { + day: "2-digit", + month: "2-digit", + year: "numeric", + hour12: false + }); + }, + visible: false + }, + {title: "Themenbereich", field: "themenbereich", visible: false}, + {title: "Anmerkung", field: "anmerkung", visible: false}, + {title: "Lehreinheit ID", field: "lehreinheit_id", visible: false}, + {title: "Student UID", field: "student_uid", visible: false}, + { + title:"Final", + field:"final", + formatter:"tickCross", + hozAlign:"center", + formatterParams: { + tickElement: '', + crossElement: '' + }, + visible: false + }, + {title: "Firma ID", field: "firma_id", visible: false}, + { + title: 'Aktionen', field: 'actions', + minWidth: 150, // Ensures Action-buttons will be always fully displayed + formatter: (cell, formatterParams, onRendered) => { + let container = document.createElement('div'); + container.className = "d-flex gap-2"; + + let button = document.createElement('button'); + button.className = 'btn btn-outline-secondary btn-action'; + button.innerHTML = ''; + button.title = this.$p.t('ui', 'bearbeiten'); + button.addEventListener('click', (event) => { + let data = cell.getData(); + this.actionEditProjektarbeit(data.projektarbeit_id, data.studiensemester_kurzbz, data.lehrveranstaltung_id); + }); + container.append(button); + + button = document.createElement('button'); + button.className = 'btn btn-outline-secondary btn-action'; + button.innerHTML = ''; + button.title = this.$p.t('ui', 'loeschen'); + button.addEventListener('click', () => + this.actionDeleteProjektarbeit(cell.getData().projektarbeit_id) + ); + container.append(button); + + container.append(cell.getData().actionDiv); + + return container; + }, + frozen: true + }, + ], + layout: 'fitDataFill', + layoutColumnsOnNewData: false, + height: 'auto', + minHeight: '200', + selectable: 1, + index: 'projektarbeit_id', + persistenceID: 'stv-details-projektarbeit' + }, + tabulatorEvents: [ + { + event: 'rowSelectionChanged', + handler: this.rowSelectionChanged + }, + { + event: 'dataLoaded', + handler: data => this.tabulatorData = data.map(item => { + item.actionDiv = document.createElement('div'); + return item; + }), + }, + { + event: 'tableBuilt', + handler: async() => { + await this.$p.loadCategory(['global', 'person', 'stv', 'ui']); + + + let cm = this.$refs.table.tabulator.columnManager; + + //~ cm.getColumnByField('vorsitz_nachname').component.updateDefinition({ + //~ title: this.$p.t('abschlusspruefung', 'vorsitz_header') + //~ }); + /* + cm.getColumnByField('actions').component.updateDefinition({ + title: this.$p.t('global', 'aktionen') + }); + */ + } + }, + ], + tabulatorData: [], + lastSelected: null, + statusNew: true, + studiensemester_kurzbz: null, + lehrveranstaltung_id: null + } + }, + //~ watch: { + //~ student(){ + //~ if (this.$refs.table) { + //~ this.$refs.table.reloadTable(); + //~ } + //~ this.getStudiengangByKz(); + //~ } + //~ }, + methods: { + actionNewProjektarbeit() { + this.statusNew = true; + this.$refs.projektarbeitDetails.resetForm(); + this.$refs.projektarbeitDetails.getFormData(); + this.$refs.projektarbeitModal.show(); + }, + actionEditProjektarbeit(projektarbeit_id, studiensemester_kurzbz, lehrveranstaltung_id) { + this.statusNew = false; + this.$refs.projektarbeitDetails.getFormData(this.statusNew, studiensemester_kurzbz, lehrveranstaltung_id); + this.$refs.projektarbeitDetails.loadProjektarbeit(projektarbeit_id); + this.$refs.projektarbeitModal.show(); + }, + actionDeleteProjektarbeit(projektarbeit_id) { + this.$fhcAlert + .confirmDelete() + .then(result => result + ? projektarbeit_id + : Promise.reject({handled: true})) + .then(this.deleteProjektarbeit) + .catch(this.$fhcAlert.handleSystemError); + }, + addNewProjektarbeit() { + Promise.allSettled([ + this.$refs.projektarbeitDetails.addNewProjektarbeit() + ]).then((results) => { + let hasError = false; + results.forEach((promise_result) => { + + if (!(promise_result.status === 'fulfilled' && promise_result.value.meta.status === "success")) { + + hasError = true; + } + }); + + if (!hasError) { + this.projektarbeitSaved(); + } + }); + }, + updateProjektarbeit() { + Promise.allSettled( + [ + this.$refs.projektarbeitDetails.updateProjektarbeit() + ]).then((results) => { + let hasError = false; + results.forEach((promise_result) => { + + if (!(promise_result.status === 'fulfilled' && promise_result.value.meta.status === "success")) { + + hasError = true; + } + }); + + if (!hasError) { + this.projektarbeitSaved(); + } + }); + }, + deleteProjektarbeit(projektarbeit_id) { + return this.$api + .call(ApiStvProjektarbeit.deleteProjektarbeit(projektarbeit_id)) + .then(response => { + this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successDelete')); + }) + .catch(this.$fhcAlert.handleSystemError) + .finally(() => { + this.reload(); + }); + }, + projektarbeitSaved() { + this.reload(); + this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); + this.hideModal('projektarbeitModal'); + this.$refs.projektarbeitDetails.resetForm(); + }, + rowSelectionChanged(data) { + console.log("selection changed"); + this.lastSelected = data.length > 0 ? data[0] : null; + }, + hideModal(modalRef){ + this.$refs[modalRef].hide(); + }, + reload() { + this.$refs.table.reloadTable(); + } + }, + created() { + }, + template: ` +
+

{{this.$p.t('stv','tab_projektarbeit')}}

+ + + + + + + + + + + + + +
+` +} + From 382006aa8bfdec7696256d2b2236eb448003daf7 Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Fri, 16 May 2025 13:37:21 +0200 Subject: [PATCH 002/102] Projektarbeit Studierendenverwaltung: now possible to save and edit Projektbetreuer --- application/config/stv.php | 7 +- .../api/frontend/v1/stv/Config.php | 5 +- .../api/frontend/v1/stv/Projektarbeit.php | 11 +- .../api/frontend/v1/stv/Projektbetreuer.php | 333 +++++++ .../models/education/Projektarbeit_model.php | 9 +- .../education/Projektbetreuer_model.php | 1 + application/models/person/Person_model.php | 19 +- .../models/ressource/Stundensatz_model.php | 95 +- public/js/api/factory/stv/projektbetreuer.js | 73 ++ .../Details/Projektarbeit/Betreuung.js | 847 ------------------ .../Details/Projektarbeit/Details.js | 27 +- .../Details/Projektarbeit/Projektarbeit.js | 86 +- .../Details/Projektarbeit/Projektbetreuer.js | 421 +++++++++ system/phrasesupdate.php | 2 +- 14 files changed, 1002 insertions(+), 934 deletions(-) create mode 100644 application/controllers/api/frontend/v1/stv/Projektbetreuer.php create mode 100644 public/js/api/factory/stv/projektbetreuer.js delete mode 100644 public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Betreuung.js create mode 100644 public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js diff --git a/application/config/stv.php b/application/config/stv.php index 31ce3f521..f5c1599ab 100644 --- a/application/config/stv.php +++ b/application/config/stv.php @@ -54,7 +54,7 @@ $config['tabs'] = ], ] ]; - + // List of fields to show when ZGV_DOKTOR_ANZEIGEN is defined $fieldsZgvDoktor = ['zgvdoktorort', 'zgvdoktordatum', 'zgvdoktornation', 'zgvdoktor_erfuellt', 'zgvdoktor_code']; @@ -74,3 +74,8 @@ if (!defined('ZGV_DOKTOR_ANZEIGEN') || !ZGV_DOKTOR_ANZEIGEN) { $fieldsZgvDoktor ); } + +$config['tabs']['projektarbeit']['defaultProjektbetreuerStunden'] = '4.0'; +$config['tabs']['projektarbeit']['defaultProjektbetreuerStundenDiplom'] = '5.0'; +$config['tabs']['projektarbeit']['lvLektroinnenzuteilungFixangestelltStundensatz'] = true; +$config['tabs']['projektarbeit']['defaultProjektbetreuerStundensatz'] = '80.0'; diff --git a/application/controllers/api/frontend/v1/stv/Config.php b/application/controllers/api/frontend/v1/stv/Config.php index dd2eaed02..afdf8efb8 100644 --- a/application/controllers/api/frontend/v1/stv/Config.php +++ b/application/controllers/api/frontend/v1/stv/Config.php @@ -125,7 +125,8 @@ class Config extends FHCAPI_Controller $result['projektarbeit'] = [ 'title' => $this->p->t('stv', 'tab_projektarbeit'), - 'component' => './Stv/Studentenverwaltung/Details/Projektarbeit.js' + 'component' => './Stv/Studentenverwaltung/Details/Projektarbeit.js', + 'config' => $config['projektarbeit'] ]; $result['mobility'] = [ @@ -323,7 +324,7 @@ class Config extends FHCAPI_Controller $title_eng = $this->p->t("global", "englisch"); $title_ff = $this->p->t("stv", "document_certificate"); $title_lv = $this->p->t("stv", "document_coursecertificate"); - + $link_ff = "documents/export/" . "zertifikat.rdf.php/" . "Zertifikat" . diff --git a/application/controllers/api/frontend/v1/stv/Projektarbeit.php b/application/controllers/api/frontend/v1/stv/Projektarbeit.php index 3be2b26a3..70775fdbc 100644 --- a/application/controllers/api/frontend/v1/stv/Projektarbeit.php +++ b/application/controllers/api/frontend/v1/stv/Projektarbeit.php @@ -17,7 +17,7 @@ class Projektarbeit extends FHCAPI_Controller 'getTypenProjektarbeit' => ['admin:r', 'assistenz:r'], 'getFirmen' => ['admin:r', 'assistenz:r'], 'getLehrveranstaltungen' => ['admin:r', 'assistenz:r'], - 'getNoten' => ['admin:rw', 'assistenz:rw'] + 'getNoten' => ['admin:r', 'assistenz:r'] ]); // Load Libraries @@ -91,7 +91,7 @@ class Projektarbeit extends FHCAPI_Controller ); $this->ProjektarbeitModel->addJoin('lehre.tbl_lehreinheit le', 'lehreinheit_id'); $this->ProjektarbeitModel->addJoin('lehre.tbl_lehrveranstaltung lv', 'lehrveranstaltung_id'); - $this->ProjektarbeitModel->addJoin('public.tbl_firma fa', 'firma_id'); + $this->ProjektarbeitModel->addJoin('public.tbl_firma fa', 'firma_id', 'LEFT'); $result = $this->ProjektarbeitModel->loadWhere( array('projektarbeit_id' => $projektarbeit_id) ); @@ -170,7 +170,7 @@ class Projektarbeit extends FHCAPI_Controller if (isError($validate)) return $this->terminateWithError(getError($validate), self::ERROR_TYPE_GENERAL); $result = $this->ProjektarbeitModel->delete( - array('projektarbeit_id' => $projektarbeit_id) + ['projektarbeit_id' => $projektarbeit_id] ); if (isError($result)) return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); @@ -273,10 +273,9 @@ class Projektarbeit extends FHCAPI_Controller 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Projekttyp']) ]); - $this->form_validation->set_rules('lehreinheit_id', 'Lehreinheit', 'required|numeric', [ + $this->form_validation->set_rules('lehreinheit_id', 'Lehreinheit', 'required|is_natural', [ 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Lehreinheit']), - //'matches' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Lehreinheit']), - 'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Lehreinheit']) + 'is_natural' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Lehreinheit']) ]); $this->form_validation->set_rules('beginn', 'Beginn', 'is_valid_date', [ diff --git a/application/controllers/api/frontend/v1/stv/Projektbetreuer.php b/application/controllers/api/frontend/v1/stv/Projektbetreuer.php new file mode 100644 index 000000000..ac6663132 --- /dev/null +++ b/application/controllers/api/frontend/v1/stv/Projektbetreuer.php @@ -0,0 +1,333 @@ + ['admin:r', 'assistenz:r'], + 'saveProjektbetreuer' => ['admin:rw', 'assistenz:rw'], + 'deleteProjektbetreuer' => ['admin:rw', 'assistenz:rw'], + 'getBetreuerarten' => ['admin:r', 'assistenz:r'], + 'getNoten' => ['admin:r', 'assistenz:r'], + 'getDefaultStundensaetze' => ['admin:r', 'assistenz:r'], + 'getProjektbetreuerBySearchQuery' => ['admin:r', 'assistenz:r'], + 'validateProjektbetreuer' => ['admin:r', 'assistenz:r'] + ]); + + // Load Libraries + $this->load->library('form_validation'); + + // Load language phrases + $this->loadPhrases([ + 'ui', + 'person', + 'projektarbeit' + ]); + + // Load models + $this->load->model('education/Projektbetreuer_model', 'ProjektbetreuerModel'); + $this->load->model('education/Betreuerart_model', 'BetreuerartModel'); + $this->load->model('ressource/Stundensatz_model', 'StundensatzModel'); + $this->load->model('education/Projektarbeit_model', 'ProjektarbeitModel'); + $this->load->model('education/Note_model', 'NoteModel'); + $this->load->model('person/Person_model', 'PersonModel'); + + // load libraries + $this->load->library('PermissionLib'); + } + + public function getProjektbetreuer() + { + $projektarbeit_id = $this->input->get('projektarbeit_id'); + + if (!isset($projektarbeit_id)) $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Projektarbeit ID']), self::ERROR_TYPE_GENERAL); + + $this->ProjektbetreuerModel->addSelect( + 'projektarbeit_id, person_id, nachname, vorname, note, punkte, stunden, stundensatz, betreuerart_kurzbz, vertrag_id, titelpre, titelpost' + ); + $this->ProjektbetreuerModel-> addSelect("CASE + WHEN EXISTS + (SELECT 1 FROM public.tbl_benutzer JOIN public.tbl_mitarbeiter ON(uid=mitarbeiter_uid) WHERE person_id=pers.person_id) + THEN 'Mitarbeiter' + WHEN EXISTS + (SELECT 1 FROM public.tbl_benutzer JOIN public.tbl_student ON(uid=student_uid) WHERE person_id=pers.person_id) + THEN 'Student' + ELSE 'Person' + END AS status"); + $this->ProjektbetreuerModel->addJoin('public.tbl_person pers', 'person_id'); + $result = $this->ProjektbetreuerModel->loadWhere(['projektarbeit_id' => $projektarbeit_id]); + + if (isError($result)) $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + + if (!hasData($result)) $this->terminateWithSuccess([]); + + $projektbetreuer = getData($result); + + //~ foreach ($projektbetreuer as $projektarbeit) + //~ { + //~ $projektarbeit_id = $projektarbeit->projektarbeit_id; + //~ $abgabeRes = $this->PaabgabeModel->getEndabgabe($projektarbeit_id); + + //~ if (isError($abgabeRes)) $this->terminateWithError(getError($abgabeRes), self::ERROR_TYPE_GENERAL); + + //~ if (hasData($abgabeRes)) + //~ { + //~ $paabgabe = getData($abgabeRes)[0]; + //~ $projektarbeit->abgabedatum = $paabgabe->abgabedatum; + //~ } + //~ } + + $this->terminateWithSuccess($this->_addFullNameToBetreuer($projektbetreuer)); + } + + public function saveProjektbetreuer() + { + $projektarbeit_id = $this->input->post('projektarbeit_id'); + + if (!isset($projektarbeit_id) || !is_numeric($projektarbeit_id)) + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Projektarbeit ID']), self::ERROR_TYPE_GENERAL); + + if (!$this->ProjektarbeitModel->hasBerechtigungForProjektarbeit($projektarbeit_id)) + return $this->_outputAuthError([$this->router->method => ['admin:rw', 'assistenz:rw']]); + + $projektbetreuer = $this->input->post('projektbetreuerListe'); + + //$this->addMeta('form', $projektbetreuer); + + if (!is_array($projektbetreuer)) + { + return $this->terminateWithError( + $this->p->t('projektarbeit', 'error_invalidProjektbetreuer'), self::ERROR_TYPE_GENERAL + ); + } + + foreach ($projektbetreuer as $pb) + { + if ($this->_validate($pb) == false) + { + $this->addMeta('test', 'foisch'); + $this->terminateWithValidationErrors($this->form_validation->error_array()); + } + } + + $result = null; + + foreach ($projektbetreuer as $pb) + { + //~ $this->addMeta('form', $pb); + //~ error_log(print_r($pb, true)); + //die(); + + //~ $this->ProjektbetreuerModel->addSelect('1'); + //~ $checkResult = $this->ProjektbetreuerModel->loadWhere( + //~ ['person_id' => $pb['person_id'], 'projektarbeit_id' => $projektarbeit_id, 'betreuerart_kurzbz' => $pb['betreuerart_kurzbz']] + //~ ); + + //~ if (isError($checkResult)) $this->terminateWithError(getError($checkResult), self::ERROR_TYPE_GENERAL); + + $betreuer = [ + 'projektarbeit_id' => $projektarbeit_id, + 'person_id' => $pb['person_id'], + 'note' => $pb['note'], + 'stunden' => $pb['stunden'], + 'stundensatz' => $pb['stundensatz'], + 'betreuerart_kurzbz' => $pb['betreuerart_kurzbz'] + ]; + + if (isset($pb['person_id_old']) && isset($pb['betreuerart_kurzbz_old'])) + { + $result = $this->ProjektbetreuerModel->update( + [ + 'projektarbeit_id' => $projektarbeit_id, + 'person_id' => $pb['person_id_old'], + 'betreuerart_kurzbz' => $pb['betreuerart_kurzbz_old'] + ], + array_merge($betreuer, ['updateamum' => date('c'), 'updatevon' => getAuthUID()]) + ); + } + else + { + $result = $this->ProjektbetreuerModel->insert( + array_merge($betreuer, ['insertamum' => date('c'), 'insertvon' => getAuthUID()]) + ); + } + + if (isError($result)) $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + + $this->terminateWithSuccess(hasData($result) ? getData($result) : []); + } + + public function deleteProjektbetreuer() + { + $projektarbeit_id = $this->input->post('projektarbeit_id'); + $person_id = $this->input->post('person_id'); + $betreuerart_kurzbz = $this->input->post('betreuerart_kurzbz'); + + if (!isset($projektarbeit_id) || !is_numeric($projektarbeit_id)) + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Projektbetreuer ID'], self::ERROR_TYPE_GENERAL)); + + if (!isset($person_id) || !is_numeric($person_id)) + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person ID'], self::ERROR_TYPE_GENERAL)); + + if (!isset($betreuerart_kurzbz)) + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Betreuerart'], self::ERROR_TYPE_GENERAL)); + + if (!$this->ProjektarbeitModel->hasBerechtigungForProjektarbeit($projektarbeit_id)) + return $this->_outputAuthError([$this->router->method => ['admin:rw', 'assistenz:rw']]); + + $validate = $this->_validateDelete($projektarbeit_id, $person_id); + + if (isError($validate)) return $this->terminateWithError(getError($validate), self::ERROR_TYPE_GENERAL); + + $result = $this->ProjektbetreuerModel->delete( + ['projektarbeit_id' => $projektarbeit_id, 'person_id' => $person_id, 'betreuerart_kurzbz' => $betreuerart_kurzbz] + ); + + if (isError($result)) return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + + if (!hasData($result)) + { + $this->outputJson($result); + } + + return $this->terminateWithSuccess(current(getData($result)) ? : null); + } + + public function getBetreuerarten() + { + $result = $this->BetreuerartModel->loadWhere(['aktiv' => true]); + + if (isError($result)) return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + + return $this->terminateWithSuccess(hasData($result) ? getData($result) : []); + } + + public function getNoten() + { + $result = $this->NoteModel->load(); + + if (isError($result)) return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + + return $this->terminateWithSuccess(hasData($result) ? getData($result) : []); + } + + public function getDefaultStundensaetze() + { + $person_id = $this->input->get('person_id'); + $studiensemester_kurzbz = $this->input->get('studiensemester_kurzbz'); + + $result = $this->StundensatzModel->getStundensatzForMitarbeiter($person_id, $studiensemester_kurzbz); + + $this->addMeta('res', $result); + + //if (isError($result)) return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + + return $this->terminateWithSuccess($result); + } + + public function getProjektbetreuerBySearchQuery() + { + $searchString = $this->input->get('searchString'); + + if (!isset($searchString)) $this->terminateWithError($this->p->t('projektarbeit', 'error_searchStringMissing', self::ERROR_TYPE_GENERAL)); + + $result = $this->PersonModel->searchPerson($searchString); + + $this->addMeta('met', $result); + + if (isError($result)) return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + + return $this->terminateWithSuccess(hasData($result) ? $this->_addFullNameToBetreuer(getData($result)) : []); + } + + /** + * + * @param + * @return object success or error + */ + public function validateProjektbetreuer() + { + $projektbetreuerArr = $this->input->post('projektbetreuer'); + + if (!is_array($projektbetreuerArr)) $projektbetreuerArr = [$projektbetreuerArr]; + + foreach ($projektbetreuerArr as $pb) + { + if ($this->_validate($pb) == false) + { + $this->terminateWithValidationErrors($this->form_validation->error_array()); + } + } + + $this->terminateWithSuccess([]); + } + + /** + * + * @param + * @return object success or error + */ + private function _validate($formData) + { + $this->form_validation->set_data($formData); + + $this->form_validation->set_rules('betreuerart_kurzbz', 'Betreuerart', 'required', [ + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Betreuerart']) + ]); + + $this->form_validation->set_rules('person_id', 'Person', 'required', [ + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Person ID']) + ]); + + $this->form_validation->set_rules('stunden', 'Stunden', 'numeric', [ + 'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Stunden']) + ]); + + $this->form_validation->set_rules('stundensatz', 'Stundensatz', 'numeric', [ + 'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Stundensatz']) + ]); + + + return $this->form_validation->run(); + } + + /** + * + * @param + * @return object success or error + */ + private function _validateDelete($projektarbeit_id, $person_id) + { + $this->ProjektbetreuerModel->addSelect('vertrag_id'); + $result = $this->ProjektbetreuerModel->loadWhere(['projektarbeit_id' => $projektarbeit_id, 'person_id' => $person_id]); + + if (isError($result)) return $result; + + if (hasData($result) && getData($result)[0]->vertrag_id != null) return error($this->p->t('projektarbeit', 'error_betreuerHatVertrag')); + + return success(); + } + + /** + * + * @param + * @return object success or error + */ + private function _addFullNameToBetreuer($betreuerArr) + { + foreach ($betreuerArr as $betreuer) + { + $betreuer->name = ($betreuer->titelpre ? $betreuer->titelpre . ' ' : '') . + $betreuer->nachname . ' ' . $betreuer->vorname . ($betreuer->titelpost ? ' ' . $betreuer->titelpre : ''). + ' (' . $betreuer->status . ')'; + } + + return $betreuerArr; + } +} diff --git a/application/models/education/Projektarbeit_model.php b/application/models/education/Projektarbeit_model.php index 2be79f8e9..357886de1 100644 --- a/application/models/education/Projektarbeit_model.php +++ b/application/models/education/Projektarbeit_model.php @@ -29,12 +29,11 @@ class Projektarbeit_model extends DB_Model tbl_firma.name AS firma_name FROM lehre.tbl_projektarbeit - JOIN - lehre.tbl_projekttyp USING (projekttyp_kurzbz), lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung, public.tbl_firma + JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz) + JOIN lehre.tbl_lehreinheit USING (lehreinheit_id) + JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id) + LEFT JOIN public.tbl_firma USING (firma_id) WHERE - tbl_projektarbeit.lehreinheit_id=tbl_lehreinheit.lehreinheit_id AND - tbl_lehreinheit.lehrveranstaltung_id = tbl_lehrveranstaltung.lehrveranstaltung_id AND - tbl_projektarbeit.firma_id = tbl_firma.firma_id AND tbl_projektarbeit.student_uid = ?"; $params = array($student_uid); diff --git a/application/models/education/Projektbetreuer_model.php b/application/models/education/Projektbetreuer_model.php index 95950bf95..02368ae21 100644 --- a/application/models/education/Projektbetreuer_model.php +++ b/application/models/education/Projektbetreuer_model.php @@ -10,6 +10,7 @@ class Projektbetreuer_model extends DB_Model parent::__construct(); $this->dbTable = 'lehre.tbl_projektbetreuer'; $this->pk = array('betreuerart_kurzbz', 'projektarbeit_id', 'person_id'); + $this->hasSequence = false; } /** diff --git a/application/models/person/Person_model.php b/application/models/person/Person_model.php index 997048972..d955f6401 100644 --- a/application/models/person/Person_model.php +++ b/application/models/person/Person_model.php @@ -151,12 +151,21 @@ class Person_model extends DB_Model */ public function searchPerson($filter) { - $this->addSelect('vorname, nachname, gebdatum, person_id'); + $this->addSelect('vorname, nachname, gebdatum, person_id, titelpre, titelpost'); + $this->addSelect("CASE + WHEN EXISTS + (SELECT 1 FROM public.tbl_benutzer JOIN public.tbl_mitarbeiter ON(uid=mitarbeiter_uid) WHERE person_id=tbl_person.person_id) + THEN 'Mitarbeiter' + WHEN EXISTS + (SELECT 1 FROM public.tbl_benutzer JOIN public.tbl_student ON(uid=student_uid) WHERE person_id=tbl_person.person_id) + THEN 'Student' + ELSE 'Person' + END AS status"); $result = $this->loadWhere( - 'lower(nachname) like '.$this->db->escape('%'.$filter.'%')." + 'lower(nachname) like '.$this->db->escape('%'.mb_strtolower($filter).'%')." OR lower(vorname) like ".$this->db->escape('%'.$filter.'%')." - OR lower(nachname || ' ' || vorname) like ".$this->db->escape('%'.$filter.'%')." - OR lower(vorname || ' ' || nachname) like ".$this->db->escape('%'.$filter.'%') + OR lower(nachname || ' ' || vorname) like ".$this->db->escape('%'.mb_strtolower($filter).'%')." + OR lower(vorname || ' ' || nachname) like ".$this->db->escape('%'.mb_strtolower($filter).'%') ); return $result; @@ -423,4 +432,4 @@ class Person_model extends DB_Model return success($result); } } -} \ No newline at end of file +} diff --git a/application/models/ressource/Stundensatz_model.php b/application/models/ressource/Stundensatz_model.php index 10f5a6aa1..9d41dfbd9 100644 --- a/application/models/ressource/Stundensatz_model.php +++ b/application/models/ressource/Stundensatz_model.php @@ -2,7 +2,7 @@ class Stundensatz_model extends DB_Model { - + /** * Constructor */ @@ -42,4 +42,95 @@ class Stundensatz_model extends DB_Model return $this->execQuery($qry, $params); } -} \ No newline at end of file + + public function getStundensatzForMitarbeiter($person_id, $studiensemester_kurzbz) + { + $this->load->config('stv'); + + $useFixangestelltStundensatz = $this->config->item('tabs')['projektarbeit']['lvLektroinnenzuteilungFixangestelltStundensatz']; + $defaultStundensatz = $this->config->item('tabs')['projektarbeit']['defaultProjektbetreuerStundensatz']; + + $stundensatz = ''; + + if(isset($person_id) && isset($studiensemester_kurzbz)) + { + $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); + + $this->StudiensemesterModel->addSelect('start, ende'); + $result = $this->StudiensemesterModel->load($studiensemester_kurzbz); + + if (hasData($result)) + { + $studiensemester = getData($result)[0]; + + if (isset($useFixangestelltStundensatz) && !$useFixangestelltStundensatz) + { + // load Mitarbeiter + $params = [$person_id]; + $qry = " + SELECT + mitarbeiter_uid, fixangestellt + FROM + public.tbl_mitarbeiter + JOIN public.tbl_benutzer ON(tbl_benutzer.uid=tbl_mitarbeiter.mitarbeiter_uid) + WHERE + person_id=? + ORDER BY + tbl_mitarbeiter.insertamum DESC NULLS LAST + LIMIT 1"; + + $result = $this->execQuery($qry, $params); + + if (hasData($result)) + { + foreach (getData($result) as $ma) + { + if (!$ma->fixangestellt) + { + $stundensatzRes = $this->getStundensatzByDatum( + $ma->mitarbeiter_uid, $studiensemester->start, $studiensemester->ende, 'lehre' + ); + + if (hasData($stundensatzRes)) + $stundensatz = getData($stundensatzRes)[0]->stundensatz; + else + $stundensatz = '0.00'; + } + } + } + else + { + $stundensatz = '0.00'; + } + + } + else + { + $params = [$person_id, $studiensemester->ende, $studiensemester->start]; + $qry = "SELECT ss.stundensatz + FROM hr.tbl_stundensatz ss + JOIN public.tbl_mitarbeiter ON ss.uid = tbl_mitarbeiter.mitarbeiter_uid + JOIN public.tbl_benutzer ON(tbl_benutzer.uid=tbl_mitarbeiter.mitarbeiter_uid) + WHERE person_id=? + AND stundensatztyp = 'lehre' + AND gueltig_von <= ? + AND (gueltig_bis >= ? OR gueltig_bis IS NULL) + ORDER BY gueltig_bis DESC NULLS FIRST, gueltig_von DESC NULLS LAST LIMIT 1"; + + $result = $this->execQuery($qry, $params); + + if (hasData($result)) + { + $stundensatz = getData($result)[0]->stundensatz; + } + else + { + $stundensatz = $defaultStundensatz; + } + } + } + } + + return $stundensatz; + } +} diff --git a/public/js/api/factory/stv/projektbetreuer.js b/public/js/api/factory/stv/projektbetreuer.js new file mode 100644 index 000000000..fc710fe81 --- /dev/null +++ b/public/js/api/factory/stv/projektbetreuer.js @@ -0,0 +1,73 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + getProjektbetreuer(projektarbeit_id ) { + return { + method: 'get', + url: 'api/frontend/v1/stv/projektbetreuer/getProjektbetreuer', + params: { projektarbeit_id } + }; + }, + getBetreuerarten() { + return { + method: 'get', + url: 'api/frontend/v1/stv/projektbetreuer/getBetreuerarten' + }; + }, + getDefaultStundensaetze(person_id, studiensemester_kurzbz) { + return { + method: 'get', + url: 'api/frontend/v1/stv/projektbetreuer/getDefaultStundensaetze', + params: { person_id, studiensemester_kurzbz } + }; + }, + getNoten() { + return { + method: 'get', + url: 'api/frontend/v1/stv/projektbetreuer/getNoten' + }; + }, + saveProjektbetreuer(projektarbeit_id, projektbetreuerListe) { + return { + method: 'post', + url: 'api/frontend/v1/stv/projektbetreuer/saveProjektbetreuer', + params: { projektarbeit_id, projektbetreuerListe } + }; + }, + deleteProjektbetreuer(projektarbeit_id, person_id, betreuerart_kurzbz) { + return { + method: 'post', + url: 'api/frontend/v1/stv/projektbetreuer/deleteProjektbetreuer', + params: { projektarbeit_id, person_id, betreuerart_kurzbz } + }; + }, + getProjektbetreuerBySearchQuery(searchString) { + return { + method: 'get', + url: 'api/frontend/v1/stv/projektbetreuer/getProjektbetreuerBySearchQuery', + params: { searchString } + }; + }, + validateProjektbetreuer(projektbetreuer) { + return { + method: 'post', + url: 'api/frontend/v1/stv/projektbetreuer/validateProjektbetreuer', + params: { projektbetreuer } + }; + } +}; diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Betreuung.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Betreuung.js deleted file mode 100644 index 5d223d694..000000000 --- a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Betreuung.js +++ /dev/null @@ -1,847 +0,0 @@ -import {CoreFilterCmpt} from "../../../../filter/Filter.js"; -import FormForm from '../../../../Form/Form.js'; -import FormInput from '../../../../Form/Input.js'; -import PvAutoComplete from "../../../../../../../index.ci.php/public/js/components/primevue/autocomplete/autocomplete.esm.min.js"; - -import ApiStvAbschlusspruefung from '../../../../../api/factory/stv/abschlusspruefung.js'; - -export default { - components: { - CoreFilterCmpt, - BsModal, - FormForm, - FormInput, - PvAutoComplete, - AbschlusspruefungDropdown, - PruefungList - }, - inject: { - cisRoot: { - from: 'cisRoot' - }, - config: { - from: 'config', - required: true - }, - $reloadList: { - from: '$reloadList', - required: true - }, - isBerechtigtDocAndOdt: { - from: 'hasPermissionOutputformat', - default: false - } - }, - computed: { - studentUids() { - if (this.student.uid) - { - return [this.student.uid]; - } - return this.student.map(e => e.uid); - }, - studentKzs(){ - if (this.student.uid) - { - return [this.student.studiengang_kz]; - } - return this.student.map(e => e.studiengang_kz); - }, - stg_kz(){ - return this.studentKzs[0]; - }, - }, - props: { - student: Object - }, - data() { - return { - tabulatorOptions: { - ajaxURL: 'dummy', - ajaxRequestFunc: () => this.$api.call(ApiStvAbschlusspruefung.getAbschlusspruefung(this.student.uid)), - ajaxResponse: (url, params, response) => response.data, - columns: [ - {title: "vorsitz", field: "vorsitz_nachname"}, - {title: "abschlussbeurteilung", field: "beurteilung_bezeichnung"}, - {title: "prueferIn1", field: "p1_nachname", visible: false}, - {title: "prueferIn2", field: "p2_nachname", visible: false}, - {title: "prueferIn3", field: "p3_nachname", visible: false}, - { - title: "datum", - field: "datum", - formatter: function (cell) { - const dateStr = cell.getValue(); - if (!dateStr) return ""; - - const date = new Date(dateStr); - return date.toLocaleString("de-DE", { - day: "2-digit", - month: "2-digit", - year: "numeric", - hour12: false - }); - } - }, - {title: "uhrzeit", field: "uhrzeit"}, - { - title: "freigabe", - field: "freigabedatum", - formatter: function (cell) { - const dateStr = cell.getValue(); - if (!dateStr) return ""; - - const date = new Date(dateStr); - return date.toLocaleString("de-DE", { - day: "2-digit", - month: "2-digit", - year: "numeric", - hour12: false - }); - } - }, - {title: "pruefungsantritt", field: "antritt_bezeichnung"}, - { - title: "sponsion", - field: "sponsion", - formatter: function (cell) { - const dateStr = cell.getValue(); - if (!dateStr) return ""; - - const date = new Date(dateStr); - return date.toLocaleString("de-DE", { - day: "2-digit", - month: "2-digit", - year: "numeric", - hour12: false - }); - } - }, - {title: "anmerkung", field: "anmerkung"}, - {title: "abschlusspruefung_id", field: "abschlusspruefung_id", visible: false}, - {title: "typ", field: "pruefungstyp_kurzbz", visible: false}, - - { - title: 'Aktionen', field: 'actions', - minWidth: 150, // Ensures Action-buttons will be always fully displayed - formatter: (cell, formatterParams, onRendered) => { - let container = document.createElement('div'); - container.className = "d-flex gap-2"; - - let button = document.createElement('button'); - button.className = 'btn btn-outline-secondary btn-action'; - button.innerHTML = ''; - button.title = this.$p.t('ui', 'bearbeiten'); - button.addEventListener('click', (event) => - this.actionEditAbschlusspruefung(cell.getData().abschlusspruefung_id) - ); - container.append(button); - - button = document.createElement('button'); - button.className = 'btn btn-outline-secondary btn-action'; - button.innerHTML = ''; - button.title = this.$p.t('ui', 'loeschen'); - button.addEventListener('click', () => - this.actionDeleteAbschlusspruefung(cell.getData().abschlusspruefung_id) - ); - container.append(button); - - container.append(cell.getData().actionDiv); - - return container; - }, - frozen: true - }, - ], - layout: 'fitDataFill', - layoutColumnsOnNewData: false, - height: 'auto', - minHeight: '200', - selectable: true, - index: 'abschlusspruefung_id', - persistenceID: 'stv-details-finalexam' - }, - tabulatorEvents: [ - { - event: 'dataLoaded', - handler: data => this.tabulatorData = data.map(item => { - item.actionDiv = document.createElement('div'); - return item; - }), - }, - { - event: 'tableBuilt', - handler: async() => { - await this.$p.loadCategory(['global', 'person', 'stv', 'abschlusspruefung', 'ui']); - - - let cm = this.$refs.table.tabulator.columnManager; - - cm.getColumnByField('vorsitz_nachname').component.updateDefinition({ - title: this.$p.t('abschlusspruefung', 'vorsitz_header') - }); - cm.getColumnByField('beurteilung_bezeichnung').component.updateDefinition({ - title: this.$p.t('abschlusspruefung', 'abschlussbeurteilung') - }); - cm.getColumnByField('p1_nachname').component.updateDefinition({ - title: this.$p.t('abschlusspruefung', 'pruefer1') - }); - cm.getColumnByField('p2_nachname').component.updateDefinition({ - title: this.$p.t('abschlusspruefung', 'pruefer2') - }); - cm.getColumnByField('p3_nachname').component.updateDefinition({ - title: this.$p.t('abschlusspruefung', 'pruefer3') - }); - cm.getColumnByField('datum').component.updateDefinition({ - title: this.$p.t('global', 'datum') - }); - cm.getColumnByField('uhrzeit').component.updateDefinition({ - title: this.$p.t('global', 'uhrzeit') - }); - cm.getColumnByField('freigabedatum').component.updateDefinition({ - title: this.$p.t('abschlusspruefung', 'freigabe') - }); - cm.getColumnByField('antritt_bezeichnung').component.updateDefinition({ - title: this.$p.t('abschlusspruefung', 'pruefungsantritt') - }); - cm.getColumnByField('sponsion').component.updateDefinition({ - title: this.$p.t('abschlusspruefung', 'sponsion') - }); - cm.getColumnByField('anmerkung').component.updateDefinition({ - title: this.$p.t('global', 'anmerkung') - }); - cm.getColumnByField('pruefungstyp_kurzbz').component.updateDefinition({ - title: this.$p.t('global', 'typ') - }); - cm.getColumnByField('abschlusspruefung_id').component.updateDefinition({ - title: this.$p.t('ui', 'abschlusspruefung_id') - }); - /* - cm.getColumnByField('actions').component.updateDefinition({ - title: this.$p.t('global', 'aktionen') - }); - */ - } - } - ], - tabulatorData: [], - lastSelected: null, - formData: { - typStg: null, - pruefungstyp_kurzbz: null, - akadgrad_id: null, - vorsitz: null, - pruefungsantritt_kurzbz: null, - abschlussbeurteilung_kurzbz: null, - datum: null, - sponsion: null, - pruefer1: null, - pruefer2: null, - pruefer3: null, - anmerkung: null, - protokoll: null, - note: null, - link: null - }, - statusNew: true, - arrTypen: [], - arrAntritte: [], - arrBeurteilungen: [], - arrAkadGrad: [], - arrNoten: [], - filteredMitarbeiter: [], - filteredPruefer: [], - abortController: { - mitarbeiter: null, - pruefer: null - }, - stgInfo: { typ: '', oe_kurzbz: '' } - } - }, - watch: { - student(){ - if (this.$refs.table) { - this.$refs.table.reloadTable(); - } - this.getStudiengangByKz(); - } - }, - methods: { - getStudiengangByKz(){ - this.stgInfo = { typ: '', oe_kurzbz: '' }; - this.$api - .call(ApiStudiengang.getStudiengangByKz(this.stg_kz)) - .then(result => this.stgInfo = result.data) - .catch(this.$fhcAlert.handleSystemError); - }, - actionNewAbschlusspruefung() { - this.resetForm(); - this.statusNew = true; - this.$refs.finalexamModal.show(); - this.setDefaultFormData(); - }, - actionEditAbschlusspruefung(abschlusspruefung_id) { - this.resetForm(); - this.statusNew = false; - this.$refs.finalexamModal.show(); - this.loadAbschlusspruefung(abschlusspruefung_id); - }, - actionDeleteAbschlusspruefung(abschlusspruefung_id) { - this.$fhcAlert - .confirmDelete() - .then(result => result - ? abschlusspruefung_id - : Promise.reject({handled: true})) - .then(this.deleteAbschlusspruefung) - .catch(this.$fhcAlert.handleSystemError); - }, - addNewAbschlusspruefung() { - const dataToSend = { - uid: this.student.uid, - formData: this.formData - }; - - return this.$refs.formFinalExam - .call(ApiStvAbschlusspruefung.addNewAbschlusspruefung(dataToSend)) - .then(response => { - this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); - this.hideModal('finalexamModal'); - this.resetForm(); - }) - .catch(this.$fhcAlert.handleSystemError) - .finally(() => { - this.reload(); - }); - }, - hideModal(modalRef){ - this.$refs[modalRef].hide(); - }, - reload() { - this.$refs.table.reloadTable(); - }, - loadAbschlusspruefung(abschlusspruefung_id) { - return this.$api - .call(ApiStvAbschlusspruefung.loadAbschlusspruefung(abschlusspruefung_id)) - .then(result => { - this.formData = result.data; - //TODO(Manu) check if cisRoot is okay - this.formData.link = this.cisRoot + 'index.ci.php/lehre/Pruefungsprotokoll/showProtokoll?abschlusspruefung_id=' + this.formData.abschlusspruefung_id + '&fhc_controller_id=67481e5ed5490'; - return result; - }) - .catch(this.$fhcAlert.handleSystemError); - }, - updateAbschlusspruefung(abschlusspruefung_id) { - const dataToSend = { - id: abschlusspruefung_id, - formData: this.formData - }; - return this.$refs.formFinalExam - .call(ApiStvAbschlusspruefung.updateAbschlusspruefung(dataToSend)) - .then(response => { - this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); - this.hideModal('finalexamModal'); - this.resetForm(); - }) - .catch(this.$fhcAlert.handleSystemError) - .finally(() => { - this.reload(); - }); - }, - deleteAbschlusspruefung(abschlusspruefung_id) { - return this.$api - .call(ApiStvAbschlusspruefung.deleteAbschlusspruefung(abschlusspruefung_id)) - .then(response => { - this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successDelete')); - }) - .catch(this.$fhcAlert.handleSystemError) - .finally(() => { - this.reload(); - }); - }, - resetForm() { - this.formData.pruefungstyp_kurzbz = null; - this.formData.akadgrad_id = null; - this.formData.vorsitz = null; - this.formData.pruefungsantritt_kurzbz = null; - this.formData.abschlussbeurteilung_kurzbz = null; - this.formData.datum = null; //oder new Date(); - this.formData.sponsion = null; - this.formData.pruefer1 = null; - this.formData.pruefer2 = null; - this.formData.pruefer3 = null; - this.formData.anmerkung = null; - this.formData.protokoll = null; - this.formData.note = null; - this.formData.p1 = null; - this.formData.p2 = null; - this.formData.p3 = null; - this.formData.pv = null; - }, - search(event) { - if (this.abortController.mitarbeiter) { - this.abortController.mitarbeiter.abort(); - } - this.abortController.mitarbeiter = new AbortController(); - - return this.$api - .call(ApiStvAbschlusspruefung.getMitarbeiter(event.query)) - .then(result => { - this.filteredMitarbeiter = result.data.retval; - }); - }, - searchNotAkad(event) { - if (this.abortController.pruefer) { - this.abortController.pruefer.abort(); - } - this.abortController.pruefer = new AbortController(); - - return this.$api - .call(ApiStvAbschlusspruefung.getPruefer(event.query)) - .then(result => { - this.filteredPruefer = result.data.retval; - }); - }, - setDefaultFormData() { - - this.resetForm(); - - if (this.stgInfo.typ === 'b') { - this.formData.pruefungstyp_kurzbz = 'Bachelor'; - this.formData.protokoll = this.$p.t('abschlusspruefung', 'pruefungsnotizenMaster'); - } - if (this.stgInfo.typ === 'd' || this.stgInfo === 'm') { - this.formData.pruefungstyp_kurzbz = 'Diplom'; - this.formData.protokoll = this.$p.t('abschlusspruefung', 'pruefungsnotizenMaster'); - } - if (this.stgInfo.typ === 'lg') { - this.formData.pruefungstyp_kurzbz = 'lgabschluss'; - } - - if (!this.formData.akadgrad_id && this.arrAkadGrad.length > 0) { - this.formData.akadgrad_id = this.arrAkadGrad[0].akadgrad_id; - } - }, - printDocument(link) { - window.open(link, '_blank'); - }, - }, - created() { - this.$api - .call(ApiStvAbschlusspruefung.getTypenAbschlusspruefung()) - .then(result => { - this.arrTypen = result.data; - }) - .catch(this.$fhcAlert.handleSystemError); - - this.$api - .call(ApiStvAbschlusspruefung.getTypenAntritte()) - .then(result => { - this.arrAntritte = result.data; - }) - .catch(this.$fhcAlert.handleSystemError); - - this.$api - .call(ApiStvAbschlusspruefung.getBeurteilungen()) - .then(result => { - this.arrBeurteilungen = result.data; - }) - .catch(this.$fhcAlert.handleSystemError); - - this.$api - .call(ApiStvAbschlusspruefung.getNoten()) - .then(result => { - this.arrNoten = result.data; - }) - .catch(this.$fhcAlert.handleSystemError); - - this.$api - .call(ApiStvAbschlusspruefung.getAkadGrade(this.student.studiengang_kz)) - .then(result => { - this.arrAkadGrad = result.data; - }) - .catch(this.$fhcAlert.handleSystemError); - if (!this.student.length) { - this.$api - .call(ApiStudiengang.getStudiengangByKz(this.student.studiengang_kz)) - .then(result => { - this.stgInfo = result.data; - this.setDefaultFormData(); - }) - .catch(this.$fhcAlert.handleSystemError); - } else - this.getStudiengangByKz(); - }, - template: ` -
-

{{this.$p.t('stv','tab_finalexam')}}

- -
- -
- - - - - - - - - - - - - {{this.$p.t('global','details')}} -

[{{$p.t('ui', 'neu')}}]

-
- - - - - - - -
- -
- - - - -
- -
- - - - - -
- -
- - - - - - - -
- -
- - - - - -
- -
- - - - -
- -
- - - - -
- -
-
-

{{$p.t('abschlusspruefung', 'zurBeurteilung')}}

-
- -
- -
- - - -
- - - - -
-` -} diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Details.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Details.js index a6256ceb1..7f98948d4 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Details.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Details.js @@ -1,4 +1,3 @@ -import {CoreFilterCmpt} from "../../../../filter/Filter.js"; import FormForm from '../../../../Form/Form.js'; import FormInput from '../../../../Form/Input.js'; import PvAutoComplete from "../../../../../../../index.ci.php/public/js/components/primevue/autocomplete/autocomplete.esm.min.js"; @@ -7,7 +6,6 @@ import ApiStvProjektarbeit from '../../../../../api/factory/stv/projektarbeit.js export default { components: { - CoreFilterCmpt, FormForm, FormInput, PvAutoComplete @@ -48,23 +46,12 @@ export default { } return lehreinheiten; - }, - //~ preparedFormData() { - //~ console.log("FOR DATA CALLEd"); - //~ if (this.formData.projektarbeit_id == null) delete(this.formData.projektarbeit_id); - //~ if (this.formData.firma) this.formData.firma_id = this.formData.firma.firma_id; - //~ delete(this.formData.firma); - //~ delete(this.formData.firma_name); - //~ delete(this.formData.lehrveranstaltung_id); - //~ // convert null value fields from string to null - //~ return this.formData; - //~ } + } }, props: { statusNew: Boolean, student: Object, - projektarbeit: Object, - stg_kz: Number + projektarbeit: Object }, data() { return { @@ -177,21 +164,13 @@ export default { }) .catch(this.$fhcAlert.handleSystemError); }, - setFormData(arrTypen, arrLvs, arrNoten, projektarbeitData) { - this.arrTypen = arrTypen; - this.arrLvs = arrLvs; - this.arrNoten = arrNoten; - if (projektarbeitData) { - projektarbeitData.firma = {firma_id: projektarbeitData.firma_id, name: projektarbeitData.firma_name}; - this.formData = projektarbeitData; - } - }, loadProjektarbeit(projektarbeit_id) { return this.$api .call(ApiStvProjektarbeit.loadProjektarbeit(projektarbeit_id)) .then(result => { this.formData = result.data; + if (this.formData.firma_id) this.formData.firma = {firma_id: this.formData.firma_id, name: this.formData.firma_name}; return result; }) .catch(this.$fhcAlert.handleSystemError) diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektarbeit.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektarbeit.js index 034b3fd6c..15c9aeeee 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektarbeit.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektarbeit.js @@ -7,6 +7,7 @@ import PvAutoComplete from "../../../../../../../index.ci.php/public/js/componen import ApiStvProjektarbeit from '../../../../../api/factory/stv/projektarbeit.js'; import ProjektarbeitDetails from "./Details.js"; +import Projektbetreuer from "./Projektbetreuer.js"; export default { components: { @@ -15,7 +16,8 @@ export default { FormForm, FormInput, PvAutoComplete, - ProjektarbeitDetails + ProjektarbeitDetails, + Projektbetreuer }, inject: { cisRoot: { @@ -174,7 +176,9 @@ export default { button.title = this.$p.t('ui', 'bearbeiten'); button.addEventListener('click', (event) => { let data = cell.getData(); - this.actionEditProjektarbeit(data.projektarbeit_id, data.studiensemester_kurzbz, data.lehrveranstaltung_id); + this.actionEditProjektarbeit( + data.projektarbeit_id, data.studiensemester_kurzbz, data.lehrveranstaltung_id, data.projekttyp_kurzbz + ); }); container.append(button); @@ -195,7 +199,6 @@ export default { }, ], layout: 'fitDataFill', - layoutColumnsOnNewData: false, height: 'auto', minHeight: '200', selectable: 1, @@ -240,25 +243,20 @@ export default { lehrveranstaltung_id: null } }, - //~ watch: { - //~ student(){ - //~ if (this.$refs.table) { - //~ this.$refs.table.reloadTable(); - //~ } - //~ this.getStudiengangByKz(); - //~ } - //~ }, methods: { actionNewProjektarbeit() { this.statusNew = true; this.$refs.projektarbeitDetails.resetForm(); this.$refs.projektarbeitDetails.getFormData(); + this.$refs.projektbetreuer.getData(); this.$refs.projektarbeitModal.show(); }, - actionEditProjektarbeit(projektarbeit_id, studiensemester_kurzbz, lehrveranstaltung_id) { + actionEditProjektarbeit(projektarbeit_id, studiensemester_kurzbz, lehrveranstaltung_id, projekttyp_kurzbz) { this.statusNew = false; this.$refs.projektarbeitDetails.getFormData(this.statusNew, studiensemester_kurzbz, lehrveranstaltung_id); + // TODO: maybe preload projektarbeit? not just on edit? this.$refs.projektarbeitDetails.loadProjektarbeit(projektarbeit_id); + this.$refs.projektbetreuer.getData(projektarbeit_id, studiensemester_kurzbz, projekttyp_kurzbz); this.$refs.projektarbeitModal.show(); }, actionDeleteProjektarbeit(projektarbeit_id) { @@ -271,41 +269,41 @@ export default { .catch(this.$fhcAlert.handleSystemError); }, addNewProjektarbeit() { - Promise.allSettled([ - this.$refs.projektarbeitDetails.addNewProjektarbeit() - ]).then((results) => { - let hasError = false; - results.forEach((promise_result) => { + this.$refs.projektbetreuer.validateProjektbetreuer() + .then(() => { + return this.$refs.projektarbeitDetails.addNewProjektarbeit(); + }) + .then((result) => { + const projektarbeit_id = result.data; + console.log(projektarbeit_id); - if (!(promise_result.status === 'fulfilled' && promise_result.value.meta.status === "success")) { - - hasError = true; + if (!isNaN(projektarbeit_id)) { + return this.$refs.projektbetreuer.saveProjektbetreuer(projektarbeit_id); } - }); - - if (!hasError) { + }) + .then((result) => { + console.log(result); this.projektarbeitSaved(); - } - }); + }) + .catch(this.$fhcAlert.handleSystemError); }, updateProjektarbeit() { - Promise.allSettled( - [ - this.$refs.projektarbeitDetails.updateProjektarbeit() - ]).then((results) => { - let hasError = false; - results.forEach((promise_result) => { + this.$refs.projektbetreuer.validateProjektbetreuer() + .then(() => { + return this.$refs.projektarbeitDetails.updateProjektarbeit(); + }) + .then((result) => { + const projektarbeit_id = result.data; + console.log(projektarbeit_id); - if (!(promise_result.status === 'fulfilled' && promise_result.value.meta.status === "success")) { - - hasError = true; + if (!isNaN(projektarbeit_id)) { + return this.$refs.projektbetreuer.saveProjektbetreuer(projektarbeit_id); } - }); - - if (!hasError) { + }) + .then((result) => { this.projektarbeitSaved(); - } - }); + }) + .catch(this.$fhcAlert.handleSystemError); }, deleteProjektarbeit(projektarbeit_id) { return this.$api @@ -325,7 +323,6 @@ export default { this.$refs.projektarbeitDetails.resetForm(); }, rowSelectionChanged(data) { - console.log("selection changed"); this.lastSelected = data.length > 0 ? data[0] : null; }, hideModal(modalRef){ @@ -362,7 +359,14 @@ export default {

{{$p.t('projektarbeit', 'projektarbeitBearbeiten')}}

- +
+
+ +
+
+ +
+
` -}; \ No newline at end of file +}; diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index a4381b00d..433a52d3e 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -41789,7 +41789,7 @@ and represent the current state of research on the topic. The prescribed citatio ), array( 'sprache' => 'English', - 'text' => 'Title', + 'text' => 'title', 'description' => '', 'insertvon' => 'system' ) @@ -41809,7 +41809,7 @@ and represent the current state of research on the topic. The prescribed citatio ), array( 'sprache' => 'English', - 'text' => 'Title English', + 'text' => 'title English', 'description' => '', 'insertvon' => 'system' ) @@ -41829,7 +41829,7 @@ and represent the current state of research on the topic. The prescribed citatio ), array( 'sprache' => 'English', - 'text' => 'Topic area', + 'text' => 'topic area', 'description' => '', 'insertvon' => 'system' ) @@ -41849,7 +41849,7 @@ and represent the current state of research on the topic. The prescribed citatio ), array( 'sprache' => 'English', - 'text' => 'Type', + 'text' => 'type', 'description' => '', 'insertvon' => 'system' ) @@ -41869,7 +41869,7 @@ and represent the current state of research on the topic. The prescribed citatio ), array( 'sprache' => 'English', - 'text' => 'Company', + 'text' => 'company', 'description' => '', 'insertvon' => 'system' ) @@ -41889,7 +41889,7 @@ and represent the current state of research on the topic. The prescribed citatio ), array( 'sprache' => 'English', - 'text' => 'Course', + 'text' => 'course', 'description' => '', 'insertvon' => 'system' ) @@ -41909,7 +41909,7 @@ and represent the current state of research on the topic. The prescribed citatio ), array( 'sprache' => 'English', - 'text' => 'Teaching unit', + 'text' => 'teaching unit', 'description' => '', 'insertvon' => 'system' ) @@ -41920,6 +41920,26 @@ and represent the current state of research on the topic. The prescribed citatio 'category' => 'projektarbeit', 'phrase' => 'betreuer', 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Betreuer', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'assessor', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'projektarbeit', + 'phrase' => 'betreuerGross', + 'insertvon' => 'system', 'phrases' => array( array( 'sprache' => 'German', @@ -41935,6 +41955,26 @@ and represent the current state of research on the topic. The prescribed citatio ) ) ), + array( + 'app' => 'core', + 'category' => 'projektarbeit', + 'phrase' => 'betreuerart', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Betreuerart', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'assessor type', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'projektarbeit', @@ -41949,7 +41989,7 @@ and represent the current state of research on the topic. The prescribed citatio ), array( 'sprache' => 'English', - 'text' => 'Grade', + 'text' => 'grade', 'description' => '', 'insertvon' => 'system' ) @@ -41969,7 +42009,7 @@ and represent the current state of research on the topic. The prescribed citatio ), array( 'sprache' => 'English', - 'text' => 'Hours', + 'text' => 'hours', 'description' => '', 'insertvon' => 'system' ) @@ -41989,7 +42029,7 @@ and represent the current state of research on the topic. The prescribed citatio ), array( 'sprache' => 'English', - 'text' => 'Hourly rate', + 'text' => 'hourly rate', 'description' => '', 'insertvon' => 'system' ) @@ -42029,7 +42069,7 @@ and represent the current state of research on the topic. The prescribed citatio ), array( 'sprache' => 'English', - 'text' => 'Start', + 'text' => 'start', 'description' => '', 'insertvon' => 'system' ) @@ -42049,7 +42089,7 @@ and represent the current state of research on the topic. The prescribed citatio ), array( 'sprache' => 'English', - 'text' => 'End', + 'text' => 'end', 'description' => '', 'insertvon' => 'system' ) @@ -42089,7 +42129,7 @@ and represent the current state of research on the topic. The prescribed citatio ), array( 'sprache' => 'English', - 'text' => 'Locked until', + 'text' => 'locked until', 'description' => '', 'insertvon' => 'system' ) @@ -42109,7 +42149,7 @@ and represent the current state of research on the topic. The prescribed citatio ), array( 'sprache' => 'English', - 'text' => 'Annotation', + 'text' => 'annotation', 'description' => '', 'insertvon' => 'system' ) @@ -42129,7 +42169,7 @@ and represent the current state of research on the topic. The prescribed citatio ), array( 'sprache' => 'English', - 'text' => 'Company Id', + 'text' => 'company Id', 'description' => '', 'insertvon' => 'system' ) @@ -42215,6 +42255,326 @@ and represent the current state of research on the topic. The prescribed citatio ) ) ), + array( + 'app' => 'core', + 'category' => 'projektarbeit', + 'phrase' => 'neuePersonAnlegen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Neue Person anlegen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Create new person', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'person', + 'phrase' => 'titelPre', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Titel (Pre)', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'title (Pre)', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'person', + 'phrase' => 'titelPost', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Titel (Post)', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'title (Post)', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'person', + 'phrase' => 'weitereVornamen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Weitere Vornamen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'other first names', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'person', + 'phrase' => 'bestehendeAdresseUeberschreiben', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Bestehende Adresse überschreiben', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Replace existing address', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'person', + 'phrase' => 'adresseHinzufuegen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Adresse hinzufügen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Add new address', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'person', + 'phrase' => 'adresseNichtAnlegen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Adresse nicht anlegen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Do not create address', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'person', + 'phrase' => 'land', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Land', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'nation', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'person', + 'phrase' => 'mobil', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Mobil', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'mobile phone', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'lehre', + 'phrase' => 'letzeAusbildung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Letzte Ausbildung', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'most recent education', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'lehre', + 'phrase' => 'ausbildungsart', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Ausbildungsart', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'education type', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'lehre', + 'phrase' => 'anmerkungen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Anmerkungen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'notes', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'person', + 'phrase' => 'personAnlegen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Person anlegen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Create person', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'lehre', + 'phrase' => 'interessentAnlegen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'InteressentIn anlegen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Create candidate', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'person', + 'phrase' => 'personExistiertPruefung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Prüfung ob Person bereits existiert', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Check if a person already exists', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'ui', + 'phrase' => 'zurueck', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Zurück', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Back', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), ); From 750b956dd22ce736fe8341312ec141dad0265cad Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Mon, 2 Jun 2025 15:28:10 +0200 Subject: [PATCH 009/102] Studentenverwaltung Projektarbeit: added button for editing contact data --- .../Details/Projektarbeit/Projektbetreuer.js | 31 +++++++++++++++++-- system/phrasesupdate.php | 20 ++++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js index 079b8b796..4f3095cab 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js @@ -1,18 +1,22 @@ import {CoreFilterCmpt} from "../../../../filter/Filter.js"; +import BsModal from "../../../../Bootstrap/Modal.js"; import FormForm from '../../../../Form/Form.js'; import FormInput from '../../../../Form/Input.js'; import PvAutoComplete from "../../../../../../../index.ci.php/public/js/components/primevue/autocomplete/autocomplete.esm.min.js"; import NewPerson from "../../List/New.js"; +import Contact from "../Kontakt/Contact.js"; import ApiStvProjektbetreuer from '../../../../../api/factory/stv/projektbetreuer.js'; export default { components: { CoreFilterCmpt, + BsModal, FormForm, FormInput, PvAutoComplete, - NewPerson + NewPerson, + Contact }, inject: { }, @@ -340,6 +344,10 @@ export default { this.$refs.newPersonModal.reset(); this.$refs.newPersonModal.open(); }, + actionKontaktdatenBearbeiten() { + if (!this.autocompleteSelectedBetreuer) return; + this.$refs.kontaktdatenModal.show(); + }, personSaved(result) { this.$api .call(ApiStvProjektbetreuer.getPerson(result.person_id)) @@ -384,9 +392,12 @@ export default {
-
+
+
+ +
@@ -455,6 +466,22 @@ export default { + + + + + + +
+
+ + +
+
+ +
` } diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 433a52d3e..d467252d7 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -42575,6 +42575,26 @@ and represent the current state of research on the topic. The prescribed citatio ) ) ), + array( + 'app' => 'core', + 'category' => 'projektarbeit', + 'phrase' => 'kontaktdatenBearbeiten', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Kontaktdaten bearbeiten', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Edit contact data', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ) ); From fe81e7fb7c5bb528f911d315bd64c28c894fb0e6 Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Tue, 3 Jun 2025 21:18:03 +0200 Subject: [PATCH 010/102] Studierendenverwaltung Projektarbeit: added button for Projektarbeit download --- .../api/frontend/v1/stv/Projektbetreuer.php | 26 +- .../Details/Projektarbeit/Projektbetreuer.js | 251 ++++++++++-------- system/phrasesupdate.php | 20 ++ 3 files changed, 171 insertions(+), 126 deletions(-) diff --git a/application/controllers/api/frontend/v1/stv/Projektbetreuer.php b/application/controllers/api/frontend/v1/stv/Projektbetreuer.php index 34f626eca..7a1b803b9 100644 --- a/application/controllers/api/frontend/v1/stv/Projektbetreuer.php +++ b/application/controllers/api/frontend/v1/stv/Projektbetreuer.php @@ -3,6 +3,7 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); use \DateTime as DateTime; +use CI3_Events as Events; class Projektbetreuer extends FHCAPI_Controller { @@ -85,6 +86,21 @@ class Projektbetreuer extends FHCAPI_Controller //~ } //~ } + foreach ($projektbetreuer as $pb) + { + $downloadLink = null; + Events::trigger( + 'projektbeurteilung_download_link', + $pb->projektarbeit_id, + $pb->betreuerart_kurzbz, + $pb->person_id, + function ($value) use (&$downloadLink) { + $downloadLink = $value; + } + ); + $pb->projektarbeitDownload = $downloadLink; + } + $this->terminateWithSuccess($this->_addFullNameToBetreuer($projektbetreuer)); } @@ -105,11 +121,7 @@ class Projektbetreuer extends FHCAPI_Controller foreach ($projektbetreuer as $pb) { - if ($this->_validate($pb) == false) - { - $this->addMeta('test', 'foisch'); - $this->terminateWithValidationErrors($this->form_validation->error_array()); - } + if ($this->_validate($pb) == false) $this->terminateWithValidationErrors($this->form_validation->error_array()); } $result = null; @@ -210,10 +222,6 @@ class Projektbetreuer extends FHCAPI_Controller $result = $this->StundensatzModel->getStundensatzForMitarbeiter($person_id, $studiensemester_kurzbz); - $this->addMeta('res', $result); - - //if (isError($result)) return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); - return $this->terminateWithSuccess($result); } diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js index 4f3095cab..bf459ebc5 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js @@ -113,6 +113,7 @@ export default { arrNoten: [], filteredBetreuer: [], autocompleteSelectedBetreuer: null, + projektarbeitDownload: null, abortController: { betreuer: null } @@ -146,6 +147,7 @@ export default { if (idx >= 0) { betreuer = projektbetreuerListe[idx]; this.formData = betreuer; + if (betreuer.projektarbeitDownload) this.projektarbeitDownload = betreuer.projektarbeitDownload this.autocompleteSelectedBetreuer = { person_id: this.formData.person_id, name: this.formData.name, @@ -268,6 +270,7 @@ export default { }, resetForm() { this.formData = this.getDefaultFormData(); + this.projektarbeitDownload = null; this.autocompleteSelectedBetreuer = null; this.initialFormData = null; if (this.projekttyp_kurzbz) this.setDefaultStunden(this.projekttyp_kurzbz); @@ -358,130 +361,144 @@ export default { } }, template: ` -
+
- {{this.$p.t('projektarbeit','betreuerGross')}} - +
- - + {{this.$p.t('projektarbeit','betreuerGross')}} + - -
- - -
+ + -
-
- -
-
- -
-
- -
- -
+ + +
+ + + + + + + + + +
+
+ + +
+
+ +
` } diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index d467252d7..d10f915cc 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -42594,6 +42594,26 @@ and represent the current state of research on the topic. The prescribed citatio 'insertvon' => 'system' ) ) + ), + array( + 'app' => 'core', + 'category' => 'projektarbeit', + 'phrase' => 'projektbeurteilungErstellen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Projektbeurteilung erstellen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Create project assessment document', + 'description' => '', + 'insertvon' => 'system' + ) + ) ) ); From e26bce2cf7d21d78e59c09ba16c46097c6d4ef0b Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Tue, 10 Jun 2025 14:14:32 +0200 Subject: [PATCH 011/102] removed merge text from code --- application/models/ressource/Stundensatz_model.php | 1 - 1 file changed, 1 deletion(-) diff --git a/application/models/ressource/Stundensatz_model.php b/application/models/ressource/Stundensatz_model.php index 553bdd20b..c8ee367d8 100644 --- a/application/models/ressource/Stundensatz_model.php +++ b/application/models/ressource/Stundensatz_model.php @@ -150,4 +150,3 @@ class Stundensatz_model extends DB_Model return $default_stundensatz; } } -==== BASE ==== From d15d27b3e14dbbf179fa85e4167b71c09c49c5f0 Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Fri, 13 Jun 2025 16:19:53 +0200 Subject: [PATCH 012/102] =?UTF-8?q?Studierendenverwaltung=20Projektarbeit:?= =?UTF-8?q?=20added=20Vertr=C3=A4ge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/frontend/v1/stv/Config.php | 6 +- .../api/frontend/v1/stv/Projektbetreuer.php | 2 +- .../api/frontend/v1/stv/Vertrag.php | 104 +++++++++++ .../models/accounting/Vertrag_model.php | 20 +++ public/js/api/factory/stv/vertrag.js | 20 +++ .../Details/Projektarbeit/Details.js | 6 +- .../Details/Projektarbeit/Projektarbeit.js | 24 --- .../Details/Projektarbeit/Projektbetreuer.js | 103 +++++++---- .../Details/Projektarbeit/Vertrag.js | 168 ++++++++++++++++++ system/phrasesupdate.php | 68 ++++++- 10 files changed, 457 insertions(+), 64 deletions(-) create mode 100644 application/controllers/api/frontend/v1/stv/Vertrag.php create mode 100644 public/js/api/factory/stv/vertrag.js create mode 100644 public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Vertrag.js diff --git a/application/controllers/api/frontend/v1/stv/Config.php b/application/controllers/api/frontend/v1/stv/Config.php index 98a06ffb5..83173375e 100644 --- a/application/controllers/api/frontend/v1/stv/Config.php +++ b/application/controllers/api/frontend/v1/stv/Config.php @@ -127,7 +127,11 @@ class Config extends FHCAPI_Controller $result['projektarbeit'] = [ 'title' => $this->p->t('stv', 'tab_projektarbeit'), 'component' => './Stv/Studentenverwaltung/Details/Projektarbeit.js', - 'config' => $config['projektarbeit'] + 'config' => array_merge( + $config['projektarbeit'], + ['showVertragsdetails' => + defined('FAS_STUDIERENDE_PROJEKTARBEIT_VERTRAGSDETAILS_ANZEIGEN') && FAS_STUDIERENDE_PROJEKTARBEIT_VERTRAGSDETAILS_ANZEIGEN] + ) ]; $result['mobility'] = [ diff --git a/application/controllers/api/frontend/v1/stv/Projektbetreuer.php b/application/controllers/api/frontend/v1/stv/Projektbetreuer.php index 7a1b803b9..af0a11d0f 100644 --- a/application/controllers/api/frontend/v1/stv/Projektbetreuer.php +++ b/application/controllers/api/frontend/v1/stv/Projektbetreuer.php @@ -98,7 +98,7 @@ class Projektbetreuer extends FHCAPI_Controller $downloadLink = $value; } ); - $pb->projektarbeitDownload = $downloadLink; + $pb->beurteilungDownloadLink = $downloadLink; } $this->terminateWithSuccess($this->_addFullNameToBetreuer($projektbetreuer)); diff --git a/application/controllers/api/frontend/v1/stv/Vertrag.php b/application/controllers/api/frontend/v1/stv/Vertrag.php new file mode 100644 index 000000000..f94fe795e --- /dev/null +++ b/application/controllers/api/frontend/v1/stv/Vertrag.php @@ -0,0 +1,104 @@ + ['admin:r', 'assistenz:r'], + 'cancelVertrag' => ['admin:r', 'assistenz:r'] + ]); + + // Load Libraries + $this->load->library('form_validation'); + + // Load language phrases + $this->loadPhrases([ + 'ui', + 'person', + 'projektarbeit' + ]); + + // Load models + $this->load->model('accounting/Vertrag_model', 'VertragModel'); + $this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel'); + $this->load->model('person/Benutzer_model', 'BenutzerModel'); + + // load libraries + $this->load->library('PermissionLib'); + } + + public function getVertrag() + { + $vertrag_id = $this->input->get('vertrag_id'); + + if (!isset($vertrag_id) || !is_numeric($vertrag_id)) + $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Vertrag ID']), self::ERROR_TYPE_GENERAL); + + $result = $this->VertragModel->getVertragById($vertrag_id); + + if (isError($result)) + { + $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + + if (!hasData($result)) $this->terminateWithSuccess([]); + + $vertrag = getData($result)[0]; + + $this->terminateWithSuccess($vertrag); + } + + public function cancelVertrag() + { + $vertrag_id = $this->input->post('vertrag_id'); + $person_id = $this->input->post('person_id'); + + if (!isset($vertrag_id) || !is_numeric($vertrag_id)) + $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Vertrag ID']), self::ERROR_TYPE_GENERAL); + if (!isset($person_id) || !is_numeric($person_id)) + $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person ID']), self::ERROR_TYPE_GENERAL); + + // * first find lehrveranstaltung_id of the contracts lehrveranstaltung + $this->VertragModel->addSelect('lehrveranstaltung_id'); + $this->VertragModel->addJoin('lehre.tbl_lehrveranstaltung', 'lehrveranstaltung_id', 'LEFT'); + $result = $this->VertragModel->loadWhere(['vertrag_id' => $vertrag_id]); + + if (isError($result)) $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + + if (!hasData($result)) $this->terminateWithSuccess([]); + + $lehrveranstaltung_id = getData($result)[0]->lehrveranstaltung_id; + + $allOe = $this->LehrveranstaltungModel->getAllOe($lehrveranstaltung_id); + + if (isError($allOe)) $this->terminateWithError(getError($allOe), self::ERROR_TYPE_GENERAL); + + $allOe = hasData($allOe) ? getData($allOe) : []; + + $this->addMeta('oe', $allOe); + + // * then check if the user has permissions to cancel the corresponding lv-organisational units + if (!$this->permissionlib->isBerechtigtMultipleOe('admin', $allOe, 'suid') && + !$this->permissionlib->isBerechtigtMultipleOe('lehre/lehrauftrag_bestellen', $allOe, 'suid')) + { + return $this->_outputAuthError([$this->router->method => ['admin:rw', 'lehrauftrag_bestellen:rw']]); + } + + $uidResult = $this->BenutzerModel->getFromPersonId($person_id); + + if (isError($uidResult)) $this->terminateWithError(getError($uidResult), self::ERROR_TYPE_GENERAL); + + if (!hasData($uidResult)) $this->terminateWithError("no user found", self::ERROR_TYPE_GENERAL); + + $mitarbeiter_uid = getData($uidResult)[0]->uid; + + $result = $this->VertragModel->cancelVertrag($vertrag_id, $mitarbeiter_uid); + + $data = $this->getDataOrTerminateWithError($result); + + $this->terminateWithSuccess($data); + } +} diff --git a/application/models/accounting/Vertrag_model.php b/application/models/accounting/Vertrag_model.php index c17c676c7..4c036369b 100644 --- a/application/models/accounting/Vertrag_model.php +++ b/application/models/accounting/Vertrag_model.php @@ -402,6 +402,26 @@ class Vertrag_model extends DB_Model return $this->loadWhere(array('mitarbeiter_uid' => $mitarbeiter_uid, 'lehreinheit_id' => $lehreinheit_id)); } + public function getVertragById($vertrag_id) + { + $this->addSelect( + 'tbl_vertrag.vertrag_id, vertragstyp_kurzbz, vertragsstunden, vertragsstunden_studiensemester_kurzbz, status.vertragsstatus_kurzbz, + status.bezeichnung AS vertragsstatus, tbl_vertrag.betrag, lema.semesterstunden, lema.stundensatz' + ); + $this->addJoin('lehre.tbl_lehreinheitmitarbeiter lema', 'tbl_vertrag.vertrag_id = lema.vertrag_id', 'LEFT'); + $this->addJoin(' + ( + SELECT DISTINCT ON(vst.vertrag_id) vst.vertrag_id, + bezeichnung, + tbl_vertragsstatus.vertragsstatus_kurzbz + FROM lehre.tbl_vertrag_vertragsstatus vst + JOIN lehre.tbl_vertragsstatus USING(vertragsstatus_kurzbz) + ORDER BY vst.vertrag_id, datum DESC + ) as status', 'status.vertrag_id = lehre.tbl_vertrag.vertrag_id', 'LEFT'); + + return $this->loadWhere(['tbl_vertrag.vertrag_id' => $vertrag_id]); + } + public function cancelVertrag($vertrag_id, $mitarbeiter_uid) { $vertrag = $this->load($vertrag_id); diff --git a/public/js/api/factory/stv/vertrag.js b/public/js/api/factory/stv/vertrag.js new file mode 100644 index 000000000..9070936da --- /dev/null +++ b/public/js/api/factory/stv/vertrag.js @@ -0,0 +1,20 @@ +export default { + + getVertrag(vertrag_id) + { + return { + method: 'get', + url: 'api/frontend/v1/stv/vertrag/getVertrag', + params: { vertrag_id }, + }; + }, + + cancelVertrag(data) + { + return { + method: 'post', + url: '/api/frontend/v1/stv/vertrag/cancelVertrag/', + params: data + }; + } +} diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Details.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Details.js index 4f833621d..c2269c1b3 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Details.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Details.js @@ -15,15 +15,13 @@ export default { defaultSemester: { from: 'defaultSemester' } - //~ cisRoot: { - //~ from: 'cisRoot' - //~ }, //~ config: { //~ from: 'config', //~ required: true //~ } }, computed: { + // prepared Lehreinheiten (with compound Bezeichnung) arrLes() { let lehreinheiten = []; if (this.formData.lehrveranstaltung_id) { @@ -133,7 +131,6 @@ export default { //~ //this.$fhcAlert.handleSystemError(promise_result); //~ } //~ //let data = promise_result.value.data; - //~ console.log(promise_result.status); //~ }); //~ if (!hasError) { @@ -214,6 +211,7 @@ export default { lvChanged(event) { this.formData.lehreinheit_id = null; }, + // enrich and modify data before sending getPreparedFormData() { let preparedFormData = JSON.parse(JSON.stringify(this.formData)); // deep copy diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektarbeit.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektarbeit.js index 8314db8b3..3f9958a26 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektarbeit.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektarbeit.js @@ -30,29 +30,6 @@ export default { from: '$reloadList', required: true } - //~ isBerechtigtDocAndOdt: { - //~ from: 'hasPermissionOutputformat', - //~ default: false - //~ } - }, - computed: { - //~ studentUids() { - //~ if (this.student.uid) - //~ { - //~ return [this.student.uid]; - //~ } - //~ return this.student.map(e => e.uid); - //~ }, - //~ studentKzs(){ - //~ if (this.student.uid) - //~ { - //~ return [this.student.studiengang_kz]; - //~ } - //~ return this.student.map(e => e.studiengang_kz); - //~ }, - //~ stg_kz(){ - //~ return this.studentKzs.length > 0 ? this.studentKzs.length[0] : null; - //~ } }, props: { student: Object @@ -271,7 +248,6 @@ export default { actionEditProjektarbeit(projektarbeit_id, studiensemester_kurzbz, lehrveranstaltung_id, projekttyp_kurzbz) { this.statusNew = false; this.$refs.projektarbeitDetails.getFormData(this.statusNew, studiensemester_kurzbz, lehrveranstaltung_id); - // TODO: maybe preload projektarbeit? not just on edit? this.$refs.projektarbeitDetails.loadProjektarbeit(projektarbeit_id); this.$refs.projektbetreuer.getData(projektarbeit_id, studiensemester_kurzbz, projekttyp_kurzbz); this.$refs.projektarbeitModal.show(); diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js index bf459ebc5..8368534c7 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js @@ -5,6 +5,7 @@ import FormInput from '../../../../Form/Input.js'; import PvAutoComplete from "../../../../../../../index.ci.php/public/js/components/primevue/autocomplete/autocomplete.esm.min.js"; import NewPerson from "../../List/New.js"; import Contact from "../Kontakt/Contact.js"; +import Vertrag from "./Vertrag.js"; import ApiStvProjektbetreuer from '../../../../../api/factory/stv/projektbetreuer.js'; @@ -16,9 +17,13 @@ export default { FormInput, PvAutoComplete, NewPerson, - Contact + Contact, + Vertrag }, - inject: { + provide() { + return { + configShowVertragsdetails: this.config.showVertragsdetails + } }, computed: { betreuerFormOpened() { @@ -107,13 +112,13 @@ export default { initialFormData: null, defaultFormDataValues: {stunden: null, stundensatz: null}, projektarbeit_id: null, - statusNew: true, editedBetreuerIdx: -1, arrBetreuerart: [], arrNoten: [], filteredBetreuer: [], autocompleteSelectedBetreuer: null, - projektarbeitDownload: null, + beurteilungDownloadLink: null, + vertragFieldsDisabled: false, abortController: { betreuer: null } @@ -122,19 +127,19 @@ export default { methods: { actionNewProjektbetreuer() { this.resetForm(); - this.statusNew = true; this.newMode = !this.newMode; this.editMode = false; this.captureFormData(); }, actionEditProjektbetreuer(projektarbeit_id, person_id, betreuerart_kurzbz) { - - this.statusNew = false; this.editMode = true; + this.newMode = false; this.$api .call(ApiStvProjektbetreuer.getDefaultStundensaetze(person_id, this.studiensemester_kurzbz)) .then(result => { this.resetForm(); + + // get betreuer from tabulator list let projektbetreuerListe = this.$refs.projektbetreuerTable.tabulator.getData(); const idx = projektbetreuerListe.findIndex( betr => @@ -144,18 +149,29 @@ export default { ); let betreuer = []; - if (idx >= 0) { + if (idx >= 0) { // if betreuer found betreuer = projektbetreuerListe[idx]; + + // set currently edited betreuera this.formData = betreuer; - if (betreuer.projektarbeitDownload) this.projektarbeitDownload = betreuer.projektarbeitDownload + + // set download link + if (betreuer.beurteilungDownloadLink) this.beurteilungDownloadLink = betreuer.beurteilungDownloadLink + + // set betreuer for autocomplete field this.autocompleteSelectedBetreuer = { person_id: this.formData.person_id, name: this.formData.name, vorname: this.formData.vorname, - nachname: this.formData.nachname + nachname: this.formData.nachname, + vertrag_id: this.formData.vertrag_id }; } + + // set default stundensatz (if no other is set yet) if (this.formData.stundensatz == null) this.formData.stundensatz = result.data; + + // capture initial form data for detecting changes this.captureFormData(); }) .catch(this.$fhcAlert.handleSystemError); @@ -167,10 +183,12 @@ export default { ? {projektarbeit_id, person_id, betreuerart_kurzbz} : Promise.reject({handled: true})) .then(result => { - return this.deleteProjektbetreuer(projektarbeit_id, person_id, betreuerart_kurzbz) + return this.$api + .call(ApiStvProjektbetreuer.deleteProjektbetreuer(projektarbeit_id, person_id, betreuerart_kurzbz)) }) .then(result => { this.$refs.projektbetreuerTable.tabulator.deleteRow(betreuer_id); + this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successDelete')); }) .catch(this.$fhcAlert.handleSystemError); }, @@ -178,9 +196,12 @@ export default { this.studiensemester_kurzbz = studiensemester_kurzbz; + // default Stundensätze from config this.defaultFormDataValues.stunden = this.getDefaultStunden(projekttyp_kurzbz); this.defaultFormDataValues.stundensatz = this.config.defaultProjektbetreuerStundensatz; + this.resetModes(); + // get other initial data this.$api .call(ApiStvProjektbetreuer.getBetreuerarten()) .then(result => { @@ -209,6 +230,7 @@ export default { this.resetForm(); } }, + // confirming Betreuer means adding/updating him in list (but not yet saving in db) confirmProjektbetreuer() { if (!this.betreuerFormOpened) return; @@ -217,11 +239,9 @@ export default { this.$refs.projektbetreuerTable.tabulator.addData(this.addAutoCompleteBetreuerToFormData(this.formData)); } else { this.$refs.projektbetreuerTable.tabulator.updateData([this.formData]); - this.statusNew = true; } - this.newMode = false; - this.editMode = false; + this.resetModes(); }, confirmProjektbetreuerAfterValidation() { //if (!this.formDataModified()) return; @@ -239,14 +259,6 @@ export default { ApiStvProjektbetreuer.saveProjektbetreuer(projektarbeit_id, this.$refs.projektbetreuerTable.tabulator.getData()) ); }, - deleteProjektbetreuer(projektarbeit_id, person_id, betreuerart_kurzbz) { - return this.$api - .call(ApiStvProjektbetreuer.deleteProjektbetreuer(projektarbeit_id, person_id, betreuerart_kurzbz)) - .then(response => { - this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successDelete')); - }) - .catch(this.$fhcAlert.handleSystemError) - }, searchBetreuer(event) { if (this.abortController.betreuer) { this.abortController.betreuer.abort(); @@ -259,6 +271,7 @@ export default { this.filteredBetreuer = result.data; }); }, + // validate betreuer for data validateProjektbetreuer() { let alleBetreuer = this.$refs.projektbetreuerTable.tabulator.getData(); @@ -270,10 +283,15 @@ export default { }, resetForm() { this.formData = this.getDefaultFormData(); - this.projektarbeitDownload = null; + this.beurteilungDownloadLink = null; this.autocompleteSelectedBetreuer = null; this.initialFormData = null; if (this.projekttyp_kurzbz) this.setDefaultStunden(this.projekttyp_kurzbz); + this.disableVertragFields(false); + }, + resetModes() { + this.newMode = false; + this.editMode = false; }, getDefaultFormData() { let formData = {betreuerart_kurzbz : null, note: null}; @@ -287,6 +305,7 @@ export default { captureFormData() { this.initialFormData = JSON.parse(JSON.stringify(this.formData)); // deep copy }, + // add own betreuer ids to betreuer liste addIds(betreuerListe) { for (const idx in betreuerListe) { @@ -298,6 +317,7 @@ export default { } return betreuerListe; }, + // add the betreuer selected in automomplete to betreuer liste addAutoCompleteBetreuerToFormData() { let preparedFormData = this.formData; @@ -311,6 +331,7 @@ export default { return preparedFormData; }, + // get default values for stunden getDefaultStunden(projekttyp_kurzbz) { let stunden = '0.0'; if (projekttyp_kurzbz == 'Bachelor') stunden = this.config.defaultProjektbetreuerStunden; @@ -319,8 +340,10 @@ export default { }, setDefaultStunden(projekttyp_kurzbz) { this.projekttyp_kurzbz = projekttyp_kurzbz; + // if form data has not already been modified by user, set the default stunden if (!this.formDataModified()) this.formData.stunden = this.getDefaultStunden(projekttyp_kurzbz); }, + // get a new betreuer id (max + 1) getNewBetreuerId() { let max = 0; @@ -330,6 +353,7 @@ export default { return max + 1; }, + // check if form data has been modified since initial data has been captured formDataModified() { if (this.autocompleteSelectedBetreuer != null) return true; @@ -351,22 +375,27 @@ export default { if (!this.autocompleteSelectedBetreuer) return; this.$refs.kontaktdatenModal.show(); }, + // stuff to do after new person has been saved personSaved(result) { this.$api .call(ApiStvProjektbetreuer.getPerson(result.person_id)) .then(response => { + // set the new person in autocomplete field this.autocompleteSelectedBetreuer = response.data; }) .catch(this.$fhcAlert.handleSystemError) + }, + // disable fields which are dependent on Vertrag status + disableVertragFields(disabled) { + this.vertragFieldsDisabled = disabled; } }, template: `
-
+
{{this.$p.t('projektarbeit','betreuerGross')}} -
@@ -448,6 +478,7 @@ export default { type="text" name="stunden" :label="$p.t('projektarbeit', 'stunden')" + :disabled="vertragFieldsDisabled" v-model="formData.stunden" > @@ -459,6 +490,7 @@ export default { type="text" name="stundensatz" :label="$p.t('projektarbeit', 'stundensatz')" + :disabled="vertragFieldsDisabled" v-model="formData.stundensatz" > @@ -469,11 +501,23 @@ export default { - +
+ + {{ autocompleteSelectedBetreuer?.person_id && (!beurteilungDownloadLink || beurteilungDownloadLink == '') ? $p.t('projektarbeit', 'projektarbeitNochNichtBeurteilt') : ''}} +
- @@ -485,8 +529,7 @@ export default { + v-if="autocompleteSelectedBetreuer && autocompleteSelectedBetreuer.person_id">
-
+
-
+
diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js index fd796e3e1..9b02f9b01 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js @@ -84,13 +84,16 @@ export default { frozen: true }, ], - layout: 'fitDataFill', + //layout: 'fitDataFill', layoutColumnsOnNewData: false, height: 'auto', minHeight: '100', selectable: true, selectable: 1, index: 'betreuer_id', + persistence:{ + columns: true, //persist column layout + }, persistenceID: 'stv-details-projektbetreuer' }, tabulatorEvents: [ @@ -99,6 +102,13 @@ export default { handler: async() => { await this.$p.loadCategory(['global', 'person', 'stv', 'projektarbeit', 'ui']); } + }, + { + event: 'rowSelected', + handler: row => { + let data = row.getData(); + this.actionEditProjektbetreuer(data.projektarbeit_id, data.person_id, data.betreuerart_kurzbz); + } } ], formData: { @@ -156,7 +166,7 @@ export default { this.formData = betreuer; // set download link - if (betreuer.beurteilungDownloadLink) this.beurteilungDownloadLink = betreuer.beurteilungDownloadLink + if (betreuer.beurteilungDownloadLink !== null) this.beurteilungDownloadLink = betreuer.beurteilungDownloadLink; // set betreuer for autocomplete field this.autocompleteSelectedBetreuer = { @@ -279,15 +289,16 @@ export default { alleBetreuer.push(this.addAutoCompleteBetreuerToFormData(this.formData)); } - return this.$api.call(ApiStvProjektbetreuer.validateProjektbetreuer(alleBetreuer)); + return this.$refs.formProjektbetreuer.call(ApiStvProjektbetreuer.validateProjektbetreuer(alleBetreuer)); }, resetForm() { this.formData = this.getDefaultFormData(); - this.beurteilungDownloadLink = null; + if (this.beurteilungDownloadLink !== null) this.beurteilungDownloadLink = ''; this.autocompleteSelectedBetreuer = null; this.initialFormData = null; if (this.projekttyp_kurzbz) this.setDefaultStunden(this.projekttyp_kurzbz); this.disableVertragFields(false); + this.$refs.formProjektbetreuer.clearValidation(); }, resetModes() { this.newMode = false; @@ -417,7 +428,7 @@ export default { type="autocomplete" optionLabel="name" v-model="autocompleteSelectedBetreuer" - name="betreuer" + name="person_id" :suggestions="filteredBetreuer" @complete="searchBetreuer" :min-length="3" @@ -501,13 +512,13 @@ export default { -
+
- {{ autocompleteSelectedBetreuer?.person_id && (!beurteilungDownloadLink || beurteilungDownloadLink == '') ? $p.t('projektarbeit', 'projektarbeitNochNichtBeurteilt') : ''}} + {{ autocompleteSelectedBetreuer?.person_id && beurteilungDownloadLink === '' ? $p.t('projektarbeit', 'projektarbeitNochNichtBeurteilt') : ''}}
diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Vertrag.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Vertrag.js index 1f494d1ec..074d22bde 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Vertrag.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Vertrag.js @@ -125,36 +125,22 @@ export default{
{{ betreuerProjektarbeit?.betreuerart_kurzbz && betreuerProjektarbeit?.vertrag_id == null ? ' – '+$p.t('lehre', 'nochKeinVertrag') : '' }}
-
- -
- {{$p.t('lehre', 'vertragurfassung')}}
- - +
+ {{ $p.t('lehre', 'vertragsstatus') }}: {{ vertragsstatus }} +
- - +
+ {{$p.t('lehre', 'vertragurfassung')}} +
+
+
+
+ {{ $p.t('lehre', 'semesterstunden') }}: {{ data.vertragsstunden }} +
+ {{ $p.t('lehre', 'studiensemester') }}: {{ data.vertragsstunden_studiensemester_kurzbz }} +
@@ -164,7 +150,7 @@ export default{ :disabled="vertragsstatus == vertragsstatus_storniert" @click="cancelVertrag" > - {{ $p.t('lehre', 'stornieren') }} + {{ $p.t('lehre', 'vertragStornieren') }}
diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index db16dc247..24b37f594 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -43778,7 +43778,7 @@ and represent the current state of research on the topic. The prescribed citatio array( 'app' => 'core', 'category' => 'lehre', - 'phrase' => 'stornieren', + 'phrase' => 'vertragStornieren', 'insertvon' => 'system', 'phrases' => array( array( @@ -43789,7 +43789,7 @@ and represent the current state of research on the topic. The prescribed citatio ), array( 'sprache' => 'English', - 'text' => 'Cancel', + 'text' => 'Cancel contract', 'description' => '', 'insertvon' => 'system' ) From 4eaf71e5c634cfe7a96bdce0b3d5d7a3b423eee6 Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Mon, 14 Jul 2025 17:01:16 +0200 Subject: [PATCH 017/102] cancel Vertrag: correct error handling --- .../Stv/Studentenverwaltung/Details/Projektarbeit/Vertrag.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Vertrag.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Vertrag.js index 074d22bde..c5de5a1fb 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Vertrag.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Vertrag.js @@ -96,7 +96,7 @@ export default{ ? {vertrag_id: this.vertrag_id, person_id: this.person_id} : Promise.reject({handled: true})) .then(result => { - this.$api.call(ApiVertrag.cancelVertrag({vertrag_id: this.vertrag_id, person_id: this.person_id})) + return this.$api.call(ApiVertrag.cancelVertrag({vertrag_id: this.vertrag_id, person_id: this.person_id})) }) .then(result => { this.resetForm(); From 1f258c84d4d01aa4db7df27480d8cea3042b7772 Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Tue, 15 Jul 2025 18:56:49 +0200 Subject: [PATCH 018/102] Studierendenverwaltung Projektarbeit: moved Beurteilung download to table actions, separate tabs for details and Betreuer --- .../Details/Projektarbeit/Projektarbeit.js | 34 +++++-- .../Details/Projektarbeit/Projektbetreuer.js | 88 +++++++++++++------ 2 files changed, 87 insertions(+), 35 deletions(-) diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektarbeit.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektarbeit.js index dd7c4913c..76953867f 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektarbeit.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektarbeit.js @@ -348,19 +348,39 @@ export default { - + -
-
- - + + +
+
+
+
+ + +
+
-
- + +
+
+
+ +
+
diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js index 9b02f9b01..183c81bc0 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js @@ -51,7 +51,8 @@ export default { {title: "Vertrag ID", field: "vertrag_id", visible: false}, {title: "Projektarbeit ID", field: "projektarbeit_id", visible: false}, { - title: 'Aktionen', field: 'actions', + title: 'Aktionen', + field: 'actions', minWidth: 150, // Ensures Action-buttons will be always fully displayed formatter: (cell, formatterParams, onRendered) => { let container = document.createElement('div'); @@ -62,6 +63,8 @@ export default { button.innerHTML = ''; button.title = this.$p.t('ui', 'bearbeiten'); button.addEventListener('click', (event) => { + event.stopPropagation(); + event.preventDefault(); let data = cell.getData(); this.actionEditProjektbetreuer(data.projektarbeit_id, data.person_id, data.betreuerart_kurzbz); }); @@ -71,13 +74,41 @@ export default { button.className = 'btn btn-outline-secondary btn-action'; button.innerHTML = ''; button.title = this.$p.t('ui', 'loeschen'); - button.addEventListener('click', () => { + button.addEventListener('click', (event) => { + event.stopPropagation(); + event.preventDefault(); const data = cell.getData(); this.actionDeleteProjektbetreuer(data.betreuer_id, data.projektarbeit_id, data.person_id, data.betreuerart_kurzbz) }); container.append(button); - //container.append(cell.getData().actionDiv); + let data = cell.getData(); + if (data.beurteilungDownloadLink !== null) { + if (data.beurteilungDownloadLink == '') { + button = document.createElement('span'); + button.title = this.$p.t('projektarbeit', 'projektarbeitNochNichtBeurteilt') + button.innerHTML = ''; + button.addEventListener('click', (event) => { + event.stopPropagation(); + event.preventDefault(); + }); + } + else { + button = document.createElement('a'); + button.setAttribute('href', data.beurteilungDownloadLink); + button.setAttribute('role', 'button'); + button.innerHTML = ''; + button.title = this.$p.t('projektarbeit', 'projektbeurteilungErstellen'); + button.className = 'btn btn-outline-secondary btn-action'; + button.addEventListener('click', (event) => { + event.stopPropagation(); + event.preventDefault(); + window.location.href = data.beurteilungDownloadLink; + }); + } + container.append(button); + } return container; }, @@ -404,7 +435,7 @@ export default { template: `
-
+
{{this.$p.t('projektarbeit','betreuerGross')}} @@ -484,27 +515,28 @@ export default {
- - -
- -
- - +
+ + +
+
+ + +
@@ -512,17 +544,17 @@ export default { -
+
-
+
Date: Tue, 15 Jul 2025 23:08:12 +0200 Subject: [PATCH 019/102] Studierendenverwaltung archiv: removed tabulator columns from computed --- .../Stv/Studentenverwaltung/Details/Archiv.js | 91 ------------------- 1 file changed, 91 deletions(-) diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js b/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js index 41bd222b8..d02b64c18 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js @@ -67,97 +67,6 @@ export default { }; }, computed: { - tabulatorColumns() { - const columns = [ - {title: "Akte Id", field: "akte_id", visible: false}, - {title: this.$p.t('stv', 'archiv_title'), field: "titel"}, - {title: this.$p.t('stv', 'archiv_description'), field: "bezeichnung"}, - {title: this.$p.t('stv', 'archiv_creation_date'), field: "erstelltam"}, - { - title: this.$p.t('stv', 'archiv_signiert'), - field: "signiert", - formatter:"tickCross", - hozAlign:"center", - formatterParams: { - tickElement: '', - crossElement: '' - } - }, - { - title: "Selfservice", - field: "stud_selfservice", - formatter:"tickCross", - hozAlign:"center", - formatterParams: { - tickElement: '', - crossElement: '' - }, - }, - {title: this.$p.t('stv', 'archiv_accepted_on_at'), field: "akzeptiertamum"}, - { - title: this.$p.t('stv', 'archiv_gedruckt'), - field: "gedruckt", - visible: false, - formatter:"tickCross", - hozAlign:"center", - formatterParams: { - tickElement: '', - crossElement: '' - } - }, - { - title: 'Aktionen', field: 'actions', - formatter: (cell, formatterParams, onRendered) => { - let container = document.createElement('div'); - container.className = "d-flex gap-2"; - - let downloadButton = document.createElement('button'); - downloadButton.className = 'btn btn-outline-secondary'; - downloadButton.innerHTML = ''; - downloadButton.title = this.$p.t('ui', 'downloadDok'); - downloadButton.addEventListener('click', evt => { - evt.stopPropagation(); - this.actionDownload(cell.getData().akte_id); - }); - container.append(downloadButton); - - if (this.config.showEdit) - { - let editButton = document.createElement('button'); - editButton.className = 'btn btn-outline-secondary'; - editButton.innerHTML = ''; - editButton.addEventListener('click', () => - this.$refs.edit.open(cell.getData()) - ); - container.append(editButton); - } - - let deleteButton = document.createElement('button'); - deleteButton.className = 'btn btn-outline-secondary'; - deleteButton.innerHTML = ''; - deleteButton.addEventListener('click', evt => { - evt.stopPropagation(); - this.$fhcAlert - .confirmDelete() - .then(result => result ? {akte_id: cell.getData().akte_id, studiengang_kz: this.modelValue.studiengang_kz} : Promise.reject({handled:true})) - .then(this.$fhcApi.factory.stv.archiv.delete) - .then(() => { - //cell.getRow().delete(); - this.reload(); - }) - .catch(this.$fhcAlert.handleSystemError); - }); - container.append(deleteButton); - - return container; - }, - minWidth: 150, // Ensures Action-buttons will be always fully displayed - maxWidth: 150, - frozen: true - } - ]; - return columns; - }, tabulatorOptions() { const options = { ajaxURL: 'dummy', From 75adcefd5168f2b3da82d7fa19aaeb7eb6343821 Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Mon, 21 Jul 2025 17:52:21 +0200 Subject: [PATCH 020/102] Studentenverwaltung Projektarbeit: made text input possible for all date input --- .../Studentenverwaltung/Details/Projektarbeit/Details.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Details.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Details.js index e51828f98..2fdc9d996 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Details.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Details.js @@ -350,7 +350,10 @@ export default { v-model="formData.beginn" auto-apply :enable-time-picker="false" + text-input + locale="de" format="dd.MM.yyyy" + model-type="yyyy-MM-dd" name="beginn" > @@ -361,7 +364,10 @@ export default { v-model="formData.ende" auto-apply :enable-time-picker="false" + text-input + locale="de" format="dd.MM.yyyy" + model-type="yyyy-MM-dd" name="ende" > @@ -375,7 +381,10 @@ export default { v-model="formData.gesperrtbis" auto-apply :enable-time-picker="false" + text-input + locale="de" format="dd.MM.yyyy" + model-type="yyyy-MM-dd" name="gesperrtbis" > From ca3f8bc554a71c5ebd66f61ec1750b6a821b0b15 Mon Sep 17 00:00:00 2001 From: chfhtw Date: Tue, 19 Aug 2025 11:24:51 +0200 Subject: [PATCH 021/102] move statusofsemester select into shared function --- .../api/frontend/v1/stv/Students.php | 72 ++++--------------- 1 file changed, 12 insertions(+), 60 deletions(-) diff --git a/application/controllers/api/frontend/v1/stv/Students.php b/application/controllers/api/frontend/v1/stv/Students.php index 26b5000bb..4bd449715 100644 --- a/application/controllers/api/frontend/v1/stv/Students.php +++ b/application/controllers/api/frontend/v1/stv/Students.php @@ -334,18 +334,6 @@ class Students extends FHCAPI_Controller $this->PrestudentModel->addSelect("'' AS gruppe"); $this->addSelectPrioRel(); - //add status per semester - $this->PrestudentModel->addSelect( - "( - SELECT status_kurzbz - FROM public.tbl_prestudentstatus pss - WHERE pss.prestudent_id = public.tbl_prestudent.prestudent_id - AND pss.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . " - ORDER BY GREATEST(pss.datum, '0001-01-01') DESC - LIMIT 1 - ) AS statusofsemester" - ); - $this->addFilter($studiensemester_kurzbz); $result = $this->PrestudentModel->loadWhere($where); @@ -462,18 +450,6 @@ class Students extends FHCAPI_Controller $this->PrestudentModel->addSelect('v.gruppe'); $this->PrestudentModel->addSelect("'' AS priorisierung_relativ"); - //add status per semester - $this->PrestudentModel->addSelect( - "( - SELECT status_kurzbz - FROM public.tbl_prestudentstatus pss - WHERE pss.prestudent_id = public.tbl_prestudent.prestudent_id - AND pss.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . " - ORDER BY GREATEST(pss.datum, '0001-01-01') DESC - LIMIT 1 - ) AS statusofsemester" - ); - $where = []; @@ -562,18 +538,6 @@ class Students extends FHCAPI_Controller $this->PrestudentModel->addSelect('v.verband'); $this->PrestudentModel->addSelect('v.gruppe'); - //add status per semester - $this->PrestudentModel->addSelect( - "( - SELECT status_kurzbz - FROM public.tbl_prestudentstatus pss - WHERE pss.prestudent_id = public.tbl_prestudent.prestudent_id - AND pss.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . " - ORDER BY GREATEST(pss.datum, '0001-01-01') DESC - LIMIT 1 - ) AS statusofsemester" - ); - $this->addSelectPrioRel(); $this->addFilter($studiensemester_kurzbz); @@ -631,18 +595,6 @@ class Students extends FHCAPI_Controller $this->PrestudentModel->addSelect('v.verband'); $this->PrestudentModel->addSelect('v.gruppe'); - //add status per semester - $this->PrestudentModel->addSelect( - "( - SELECT status_kurzbz - FROM public.tbl_prestudentstatus pss - WHERE pss.prestudent_id = public.tbl_prestudent.prestudent_id - AND pss.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . " - ORDER BY GREATEST(pss.datum, '0001-01-01') DESC - LIMIT 1 - ) AS statusofsemester" - ); - $this->addSelectPrioRel(); @@ -696,18 +648,6 @@ class Students extends FHCAPI_Controller $this->PrestudentModel->addSelect('v.verband'); $this->PrestudentModel->addSelect('v.gruppe'); - //add status per semester - $this->PrestudentModel->addSelect( - "( - SELECT status_kurzbz - FROM public.tbl_prestudentstatus pss - WHERE pss.prestudent_id = public.tbl_prestudent.prestudent_id - AND pss.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . " - ORDER BY GREATEST(pss.datum, '0001-01-01') DESC - LIMIT 1 - ) AS statusofsemester" - ); - $this->addSelectPrioRel(); $this->addFilter($studiensemester_kurzbz); @@ -772,6 +712,18 @@ class Students extends FHCAPI_Controller // verband // gruppe + //add status per semester + $this->PrestudentModel->addSelect( + "( + SELECT status_kurzbz + FROM public.tbl_prestudentstatus pss + WHERE pss.prestudent_id = public.tbl_prestudent.prestudent_id + AND pss.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . " + ORDER BY GREATEST(pss.datum, '0001-01-01') DESC + LIMIT 1 + ) AS statusofsemester" + ); + $this->PrestudentModel->addSelect('UPPER(stg.typ || stg.kurzbz) AS studiengang'); $this->PrestudentModel->addSelect('tbl_prestudent.studiengang_kz'); $this->PrestudentModel->addSelect('stg.bezeichnung AS stg_bezeichnung'); From 6ee3f1d241a2f9f4360dfcfe8cb4ed892e0069d2 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Wed, 20 Aug 2025 11:32:31 +0200 Subject: [PATCH 022/102] show Bezeichnung in Subject Vorlage, add adaption for Tinymce for openMode inSamePage --- .../api/frontend/v1/messages/Messages.php | 18 ++++------ public/js/api/factory/messages/messages.js | 4 +-- public/js/api/messages/person.js | 4 +-- .../Messages/Details/NewMessage/Modal.js | 19 ++++------- .../Messages/Details/NewMessage/NewDiv.js | 34 ++++++------------- 5 files changed, 28 insertions(+), 51 deletions(-) diff --git a/application/controllers/api/frontend/v1/messages/Messages.php b/application/controllers/api/frontend/v1/messages/Messages.php index fa6748f6a..6ca1c74c0 100644 --- a/application/controllers/api/frontend/v1/messages/Messages.php +++ b/application/controllers/api/frontend/v1/messages/Messages.php @@ -16,7 +16,7 @@ class Messages extends FHCAPI_Controller 'getNameOfDefaultRecipient' => ['admin:r', 'assistenz:r'], 'sendMessage' => ['admin:r', 'assistenz:r'], 'deleteMessage' => ['admin:r', 'assistenz:r'], - 'getVorlagentext' => ['admin:r', 'assistenz:r'], + 'getDataVorlage' => ['admin:r', 'assistenz:r'], 'getPreviewText' => ['admin:r', 'assistenz:r'], 'getReplyData' => ['admin:r', 'assistenz:r'], 'getPersonId' => ['admin:r', 'assistenz:r'], @@ -89,10 +89,8 @@ class Messages extends FHCAPI_Controller $this->terminateWithSuccess($data); } - public function getVorlagentext($vorlage_kurzbz) + public function getDataVorlage($vorlage_kurzbz) { - //$this->terminateWithError("vor " . $vorlage_kurzbz, self::ERROR_TYPE_GENERAL); - //$studiengang_kz = 227; //TODO(Manu) dynamisieren NULL $studiengang_kz = 0; $this->load->model('system/Vorlagestudiengang_model', 'VorlagestudiengangModel'); $this->VorlagestudiengangModel->addOrder('version', 'DESC'); @@ -104,12 +102,8 @@ class Messages extends FHCAPI_Controller ]); $data = $this->getDataOrTerminateWithError($result); - - //not correct with Vorlage $vorlage = current($data); - - //$this->terminateWithSuccess($data); - $this->terminateWithSuccess($vorlage->text); + $this->terminateWithSuccess($vorlage); } public function getMessageVarsPerson($id, $typeId) @@ -154,7 +148,7 @@ class Messages extends FHCAPI_Controller public function sendMessage($recipient_id) { //has to be uid - // $this->terminateWithError("uid", $recipient_id, self::ERROR_TYPE_GENERAL); + // $this->terminateWithError("uid", $recipient_id, self::ERROR_TYPE_GENERAL); //default setting $receiversPersonId = $this->_getPersonId($recipient_id, 'uid'); @@ -223,7 +217,7 @@ class Messages extends FHCAPI_Controller } elseif($typeId == 'prestudent_id') { - // $this->terminateWithError("prestudent_id ", self::ERROR_TYPE_GENERAL); + // $this->terminateWithError("prestudent_id ", self::ERROR_TYPE_GENERAL); $result = $this->MessagesModel->parseMessageTextPrestudent($id, $body); $bodyParsed = $this->getDataOrTerminateWithError($result); @@ -429,7 +423,7 @@ class Messages extends FHCAPI_Controller private function _getPrestudentIdFromUid($uid) { - // $this->terminateWithError($uid, self::ERROR_TYPE_GENERAL); + // $this->terminateWithError($uid, self::ERROR_TYPE_GENERAL); $this->load->model('crm/Student_model', 'StudentModel'); $result = $this->StudentModel->loadWhere( ['student_uid' => $uid] diff --git a/public/js/api/factory/messages/messages.js b/public/js/api/factory/messages/messages.js index cec34ad8b..c6d4b67b6 100644 --- a/public/js/api/factory/messages/messages.js +++ b/public/js/api/factory/messages/messages.js @@ -62,10 +62,10 @@ export default { url: 'api/frontend/v1/messages/messages/getUid/' + userParams.id + '/' + userParams.type_id }; }, - getVorlagentext(vorlage_kurzbz){ + getDataVorlage(vorlage_kurzbz){ return { method: 'get', - url: 'api/frontend/v1/messages/messages/getVorlagentext/' + vorlage_kurzbz + url: 'api/frontend/v1/messages/messages/getDataVorlage/' + vorlage_kurzbz }; }, getNameOfDefaultRecipient(params){ diff --git a/public/js/api/messages/person.js b/public/js/api/messages/person.js index e2d2fd0c4..19b3603e2 100644 --- a/public/js/api/messages/person.js +++ b/public/js/api/messages/person.js @@ -20,8 +20,8 @@ export default { getUid(params){ return this.$fhcApi.get('api/frontend/v1/messages/messages/getUid/'+ params.id + '/' + params.type_id); }, - getVorlagentext(vorlage_kurzbz){ - return this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagentext/' + vorlage_kurzbz); + getDataVorlage(vorlage_kurzbz){ + return this.$fhcApi.get('api/frontend/v1/messages/messages/getDataVorlage/' + vorlage_kurzbz); }, getNameOfDefaultRecipient(params){ return this.$fhcApi.get('api/frontend/v1/messages/messages/getNameOfDefaultRecipient/' + params.id + '/' + params.type_id); diff --git a/public/js/components/Messages/Details/NewMessage/Modal.js b/public/js/components/Messages/Details/NewMessage/Modal.js index b0d8cca7d..ce9235617 100644 --- a/public/js/components/Messages/Details/NewMessage/Modal.js +++ b/public/js/components/Messages/Details/NewMessage/Modal.js @@ -136,17 +136,13 @@ export default { } ); }, - getVorlagentext(vorlage_kurzbz){ + getDataVorlage(vorlage_kurzbz){ return this.$api - .call(this.endpoint.getVorlagentext(vorlage_kurzbz)) + .call(this.endpoint.getDataVorlage(vorlage_kurzbz)) .then(response => { - this.formData.body = response.data; - }).catch(this.$fhcAlert.handleSystemError) - .finally(() => { - //this.resetForm(); - //closeModal - //closewindwo - }); + this.formData.body = response.data.text; + this.formData.subject = response.data.subject; + }).catch(this.$fhcAlert.handleSystemError); }, getPreviewText(){ const data = new FormData(); @@ -197,8 +193,7 @@ export default { }, handleSelectedVorlage(vorlage_kurzbz) { if (typeof vorlage_kurzbz === "string") { - this.getVorlagentext(vorlage_kurzbz); - this.formData.subject = vorlage_kurzbz; + this.getDataVorlage(vorlage_kurzbz); } }, showPreview(){ @@ -240,7 +235,7 @@ export default { handler(newVal){ if (newVal && newVal != null) { this.formData.subject = newVal; - return this.getVorlagentext(newVal); + return this.getDataVorlage(newVal); } } }, diff --git a/public/js/components/Messages/Details/NewMessage/NewDiv.js b/public/js/components/Messages/Details/NewMessage/NewDiv.js index 7622f0928..24674fd3f 100644 --- a/public/js/components/Messages/Details/NewMessage/NewDiv.js +++ b/public/js/components/Messages/Details/NewMessage/NewDiv.js @@ -136,15 +136,13 @@ export default { } ); }, - getVorlagentext(vorlage_kurzbz){ + getDataVorlage(vorlage_kurzbz){ return this.$api - .call(this.endpoint.getVorlagentext(vorlage_kurzbz)) + .call(this.endpoint.getDataVorlage(vorlage_kurzbz)) .then(response => { - this.formData.body = response.data; - }).catch(this.$fhcAlert.handleSystemError) - .finally(() => { - //this.resetForm(); - }); + this.formData.body = response.data.text; + this.formData.subject = response.data.subject; + }).catch(this.$fhcAlert.handleSystemError); }, getPreviewText(id, typeId){ const data = new FormData(); @@ -164,20 +162,11 @@ export default { insertVariable(selectedItem){ if (this.editor) { this.editor.insertContent(selectedItem.value + " "); - //TODO(Manu) check: Laden von Variblen geht nicht wenn kein Zeichen danach kommt - // nicht mal mit Punkt adden gehts ohne eintrag nach vars - //this.editor.focus(); - // this.editor.setDirty(true); - this.editor.setDirty(true);//seting dirty true if changes appear - // console.log(tinyMCE.activeEditor.isDirty());//dirty output = true - - - //this.editor.undoManager.add(); - - //this.editor.insertContent(selectedItem.value + "\u00A0"); - //this.editor.insertContent(`${selectedItem.value} `); - //this.editor.selection.setCursorLocation(this.editor.getBody(), 1); + this.editor.fire('input'); + this.editor.fire('change'); + this.editor.setDirty(true); + this.editor.save(); } else { console.error("Editor instance is not available."); @@ -202,8 +191,7 @@ export default { }, handleSelectedVorlage(vorlage_kurzbz) { if (typeof vorlage_kurzbz === "string") { - this.getVorlagentext(vorlage_kurzbz); - this.formData.subject = vorlage_kurzbz; + this.getDataVorlage(vorlage_kurzbz); } }, hideTemplate(){ @@ -248,7 +236,7 @@ export default { if (newVal && newVal != null) { this.formData.subject = newVal; - return this.getVorlagentext(newVal); + return this.getDataVorlage(newVal); } } }, From b73eac62b5dd36899ccd96a93f5db6dd59337e5d Mon Sep 17 00:00:00 2001 From: chfhtw Date: Wed, 20 Aug 2025 11:54:01 +0200 Subject: [PATCH 023/102] add studiensemester param to incoming/outgoing/gs backend --- application/config/routes.php | 6 +++--- .../api/frontend/v1/stv/Students.php | 21 ++++++++++++++++--- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/application/config/routes.php b/application/config/routes.php index da3a45f03..189400a72 100644 --- a/application/config/routes.php +++ b/application/config/routes.php @@ -70,9 +70,9 @@ $route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})'] = 'api/frontend/v1/stv // (studiensemester_kurzbz)/inout[/(incoming|outgoing|gemeinsamestudien)] $route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/inout'] = 'api/frontend/v1/stv/Students/index'; -$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/inout/incoming'] = 'api/frontend/v1/stv/Students/getIncoming'; -$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/inout/outgoing'] = 'api/frontend/v1/stv/Students/getOutgoing'; -$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/inout/gemeinsamestudien'] = 'api/frontend/v1/stv/Students/getGemeinsamestudien'; +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/inout/incoming'] = 'api/frontend/v1/stv/Students/getIncoming/$1'; +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/inout/outgoing'] = 'api/frontend/v1/stv/Students/getOutgoing/$1'; +$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/inout/gemeinsamestudien'] = 'api/frontend/v1/stv/Students/getGemeinsamestudien/$1'; // (studiengang_kz)/prestudent[/(studiensemester_kurzbz)[/(filter)[/(otherfilter)]]] $route['api/frontend/v1/stv/[sS]tudents/(:num)/prestudent'] = 'api/frontend/v1/stv/Students/getPrestudents/$1'; diff --git a/application/controllers/api/frontend/v1/stv/Students.php b/application/controllers/api/frontend/v1/stv/Students.php index 4bd449715..88a87804e 100644 --- a/application/controllers/api/frontend/v1/stv/Students.php +++ b/application/controllers/api/frontend/v1/stv/Students.php @@ -101,31 +101,46 @@ class Students extends FHCAPI_Controller } /** + * @param string $studiensemester_kurzbz + * * @return void */ - public function getIncoming() + public function getIncoming($studiensemester_kurzbz) { $this->addMeta('ci_method', __FUNCTION__); + $this->addMeta('ci_params', [ + 'studiensemester_kurzbz' => $studiensemester_kurzbz + ]); // TODO(chris): IMPLEMENT! $this->terminateWithSuccess([]); } /** + * @param string $studiensemester_kurzbz + * * @return void */ - public function getOutgoing() + public function getOutgoing($studiensemester_kurzbz) { $this->addMeta('ci_method', __FUNCTION__); + $this->addMeta('ci_params', [ + 'studiensemester_kurzbz' => $studiensemester_kurzbz + ]); // TODO(chris): IMPLEMENT! $this->terminateWithSuccess([]); } /** + * @param string $studiensemester_kurzbz + * * @return void */ - public function getGemeinsamestudien() + public function getGemeinsamestudien($studiensemester_kurzbz) { $this->addMeta('ci_method', __FUNCTION__); + $this->addMeta('ci_params', [ + 'studiensemester_kurzbz' => $studiensemester_kurzbz + ]); // TODO(chris): IMPLEMENT! $this->terminateWithSuccess([]); } From 31a5caa5580b2002c337265fdd64447a3bcc9361 Mon Sep 17 00:00:00 2001 From: chfhtw Date: Wed, 20 Aug 2025 11:56:29 +0200 Subject: [PATCH 024/102] better (safer) output for semester verband gruppe prio --- .../api/frontend/v1/stv/Students.php | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/application/controllers/api/frontend/v1/stv/Students.php b/application/controllers/api/frontend/v1/stv/Students.php index 88a87804e..71b7be872 100644 --- a/application/controllers/api/frontend/v1/stv/Students.php +++ b/application/controllers/api/frontend/v1/stv/Students.php @@ -342,9 +342,11 @@ class Students extends FHCAPI_Controller $this->prepareQuery($studiensemester_kurzbz); $this->PrestudentModel->addSelect(" - CASE WHEN ps.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent') - THEN ps.ausbildungssemester::text - ELSE ''::text END AS semester", false); + CASE + WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent') + THEN ps.ausbildungssemester::text + ELSE ''::text + END AS semester", false); $this->PrestudentModel->addSelect("'' AS verband"); $this->PrestudentModel->addSelect("'' AS gruppe"); $this->addSelectPrioRel(); @@ -549,9 +551,16 @@ class Students extends FHCAPI_Controller );*/ $this->prepareQuery($studiensemester_kurzbz); - $this->PrestudentModel->addSelect("COALESCE(v.semester::text, CASE WHEN public.get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL) IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent') THEN public.get_absem_prestudent(tbl_prestudent.prestudent_id, NULL)::text ELSE ''::text END) AS semester", false); - $this->PrestudentModel->addSelect('v.verband'); - $this->PrestudentModel->addSelect('v.gruppe'); + $this->PrestudentModel->addSelect("COALESCE( + v.semester::text, + CASE + WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent') + THEN pls.ausbildungssemester::text + ELSE ''::text + END + ) AS semester", false); + $this->PrestudentModel->addSelect("COALESCE(v.verband::text, ''::text)"); + $this->PrestudentModel->addSelect("COALESCE(v.gruppe::text, ''::text)"); $this->addSelectPrioRel(); @@ -796,12 +805,12 @@ class Students extends FHCAPI_Controller SELECT count(*) FROM ( SELECT *, public.get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL) AS laststatus - FROM PUBLIC.tbl_prestudent pss - JOIN PUBLIC.tbl_prestudentstatus USING (prestudent_id) + FROM public.tbl_prestudent pss + JOIN public.tbl_prestudentstatus USING (prestudent_id) WHERE person_id = p.person_id AND studiensemester_kurzbz = ( SELECT studiensemester_kurzbz - FROM PUBLIC.tbl_prestudentstatus + FROM public.tbl_prestudentstatus WHERE prestudent_id = tbl_prestudent.prestudent_id AND status_kurzbz = 'Interessent' LIMIT 1 @@ -810,7 +819,7 @@ class Students extends FHCAPI_Controller ) prest WHERE laststatus NOT IN ('Abbrecher', 'Abgewiesener', 'Absolvent') AND priorisierung <= tbl_prestudent.priorisierung - ) || ' (' || tbl_prestudent.priorisierung || ')' AS priorisierung_relativ", false); + ) || ' (' || COALESCE(tbl_prestudent.priorisierung::text, ' '::text) || ')' AS priorisierung_relativ", false); } /** From 923427b41f20bfde6304dba69102b7a993c08f89 Mon Sep 17 00:00:00 2001 From: chfhtw Date: Wed, 20 Aug 2025 11:57:31 +0200 Subject: [PATCH 025/102] Implement: stv/students/getIncoming --- .../api/frontend/v1/stv/Students.php | 39 ++++++++++++++++++- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/application/controllers/api/frontend/v1/stv/Students.php b/application/controllers/api/frontend/v1/stv/Students.php index 71b7be872..b4116ed0d 100644 --- a/application/controllers/api/frontend/v1/stv/Students.php +++ b/application/controllers/api/frontend/v1/stv/Students.php @@ -111,8 +111,43 @@ class Students extends FHCAPI_Controller $this->addMeta('ci_params', [ 'studiensemester_kurzbz' => $studiensemester_kurzbz ]); - // TODO(chris): IMPLEMENT! - $this->terminateWithSuccess([]); + + + $this->load->model('crm/Prestudent_model', 'PrestudentModel'); + + + $this->prepareQuery($studiensemester_kurzbz); + + $this->PrestudentModel->addSelect("COALESCE( + v.semester::text, + CASE + WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent') + THEN pls.ausbildungssemester::text + ELSE ''::text + END + ) AS semester", false); + $this->PrestudentModel->addSelect("COALESCE(v.verband::text, ''::text)"); + $this->PrestudentModel->addSelect("COALESCE(v.gruppe::text, ''::text)"); + + $this->addSelectPrioRel(); + + $this->addFilter($studiensemester_kurzbz); + + + $selectIncoming = "SELECT 1 + FROM public.tbl_prestudentstatus test + WHERE test.prestudent_id=tbl_prestudent.prestudent_id + AND test.status_kurzbz='Incoming' + AND test.studiensemester_kurzbz=v.studiensemester_kurzbz"; + + $this->PrestudentModel->db->where("EXISTS (" . $selectIncoming . ")", null, false); + + $result = $this->PrestudentModel->load(); + + + $data = $this->getDataOrTerminateWithError($result); + + $this->terminateWithSuccess($data); } /** From 5ba0007641ec0bd23f95a7944da07ba304a5b39c Mon Sep 17 00:00:00 2001 From: chfhtw Date: Wed, 20 Aug 2025 14:34:19 +0200 Subject: [PATCH 026/102] fix: correct relative priority calculation --- application/controllers/api/frontend/v1/stv/Students.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/controllers/api/frontend/v1/stv/Students.php b/application/controllers/api/frontend/v1/stv/Students.php index b4116ed0d..fe2167189 100644 --- a/application/controllers/api/frontend/v1/stv/Students.php +++ b/application/controllers/api/frontend/v1/stv/Students.php @@ -839,7 +839,7 @@ class Students extends FHCAPI_Controller $this->PrestudentModel->addSelect("( SELECT count(*) FROM ( - SELECT *, public.get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL) AS laststatus + SELECT *, public.get_rolle_prestudent(pss.prestudent_id, NULL) AS laststatus FROM public.tbl_prestudent pss JOIN public.tbl_prestudentstatus USING (prestudent_id) WHERE person_id = p.person_id From c9104749c54969682790843bd8ab3111827bd8c4 Mon Sep 17 00:00:00 2001 From: chfhtw Date: Wed, 20 Aug 2025 16:52:16 +0200 Subject: [PATCH 027/102] Faster Query for stv/students/getIncoming --- .../api/frontend/v1/stv/Students.php | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/application/controllers/api/frontend/v1/stv/Students.php b/application/controllers/api/frontend/v1/stv/Students.php index fe2167189..8dcdbcc5e 100644 --- a/application/controllers/api/frontend/v1/stv/Students.php +++ b/application/controllers/api/frontend/v1/stv/Students.php @@ -116,6 +116,17 @@ class Students extends FHCAPI_Controller $this->load->model('crm/Prestudent_model', 'PrestudentModel'); + $this->PrestudentModel->addJoin( + "( + SELECT prestudent_id + FROM public.tbl_prestudentstatus + WHERE status_kurzbz = 'Incoming' + AND studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . " + ) test", + "prestudent_id" + ); + + $this->prepareQuery($studiensemester_kurzbz); $this->PrestudentModel->addSelect("COALESCE( @@ -134,14 +145,6 @@ class Students extends FHCAPI_Controller $this->addFilter($studiensemester_kurzbz); - $selectIncoming = "SELECT 1 - FROM public.tbl_prestudentstatus test - WHERE test.prestudent_id=tbl_prestudent.prestudent_id - AND test.status_kurzbz='Incoming' - AND test.studiensemester_kurzbz=v.studiensemester_kurzbz"; - - $this->PrestudentModel->db->where("EXISTS (" . $selectIncoming . ")", null, false); - $result = $this->PrestudentModel->load(); From 7de81fab7de9cb8472b670b25fe3b5e302d10968 Mon Sep 17 00:00:00 2001 From: chfhtw Date: Wed, 20 Aug 2025 17:00:14 +0200 Subject: [PATCH 028/102] Implement: stv/students/getOutgoing --- .../api/frontend/v1/stv/Students.php | 56 ++++++++++++++++++- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/application/controllers/api/frontend/v1/stv/Students.php b/application/controllers/api/frontend/v1/stv/Students.php index 8dcdbcc5e..0e4a311c9 100644 --- a/application/controllers/api/frontend/v1/stv/Students.php +++ b/application/controllers/api/frontend/v1/stv/Students.php @@ -164,8 +164,60 @@ class Students extends FHCAPI_Controller $this->addMeta('ci_params', [ 'studiensemester_kurzbz' => $studiensemester_kurzbz ]); - // TODO(chris): IMPLEMENT! - $this->terminateWithSuccess([]); + + + $this->load->model('crm/Prestudent_model', 'PrestudentModel'); + + + $this->PrestudentModel->addJoin( + "( + SELECT prestudent_id + FROM bis.tbl_bisio bis + JOIN public.tbl_student USING (student_uid) + JOIN public.tbl_studiensemester stdsem ON ( + (bis.von >= stdsem.start AND bis.von <= stdsem.ende) + OR + (bis.bis >= stdsem.start AND bis.bis <= stdsem.ende) + OR + (bis.von <= stdsem.start AND bis.bis >= stdsem.ende) + ) + WHERE NOT EXISTS ( + SELECT 1 + FROM public.tbl_prestudentstatus + WHERE status_kurzbz = 'Incoming' + AND prestudent_id = tbl_student.prestudent_id + ) AND stdsem.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . " + GROUP BY prestudent_id + ) test", + "prestudent_id" + ); + + + $this->prepareQuery($studiensemester_kurzbz); + + + $this->PrestudentModel->addSelect("COALESCE( + v.semester::text, + CASE + WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent') + THEN pls.ausbildungssemester::text + ELSE ''::text + END + ) AS semester", false); + $this->PrestudentModel->addSelect("COALESCE(v.verband::text, ''::text)"); + $this->PrestudentModel->addSelect("COALESCE(v.gruppe::text, ''::text)"); + + $this->addSelectPrioRel(); + + $this->addFilter($studiensemester_kurzbz); + + + $result = $this->PrestudentModel->load(); + + + $data = $this->getDataOrTerminateWithError($result); + + $this->terminateWithSuccess($data); } /** From 608e2b5171aa236497369813226080d7b65ddf66 Mon Sep 17 00:00:00 2001 From: chfhtw Date: Thu, 21 Aug 2025 09:18:52 +0200 Subject: [PATCH 029/102] Implement: stv/students/getGemeinsamestudien --- .../api/frontend/v1/stv/Students.php | 42 ++++++++++++++++++- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/application/controllers/api/frontend/v1/stv/Students.php b/application/controllers/api/frontend/v1/stv/Students.php index 0e4a311c9..691e56b74 100644 --- a/application/controllers/api/frontend/v1/stv/Students.php +++ b/application/controllers/api/frontend/v1/stv/Students.php @@ -231,8 +231,46 @@ class Students extends FHCAPI_Controller $this->addMeta('ci_params', [ 'studiensemester_kurzbz' => $studiensemester_kurzbz ]); - // TODO(chris): IMPLEMENT! - $this->terminateWithSuccess([]); + + + $this->load->model('crm/Prestudent_model', 'PrestudentModel'); + + + $this->PrestudentModel->addJoin( + "( + SELECT prestudent_id + FROM bis.tbl_mobilitaet + WHERE studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . " + ) bis", + "prestudent_id" + ); + + + $this->prepareQuery($studiensemester_kurzbz); + + + $this->PrestudentModel->addSelect("COALESCE( + v.semester::text, + CASE + WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent') + THEN pls.ausbildungssemester::text + ELSE ''::text + END + ) AS semester", false); + $this->PrestudentModel->addSelect("COALESCE(v.verband::text, ''::text)"); + $this->PrestudentModel->addSelect("COALESCE(v.gruppe::text, ''::text)"); + + $this->addSelectPrioRel(); + + $this->addFilter($studiensemester_kurzbz); + + + $result = $this->PrestudentModel->load(); + + + $data = $this->getDataOrTerminateWithError($result); + + $this->terminateWithSuccess($data); } public function getPrestudents($studiengang_kz, From 9b8ac595c6783060354e6ae0e8bbd1e9719e54a4 Mon Sep 17 00:00:00 2001 From: chfhtw Date: Thu, 21 Aug 2025 12:59:24 +0200 Subject: [PATCH 030/102] Code Quality --- application/config/routes.php | 4 +- .../api/frontend/v1/stv/Students.php | 162 ++++++------------ 2 files changed, 56 insertions(+), 110 deletions(-) diff --git a/application/config/routes.php b/application/config/routes.php index 189400a72..58677e8ee 100644 --- a/application/config/routes.php +++ b/application/config/routes.php @@ -1,6 +1,6 @@ my_controller/my_method */ $route['default_controller'] = defined('CIS4') && CIS4 ? 'Cis4' : 'Vilesci'; -$route['translate_uri_dashes'] = FALSE; +$route['translate_uri_dashes'] = false; // Class name conflicts $route['api/v1/organisation/[S|s]tudiengang/(:any)'] = 'api/v1/organisation/studiengang2/$1'; diff --git a/application/controllers/api/frontend/v1/stv/Students.php b/application/controllers/api/frontend/v1/stv/Students.php index 691e56b74..04dc7a33a 100644 --- a/application/controllers/api/frontend/v1/stv/Students.php +++ b/application/controllers/api/frontend/v1/stv/Students.php @@ -51,7 +51,6 @@ class Students extends FHCAPI_Controller 'lehre' ) ); - } /** @@ -75,7 +74,7 @@ class Students extends FHCAPI_Controller * /(studiengang_kz)/(orgform)/prestudent/(studiensemester_kurzbz)/(filter) => getPrestudentsOrgform * /(studiengang_kz)/(orgform)/prestudent/(studiensemester_kurzbz)/(filter)/(otherfilter) => getPrestudentsOrgform * - * /(studiensemester_kurzbz)/(studiengang_kz)/(semester)/grp/(gruppe) => getStudentsSpezialguppe + * /(studiensemester_kurzbz)/(studiengang_kz)/(semester)/grp/(gruppe) => getStudentsSpezialgruppe * * /(studiensemester_kurzbz)/(studiengang_kz) => getStudents * /(studiensemester_kurzbz)/(studiengang_kz)/(semester) => getStudents @@ -273,10 +272,11 @@ class Students extends FHCAPI_Controller $this->terminateWithSuccess($data); } - public function getPrestudents($studiengang_kz, - $studiensemester_kurzbz = null, $filter = null - ) - { + public function getPrestudents( + $studiengang_kz, + $studiensemester_kurzbz = null, + $filter = null + ) { $this->addMeta('ci_method', __FUNCTION__); $this->addMeta('ci_params', array( 'studiengang_kz' => $studiengang_kz, @@ -287,10 +287,12 @@ class Students extends FHCAPI_Controller $this->fetchPrestudents($studiengang_kz, $studiensemester_kurzbz, $filter); } - public function getPrestudentsOrgform($studiengang_kz, $orgform_kurzbz, - $studiensemester_kurzbz = null, $filter = null - ) - { + public function getPrestudentsOrgform( + $studiengang_kz, + $orgform_kurzbz, + $studiensemester_kurzbz = null, + $filter = null + ) { $this->addMeta('ci_method', __FUNCTION__); $this->addMeta('ci_params', array( 'studiengang_kz' => $studiengang_kz, @@ -370,7 +372,7 @@ class Students extends FHCAPI_Controller $stg = $this->getDataOrTerminateWithError($result); if (!$stg) - $this->terminateWithValidationErrors(['' => 'Studiengang does not exist']); // TODO(chris): phrase + $this->terminateWithSuccess([]); $stg = current($stg); $where['ps.status_kurzbz'] = 'Interessent'; @@ -439,7 +441,10 @@ class Students extends FHCAPI_Controller break; default: if (!$studiensemester_kurzbz) { - // TODO(chris): this does not work with $orgform_kurzbz != null + /** NOTE(chris): + * show all prestudents in this stg who don't have a status + * $orgform_kurzbz does not change the results since orgform is stored in the status table + */ $where['ps.status_kurzbz'] = null; } else { $this->PrestudentModel->db->where_in('ps.status_kurzbz', [ @@ -453,20 +458,6 @@ class Students extends FHCAPI_Controller break; } - /* - $this->PrestudentModel->addJoin('public.tbl_studiengang stg', 'studiengang_kz', 'LEFT'); - $this->PrestudentModel->addJoin('public.tbl_person p', 'person_id'); - $this->PrestudentModel->addJoin('public.tbl_prestudentstatus pls', ' - pls.status_kurzbz=public.get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL) - AND pls.prestudent_id=tbl_prestudent.prestudent_id - AND pls.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, NULL) - AND pls.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, NULL)', 'LEFT'); - $this->PrestudentModel->addJoin('lehre.tbl_studienplan sp', 'studienplan_id', 'LEFT'); - $this->PrestudentModel->addJoin('public.tbl_prestudentstatus ps', ' - ps.status_kurzbz=public.get_rolle_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ') - AND ps.prestudent_id=tbl_prestudent.prestudent_id - AND ps.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ') - AND ps.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')', 'LEFT');*/ $this->prepareQuery($studiensemester_kurzbz); $this->PrestudentModel->addSelect(" @@ -488,10 +479,13 @@ class Students extends FHCAPI_Controller $this->terminateWithSuccess($data); } - public function getStudents($studiensemester_kurzbz, - $studiengang_kz, $semester = null, $verband = null, $gruppe = null - ) - { + public function getStudents( + $studiensemester_kurzbz, + $studiengang_kz, + $semester = null, + $verband = null, + $gruppe = null + ) { $this->addMeta('ci_method', __FUNCTION__); $this->addMeta('ci_params', array( 'studiensemester_kurzbz' => $studiensemester_kurzbz, @@ -504,10 +498,14 @@ class Students extends FHCAPI_Controller $this->fetchStudents($studiensemester_kurzbz, $studiengang_kz, $semester, $verband, $gruppe, null, null); } - public function getStudentsOrgform($studiensemester_kurzbz, - $studiengang_kz, $orgform_kurzbz, $semester = null, $verband = null, $gruppe = null - ) - { + public function getStudentsOrgform( + $studiensemester_kurzbz, + $studiengang_kz, + $orgform_kurzbz, + $semester = null, + $verband = null, + $gruppe = null + ) { $this->addMeta('ci_method', __FUNCTION__); $this->addMeta('ci_params', array( 'studiensemester_kurzbz' => $studiensemester_kurzbz, @@ -521,10 +519,12 @@ class Students extends FHCAPI_Controller $this->fetchStudents($studiensemester_kurzbz, $studiengang_kz, $semester, $verband, $gruppe, null, $orgform_kurzbz); } - public function getStudentsSpezialgruppe($studiensemester_kurzbz, - $studiengang_kz, $semester, $gruppe_kurzbz, - $orgform_kurzbz = null) - { + public function getStudentsSpezialgruppe( + $studiensemester_kurzbz, + $studiengang_kz, + $semester, + $gruppe_kurzbz + ) { $this->addMeta('ci_method', __FUNCTION__); $this->addMeta('ci_params', array( 'studiensemester_kurzbz' => $studiensemester_kurzbz, @@ -536,10 +536,13 @@ class Students extends FHCAPI_Controller $this->fetchStudents($studiensemester_kurzbz, $studiengang_kz, $semester, null, null, $gruppe_kurzbz, null); } - public function getStudentsOrgformSpezialgruppe($studiensemester_kurzbz, - $orgform_kurzbz, $studiengang_kz, $semester, $gruppe_kurzbz - ) - { + public function getStudentsOrgformSpezialgruppe( + $studiensemester_kurzbz, + $orgform_kurzbz, + $studiengang_kz, + $semester, + $gruppe_kurzbz + ) { $this->addMeta('ci_method', __FUNCTION__); $this->addMeta('ci_params', array( 'studiensemester_kurzbz' => $studiensemester_kurzbz, @@ -563,8 +566,15 @@ class Students extends FHCAPI_Controller * * @return void */ - protected function fetchStudents($studiensemester_kurzbz, $studiengang_kz, $semester = null, $verband = null, $gruppe = null, $gruppe_kurzbz = null, $orgform_kurzbz = null) - { + protected function fetchStudents( + $studiensemester_kurzbz, + $studiengang_kz, + $semester = null, + $verband = null, + $gruppe = null, + $gruppe_kurzbz = null, + $orgform_kurzbz = null + ) { $this->load->model('crm/Prestudent_model', 'PrestudentModel'); $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); @@ -573,21 +583,6 @@ class Students extends FHCAPI_Controller $this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester')); } - /* - $this->PrestudentModel->addJoin('public.tbl_studiengang stg', 'studiengang_kz', 'LEFT'); - $this->PrestudentModel->addJoin('public.tbl_person p', 'person_id'); - $this->PrestudentModel->addJoin('public.tbl_student s', 'prestudent_id'); - $this->PrestudentModel->addJoin('public.tbl_prestudentstatus pls', ' - pls.status_kurzbz=public.get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL) - AND pls.prestudent_id=tbl_prestudent.prestudent_id - AND pls.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, NULL) - AND pls.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, NULL)', 'LEFT'); - $this->PrestudentModel->addJoin('lehre.tbl_studienplan sp', 'studienplan_id', 'LEFT'); - $this->PrestudentModel->addJoin('public.tbl_benutzer b', 's.student_uid=b.uid'); - $this->PrestudentModel->addJoin( - 'public.tbl_studentlehrverband v', - 'v.student_uid=s.student_uid AND v.studiensemester_kurzbz=' . $this->PrestudentModel->escape($studiensemester_kurzbz) - );*/ $this->prepareQuery($studiensemester_kurzbz, ''); $this->PrestudentModel->addSelect('v.semester'); @@ -627,7 +622,6 @@ class Students extends FHCAPI_Controller false ); } - } $this->addFilter($studiensemester_kurzbz); @@ -661,22 +655,6 @@ class Students extends FHCAPI_Controller $this->load->model('crm/Prestudent_model', 'PrestudentModel'); - /* - $this->PrestudentModel->addJoin('public.tbl_studiengang stg', 'studiengang_kz', 'LEFT'); - $this->PrestudentModel->addJoin('public.tbl_person p', 'person_id'); - $this->PrestudentModel->addJoin('public.tbl_student s', 'prestudent_id', 'LEFT'); - $this->PrestudentModel->addJoin('public.tbl_prestudentstatus pls', ' - pls.status_kurzbz=public.get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL) - AND pls.prestudent_id=tbl_prestudent.prestudent_id - AND pls.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, NULL) - AND pls.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, NULL)', 'LEFT'); - $this->PrestudentModel->addJoin('lehre.tbl_studienplan sp', 'studienplan_id', 'LEFT'); - $this->PrestudentModel->addJoin('public.tbl_benutzer b', 's.student_uid=b.uid', 'LEFT'); - $this->PrestudentModel->addJoin( - 'public.tbl_studentlehrverband v', - 'v.student_uid=s.student_uid AND v.studiensemester_kurzbz=' . $this->PrestudentModel->escape($studiensemester_kurzbz), - 'LEFT' - );*/ $this->prepareQuery($studiensemester_kurzbz); $this->PrestudentModel->addSelect("COALESCE( @@ -725,22 +703,6 @@ class Students extends FHCAPI_Controller $this->load->model('crm/Prestudent_model', 'PrestudentModel'); - /* - $this->PrestudentModel->addJoin('public.tbl_studiengang stg', 'studiengang_kz', 'LEFT'); - $this->PrestudentModel->addJoin('public.tbl_person p', 'person_id'); - $this->PrestudentModel->addJoin('public.tbl_student s', 'prestudent_id'); - $this->PrestudentModel->addJoin('public.tbl_prestudentstatus pls', ' - pls.status_kurzbz=public.get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL) - AND pls.prestudent_id=tbl_prestudent.prestudent_id - AND pls.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, NULL) - AND pls.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, NULL)', 'LEFT'); - $this->PrestudentModel->addJoin('lehre.tbl_studienplan sp', 'studienplan_id', 'LEFT'); - $this->PrestudentModel->addJoin('public.tbl_benutzer b', 's.student_uid=b.uid'); - $this->PrestudentModel->addJoin( - 'public.tbl_studentlehrverband v', - 'v.student_uid=s.student_uid AND v.studiensemester_kurzbz=' . $this->PrestudentModel->escape($studiensemester_kurzbz), - 'LEFT' - );*/ $this->prepareQuery($studiensemester_kurzbz); $this->PrestudentModel->addSelect('v.semester'); @@ -785,15 +747,6 @@ class Students extends FHCAPI_Controller $this->load->model('crm/Prestudent_model', 'PrestudentModel'); - /* - $this->PrestudentModel->addJoin('public.tbl_person p', 'person_id'); - $this->PrestudentModel->addJoin('public.tbl_student s', 'prestudent_id'); - $this->PrestudentModel->addJoin('public.tbl_benutzer b', 's.student_uid=b.uid'); - $this->PrestudentModel->addJoin( - 'public.tbl_studentlehrverband v', - 'v.student_uid=s.student_uid AND v.studiensemester_kurzbz=' . $this->PrestudentModel->escape($studiensemester_kurzbz), - 'LEFT' - );*/ $this->prepareQuery($studiensemester_kurzbz); $this->PrestudentModel->addSelect('v.semester'); @@ -911,13 +864,6 @@ class Students extends FHCAPI_Controller $this->PrestudentModel->addSelect('mentor'); $this->PrestudentModel->addSelect('b.aktiv AS bnaktiv'); - /*$this->PrestudentModel->addSelect('tbl_prestudent.reihungstest_id'); - $this->PrestudentModel->addSelect('tbl_prestudent.anmeldungreihungstest'); - $this->PrestudentModel->addSelect('tbl_prestudent.gsstudientyp_kurzbz'); - $this->PrestudentModel->addSelect('tbl_prestudent.priorisierung'); - $this->PrestudentModel->addSelect('p.zugangscode'); - $this->PrestudentModel->addSelect('p.bpk');*/ - $this->PrestudentModel->db->where_in('tbl_prestudent.studiengang_kz', $this->allowedStgs); $this->PrestudentModel->addOrder('nachname'); From 3a5c4444cbce8262db135dbc6316d96b488f7e84 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Wed, 27 Aug 2025 14:11:03 +0200 Subject: [PATCH 031/102] 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 032/102] 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 033/102] 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 fc845ebf4e75c1ec26b32186eef8b8f02ab6ea37 Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Tue, 2 Sep 2025 15:04:45 +0200 Subject: [PATCH 034/102] Studierendenverwaltung Projektarbeit: separate saving of Projektarbeit and Betreuer, added action for editing Betreuer --- .../api/frontend/v1/stv/Projektarbeit.php | 6 +- .../api/frontend/v1/stv/Projektbetreuer.php | 65 +++--- .../education/Lehrveranstaltung_model.php | 57 ++++++ public/js/api/factory/stv/projektarbeit.js | 2 +- public/js/api/factory/stv/projektbetreuer.js | 4 +- .../Details/Projektarbeit/Details.js | 5 +- .../Details/Projektarbeit/Projektarbeit.js | 188 +++++++++--------- .../Details/Projektarbeit/Projektbetreuer.js | 82 +++----- system/phrasesupdate.php | 60 ++++-- 9 files changed, 248 insertions(+), 221 deletions(-) diff --git a/application/controllers/api/frontend/v1/stv/Projektarbeit.php b/application/controllers/api/frontend/v1/stv/Projektarbeit.php index e7d1af1f9..75478332f 100644 --- a/application/controllers/api/frontend/v1/stv/Projektarbeit.php +++ b/application/controllers/api/frontend/v1/stv/Projektarbeit.php @@ -310,13 +310,13 @@ class Projektarbeit extends FHCAPI_Controller 'projekttyp_kurzbz' => $formData['projekttyp_kurzbz'], 'firma_id' => $formData['firma_id'] ?? null, 'lehreinheit_id' => $formData['lehreinheit_id'], - 'beginn' => $formData['beginn'] ?? null, - 'ende' => $formData['ende'] ?? null, + 'beginn' => isset($formData['beginn']) && !isEmptyString($formData['beginn']) ? $formData['beginn'] : null, + 'ende' => isset($formData['ende']) && !isEmptyString($formData['ende']) ? $formData['ende'] : null, 'note' => $formData['note'] ?? null, 'final' => $formData['final'] ?? null, 'freigegeben' => $formData['freigegeben'] ?? null, 'anmerkung' => $formData['anmerkung'] ?? null, - 'gesperrtbis' => $formData['gesperrtbis'] ?? null + 'gesperrtbis' => isset($formData['gesperrtbis']) && !isEmptyString($formData['gesperrtbis']) ? $formData['gesperrtbis'] : null ]; } diff --git a/application/controllers/api/frontend/v1/stv/Projektbetreuer.php b/application/controllers/api/frontend/v1/stv/Projektbetreuer.php index 625a30c40..98567ecde 100644 --- a/application/controllers/api/frontend/v1/stv/Projektbetreuer.php +++ b/application/controllers/api/frontend/v1/stv/Projektbetreuer.php @@ -114,49 +114,40 @@ class Projektbetreuer extends FHCAPI_Controller if (!$this->ProjektarbeitModel->hasBerechtigungForProjektarbeit($projektarbeit_id)) return $this->_outputAuthError([$this->router->method => ['admin:rw', 'assistenz:rw']]); - $projektbetreuer = $this->input->post('projektbetreuerListe'); + $projektbetreuer = $this->input->post('projektbetreuer'); - if (!is_array($projektbetreuer)) - return $this->terminateWithError($this->p->t('projektarbeit', 'error_invalidProjektbetreuer'), self::ERROR_TYPE_GENERAL); - - foreach ($projektbetreuer as $pb) - { - if ($this->_validate($pb) == false) $this->terminateWithValidationErrors($this->form_validation->error_array()); - } + if ($this->_validate($projektbetreuer) == false) $this->terminateWithValidationErrors($this->form_validation->error_array()); $result = null; - foreach ($projektbetreuer as $pb) + $betreuer = [ + 'projektarbeit_id' => $projektarbeit_id, + 'person_id' => $projektbetreuer['person_id'], + 'note' => $projektbetreuer['note'], + 'stunden' => $projektbetreuer['stunden'], + 'stundensatz' => $projektbetreuer['stundensatz'], + 'betreuerart_kurzbz' => $projektbetreuer['betreuerart_kurzbz'] + ]; + + if (isset($projektbetreuer['person_id_old']) && isset($projektbetreuer['betreuerart_kurzbz_old'])) { - $betreuer = [ - 'projektarbeit_id' => $projektarbeit_id, - 'person_id' => $pb['person_id'], - 'note' => $pb['note'], - 'stunden' => $pb['stunden'], - 'stundensatz' => $pb['stundensatz'], - 'betreuerart_kurzbz' => $pb['betreuerart_kurzbz'] - ]; - - if (isset($pb['person_id_old']) && isset($pb['betreuerart_kurzbz_old'])) - { - $result = $this->ProjektbetreuerModel->update( - [ - 'projektarbeit_id' => $projektarbeit_id, - 'person_id' => $pb['person_id_old'], - 'betreuerart_kurzbz' => $pb['betreuerart_kurzbz_old'] - ], - array_merge($betreuer, ['updateamum' => date('c'), 'updatevon' => getAuthUID()]) - ); - } - else - { - $result = $this->ProjektbetreuerModel->insert( - array_merge($betreuer, ['insertamum' => date('c'), 'insertvon' => getAuthUID()]) - ); - } - - if (isError($result)) $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + $result = $this->ProjektbetreuerModel->update( + [ + 'projektarbeit_id' => $projektarbeit_id, + 'person_id' => $projektbetreuer['person_id_old'], + 'betreuerart_kurzbz' => $projektbetreuer['betreuerart_kurzbz_old'] + ], + array_merge($betreuer, ['updateamum' => date('c'), 'updatevon' => getAuthUID()]) + ); } + else + { + $result = $this->ProjektbetreuerModel->insert( + array_merge($betreuer, ['insertamum' => date('c'), 'insertvon' => getAuthUID()]) + ); + } + + if (isError($result)) $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); $this->terminateWithSuccess(hasData($result) ? getData($result) : []); } diff --git a/application/models/education/Lehrveranstaltung_model.php b/application/models/education/Lehrveranstaltung_model.php index 1b3b9e9d7..7347cf2ca 100644 --- a/application/models/education/Lehrveranstaltung_model.php +++ b/application/models/education/Lehrveranstaltung_model.php @@ -1255,4 +1255,61 @@ class Lehrveranstaltung_model extends DB_Model return $this->execReadOnlyQuery($qry, $params); } + + /** + * Gets Lehrveranstaltungen for a student, as needed for a Projektarbeit. + * @param student_uid + * @param studiengang_kz optional, all Lvs of this Studiengang will be included + * @param additional_lehrveranstaltung_id optional, this lv will be added to result + * @return object success or error + */ + public function getLvsForProjektarbeit($student_uid, $studiengang_kz = null, $additional_lehrveranstaltung_id = null) + { + $params = array($student_uid, $student_uid); + + $qry = " + SELECT * + FROM + lehre.tbl_lehrveranstaltung + WHERE + ( + lehrveranstaltung_id IN ( + + SELECT + lehrveranstaltung_id + FROM + campus.vw_student_lehrveranstaltung + WHERE + uid=? + + UNION + + SELECT + lehrveranstaltung_id + FROM + lehre.tbl_zeugnisnote + WHERE + student_uid=? + )"; + + if (isset($studiengang_kz)) + { + $params[] = $studiengang_kz; + $qry .= " OR (studiengang_kz = ? AND semester IS NOT NULL)"; + } + + if (isset($additional_lehrveranstaltung_id)) + { + $params[] = $additional_lehrveranstaltung_id; + $qry .= " OR lehrveranstaltung_id = ?"; + } + + $qry .= " + ) + AND projektarbeit = TRUE + ORDER BY + semester, bezeichnung"; + + return $this->execQuery($qry, $params); + } } diff --git a/public/js/api/factory/stv/projektarbeit.js b/public/js/api/factory/stv/projektarbeit.js index 243383de0..4412f1842 100644 --- a/public/js/api/factory/stv/projektarbeit.js +++ b/public/js/api/factory/stv/projektarbeit.js @@ -77,4 +77,4 @@ export default { params: { projektarbeit_id } }; } -}; \ No newline at end of file +}; diff --git a/public/js/api/factory/stv/projektbetreuer.js b/public/js/api/factory/stv/projektbetreuer.js index 211eaaca8..4ea7bc782 100644 --- a/public/js/api/factory/stv/projektbetreuer.js +++ b/public/js/api/factory/stv/projektbetreuer.js @@ -42,11 +42,11 @@ export default { url: 'api/frontend/v1/stv/projektbetreuer/getNoten' }; }, - saveProjektbetreuer(projektarbeit_id, projektbetreuerListe) { + saveProjektbetreuer(projektarbeit_id, projektbetreuer) { return { method: 'post', url: 'api/frontend/v1/stv/projektbetreuer/saveProjektbetreuer', - params: { projektarbeit_id, projektbetreuerListe } + params: { projektarbeit_id, projektbetreuer } }; }, deleteProjektbetreuer(projektarbeit_id, person_id, betreuerart_kurzbz) { diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Details.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Details.js index 2fdc9d996..b7aea7169 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Details.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Details.js @@ -15,10 +15,6 @@ export default { defaultSemester: { from: 'defaultSemester' } - //~ config: { - //~ from: 'config', - //~ required: true - //~ } }, computed: { // prepared Lehreinheiten (with compound Bezeichnung) @@ -169,6 +165,7 @@ export default { }, loadProjektarbeit(projektarbeit_id) { + this.resetForm(); return this.$api .call(ApiStvProjektarbeit.loadProjektarbeit(projektarbeit_id)) .then(result => { diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektarbeit.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektarbeit.js index 76953867f..952c47860 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektarbeit.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektarbeit.js @@ -36,7 +36,63 @@ export default { }, data() { return { - tabulatorOptions: { + tabulatorEvents: [ + { + event: 'dataLoaded', + handler: data => this.tabulatorData = data.map(item => { + item.actionDiv = document.createElement('div'); + return item; + }), + }, + { + event: 'tableBuilt', + handler: async() => { + await this.$p.loadCategory(['global', 'person', 'stv', 'ui', 'projektarbeit']); + + let cm = this.$refs.table.tabulator.columnManager; + + cm.getColumnByField('projekttyp_kurzbz').component.updateDefinition({ + title: this.$p.t('projektarbeit', 'typ') + }); + cm.getColumnByField('titel').component.updateDefinition({ + title: this.$p.t('projektarbeit', 'titel') + }); + cm.getColumnByField('beginn').component.updateDefinition({ + title: this.$p.t('projektarbeit', 'beginn') + }); + cm.getColumnByField('ende').component.updateDefinition({ + title: this.$p.t('projektarbeit', 'ende') + }); + cm.getColumnByField('freigegeben').component.updateDefinition({ + title: this.$p.t('projektarbeit', 'freigegeben') + }); + cm.getColumnByField('gesperrtbis').component.updateDefinition({ + title: this.$p.t('projektarbeit', 'gesperrtBis') + }); + cm.getColumnByField('themenbereich').component.updateDefinition({ + title: this.$p.t('projektarbeit', 'themenbereich') + }); + cm.getColumnByField('anmerkung').component.updateDefinition({ + title: this.$p.t('projektarbeit', 'anmerkung') + }); + cm.getColumnByField('firma_id').component.updateDefinition({ + title: this.$p.t('projektarbeit', 'firmaId') + }); + } + }, + ], + tabulatorData: [], + //lastSelected: null, + editedProjektarbeit: null, + statusNew: true, + studiensemester_kurzbz: null, + lehrveranstaltung_id: null, + activeTab: 'details' + } + }, + computed: { + tabulatorOptions() { + const options = { ajaxURL: 'dummy', ajaxRequestFunc: () => this.$api.call(ApiStvProjektarbeit.getProjektarbeit(this.student.uid)), ajaxResponse: (url, params, response) => response.data, @@ -153,9 +209,19 @@ export default { button.title = this.$p.t('ui', 'bearbeiten'); button.addEventListener('click', (event) => { let data = cell.getData(); - this.actionEditProjektarbeit( - data.projektarbeit_id, data.studiensemester_kurzbz, data.lehrveranstaltung_id, data.projekttyp_kurzbz - ); + this.editedProjektarbeit = data; + this.actionEditProjektarbeit(); + }); + container.append(button); + + button = document.createElement('button'); + button.className = 'btn btn-outline-secondary btn-action'; + button.innerHTML = ''; + button.title = this.$p.t('projektarbeit', 'betreuerBearbeiten'); + button.addEventListener('click', (event) => { + let data = cell.getData(); + this.editedProjektarbeit = data; + this.actionEditBetreuer(); }); container.append(button); @@ -184,76 +250,27 @@ export default { columns: true, //persist column layout }, persistenceID: 'stv-details-projektarbeit' - }, - tabulatorEvents: [ - { - event: 'rowSelectionChanged', - handler: this.rowSelectionChanged - }, - { - event: 'dataLoaded', - handler: data => this.tabulatorData = data.map(item => { - item.actionDiv = document.createElement('div'); - return item; - }), - }, - { - event: 'tableBuilt', - handler: async() => { - await this.$p.loadCategory(['global', 'person', 'stv', 'ui', 'projektarbeit']); - - let cm = this.$refs.table.tabulator.columnManager; - - cm.getColumnByField('projekttyp_kurzbz').component.updateDefinition({ - title: this.$p.t('projektarbeit', 'typ') - }); - cm.getColumnByField('titel').component.updateDefinition({ - title: this.$p.t('projektarbeit', 'titel') - }); - cm.getColumnByField('beginn').component.updateDefinition({ - title: this.$p.t('projektarbeit', 'beginn') - }); - cm.getColumnByField('ende').component.updateDefinition({ - title: this.$p.t('projektarbeit', 'ende') - }); - cm.getColumnByField('freigegeben').component.updateDefinition({ - title: this.$p.t('projektarbeit', 'freigegeben') - }); - cm.getColumnByField('gesperrtbis').component.updateDefinition({ - title: this.$p.t('projektarbeit', 'gesperrtBis') - }); - cm.getColumnByField('themenbereich').component.updateDefinition({ - title: this.$p.t('projektarbeit', 'themenbereich') - }); - cm.getColumnByField('anmerkung').component.updateDefinition({ - title: this.$p.t('projektarbeit', 'anmerkung') - }); - cm.getColumnByField('firma_id').component.updateDefinition({ - title: this.$p.t('projektarbeit', 'firmaId') - }); - } - }, - ], - tabulatorData: [], - lastSelected: null, - statusNew: true, - studiensemester_kurzbz: null, - lehrveranstaltung_id: null + } + return options; } }, methods: { actionNewProjektarbeit() { this.statusNew = true; - this.$refs.projektarbeitDetails.resetForm(); this.$refs.projektarbeitDetails.getFormData(this.statusNew); - this.$refs.projektbetreuer.getData(); this.$refs.projektarbeitModal.show(); }, - actionEditProjektarbeit(projektarbeit_id, studiensemester_kurzbz, lehrveranstaltung_id, projekttyp_kurzbz) { + actionEditProjektarbeit() { this.statusNew = false; - this.$refs.projektarbeitDetails.getFormData(this.statusNew, studiensemester_kurzbz, lehrveranstaltung_id); - this.$refs.projektarbeitDetails.loadProjektarbeit(projektarbeit_id); - this.$refs.projektbetreuer.getData(projektarbeit_id, studiensemester_kurzbz, projekttyp_kurzbz); + this.toggleMenu('details'); + this.$refs.projektarbeitDetails.getFormData(this.statusNew, this.editedProjektarbeit.studiensemester_kurzbz, this.editedProjektarbeit.lehrveranstaltung_id); + this.$refs.projektarbeitDetails.loadProjektarbeit(this.editedProjektarbeit.projektarbeit_id); + this.$refs.projektarbeitModal.show(); + }, + actionEditBetreuer() { + this.statusNew = false; + this.toggleMenu('betreuer'); + this.$refs.projektbetreuer.getData(this.editedProjektarbeit.projektarbeit_id, this.editedProjektarbeit.studiensemester_kurzbz, this.editedProjektarbeit.projekttyp_kurzbz); this.$refs.projektarbeitModal.show(); }, actionDeleteProjektarbeit(projektarbeit_id) { @@ -266,34 +283,14 @@ export default { .catch(this.$fhcAlert.handleSystemError); }, addNewProjektarbeit() { - this.$refs.projektbetreuer.validateProjektbetreuer() - .then(() => { - return this.$refs.projektarbeitDetails.addNewProjektarbeit(); - }) - .then((result) => { - const projektarbeit_id = result.data; - - if (!isNaN(projektarbeit_id)) { - return this.$refs.projektbetreuer.saveProjektbetreuer(projektarbeit_id); - } - }) + this.$refs.projektarbeitDetails.addNewProjektarbeit() .then((result) => { this.projektarbeitSaved(); }) .catch(this.$fhcAlert.handleSystemError); }, updateProjektarbeit() { - this.$refs.projektbetreuer.validateProjektbetreuer() - .then(() => { - return this.$refs.projektarbeitDetails.updateProjektarbeit(); - }) - .then((result) => { - const projektarbeit_id = result.data; - - if (!isNaN(projektarbeit_id)) { - return this.$refs.projektbetreuer.saveProjektbetreuer(projektarbeit_id); - } - }) + this.$refs.projektarbeitDetails.updateProjektarbeit() .then((result) => { this.projektarbeitSaved(); }) @@ -314,10 +311,6 @@ export default { this.reload(); this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); this.hideModal('projektarbeitModal'); - this.$refs.projektarbeitDetails.resetForm(); - }, - rowSelectionChanged(data) { - this.lastSelected = data.length > 0 ? data[0] : null; }, setDefaultStunden(projekttyp_kurzbz) { this.$refs.projektbetreuer.setDefaultStunden(projekttyp_kurzbz); @@ -327,6 +320,9 @@ export default { }, reload() { this.$refs.table.reloadTable(); + }, + toggleMenu(tabId) { + this.activeTab = tabId; } }, template: ` @@ -357,16 +353,16 @@ export default {
-
+
@@ -375,7 +371,7 @@ export default {
-
+
@@ -387,7 +383,7 @@ export default { diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js index 183c81bc0..1eb19e3fd 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js @@ -132,6 +132,10 @@ export default { event: 'tableBuilt', handler: async() => { await this.$p.loadCategory(['global', 'person', 'stv', 'projektarbeit', 'ui']); + + // Force layout recalculation for handling overflow text + this.$refs.projektbetreuerTable.tabulator.redraw(true); + } }, { @@ -193,7 +197,7 @@ export default { if (idx >= 0) { // if betreuer found betreuer = projektbetreuerListe[idx]; - // set currently edited betreuera + // set currently edited betreuer this.formData = betreuer; // set download link @@ -259,46 +263,31 @@ export default { if (projektarbeit_id) { this.projektarbeit_id = projektarbeit_id; - this.$api - .call(ApiStvProjektbetreuer.getProjektbetreuer(projektarbeit_id)) - .then(result => { - this.$refs.projektbetreuerTable.tabulator.setData(this.addIds(result.data)); - this.resetForm(); - }) - .catch(this.$fhcAlert.handleSystemError); + this.getProjektbetreuer(); } else { this.$refs.projektbetreuerTable.tabulator.setData([]); this.resetForm(); } }, - // confirming Betreuer means adding/updating him in list (but not yet saving in db) - confirmProjektbetreuer() { - if (!this.betreuerFormOpened) return; - - if (typeof this.formData.betreuer_id == 'undefined') { - this.formData.betreuer_id = this.getNewBetreuerId(); - this.$refs.projektbetreuerTable.tabulator.addData(this.addAutoCompleteBetreuerToFormData(this.formData)); - } else { - this.$refs.projektbetreuerTable.tabulator.updateData([this.formData]); - } - - this.resetModes(); - }, - confirmProjektbetreuerAfterValidation() { - //if (!this.formDataModified()) return; - - this.validateProjektbetreuer() + getProjektbetreuer() { + this.$api + .call(ApiStvProjektbetreuer.getProjektbetreuer(this.projektarbeit_id)) .then(result => { - this.confirmProjektbetreuer(); + this.$refs.projektbetreuerTable.tabulator.replaceData(this.addIds(result.data)); this.resetForm(); }) .catch(this.$fhcAlert.handleSystemError); }, - saveProjektbetreuer(projektarbeit_id) { - this.confirmProjektbetreuer(); - return this.$refs.formProjektbetreuer.call( - ApiStvProjektbetreuer.saveProjektbetreuer(projektarbeit_id, this.$refs.projektbetreuerTable.tabulator.getData()) - ); + saveProjektbetreuer() { + this.$refs.formProjektbetreuer.call( + ApiStvProjektbetreuer.saveProjektbetreuer(this.projektarbeit_id, this.getFormDataWithBetreuer()) + ) + .then(result => { + this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); + this.getProjektbetreuer(); + this.resetModes(); + }) + .catch(this.$fhcAlert.handleSystemError); }, searchBetreuer(event) { if (this.abortController.betreuer) { @@ -312,16 +301,6 @@ export default { this.filteredBetreuer = result.data; }); }, - // validate betreuer for data - validateProjektbetreuer() { - let alleBetreuer = this.$refs.projektbetreuerTable.tabulator.getData(); - - if (this.betreuerFormOpened) { - alleBetreuer.push(this.addAutoCompleteBetreuerToFormData(this.formData)); - } - - return this.$refs.formProjektbetreuer.call(ApiStvProjektbetreuer.validateProjektbetreuer(alleBetreuer)); - }, resetForm() { this.formData = this.getDefaultFormData(); if (this.beurteilungDownloadLink !== null) this.beurteilungDownloadLink = ''; @@ -360,7 +339,7 @@ export default { return betreuerListe; }, // add the betreuer selected in automomplete to betreuer liste - addAutoCompleteBetreuerToFormData() { + getFormDataWithBetreuer() { let preparedFormData = this.formData; preparedFormData.projektarbeit_id = this.projektarbeit_id; @@ -385,16 +364,6 @@ export default { // if form data has not already been modified by user, set the default stunden if (!this.formDataModified()) this.formData.stunden = this.getDefaultStunden(projekttyp_kurzbz); }, - // get a new betreuer id (max + 1) - getNewBetreuerId() { - let max = 0; - - for (const betreuer of this.$refs.projektbetreuerTable.tabulator.getData()) { - if (betreuer.betreuer_id > max) max = betreuer.betreuer_id; - } - - return max + 1; - }, // check if form data has been modified since initial data has been captured formDataModified() { if (this.autocompleteSelectedBetreuer != null) return true; @@ -406,9 +375,6 @@ export default { return false; }, - reload() { - this.$refs.projektbetreuerTable.reloadTable(); - }, actionNewPerson() { this.$refs.newPersonModal.reset(); this.$refs.newPersonModal.open(); @@ -422,7 +388,7 @@ export default { this.$api .call(ApiStvProjektbetreuer.getPerson(result.person_id)) .then(response => { - // set the new person in autocomplete field + // set the new person in Betreuer autocomplete field this.autocompleteSelectedBetreuer = response.data; }) .catch(this.$fhcAlert.handleSystemError) @@ -541,8 +507,8 @@ export default { - \n\t\t\t\t
\n
\n\t\t\n ',watch:{"searchsettings.searchstr":function(t){this.searchoptions.origin&&sessionStorage.setItem(`${this.searchoptions.origin}_searchstr`,t)},"searchsettings.types"(t){Array.isArray(t)&&0===t.length&&(this.searchsettings.types=[...this.types]),Array.isArray(t)&&this.searchoptions.origin&&localStorage.setItem(`${this.searchoptions.origin}_searchtypes`,JSON.stringify(t)),this.search()}},mounted(){this.settingsDropdown=new bootstrap.Collapse(this.$refs.settings,{toggle:!1}),this.searchoptions.origin||console.warn("No origin defined in the searchoptions for the searchbar, please define the origin property in the searchbaroptions to allow reliable storage of searchstr and searchtypes accross applications.")},updated(){this.showresult&&Vue.nextTick(()=>{this.calcSearchResultHeight()})},methods:{clearInput(){this.searchsettings.searchstr="",this.hideresult(),this.$refs.input.focus()},getInitiallySelectedTypes(){let t=!1;if(this.searchoptions.origin){let e=localStorage.getItem(`${this.searchoptions.origin}_searchtypes`);e&&(t=JSON.parse(e))}return t||(this.searchoptions.types?Array.isArray(this.searchoptions.types)?[...this.searchoptions.types]:Object.keys(this.searchoptions.types):[])},getSearchStr:function(){return this.searchoptions.origin?sessionStorage.getItem(`${this.searchoptions.origin}_searchstr`)??"":""},checkSettingsVisibility:function(t){this.$refs.settings.contains(t.target)||this.settingsDropdown.hide()},handleShowSettings:function(){document.addEventListener("click",this.checkSettingsVisibility)},handleHideSettings:function(){document.removeEventListener("click",this.checkSettingsVisibility)},calcSearchResultHeight:function(){const t=this.$refs.results.getBoundingClientRect();t.height>0&&t.height<.8*window.innerHeight?this.$refs.result.style.height=Math.ceil(t.height+16)+"px":this.$refs.result.style.height=Math.floor(.8*window.innerHeight)+"px"},calcSearchResultExtent:function(){if(this.showresult){if(void 0===this.searchoptions?.calcheightonly||!1===this.searchoptions.calcheightonly){var t=this.$refs.searchbox.getBoundingClientRect();this.$refs.result.style.top=Math.floor(t.bottom+3)+"px",this.$refs.result.style.right=Math.floor(t.right)+"px",this.$refs.result.style.width=Math.floor(t.width)+"px"}this.calcSearchResultHeight()}},search:function(){null!==this.searchtimer&&clearTimeout(this.searchtimer),this.abortController&&(this.abortController.abort(),this.abortController=null),this.searchsettings.searchstr.length>=2?(this.calcSearchResultExtent(),this.searchtimer=setTimeout(this.callsearchapi,500)):this.showresult=!1},callsearchapi:function(){if(this.error=null,this.searchresult.splice(0,this.searchresult.length),this.searching=!0,this.showsearchresult(),0===this.searchsettings.types.length)return this.error=this.$p.t("search/error_missing_type"),void(this.searching=!1);this.abortController&&this.abortController.abort(),this.abortController=new AbortController,this.searchfunction(this.searchsettings,{timeout:5e4,signal:this.abortController.signal}).then(t=>{if(t.data){let e=t.data.map(t=>t.data?{...t,...JSON.parse(t.data)}:t);if(this.lastQuery=t.meta.searchstring,this.searchoptions.mergeResults){let t=0,r=[],n="merged-",s="";switch(this.searchoptions.mergeResults){case"student":r=["student","prestudent"],n+=this.searchoptions.mergeResults,s="uid";break;case"person":r=["person","employee","student","prestudent"],n+=this.searchoptions.mergeResults,s="person_id"}r.length&&(e=Object.values(e.reduce((e,a)=>(r.includes(a.renderer)?null===a[s]?e["nomerge"+t++]=a:void 0===e[a[s]]?e[a[s]]={rank:a.rank,renderer:n,type:n,list:[a]}:(e[a[s]].list.push(a),a.rank>e[a[s]].rank&&(e[a[s]].rank=a.rank)):e["nomerge"+t++]=a,e),{})).sort((t,e)=>e.rank-t.rank))}this.searchresult=e,this.searchmode=t.meta.mode}else this.error=this.$p.t("search/error_general");this.searching=!1,this.retry=0}).catch(t=>"ERR_CANCELED"==t.code?this.retry=0:"ECONNABORTED"==t.code&&this.retry?(this.retry--,this.callsearchapi()):(this.error=this.$p.t("search/error_general",t),this.searching=!1,void(this.retry=0)))},refreshsearch:function(){this.search(),this.togglesettings()},hideresult:function(){this.showresult=!1,window.removeEventListener("resize",this.calcSearchResultExtent)},showsearchresult:function(){this.searchsettings.searchstr.length>=2&&(this.showresult=!0,window.addEventListener("resize",this.calcSearchResultExtent),this.calcSearchResultExtent())},searchfocusin:function(t){t.preventDefault(),t.stopPropagation(),null!==this.hidetimer&&clearTimeout(this.hidetimer),this.searchsettings.searchstr.length>=2&&0===this.searchresult.length&&this.search()},searchfocusout:function(t){t.preventDefault(),t.stopPropagation(),this.hidetimer=setTimeout(this.hideresult,100)},dash2camelCase:t=>t.replace(/-([a-z])/g,t=>t[1].toUpperCase()),isValidRenderer(t){const e=this.dash2camelCase(t);return Object.keys(this.$.components).includes(e)},getActions(t){let e=this.searchoptions.actions[this.dash2camelCase(t.renderer)];return e||this.searchoptions.actions[t.type]}}},m={getMenu:()=>({method:"get",url:"/api/frontend/v1/CisMenu/getMenu"})},b={components:{CisMenuEntry:{name:"CisMenuEntry",props:{entry:Object,level:{type:Number,default:1},activeContent:[String,Number],highestMatchingUrlCount:Number},data:()=>({collapse:null,urlCount:0}),inject:["makeParentContentActive","setActiveEntry","addUrlCount"],watch:{highestMatchingUrlCount:function(t){null==this.activeContent&&t==this.urlCount&&this.setActiveEntry(this.entry.content_id)},activeContent:function(t){t==this.entry.content_id?this.entry.menu_open||(this.entry.menu_open=!0):this.searchRecursiveChild(this.entry,"content_id",t)?this.entry.menu_open=!0:this.entry.menu_open=!1},"entry.menu_open":function(t,e){t?this.collapse&&this.collapse.show():(this.collapse&&this.collapse.hide(),this.activeContent==this.entry.content_id&&this.makeParentContentActive(this.entry.content_id))}},computed:{active:function(){return!!this.entry.menu_open||!!this.activeContent&&this.activeContent==this.entry.content_id},link(){if("redirect"==this.entry.template_kurzbz){if(!this.entry.content)return"";let t=(new DOMParser).parseFromString(this.entry.content,"text/xml").getElementsByTagName("url")[0];if(!t)return"";if(t=t.childNodes[0].nodeValue+"",t.includes("../cms/news.php")){let e=new RegExp("^../cms/news.php");t=t.replace(e,FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/CisVue/Cms/news")}else{if(t.includes("../cms/content.php?")){let e=new RegExp("^../cms/content.php\\?content_id=([0-9]+)").exec(t);return FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/CisVue/Cms/content/"+e[1]}if(t.includes("../index.ci.php")){let e=new RegExp("^../index.ci.php");t=t.replace(e,FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router)}else if(t.includes("../")){let e=new RegExp("^../");t=t.replace(e,FHC_JS_DATA_STORAGE_OBJECT.app_root)}}return t}return FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/CisVue/Cms/content/"+this.entry.content_id},hasFullLink(){return this.link.startsWith(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router)},target(){if("redirect"==this.entry.template_kurzbz){if(!this.entry.content)return"";let t=(new DOMParser).parseFromString(this.entry.content,"text/xml").getElementsByTagName("target")[0];return t?(t=t.childNodes[0].nodeValue+"","content"!=t&&"_self"!=t||(t=""),t):""}return""},hasChilds(){return this.entry.childs&&0!==this.entry.childs.length}},methods:{getUrlMatchPoints(t,e){let r=e.split("/"),n=t.href.split("/"),s=0;for(let t of n)for(let e of r)t==e&&s++;this.urlCount=s,this.addUrlCount(s)},checkActiveUrl(t){this.getUrlMatchPoints(t,this.link);let e=new RegExp("%20","gi"),r=new RegExp("^#"),n=t.hash;n=n.replace(e," ").replace(r,""),n!=this.entry.titel&&t.href!=this.link||this.setActiveEntry(this.entry.content_id)},searchRecursiveChild(t,e,r){"object"==typeof t.childs&&!Array.isArray(t.childs)&&Object.entries(t.childs).length>0&&(t.childs=Object.values(t.childs));for(let n of t.childs){if(n[e]==r)return!0;if((n.childs instanceof Array&&n.childs.length>0||Object.values(n.childs).length>0)&&this.searchRecursiveChild(n,e,r))return!0}return!1},toggleCollapse(t){this.active?this.makeParentContentActive(this.entry.content_id):this.setActiveEntry(this.entry.content_id)}},mounted(){this.$refs.children&&(this.entry.menu_open&&(this.$refs.children.className+=" show"),this.collapse=new bootstrap.Collapse(this.$refs.children,{toggle:!1})),this.checkActiveUrl(new URL(window.location.href))},template:'\n\t
\n INCLUDE\n
\n '},FhcSearchbar:v,CisSprachen:{data:()=>({allActiveLanguages:FHC_JS_DATA_STORAGE_OBJECT.server_languages}),emits:["languageChanged"],methods:{changeLanguage:function(t){if(this.allActiveLanguages.some(e=>e.sprache===t)){const e=document.querySelector("[cis4Reload]");this.$p.setLanguage(t).then(t=>t.data).then(r=>{e?window.location.reload():this.$emit("languageChanged",t)})}}},template:'\n\t
\n\t\t
\n\t\t\t\n\t\t
\n\t
\n\t'},ThemeSwitch:{data:()=>({theme:null}),methods:{switchTheme(t){this.theme=t,this.$theme.switchTheme(this.theme)}},computed:{nextTheme(){return this.$theme.theme_modes[(this.$theme.theme_modes.indexOf(this.theme)+1)%this.$theme.theme_modes.length]}},created(){this.theme=localStorage.getItem("theme"),this.theme&&this.$theme.theme_modes.includes(this.theme)||(this.theme=this.$theme.theme_modes[0])},template:'\n\n\t\n\t'}},props:{rootUrl:String,logoUrl:String,avatarUrl:String,logoutUrl:String,selectedtypes:Array,searchbaroptions:Object,searchfunction:Function},data:()=>({entries:[],activeEntry:null,url:null,urlMatchRankings:[],navUserDropdown:null,menuOpen:!0}),provide(){return{setActiveEntry:this.setActiveEntry,addUrlCount:this.addUrlCount,makeParentContentActive:this.makeParentContentActive}},computed:{menuCollapseAriaLabel(){return this.menuOpen?this.$p.t("global","collapseMenu"):this.$p.t("global","extendMenu")},highestMatchingUrlCount(){let t=Math.max(...this.urlMatchRankings);return this.urlMatchRankings.length>0?this.urlMatchRankings.filter(e=>e==t).length>1?null:t:null},site_url:()=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router},methods:{fetchMenu(){return this.$api.call(m.getMenu()).then(t=>t.data).then(t=>{this.entries=t})},checkSettingsVisibility:function(t){this.$refs.navUserDropdown.contains(t.target)||this.navUserDropdown.hide()},handleShowNavUser(){document.addEventListener("click",this.checkSettingsVisibility)},handleHideNavUser(){document.removeEventListener("click",this.checkSettingsVisibility)},makeParentContentActive(t,e=this.entries,r=null){if(e){"object"==typeof e&&!Array.isArray(e)&&Object.entries(e).length>0&&(e=Object.values(e));for(let n of e)n.content_id==t&&(this.activeEntry=r),this.makeParentContentActive(t,n.childs,n.content_id)}},addUrlCount(t){this.urlMatchRankings.push(t)},setActiveEntry(t){this.activeEntry=t}},created(){this.fetchMenu()},mounted(){this.$p.loadCategory(["ui","global","profilUpdate"]),this.navUserDropdown=new bootstrap.Collapse(this.$refs.navUserDropdown,{toggle:!1})},template:'\n\t\n\t\n \n\t\n '},_={search(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/search",t,e)},searchAdvanced(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/searchAdvanced",t,e)},searchdummy(t){return this.$fhcApi.post("public/js/apps/api/dummyapi.php/Search",t)}},A={loadCategory(t){return this.$fhcApi.get("/api/frontend/v1/phrasen/loadModule/"+t)},setLanguage(t,e){const r={categories:t,language:e};return this.$fhcApi.post("/api/frontend/v1/phrasen/setLanguage",r)},getLanguage(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getLanguage",{})},getActiveDbLanguages(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getAllLanguages",{})}},y={getHeader(t){return this.$fhcApi.get("/api/frontend/v1/navigation/header",{navigation_page:t})},getMenu:function(t){return this.$fhcApi.get("/api/frontend/v1/navigation/menu",{navigation_page:t})}},$={saveCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/saveCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,customFilterName:t.customFilterName})},removeCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},applyFilterFields(t){return this.$fhcApi.post("/api/frontend/v1/filter/applyFilterFields",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterFields:t.filterFields})},addFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/addFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},removeFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},getFilterById(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},getFilter(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType})}},S={abmeldung:{getDetails(t,e){const r="/api/frontend/v1/studstatus/abmeldung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(r)},create(t,e,r){return this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/createAntrag",{studiensemester:t,prestudent_id:e,grund:r},{errorHandling:"strict"})},cancel(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t.studierendenantrag_id},{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t})}},unterbrechung:{getDetails(t,e){const r="/api/frontend/v1/studstatus/unterbrechung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(r)},create(t,e,r,n,s){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/createAntrag",{studiensemester:t,prestudent_id:e,grund:r,datum_wiedereinstieg:n,attachment:s},{errorHandling:"strict"})},cancel(t){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/cancelAntrag",{antrag_id:t},{errorHandling:"strict"})}},wiederholung:{getDetails(t){const e="/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/"+t;return this.$fhcApi.get(e)},getLvs(t){const e="/api/frontend/v1/studstatus/wiederholung/getLvs/"+t;return this.$fhcApi.get(e)},create(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/createAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},cancel(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/cancelAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},saveLvs(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/saveLvs",{forbiddenLvs:t,mandatoryLvs:e})}},leitung:{getStgs(){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getActiveStgs")},getAntraege(t,e,r){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getAntraege/"+t).then(t=>t.data)},getHistory(t){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getHistory/"+t)},getPrestudents(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/getPrestudents",{query:t},{signal:e,timeout:3e4})},approve(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t)},reject(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t)},reopen(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t)},pause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t)},unpause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t)},object(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t)},approveObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t)},denyObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t)}}},C={getView:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getView/${t}`,{})},fotoSperre:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/fotoSperre/${t}`,{})},isStudent:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/isStudent",{uid:t})},isMitarbeiter:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/isMitarbeiter/${t}`,{})},getZustellAdresse:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellAdresse",{})},getZustellKontakt:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellKontakt",{})},getGemeinden:function(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getGemeinden/${t}/${e}`,{})},getAllNationen:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getAllNationen",{})}},T={ //! API calls for profil update requests -getStatus:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getStatus",{})},getTopic:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getTopic",{})},acceptProfilRequest:function({profil_update_id:t,uid:e,status_message:r,topic:n,requested_change:s}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/acceptProfilRequest",{profil_update_id:t,uid:e,status_message:r,topic:n,requested_change:s})},denyProfilRequest:function({profil_update_id:t,uid:e,topic:r,status_message:n}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/denyProfilRequest",{profil_update_id:t,uid:e,topic:r,status_message:n})},insertFile:function(t,e=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/insertFile/${e}`,t)},getProfilRequestFiles:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${t}`,{})},selectProfilRequest:function(t=null,e=null){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/selectProfilRequest",{...t?{uid:t}:{},...e?{id:e}:{}})},insertProfilRequest:function(t,e,r=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/insertProfilRequest",{topic:t,payload:e,...r?{fileID:r}:{}})},updateProfilRequest:function(t,e,r,n=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/updateProfilRequest",{topic:t,payload:e,ID:r,...n?{fileID:n}:{}})},deleteProfilRequest:function(t){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/deleteProfilRequest",{requestID:t})}},E={getRoomInfo(t,e,r){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getRoomplan",{ort_kurzbz:t,start_date:e,end_date:r})},getStunden(){return this.$fhcApi.get("/api/frontend/v1/LvPlan/Stunden",{})},getOrtReservierungen(t,e,r){return this.$fhcApi.post(`/api/frontend/v1/LvPlan/getReservierungen/${t}`,{start_date:e,end_date:r})},getLvPlanReservierungen(t,e){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getReservierungen",{start_date:t,end_date:e})},getLehreinheitStudiensemester(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${t}`,{})},studiensemesterDateInterval(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${t}`,{})},LvPlanEvents(t,e,r){return this.$fhcApi.get("/api/frontend/v1/LvPlan/LvPlanEvents",{start_date:t,end_date:e,lv_id:r})}},k={verband:{get(){return this.$fhcApi.get("api/frontend/v1/stv/verband")},favorites:{get(){return this.$fhcApi.get("api/frontend/v1/stv/favorites")},set(t){return this.$fhcApi.post("api/frontend/v1/stv/favorites/set",{favorites:t})}}},students:{uid(t,e){let r="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/uid/"+encodeURIComponent(t);return this.$fhcApi.getUri(r)},prestudent(t,e){let r="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/prestudent/"+encodeURIComponent(t);return this.$fhcApi.getUri(r)},person(t,e){let r="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/person/"+encodeURIComponent(t);return this.$fhcApi.getUri(r)},verband(t){return this.$fhcApi.getUri("api/frontend/v1/stv/students/"+t)}},filter:{getStg(){return this.$fhcApi.get("api/frontend/v1/stv/filter/getStg")},setStg(t){return this.$fhcApi.post("api/frontend/v1/stv/filter/setStg",{studiengang_kz:t})}},konto:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/konto/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id),only_open:e.filter,studiengang_kz:e.studiengang_kz_intern?e.stg_kz:""}),t.ajaxRequestFunc=(t,e,r)=>this.$fhcApi.post(t,r,e),t.ajaxResponse=(t,e,r)=>r.data,t},checkDoubles(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/checkDoubles",e,{confirmErrorHandler:t=>!0})},insert(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/insert",e)},counter(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/counter",t)},edit(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/update",e)},delete(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/delete",{buchungsnr:t})},getBuchungstypen(){return this.$fhcApi.get("api/frontend/v1/stv/konto/getBuchungstypen")}},group:{getGruppen(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/Gruppen/getGruppen/"+r.id)},deleteGroup(t){return this.$fhcApi.post("api/frontend/v1/stv/Gruppen/deleteGruppe/",t)}},kontakt:{getAdressen(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressen/"+r.id)},addNewAddress(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewAddress/"+e,r)},loadAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadAddress/",{address_id:t})},updateAddress(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateAddress/"+e,r)},deleteAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteAddress/",{address_id:t})},getPlaces(t){return this.$fhcApi.get("api/frontend/v1/stv/address/getPlaces/"+t)},getFirmen(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getFirmen/"+t)},getNations(){return this.$fhcApi.get("api/frontend/v1/stv/address/getNations/")},getAdressentypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressentypen/")},getBankverbindung(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getBankverbindung/"+r.id)},addNewBankverbindung(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewBankverbindung/"+e,r)},loadBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadBankverbindung/",{bankverbindung_id:t})},updateBankverbindung(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateBankverbindung/"+e,r)},deleteBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteBankverbindung/",{bankverbindung_id:t})},getKontakte(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakte/"+r.id)},addNewContact(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewContact/"+e,r)},loadContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadContact/",{kontakt_id:t})},updateContact(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateContact/"+e,r)},deleteContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteContact/",{kontakt_id:t})},getStandorteByFirma(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getStandorteByFirma/"+t)},getKontakttypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakttypen/")}},prestudent:{get(t,e){return this.$fhcApi.post("api/frontend/v1/stv/prestudent/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e))},updatePrestudent(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/stv/prestudent/updatePrestudent/"+e,r)},getBezeichnungZGV(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungZGV/")},getBezeichnungMZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungMZgv/")},getBezeichnungDZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungDZgv/")},getStgs(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStgs/")},getAusbildung(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAusbildung/")},getAufmerksamdurch(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAufmerksamdurch/")},getBerufstaetigkeit(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBerufstaetigkeit/")},getTypenStg(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getTypenStg/")},getBisstandort(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBisstandort/")},getHistoryPrestudent(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/status/getHistoryPrestudent/"+r.id)},getMaxSem(t){return this.$fhcApi.post("api/frontend/v1/stv/status/getMaxSemester/",{studiengang_kzs:t})},advanceStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:r,ausbildungssemester:n}){return this.$fhcApi.post("api/frontend/v1/stv/status/advanceStatus/"+t+"/"+e+"/"+r+"/"+n)},confirmStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:r,ausbildungssemester:n}){return this.$fhcApi.post("api/frontend/v1/stv/status/confirmStatus/"+t+"/"+e+"/"+r+"/"+n)},isLastStatus(t){return this.$fhcApi.get("api/frontend/v1/stv/status/isLastStatus/"+t)},deleteStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:r,ausbildungssemester:n}){return this.$fhcApi.post("api/frontend/v1/stv/status/deleteStatus/"+t+"/"+e+"/"+r+"/"+n)},getLastBismeldestichtag(){return this.$fhcApi.get("api/frontend/v1/stv/status/getLastBismeldestichtag/")},getHistoryPrestudents(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getHistoryPrestudents/"+r.id)}},status:{insertStatus(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/insertStatus/"+e,r)},loadStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:r,ausbildungssemester:n}){return this.$fhcApi.post("api/frontend/v1/stv/status/loadStatus/"+t+"/"+e+"/"+r+"/"+n)},updateStatus(t,{prestudent_id:e,status_kurzbz:r,studiensemester_kurzbz:n,ausbildungssemester:s},a){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/updateStatus/"+e+"/"+r+"/"+n+"/"+s,a)},getStudienplaene(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudienplaene/"+t)},getStudiengang(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudiengang/"+t)},getStatusgruende(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusgruende/")},getStati(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStati/")},addStudent(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/addStudent/"+t,e,{errorHeader:t})},changeStatus(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/changeStatus/"+t,e,{errorHeader:t})},getStatusarray(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusarray/")}},details:{get(t,e){let r="api/frontend/v1/stv/student/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e);return this.$fhcApi.post(r)},save(t,e,r,n){let s="api/frontend/v1/stv/student/save/"+encodeURIComponent(e)+"/"+encodeURIComponent(r);return this.$fhcApi.post(t,s,n)}},exam:{getPruefungen(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getPruefungen/"+r.id)},loadPruefung(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/loadPruefung/"+t)},getTypenPruefungen(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getTypenPruefungen")},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/getAllLehreinheiten/",t)},getLvsByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsByStudent/"+t)},getLvsandLesByStudent(t,e){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsandLesByStudent/"+t+"/"+e)},getLvsAndMas(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsAndMas/"+t)},getMitarbeiterLv(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getMitarbeiterLv/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getNoten")},checkZeugnisnoteLv(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/",t)},addPruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/insertPruefung/",e)},updatePruefung(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/updatePruefung/"+e,r)},deletePruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/deletePruefung/"+t)}},abschlusspruefung:{getAbschlusspruefung(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/"+r.id)},addNewAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/",e)},loadAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/",{id:t})},updateAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/",e)},deleteAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/",{id:t})},getTypenAbschlusspruefung(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/")},getTypenAntritte(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/")},getBeurteilungen(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/")},getAkadGrade(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getAkadGrade/",{studiengang_kz:t})},getTypStudiengang(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/",{studiengang_kz:t})},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/"+t)},getPruefer(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getPruefer/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getNoten/")},checkForExistingExams(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/",{uids:t})}},grades:{list(){return this.$fhcApi.get("api/frontend/v1/stv/grades/list")},getCertificate(t,e){let r="api/frontend/v1/stv/grades/getCertificate/"+encodeURIComponent(t);return e&&(r=r+"/"+encodeURIComponent(e)),this.$fhcApi.get(r)},getTeacherProposal(t,e){let r="api/frontend/v1/stv/grades/getTeacherProposal/"+encodeURIComponent(t);return e&&(r=r+"/"+encodeURIComponent(e)),this.$fhcApi.get(r)},getRepeaterGrades(t,e){let r="api/frontend/v1/stv/grades/getRepeaterGrades/"+encodeURIComponent(t);return e&&(r=r+"/"+encodeURIComponent(e)),this.$fhcApi.get(r)},updateCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:r,note:n,lehrveranstaltung_bezeichnung:s}){return this.$fhcApi.post("api/frontend/v1/stv/grades/updateCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:r,note:n},{errorHeader:s})},deleteCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:r,lehrveranstaltung_bezeichnung:n}){return this.$fhcApi.post("api/frontend/v1/stv/grades/deleteCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:r},{errorHeader:n})},copyTeacherProposalToCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:r,lehrveranstaltung_bezeichnung:n}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyTeacherProposalToCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:r},{errorHeader:n})},copyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id:t,lv_bezeichnung:e}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate",{studierendenantrag_lehrveranstaltung_id:t},{errorHeader:e})},getGradeFromPoints(t,e,r,n){const s=n?{errorHandling:!1}:{};return this.$fhcApi.post("api/frontend/v1/stv/grades/getGradeFromPoints",{points:t,lehrveranstaltung_id:e,studiensemester_kurzbz:r},s)}},mobility:{getMobilitaeten(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getMobilitaeten/"+r.id)},getProgramsMobility(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getProgramsMobility/")},addNewMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/insertMobility/",e)},loadMobility(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/loadMobility/"+t)},updateMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/updateMobility/",e)},deleteMobility(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobility/"+t)},getLVList(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLVList/"+t)},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/getAllLehreinheiten/",t)},getLvsandLesByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLvsandLesByStudent/"+t)},getPurposes(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getPurposes/"+r.id)},getSupports(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getSupports/"+r.id)},getListPurposes(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListPurposes/")},getListSupports(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListSupports/")},deleteMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilityPurpose/"+t.bisio_id,t)},addMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilityPurpose/"+t.bisio_id,t)},deleteMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilitySupport/"+t.bisio_id,t)},addMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilitySupport/"+t.bisio_id,t)}},archiv:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/archiv/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id)}),t.ajaxRequestFunc=(t,e,r)=>this.$fhcApi.post(t,r,e),t.ajaxResponse=(t,e,r)=>r.data,t},getArchivVorlagen(){return this.$fhcApi.post("api/frontend/v1/stv/archiv/getArchivVorlagen")},archive(t){return this.$fhcApi.post("api/frontend/v1/documents/archive",t)},archiveSigned(t){return this.$fhcApi.post("api/frontend/v1/documents/archiveSigned",t)},update(t){return this.$fhcApi.post("api/frontend/v1/stv/archiv/update",t)},delete({akte_id:t,studiengang_kz:e}){return this.$fhcApi.post("api/frontend/v1/stv/archiv/delete",{akte_id:t,studiengang_kz:e})}},documents:{getDocumentsUnaccepted(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/"+r.id+"/"+r.studiengang_kz)},getDocumentsAccepted(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsAccepted/"+r.id+"/"+r.studiengang_kz)},deleteZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},createZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/createZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},loadAkte(t){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/loadAkte/"+t)},getDoktypen(){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDoktypen/")},updateFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/updateAkte/"+t,e)},deleteFile(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteAkte/"+t)},uploadFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/uploadDokument/"+t,e)}},exemptions:{getAnrechnungen(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getAnrechnungen/"+r.id)},getLehrveranstaltungen(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/"+t)},getBegruendungen(){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getBegruendungen/")},getLvsKompatibel(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLvsKompatibel/"+t)},getLektoren(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLektoren/"+t)},addNewAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/insertAnrechnung/",e)},loadAnrechnung(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/loadAnrechnung/"+t)},editAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/updateAnrechnung/",e)},deleteAnrechnung(t){return this.$fhcApi.post("api/frontend/v1/stv/anrechnungen/deleteAnrechnung/"+t)}},jointstudies:{getStudies(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudien/"+r.id)},getTypenMobility(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/")},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/")},getStudyprograms(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/")},getListPartner(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/")},getStatiPrestudent(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/")},loadStudy(t){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/loadStudie/"+t)},insertStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/insertStudie/",e)},updateStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/updateStudie/",e)},deleteStudy(t){return this.$fhcApi.post("api/frontend/v1/stv/GemeinsameStudien/deleteStudie/"+t)}},courselist:{getCourselist(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStundenplan/"+r.student_uid+"/"+r.start_date+"/"+r.end_date+"/"+r.group_consecutiveHours+"/"+r.dbStundenplanTable)},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStudiensemester/")}},configStudent(){return this.$fhcApi.get("api/frontend/v1/stv/config/student")},configStudents(){return this.$fhcApi.get("api/frontend/v1/stv/config/students")}},P={person:{getNotizen(t,e,r){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getNotizen/"+r.id+"/"+r.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getUid/")},addNewNotiz(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/addNewNotiz/"+e,r)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,r){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/deleteNotiz/",{notiz_id:t,type_id:e,id:r})},updateNotiz(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/updateNotiz/"+e,r)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getMitarbeiter/"+t)},isBerechtigt(t,e){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/isBerechtigt/")}}},O={person:{getAllBetriebsmittel(t,e,r){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/"+r.type+"/"+r.id)},addNewBetriebsmittel(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/"+e,r)},loadBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/"+t)},updateBetriebsmittel(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/"+e,r)},deleteBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/"+t)},getTypenBetriebsmittel(){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/")},loadInventarliste(t){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/"+t)}}},w={updatePersonUnrulyStatus(t,e){try{const r={person_id:t,unruly:e},n="/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus";return this.$fhcApi.post(n,r,null)}catch(t){throw t}},filterPerson(t,e=""){try{const r=e+"/api/frontend/v1/checkperson/CheckPerson/filterPerson";return axios.post(r,t)}catch(t){throw t}}},R={getContentID(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/ContentID",{ort_kurzbz:t})},getRooms(t,e,r,n,s=0){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getRooms",{datum:t,von:e,bis:r,typ:n,personenanzahl:s})},getRoomTypes(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getTypes")}},F={content(t,e=null,r=null,n=null){return this.$fhcApi.get("/api/frontend/v1/Cms/content",{content_id:t,...e?{version:e}:{},...r?{sprache:r}:{},...n?{sichtbar:n}:{}})},getNews(t=1,e=10,r){return this.$fhcApi.get("/api/frontend/v1/Cms/getNews",{page:t,page_size:e,sprache:r})},news(t){return this.$fhcApi.get("/api/frontend/v1/Cms/news",{limit:t})},getNewsRowCount:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getNewsRowCount",{})},getNewsExtra:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getStudiengangInfoForNews",{})}},D={getStudentenMail(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Lehre/lvStudentenMail",{lehreinheit_id:t})},getLvInfo(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/LV/${t}/${e}`,{})},getStudentPruefungen(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/Pruefungen/${t}`,{})},getStudentProjektarbeiten(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/getStudentProjektarbeiten/${t}`,{})},getStudentProjektabgaben(t){return this.$fhcApi.get("/api/frontend/v1/Lehre/getStudentProjektabgaben",{projektarbeit_id:t.projektarbeit_id,student_uid:t.student_uid})},postStudentProjektarbeitEndupload(t){return this.$fhcApi.post("/api/frontend/v1/Lehre/postStudentProjektarbeitEndupload",t,{Headers:{"Content-Type":"multipart/form-data"}})},postStudentProjektarbeitZwischenabgabe(t){return this.$fhcApi.post("/api/frontend/v1/Lehre/postStudentProjektarbeitZwischenabgabe",t,{Headers:{"Content-Type":"multipart/form-data"}})},getStudentProjektarbeitAbgabeFile(t,e){const r=`/Cis/Abgabetool/getStudentProjektarbeitAbgabeFile?paabgabe_id=${t}&student_uid=${e}`;window.location=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+r},getMitarbeiterProjektarbeiten(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/getMitarbeiterProjektarbeiten?showall=${e}`,{})},postProjektarbeitAbgabe(t){const e={paabgabe_id:t.paabgabe_id,paabgabetyp_kurzbz:t.bezeichnung.paabgabetyp_kurzbz,datum:t.datum,fixtermin:t.fixtermin,insertvon:t.insertvon,kurzbz:t.kurzbz,projektarbeit_id:t.projektarbeit_id};return this.$fhcApi.post("/api/frontend/v1/Lehre/postProjektarbeitAbgabe",e,null)},deleteProjektarbeitAbgabe(t){const e={paabgabe_id:t};return this.$fhcApi.post("/api/frontend/v1/Lehre/deleteProjektarbeitAbgabe",e,null)},postSerientermin(t,e,r,n,s){const a={datum:t,paabgabetyp_kurzbz:e,bezeichnung:r,kurzbz:n,projektarbeit_ids:s};return this.$fhcApi.post("/api/frontend/v1/Lehre/postSerientermin",a,null)},fetchDeadlines(t){const e={person_id:t};return this.$fhcApi.post("/api/frontend/v1/Lehre/fetchDeadlines",e,null)}},J={getLvMenu(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/LvMenu/getLvMenu/${t}/${e}`,{})}},x={person:{getMessages(t,e,r){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessages/"+r.id+"/"+r.type+"/"+r.size+"/"+r.page)},getVorlagen(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getVorlagen/")},getMsgVarsLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/")},getMessageVarsPerson(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessageVarsPerson/"+t.id+"/"+t.type_id)},getMsgVarsPrestudent(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsPrestudent/"+t.id+"/"+t.type_id)},getPersonId(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getPersonId/"+t.id+"/"+t.type_id)},getUid(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getUid/"+t.id+"/"+t.type_id)},getVorlagentext(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getVorlagentext/"+t)},getNameOfDefaultRecipient(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getNameOfDefaultRecipient/"+t.id+"/"+t.type_id)},getPreviewText(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/getPreviewText/"+t.id+"/"+t.type_id,e)},getReplyData(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getReplyData/"+t)},sendMessageFromModalContext(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/messages/messages/sendMessage/"+e,r)},sendMessage(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/sendMessage/"+t,e)},deleteMessage(t){return this.$fhcApi.post("api/frontend/v1/messages/messages/deleteMessage/"+t)}}},H={getVorlagen(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagen/")},getVorlagenByLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/")}},B={getStudiensemester:function(){return this.$fhcApi.get("/components/Cis/Mylv/Studiensemester",{})},getAllStudienSemester:function(t=void 0,e=void 0,r=void 0,n=void 0){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienAllSemester",{studiensemester:t,studiengang:e,semester:r,studienplan:n})},getStudiengaengeForStudienSemester:function(t){return this.$fhcApi.get(`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${t}`,{})},getStudienplaeneBySemester:function(t,e){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienplaeneBySemester",{studiengang:t,studiensemester:e})},getLvPlanForStudiensemester:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${t}/${e}`,{})},getLvEvaluierungInfo:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/Studium/getLvEvaluierungInfo/${t}/${e}`,{})}},j={search:_,phrasen:A,navigation:y,dashboard:{async getViewData(){return this.$fhcApi.get("/api/frontend/v1/Cis4FhcApi/getViewData",null,null)}},filter:$,studstatus:S,profil:C,profilUpdate:T,lvPlan:E,bookmark:{getBookmarks:function(){return this.$fhcApi.get("/api/frontend/v1/Bookmark/getBookmarks",{})},delete:function(t){return this.$fhcApi.get(`/api/frontend/v1/Bookmark/delete/${t}`,{})},update:function({bookmark_id:t,url:e,title:r,tag:n=null}){return this.$fhcApi.post(`/api/frontend/v1/Bookmark/update/${t}`,{url:e,title:r})},insert:function({url:t,title:e,tag:r}){return this.$fhcApi.post("/api/frontend/v1/Bookmark/insert",{url:t,title:e,tag:r})}},stv:k,notiz:P,betriebsmittel:O,checkperson:w,ampeln:{open:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/open",{})},all:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/all",{})},confirm:function(t){return this.$fhcApi.get(`/api/frontend/v1/Ampeln/confirm/${t}`,{})}},ort:R,cms:F,lehre:D,addons:J,messages:x,vorlagen:H,addons:J,studiengang:{studiengangInformation:function(){return this.$fhcApi.get("/api/frontend/v1/Studgang/getStudiengangInfo",{})},getStudiengangByKz:function(t){return this.$fhcApi.get("/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz",{studiengang_kz:t})}},menu:{getMenu:function(){return this.$fhcApi.get("/api/frontend/v1/CisMenu/getMenu",{})}},authinfo:{getAuthUID(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthUID",{})},getAuthInfo(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthInfo",{})}},studium:B,language:{getAll(){return this.$fhcApi.get("/api/frontend/v1/language/get")}}},L={install:(t,e)=>{if(t.config.globalProperties.$fhcApi)return void(e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory.addEndpoints(e.factory)));function r(t,e,r,n){if("string"==typeof t&&void 0===n)[e,r,n]=[t,e,r],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===r&&void 0===n&&(n=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},n?n.form=t:n={form:t}}return[e,r,n]}function n(t){const e=t.data;return delete t.data,e.meta?e.meta.response=t:e.meta={response:t},e}FHC_JS_DATA_STORAGE_OBJECT.app_root,FHC_JS_DATA_STORAGE_OBJECT.ci_router;const s=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});s.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,r])=>{if(r instanceof FileList)for(const n of r)t.FormData.append(e+(r.length>1?"[]":""),n);else Array.isArray(r)?r.every(t=>!(t instanceof File))?t.jsondata[e]=r:r.forEach(n=>t.FormData.append(e+(r.length>1?"[]":""),n)):t.jsondata[e]=r;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),s.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(r=>(e.config[r.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[r.type])(r,e.config))),n(e)),e=>"ERR_CANCELED"==e.code?Promise.reject({handled:!0,...e}):"off"==e.config?.errorHandling||!1===e.config?.errorHandling||"success"==e.config?.errorHandling?Promise.reject(e):e.response?404==e.response.status?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL,!0),Promise.reject({handled:!0,...e})):(e.response.data.errors=e.response.data.errors.filter(r=>(e.config[r.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[r.type])(r,e.config)),e.response.data.errors.length?Promise.reject(e):Promise.reject({handled:!0,...e})):e.request?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL),Promise.reject({handled:!0,...e})):(t.config.globalProperties.$fhcAlert.alertError(e.message),Promise.reject({handled:!0,...e}))),t.config.globalProperties.$fhcApi={getUri:t=>(console.warn("$fhcApi.getUri is DEPRECATED! Use $api.getUri instead."),s.getUri({url:t})),get:(t,e,n,a)=>(console.warn("$fhcApi.get is DEPRECATED! Use $api.get instead."),[e,n,a]=r(t,e,n,a),n&&(a?a.params=n:a={params:n}),s.get(e,a)),post:(t,e,n,a)=>(console.warn("$fhcApi.post is DEPRECATED! Use $api.post instead."),[e,n,a]=r(t,e,n,a),s.post(e,n,a)),_defaultErrorHandlers:{validation(e,r){const n=t.config.globalProperties.$fhcAlert;return r?.form?(r.form.clearValidation(),r.form.setFeedback(!1,e.messages),!1):Array.isArray(e.messages)?(e.messages.forEach(n.alertError),!1):"object"!=typeof e.messages||(r?.errorHeader?Object.values(e.messages).forEach(e=>n.alertDefault("error",Array.isArray(r.errorHeader)?t.config.globalProperties.$p.t.apply(null,r.errorHeader):r.errorHeader,e,!0)):Object.entries(e.messages).forEach(([t,e])=>n.alertDefault("error",t,e,!0)),!1)},general(e,r){const n=t.config.globalProperties.$fhcAlert;r?.form?r.form.setFeedback(!1,e.message):r?.errorHeader?n.alertDefault("error",Array.isArray(r.errorHeader)?t.config.globalProperties.$p.t.apply(null,r.errorHeader):r.errorHeader,e.message,!0):n.alertError(e.message)},php(e){const r=t.config.globalProperties.$fhcAlert;var n="";switch(n+="Message: "+e.message+"\n\n",n+="Filename: "+e.filename+"\n",n+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(n+="\nBacktrace: ",e.backtrace.forEach(t=>{n+="\n\tFile: "+t.file+"\n",n+="\tLine: "+t.line+"\n",n+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":r.alertDefault("warn","PHP "+e.severity,n,!0);break;case"Notice":case"User Notice":case"Runtime Notice":r.alertDefault("info","PHP "+e.severity,n,!0);break;default:n="Type: PHP "+e.severity+"\n\n"+n,r.alertSystemError(n)}},exception(e){const r=t.config.globalProperties.$fhcAlert;var n="";n+="Type: "+e.class+"\n\n",n+="Message: "+e.message+"\n\n",n+="Filename: "+e.filename+"\n",n+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(n+="\nBacktrace: ",e.backtrace.forEach(t=>{n+="\n\tFile: "+t.file+"\n",n+="\tLine: "+t.line+"\n",n+="\tFunction: "+t.function+"\n"})),r.alertSystemError(n)},db(e){const r=t.config.globalProperties.$fhcAlert;var n="";void 0!==e.heading&&(n+=e.heading+"\n\n"),void 0!==e.code&&(n+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(n+="SQL: "+e.sql+"\n\n"),void 0!==e.message?n+="Message: "+e.message+"\n\n":void 0!==e.messages&&(n+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(n+="Filename: "+e.filename+"\n"),void 0!==e.line&&(n+="Line Number: "+e.line+"\n"),r.alertSystemError(n)},auth(e,r){const n=t.config.globalProperties.$fhcAlert;var s="";s+="Controller name: "+e.controller+"\n",s+="Method name: "+e.method+"\n",s+="Required permissions: "+e.required_permissions,r?.errorHeader?n.alertDefault("error",Array.isArray(r.errorHeader)?t.config.globalProperties.$p.t.apply(null,r.errorHeader):r.errorHeader,e.message,!0):n.alertDefault("error",e.message,s)}}};class a{constructor(e,r){void 0===r?(this.$fhcApi={getUri:e=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.getUri(e)),get:(e,r,n,s)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.get(e,r,n,s)),post:(e,r,n,s)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.post(e,r,n,s))},Object.defineProperty(this.$fhcApi,"factory",{get:()=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory)}),t.config.globalProperties.$fhcApi.factory=this):Object.defineProperty(this,"$fhcApi",{get(){return(r||this).$fhcApi}}),this.addEndpoints(e,!0)}addEndpoints(t,e){Object.keys(t).forEach(e=>{Object.defineProperty(this,e,{get(){return"function"==typeof t[e]?t[e].bind(this):new a(t[e],this.$fhcApi.factory)}})}),e||console.warn("$fhcApi.factory.addEndpoints() is DEPRECATED!")}}const i=new a(j);e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),i.addEndpoints(e.factory)),t.config.globalProperties.$fhcApi.factory=i,t.provide("$fhcApi",t.config.globalProperties.$fhcApi)}};const z="error",U="retval",G={get:function(t,e,r=null){return G._axiosCall(t,e,"get",r)},post:function(t,e,r=null){return G._axiosCall(t,e,"post",r)},isSuccess:function(t){return!("object"!=typeof t||!t.hasOwnProperty(z)||!t.hasOwnProperty(U)||0!=t.error)},isError:function(t){return!G.isSuccess(t)},hasData:function(t){return!(!G.isSuccess(t)||!("object"==typeof t[U]&&Object.keys(t[U]).length>0||"array"==typeof t[U]&&t[U].length>0||"string"==typeof t[U]&&""!=t[U].trim()||"number"==typeof t[U]))},getData:function(t){return G.hasData(t)?t[U]:null},getError:function(t){return"object"==typeof t&&Object.keys(t).length>0&&t.hasOwnProperty(U)?t[U]:"Generic error"},getErrorCode:function(t){return"object"==typeof t&&t.hasOwnProperty(z)?t[z]:1},_generateRouterURI:function(t){var e=null;return"undefined"!=typeof FHC_JS_DATA_STORAGE_OBJECT&&(e=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"+t),e},_printDebug:function(t,e,r){},_axiosCall:function(t,e,r,n){let s={method:r,url:G._generateRouterURI(t),timeout:5e3};if("get"==r?s.params=e:s.data=e,"object"==typeof n)for(var a in n)s[a]=n[a];return axios(s)}},M=document.createElement("div"),I=Vue.createApp({name:"FhcAlertApp",components:{PvToast:e,PvConfirm:r},methods:{mailToUrl:t=>"mailto:"+FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto+"?subject=Meldung%20Systemfehler&body="+("\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method+"%0D%0A\n\t\t\t\tFehler Meldung: "+t.message.detail+"%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!"),openMessagecard(t){bootstrap.Collapse.getOrCreateInstance(t.target.getAttribute("href")).toggle()}},unmounted(){M.parentElement.removeChild(M)},computed:{showmaillink:function(){return""!==FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto}},template:'\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t'});I.use(t),I.use(n);const N=I.mount(M);document.body.appendChild(M);var V={install:(t,e)=>{t.config.globalProperties.$p||t.use(tt);const r={alertSuccess(t){if(Array.isArray(t))return t.forEach(this.alertSuccess);N.$refs.toast.add({severity:"success",summary:"Info",detail:t,life:1e3})},alertInfo(t){if(Array.isArray(t))return t.forEach(this.alertInfo);N.$refs.toast.add({severity:"info",summary:"Info",detail:t,life:3e3})},alertWarning(t){if(Array.isArray(t))return t.forEach(this.alertWarning);N.$refs.toast.add({severity:"warn",summary:"Achtung",detail:t})},alertError(t){if(Array.isArray(t))return t.forEach(this.alertError);N.$refs.toast.add({severity:"error",summary:"Achtung",detail:t})},alertSystemError(e){if(Array.isArray(e))return e.forEach(this.alertSystemError);N.$refs.alert.add({severity:"error",summary:Vue.computed(()=>t.config.globalProperties.$p.t("alert/systemerror")),detail:e})},confirmDelete:()=>new Promise((e,r)=>{N.$confirm.require({group:"fhcAlertConfirm",header:Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:Vue.computed(()=>t.config.globalProperties.$p.t("alert/confirm_delete")),acceptLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/loeschen")),acceptClass:"p-button-danger",rejectLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:"p-button-secondary",accept(){e(!0)},reject(){e(!1)}})}),confirm:e=>new Promise((r,n)=>{N.$confirm.require({group:e?.group??"fhcAlertConfirm",header:e?.header??Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:e?.message??"",acceptLabel:e?.acceptLabel??"Ok",acceptClass:e?.acceptClass??"btn btn-primary",rejectLabel:e?.rejectLabel??Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:e?.rejectClass??"btn btn-outline-secondary",accept(){r(!0)},reject(){r(!1)}})}),alertDefault(t,e,r,n=!1,s=!1){let a={severity:t,summary:e,detail:r,html:s};n||(a.life=3e3),N.$refs.toast.add(a)},alertMultiple(t,e="info",r="Info",n=!1,s=!1){return!!t.every(t=>"string"==typeof t)&&(t.forEach(t=>this.alertDefault(e,r,t,n,s)),!0)},handleSystemError(t){if(!t.hasOwnProperty("name")||t.name.toLowerCase()!=="AbortError".toLowerCase()){if("string"==typeof t)return r.alertSystemError(t);if(Array.isArray(t)&&t.every(t=>"string"==typeof t))return t.every(r.alertSystemError);if(!t.hasOwnProperty("handled")||!t.handled){if("object"==typeof t&&null!==t){let e="";return t.hasOwnProperty("response")&&t.response?.data?.retval?e+="Error Message: "+(t.response.data.retval.message||t.response.data.retval)+"\r\n":t.hasOwnProperty("message")&&(e+="Error Message: "+t.message.toUpperCase()+"\r\n"),t.hasOwnProperty("config")&&t.config.hasOwnProperty("url")&&(e+="Error ConfigURL: "+t.config.url+"\r\n"),t.hasOwnProperty("stack")&&(e+="Error Stack: "+t.stack+"\r\n"),""==e&&(e="Error Message: "+JSON.stringify(t)+"\r\n"),e+="Error Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,r.alertSystemError(e)}r.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method)}}},handleSystemMessage(t){if("string"==typeof t)return r.alertWarning(t);if(Array.isArray(t)){if(t.every(t=>"string"==typeof t))return t.every(r.alertWarning);if(t.every(t=>"object"==typeof t)&&null!==msg)return t.every(t=>{t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?r.alertWarning(JSON.stringify(t.data.retval)):r.alertSystemError(JSON.stringify(t))})}"object"!=typeof t||null===t?r.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method):t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?r.alertWarning(JSON.stringify(t.data.retval)):r.alertSystemError(JSON.stringify(t))},resetFormValidation(t){const e=new Event("fhc-form-reset");t.querySelectorAll(["[data-fhc-form-validate],[data-fhc-form-error]"]).forEach(t=>t.dispatchEvent(e))},handleFormValidation(t,e){if(void 0===e){if(t&&t.nodeType===Node.ELEMENT_NODE)return e=>r.handleFormValidation(e,t)}else if(400==t?.response?.status){let n=G.getError(t.response.data);"object"!=typeof n&&(n=t.response.data),r.resetFormValidation(e);const s=Object.entries(n).filter(([t,r])=>{const n=e.querySelector('[data-fhc-form-validate="'+t+'"]');return!n||(n.dispatchEvent(new CustomEvent("fhc-form-invalidate",{detail:r})),!1)}).map(t=>t[1]),a=e.querySelector("[data-fhc-form-error]");return void(a&&s.length?a.dispatchEvent(new CustomEvent("fhc-form-error",{detail:s})):s.forEach(r.alertError))}if(400==t?.response?.status){let e=G.getError(t.response.data);r.alertError("object"==typeof e?Object.values(e):e)}else r.handleSystemError(t)}};t.config.globalProperties.$fhcAlert=r,t.provide("$fhcAlert",t.config.globalProperties.$fhcAlert)}},q={install:(t,e)=>{if(t.config.globalProperties.$api)return;function r(t,e){Array.isArray(t)?t.forEach(e):Object.entries(t).forEach(([t,r])=>r.forEach(r=>e(r,t)))}t.config.globalProperties.$fhcAlert||t.use(V);let n={success:!0,fail:!0,combine:{form:["validation","general"],toast:["validation","general","not_found","site_failed"]},handler:{form(t,e){t.clearValidation(),e.forEach(e=>t.setFeedback(!1,e.messages||e.message))},async toast(e){const r=t.config.globalProperties.$p;if(!r)return Promise.reject("Phrasen plugin not loaded!");async function n(t){t=t.reduce((t,e)=>{switch(e.type){case"not_found":case"site_failed":e.message?t[e.message]=[e.url]:t._default=[e.url];break;case"general":t._default||(t._default=[]),t._default.push(e.message);break;case"validation":Object.entries(e.messages).forEach(([e,r])=>{t[e]||(t[e]=[]),Array.isArray(r)?t[e].push(...r):t[e].push(r)})}return t},{});let e=0;const n=await Promise.all(Object.entries(t).sort((t,e)=>["_default"].indexOf(e[0])-["_default"].indexOf(t[0])).map(async([t,n])=>{if("_default"==t){await r.loadCategory("dashboard");t='
'+r.t("dashboard/general")+"
"}else t="
"+t+"
";return e+=n.length,t+"
"+n.join("
")+"
"}));return{counter:e,msgs:n}}let s,a;Array.isArray(e)?({counter:s,msgs:a}=await n(e)):({counter:s,msgs:a}=await Object.entries(e).reduce(async(t,[e,r])=>{const s=await t,{counter:a,msgs:i}=await n(r);return s.counter+=a,s.msgs.push("
"+e+"
"+i.join("")+"
"),s},Promise.resolve({counter:0,msgs:[]}))),await r.loadCategory("ui");const i=r.t("ui/n_errors",{n:s});t.config.globalProperties.$fhcAlert.alertDefault("error",i,"
"+a.join("")+"
",!0,!0)},php(e){r(e,(e,r)=>{var n="";switch(n+="Message: "+e.message+"\n\n",n+="Filename: "+e.filename+"\n",n+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(n+="\nBacktrace: ",e.backtrace.forEach(t=>{n+="\n\tFile: "+t.file+"\n",n+="\tLine: "+t.line+"\n",n+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":r?r+=": PHP "+e.severity:r="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("warn",r,n,!0);break;case"Notice":case"User Notice":case"Runtime Notice":r?r+=": PHP "+e.severity:r="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("info",r,n,!0);break;default:n="Type: PHP "+e.severity+"\n\n"+n,r&&(n=r+"\n\n"+n),t.config.globalProperties.$fhcAlert.alertSystemError(n)}})},exception(e){r(e,(e,r)=>{var n="";r&&(n+=r+"\n\n"),n+="Type: "+e.class+"\n\n",n+="Message: "+e.message+"\n\n",n+="Filename: "+e.filename+"\n",n+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(n+="\nBacktrace: ",e.backtrace.forEach(t=>{n+="\n\tFile: "+t.file+"\n",n+="\tLine: "+t.line+"\n",n+="\tFunction: "+t.function+"\n"})),t.config.globalProperties.$fhcAlert.alertSystemError(n)})},db(e){r(e,(e,r)=>{var n="";r&&(n+=r+"\n\n"),void 0!==e.heading&&(n+=e.heading+"\n\n"),void 0!==e.code&&(n+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(n+="SQL: "+e.sql+"\n\n"),void 0!==e.message?n+="Message: "+e.message+"\n\n":void 0!==e.messages&&(n+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(n+="Filename: "+e.filename+"\n"),void 0!==e.line&&(n+="Line Number: "+e.line+"\n"),t.config.globalProperties.$fhcAlert.alertSystemError(n)})},auth(e){r(e,(e,r)=>{r?r+=": "+e.message:r=e.message;var n="";n+="Controller name: "+e.controller+"\n",n+="Method name: "+e.method+"\n",n+="Required permissions: "+e.required_permissions,t.config.globalProperties.$fhcAlert.alertDefault("error",r,n,!0)})}}};function s(t,e,r,n){if("string"==typeof t&&void 0===n)[e,r,n]=[t,e,r],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===r&&void 0===n&&(n=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},n?n.form=t:n={form:t}}return[e,r,n]}function a(t){if("string"==typeof t.data||t.data instanceof String)return a({data:t});const e=t.data;return delete t.data,e?(e.meta?e.meta.response=t:e.meta={response:t},e):{meta:{response:t},data:null}}function i(t){if(!1===t||"off"===t)return{...n,success:!1,fail:!1};if(!t||!0===t)return{...n};if("success"===t)return{...n,fail:!1};if("fail"===t)return{...n,success:!1};const{success:e,fail:r,handler:s,combine:a}=t;return t={...n},Object.entries({fail:r,success:e}).forEach(([e,r])=>{void 0!==r&&(t[e]=r)}),Object.entries({handler:s,combine:a}).forEach(([e,r])=>{void 0!==r&&(t[e]={...t[e],...r})}),t}function o(t){const e=i(t?.errorHandling);if(t?.form){const r=e.handler.form;e.handler={...e.handler,form:e=>r(t.form,e)}}else e.combine={...e.combine,form:[]};return e}function l(t){return t.response?404==t.response.status?[{type:"not_found",message:t.message,url:t.request.responseURL}]:null==t.response.data.errors?[]:t.response.data.errors:t.request?[{type:"site_failed",message:t.message,url:t.request.responseURL}]:[{type:"script",message:t.message}]}function c(t,e){const r={},n=[];if(null==e)return{};for(;e.length;)n.push(e.pop());for(var s of n){let n=s.type,i=null;for(var a in t.combine){let e=t.combine[a].includes(n),r=t.handler[a];if(e&&r&&(i=a,"form"==i))break}i&&(n=i);t.handler[n]?(r[n]||(r[n]=[]),Array.isArray(s)?r[n].push(...s):r[n].push(s)):e.push(s)}return r}void 0!==e?.errorHandling&&(n=i(e.errorHandling));const d=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});d.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,r])=>{if(r instanceof FileList)for(const n of r)t.FormData.append(e+(r.length>1?"[]":""),n);else Array.isArray(r)?r.every(t=>!(t instanceof File))?t.jsondata[e]=r:r.forEach(n=>t.FormData.append(e+(r.length>1?"[]":""),n)):t.jsondata[e]=r;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),d.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(r=>(e.config[r.type+"ErrorHandler"]||t.config.globalProperties.$api._defaultErrorHandlers[r.type])(r,e.config))),a(e)),t=>{if("ERR_CANCELED"==t.code)return Promise.reject({handled:!0,...t});const e=o(t.config);if(!e.fail)return Promise.reject(t);const r=l(t),n=c(e,r);for(var s in n)e.handler[s](n[s]);return r.length?Promise.reject(t):Promise.reject({handled:!0,...t})}),t.config.globalProperties.$api={getUri:t=>d.getUri({url:t}),get:(t,e,r,n)=>([e,r,n]=s(t,e,r,n),r&&(n?n.params=r:n={params:r}),d.get(e,n)),post:(t,e,r,n)=>([e,r,n]=s(t,e,r,n),d.post(e,r,n)),call(e,r,n){if(Array.isArray(e)){const a=t.config.globalProperties.$api;return Promise.allSettled(e.map((t,e)=>(Array.isArray(t)||(t=["#"+e,t]),a.call(t[1],{errorHeader:t[0],errorHandling:!1})))).then(t=>{const[,,e]=s(n,void 0,void 0,r||{}),a=o(e);if(!a.success&&!a.fail)return t;const i={};for(var d of t){const[t,e]="fulfilled"===d.status?[a.success,d.value]:[a.fail,d.reason];if(!t)return;const r=c(a,l(e));for(var u in r)i[u]?i[u][e.config.errorHeader]=r[u]:i[u]={[e.config.errorHeader]:r[u]}}for(var p in i)a.handler[p](i[p]);return t})}let{method:a,url:i,params:d,config:u}=e;return void 0!==r&&(u=r),a||(a="get"),a.toLowerCase&&(a=a.toLowerCase()),"get"==a?this.get(n,i,d,u):"post"==a?this.post(n,i,d,u):void console.error("FhcApi: method not allowed:",a)}},t.provide("$api",t.config.globalProperties.$api)}},Z={loadCategory:t=>({method:"get",url:"/api/frontend/v1/phrasen/loadModule/"+t}),setLanguage:(t,e)=>({method:"post",url:"/api/frontend/v1/phrasen/setLanguage",params:{categories:t,language:e}}),getLanguage:()=>({method:"get",url:"/api/frontend/v1/phrasen/getLanguage"}),getActiveDbLanguages:()=>({method:"get",url:"/api/frontend/v1/phrasen/getAllLanguages"})};const W=Vue.reactive({}),K={};let Q=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language),X=Vue.computed(()=>Q.value?FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(t=>t.sprache==Q.value).LC_Time:null);const Y={user_language:Q,user_locale:X,setLanguage(t){const e=Object.keys(W);return this.config.globalProperties.$api.call(Z.setLanguage(e,t)).then(e=>(e.data.forEach(t=>{W[t.category][t.phrase]=t.text}),Q.value=t,e))},loadCategory(t){return Array.isArray(t)?Promise.all(t.map(this.config.globalProperties.$p.loadCategory)):(K[t]||(K[t]=this.config.globalProperties.$api.call(Z.loadCategory(t)).then(e=>e?.data?function(t,e){return t.filter(t=>t.category==e).reduce((t,e)=>(t[e.phrase]||(t[e.phrase]=e.text),t),{})}(e.data,t):{}).then(e=>{W[t]=e})),K[t])},t_ref(t,e,r){return console.warn("deprecated"),Vue.computed(()=>this.t(t,e,r))},t(t,e,r){if(void 0===r&&(Array.isArray(t)&&2==t.length||t.split&&2==t.split("/").length)&&(r=e,[t,e]=t.split?t.split("/"):t),void 0===e)return console.error("invalid input",t,e,r),"";let n=Vue.computed(()=>W[t]?function(t,e,r){let n=W[t][e];return n?(r&&(n=n.replace(/\{([^}]*)\}/g,(t,e)=>void 0===r[e]?t:r[e])),n):"<< PHRASE "+e+">>"}(t,e,r):"");return W[t]||this.loadCategory(t),n.value}};var tt={install(t,e){t.config.globalProperties.$fhcApi||t.use(L),t.config.globalProperties.$api||t.use(q),t.config.globalProperties.$p={t:Y.t,loadCategory:e=>Y.loadCategory.call(t,e),setLanguage:e=>Y.setLanguage.call(t,e),user_language:Q,user_locale:X,t_ref:Y.t_ref},t.provide("$p",t.config.globalProperties.$p)}},et={search:t=>({method:"post",url:"/api/frontend/v1/searchbar/search",params:t}),searchCis:t=>({method:"post",url:"/api/frontend/v1/searchbar/searchCis",params:t}),searchStv:t=>({method:"post",url:"/api/frontend/v1/searchbar/searchStv",params:t})};let rt=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.theme.name);const nt=FHC_JS_DATA_STORAGE_OBJECT.theme.modes,st=t=>{if(!t)return;for(const t of nt)document.documentElement.classList.remove(t);rt.value=t,document.documentElement.classList.add(t),document.body.setAttribute("data-bs-theme",t);let e=document.querySelector('link[href*="primevue/resources/themes"]');"dark"==t?e.attributes.href.value=e.attributes.href.value.replace("bootstrap4-light-blue","bootstrap4-dark-blue"):("light"==t||e.attributes.href.value.includes("bootstrap4-dark-blue"))&&(e.attributes.href.value=e.attributes.href.value.replace("bootstrap4-dark-blue","bootstrap4-light-blue")),localStorage.setItem("theme",t)};var at={install:(t,e)=>{document.documentElement.classList.add(rt.value),(()=>{let t=localStorage.getItem("theme");t&&nt.includes(t)||(t=nt[0],localStorage.setItem("theme",t)),st(t)})(),t.config.globalProperties.$theme={theme_name:rt,theme_modes:nt,switchTheme:t=>{st(t)}}}};const it=Vue.createApp({name:"CisApp",components:{FhcSearchbar:v,CisMenu:b},data:function(){return{searchbaroptions:{origin:"cis",cssclass:"",calcheightonly:!0,types:{employee:Vue.computed(()=>this.$p.t("search/type_employee")),student:Vue.computed(()=>this.$p.t("search/type_student")),room:Vue.computed(()=>this.$p.t("search/type_room")),organisationunit:Vue.computed(()=>this.$p.t("search/type_organisationunit")),cms:Vue.computed(()=>this.$p.t("search/type_cms")),dms:Vue.computed(()=>this.$p.t("search/type_dms"))},actions:{employee:{defaultaction:{type:"link",action:function(t){return FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/Cis/Profil/View/"+t.uid}},childactions:[]},student:{defaultaction:{type:"link",action:function(t){return FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/Cis/Profil/View/"+t.uid}},childactions:[]},room:{defaultaction:{type:"link",renderif:function(t){return null!==t.content_id},action:function(t){return FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/CisVue/Cms/content/"+t.content_id}},childactions:[{label:"LV-Plan",icon:"fas fa-bookmark",type:"link",action:function(t){return FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/CisVue/Cms/getRoomInformation/"+t.ort_kurzbz}},{label:"Rauminformation",icon:"fas fa-info-circle",type:"link",renderif:function(t){return null!==t.content_id},action:function(t){return FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/CisVue/Cms/content/"+t.content_id}}]},organisationunit:{defaultaction:{type:"link",renderif:function(t){return!!t.mailgroup},action:function(t){return"mailto:"+t.mailgroup}},childactions:[]},cms:{defaultaction:{type:"link",action:function(t){return FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/CisVue/Cms/content/"+t.content_id}},childactions:[]},dms:{defaultaction:{type:"link",action:function(t){return FHC_JS_DATA_STORAGE_OBJECT.app_root+"cms/dms.php?id="+t.dms_id}},childactions:[]}}}}},methods:{searchfunction:function(t){return this.$api.call(et.searchCis(t))}}});it.use(primevue.config.default,{zIndex:{overlay:9e3,tooltip:8e3}}),it.use(tt),it.use(at),it.mount("#cis-header"); +getStatus:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getStatus",{})},getTopic:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getTopic",{})},acceptProfilRequest:function({profil_update_id:t,uid:e,status_message:r,topic:n,requested_change:s}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/acceptProfilRequest",{profil_update_id:t,uid:e,status_message:r,topic:n,requested_change:s})},denyProfilRequest:function({profil_update_id:t,uid:e,topic:r,status_message:n}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/denyProfilRequest",{profil_update_id:t,uid:e,topic:r,status_message:n})},insertFile:function(t,e=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/insertFile/${e}`,t)},getProfilRequestFiles:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${t}`,{})},selectProfilRequest:function(t=null,e=null){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/selectProfilRequest",{...t?{uid:t}:{},...e?{id:e}:{}})},insertProfilRequest:function(t,e,r=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/insertProfilRequest",{topic:t,payload:e,...r?{fileID:r}:{}})},updateProfilRequest:function(t,e,r,n=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/updateProfilRequest",{topic:t,payload:e,ID:r,...n?{fileID:n}:{}})},deleteProfilRequest:function(t){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/deleteProfilRequest",{requestID:t})}},E={getRoomInfo(t,e,r){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getRoomplan",{ort_kurzbz:t,start_date:e,end_date:r})},getStunden(){return this.$fhcApi.get("/api/frontend/v1/LvPlan/Stunden",{})},getOrtReservierungen(t,e,r){return this.$fhcApi.post(`/api/frontend/v1/LvPlan/getReservierungen/${t}`,{start_date:e,end_date:r})},getLvPlanReservierungen(t,e){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getReservierungen",{start_date:t,end_date:e})},getLehreinheitStudiensemester(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${t}`,{})},studiensemesterDateInterval(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${t}`,{})},LvPlanEvents(t,e,r){return this.$fhcApi.get("/api/frontend/v1/LvPlan/LvPlanEvents",{start_date:t,end_date:e,lv_id:r})}},k={verband:{get(){return this.$fhcApi.get("api/frontend/v1/stv/verband")},favorites:{get(){return this.$fhcApi.get("api/frontend/v1/stv/favorites")},set(t){return this.$fhcApi.post("api/frontend/v1/stv/favorites/set",{favorites:t})}}},students:{uid(t,e){let r="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/uid/"+encodeURIComponent(t);return this.$fhcApi.getUri(r)},prestudent(t,e){let r="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/prestudent/"+encodeURIComponent(t);return this.$fhcApi.getUri(r)},person(t,e){let r="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/person/"+encodeURIComponent(t);return this.$fhcApi.getUri(r)},verband(t){return this.$fhcApi.getUri("api/frontend/v1/stv/students/"+t)}},filter:{getStg(){return this.$fhcApi.get("api/frontend/v1/stv/filter/getStg")},setStg(t){return this.$fhcApi.post("api/frontend/v1/stv/filter/setStg",{studiengang_kz:t})}},konto:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/konto/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id),only_open:e.filter,studiengang_kz:e.studiengang_kz_intern?e.stg_kz:""}),t.ajaxRequestFunc=(t,e,r)=>this.$fhcApi.post(t,r,e),t.ajaxResponse=(t,e,r)=>r.data,t},checkDoubles(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/checkDoubles",e,{confirmErrorHandler:t=>!0})},insert(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/insert",e)},counter(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/counter",t)},edit(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/update",e)},delete(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/delete",{buchungsnr:t})},getBuchungstypen(){return this.$fhcApi.get("api/frontend/v1/stv/konto/getBuchungstypen")}},group:{getGruppen(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/Gruppen/getGruppen/"+r.id)},deleteGroup(t){return this.$fhcApi.post("api/frontend/v1/stv/Gruppen/deleteGruppe/",t)}},kontakt:{getAdressen(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressen/"+r.id)},addNewAddress(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewAddress/"+e,r)},loadAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadAddress/",{address_id:t})},updateAddress(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateAddress/"+e,r)},deleteAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteAddress/",{address_id:t})},getPlaces(t){return this.$fhcApi.get("api/frontend/v1/stv/address/getPlaces/"+t)},getFirmen(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getFirmen/"+t)},getNations(){return this.$fhcApi.get("api/frontend/v1/stv/address/getNations/")},getAdressentypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressentypen/")},getBankverbindung(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getBankverbindung/"+r.id)},addNewBankverbindung(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewBankverbindung/"+e,r)},loadBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadBankverbindung/",{bankverbindung_id:t})},updateBankverbindung(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateBankverbindung/"+e,r)},deleteBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteBankverbindung/",{bankverbindung_id:t})},getKontakte(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakte/"+r.id)},addNewContact(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewContact/"+e,r)},loadContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadContact/",{kontakt_id:t})},updateContact(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateContact/"+e,r)},deleteContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteContact/",{kontakt_id:t})},getStandorteByFirma(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getStandorteByFirma/"+t)},getKontakttypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakttypen/")}},prestudent:{get(t,e){return this.$fhcApi.post("api/frontend/v1/stv/prestudent/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e))},updatePrestudent(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/stv/prestudent/updatePrestudent/"+e,r)},getBezeichnungZGV(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungZGV/")},getBezeichnungMZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungMZgv/")},getBezeichnungDZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungDZgv/")},getStgs(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStgs/")},getAusbildung(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAusbildung/")},getAufmerksamdurch(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAufmerksamdurch/")},getBerufstaetigkeit(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBerufstaetigkeit/")},getTypenStg(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getTypenStg/")},getBisstandort(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBisstandort/")},getHistoryPrestudent(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/status/getHistoryPrestudent/"+r.id)},getMaxSem(t){return this.$fhcApi.post("api/frontend/v1/stv/status/getMaxSemester/",{studiengang_kzs:t})},advanceStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:r,ausbildungssemester:n}){return this.$fhcApi.post("api/frontend/v1/stv/status/advanceStatus/"+t+"/"+e+"/"+r+"/"+n)},confirmStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:r,ausbildungssemester:n}){return this.$fhcApi.post("api/frontend/v1/stv/status/confirmStatus/"+t+"/"+e+"/"+r+"/"+n)},isLastStatus(t){return this.$fhcApi.get("api/frontend/v1/stv/status/isLastStatus/"+t)},deleteStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:r,ausbildungssemester:n}){return this.$fhcApi.post("api/frontend/v1/stv/status/deleteStatus/"+t+"/"+e+"/"+r+"/"+n)},getLastBismeldestichtag(){return this.$fhcApi.get("api/frontend/v1/stv/status/getLastBismeldestichtag/")},getHistoryPrestudents(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getHistoryPrestudents/"+r.id)}},status:{insertStatus(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/insertStatus/"+e,r)},loadStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:r,ausbildungssemester:n}){return this.$fhcApi.post("api/frontend/v1/stv/status/loadStatus/"+t+"/"+e+"/"+r+"/"+n)},updateStatus(t,{prestudent_id:e,status_kurzbz:r,studiensemester_kurzbz:n,ausbildungssemester:s},a){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/updateStatus/"+e+"/"+r+"/"+n+"/"+s,a)},getStudienplaene(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudienplaene/"+t)},getStudiengang(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudiengang/"+t)},getStatusgruende(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusgruende/")},getStati(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStati/")},addStudent(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/addStudent/"+t,e,{errorHeader:t})},changeStatus(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/changeStatus/"+t,e,{errorHeader:t})},getStatusarray(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusarray/")}},details:{get(t,e){let r="api/frontend/v1/stv/student/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e);return this.$fhcApi.post(r)},save(t,e,r,n){let s="api/frontend/v1/stv/student/save/"+encodeURIComponent(e)+"/"+encodeURIComponent(r);return this.$fhcApi.post(t,s,n)}},exam:{getPruefungen(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getPruefungen/"+r.id)},loadPruefung(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/loadPruefung/"+t)},getTypenPruefungen(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getTypenPruefungen")},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/getAllLehreinheiten/",t)},getLvsByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsByStudent/"+t)},getLvsandLesByStudent(t,e){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsandLesByStudent/"+t+"/"+e)},getLvsAndMas(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsAndMas/"+t)},getMitarbeiterLv(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getMitarbeiterLv/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getNoten")},checkZeugnisnoteLv(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/",t)},addPruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/insertPruefung/",e)},updatePruefung(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/updatePruefung/"+e,r)},deletePruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/deletePruefung/"+t)}},abschlusspruefung:{getAbschlusspruefung(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/"+r.id)},addNewAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/",e)},loadAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/",{id:t})},updateAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/",e)},deleteAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/",{id:t})},getTypenAbschlusspruefung(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/")},getTypenAntritte(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/")},getBeurteilungen(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/")},getAkadGrade(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getAkadGrade/",{studiengang_kz:t})},getTypStudiengang(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/",{studiengang_kz:t})},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/"+t)},getPruefer(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getPruefer/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getNoten/")},checkForExistingExams(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/",{uids:t})}},grades:{list(){return this.$fhcApi.get("api/frontend/v1/stv/grades/list")},getCertificate(t,e){let r="api/frontend/v1/stv/grades/getCertificate/"+encodeURIComponent(t);return e&&(r=r+"/"+encodeURIComponent(e)),this.$fhcApi.get(r)},getTeacherProposal(t,e){let r="api/frontend/v1/stv/grades/getTeacherProposal/"+encodeURIComponent(t);return e&&(r=r+"/"+encodeURIComponent(e)),this.$fhcApi.get(r)},getRepeaterGrades(t,e){let r="api/frontend/v1/stv/grades/getRepeaterGrades/"+encodeURIComponent(t);return e&&(r=r+"/"+encodeURIComponent(e)),this.$fhcApi.get(r)},updateCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:r,note:n,lehrveranstaltung_bezeichnung:s}){return this.$fhcApi.post("api/frontend/v1/stv/grades/updateCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:r,note:n},{errorHeader:s})},deleteCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:r,lehrveranstaltung_bezeichnung:n}){return this.$fhcApi.post("api/frontend/v1/stv/grades/deleteCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:r},{errorHeader:n})},copyTeacherProposalToCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:r,lehrveranstaltung_bezeichnung:n}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyTeacherProposalToCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:r},{errorHeader:n})},copyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id:t,lv_bezeichnung:e}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate",{studierendenantrag_lehrveranstaltung_id:t},{errorHeader:e})},getGradeFromPoints(t,e,r,n){const s=n?{errorHandling:!1}:{};return this.$fhcApi.post("api/frontend/v1/stv/grades/getGradeFromPoints",{points:t,lehrveranstaltung_id:e,studiensemester_kurzbz:r},s)}},mobility:{getMobilitaeten(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getMobilitaeten/"+r.id)},getProgramsMobility(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getProgramsMobility/")},addNewMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/insertMobility/",e)},loadMobility(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/loadMobility/"+t)},updateMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/updateMobility/",e)},deleteMobility(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobility/"+t)},getLVList(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLVList/"+t)},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/getAllLehreinheiten/",t)},getLvsandLesByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLvsandLesByStudent/"+t)},getPurposes(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getPurposes/"+r.id)},getSupports(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getSupports/"+r.id)},getListPurposes(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListPurposes/")},getListSupports(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListSupports/")},deleteMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilityPurpose/"+t.bisio_id,t)},addMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilityPurpose/"+t.bisio_id,t)},deleteMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilitySupport/"+t.bisio_id,t)},addMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilitySupport/"+t.bisio_id,t)}},archiv:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/archiv/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id)}),t.ajaxRequestFunc=(t,e,r)=>this.$fhcApi.post(t,r,e),t.ajaxResponse=(t,e,r)=>r.data,t},getArchivVorlagen(){return this.$fhcApi.post("api/frontend/v1/stv/archiv/getArchivVorlagen")},archive(t){return this.$fhcApi.post("api/frontend/v1/documents/archive",t)},archiveSigned(t){return this.$fhcApi.post("api/frontend/v1/documents/archiveSigned",t)},update(t){return this.$fhcApi.post("api/frontend/v1/stv/archiv/update",t)},delete({akte_id:t,studiengang_kz:e}){return this.$fhcApi.post("api/frontend/v1/stv/archiv/delete",{akte_id:t,studiengang_kz:e})}},documents:{getDocumentsUnaccepted(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/"+r.id+"/"+r.studiengang_kz)},getDocumentsAccepted(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsAccepted/"+r.id+"/"+r.studiengang_kz)},deleteZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},createZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/createZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},loadAkte(t){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/loadAkte/"+t)},getDoktypen(){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDoktypen/")},updateFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/updateAkte/"+t,e)},deleteFile(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteAkte/"+t)},uploadFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/uploadDokument/"+t,e)}},exemptions:{getAnrechnungen(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getAnrechnungen/"+r.id)},getLehrveranstaltungen(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/"+t)},getBegruendungen(){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getBegruendungen/")},getLvsKompatibel(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLvsKompatibel/"+t)},getLektoren(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLektoren/"+t)},addNewAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/insertAnrechnung/",e)},loadAnrechnung(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/loadAnrechnung/"+t)},editAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/updateAnrechnung/",e)},deleteAnrechnung(t){return this.$fhcApi.post("api/frontend/v1/stv/anrechnungen/deleteAnrechnung/"+t)}},jointstudies:{getStudies(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudien/"+r.id)},getTypenMobility(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/")},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/")},getStudyprograms(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/")},getListPartner(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/")},getStatiPrestudent(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/")},loadStudy(t){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/loadStudie/"+t)},insertStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/insertStudie/",e)},updateStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/updateStudie/",e)},deleteStudy(t){return this.$fhcApi.post("api/frontend/v1/stv/GemeinsameStudien/deleteStudie/"+t)}},courselist:{getCourselist(t,e,r){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStundenplan/"+r.student_uid+"/"+r.start_date+"/"+r.end_date+"/"+r.group_consecutiveHours+"/"+r.dbStundenplanTable)},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStudiensemester/")}},configStudent(){return this.$fhcApi.get("api/frontend/v1/stv/config/student")},configStudents(){return this.$fhcApi.get("api/frontend/v1/stv/config/students")}},P={person:{getNotizen(t,e,r){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getNotizen/"+r.id+"/"+r.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getUid/")},addNewNotiz(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/addNewNotiz/"+e,r)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,r){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/deleteNotiz/",{notiz_id:t,type_id:e,id:r})},updateNotiz(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/updateNotiz/"+e,r)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getMitarbeiter/"+t)},isBerechtigt(t,e){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/isBerechtigt/")}}},O={person:{getAllBetriebsmittel(t,e,r){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/"+r.type+"/"+r.id)},addNewBetriebsmittel(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/"+e,r)},loadBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/"+t)},updateBetriebsmittel(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/"+e,r)},deleteBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/"+t)},getTypenBetriebsmittel(){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/")},loadInventarliste(t){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/"+t)}}},w={updatePersonUnrulyStatus(t,e){try{const r={person_id:t,unruly:e},n="/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus";return this.$fhcApi.post(n,r,null)}catch(t){throw t}},filterPerson(t,e=""){try{const r=e+"/api/frontend/v1/checkperson/CheckPerson/filterPerson";return axios.post(r,t)}catch(t){throw t}}},R={getContentID(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/ContentID",{ort_kurzbz:t})},getRooms(t,e,r,n,s=0){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getRooms",{datum:t,von:e,bis:r,typ:n,personenanzahl:s})},getRoomTypes(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getTypes")}},F={content(t,e=null,r=null,n=null){return this.$fhcApi.get("/api/frontend/v1/Cms/content",{content_id:t,...e?{version:e}:{},...r?{sprache:r}:{},...n?{sichtbar:n}:{}})},getNews(t=1,e=10,r){return this.$fhcApi.get("/api/frontend/v1/Cms/getNews",{page:t,page_size:e,sprache:r})},news(t){return this.$fhcApi.get("/api/frontend/v1/Cms/news",{limit:t})},getNewsRowCount:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getNewsRowCount",{})},getNewsExtra:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getStudiengangInfoForNews",{})}},D={getStudentenMail(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Lehre/lvStudentenMail",{lehreinheit_id:t})},getLvInfo(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/LV/${t}/${e}`,{})},getStudentPruefungen(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/Pruefungen/${t}`,{})},getStudentProjektarbeiten(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/getStudentProjektarbeiten/${t}`,{})},getStudentProjektabgaben(t){return this.$fhcApi.get("/api/frontend/v1/Lehre/getStudentProjektabgaben",{projektarbeit_id:t.projektarbeit_id,student_uid:t.student_uid})},postStudentProjektarbeitEndupload(t){return this.$fhcApi.post("/api/frontend/v1/Lehre/postStudentProjektarbeitEndupload",t,{Headers:{"Content-Type":"multipart/form-data"}})},postStudentProjektarbeitZwischenabgabe(t){return this.$fhcApi.post("/api/frontend/v1/Lehre/postStudentProjektarbeitZwischenabgabe",t,{Headers:{"Content-Type":"multipart/form-data"}})},getStudentProjektarbeitAbgabeFile(t,e){const r=`/Cis/Abgabetool/getStudentProjektarbeitAbgabeFile?paabgabe_id=${t}&student_uid=${e}`;window.location=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+r},getMitarbeiterProjektarbeiten(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/getMitarbeiterProjektarbeiten?showall=${e}`,{})},postProjektarbeitAbgabe(t){const e={paabgabe_id:t.paabgabe_id,paabgabetyp_kurzbz:t.bezeichnung.paabgabetyp_kurzbz,datum:t.datum,fixtermin:t.fixtermin,insertvon:t.insertvon,kurzbz:t.kurzbz,projektarbeit_id:t.projektarbeit_id};return this.$fhcApi.post("/api/frontend/v1/Lehre/postProjektarbeitAbgabe",e,null)},deleteProjektarbeitAbgabe(t){const e={paabgabe_id:t};return this.$fhcApi.post("/api/frontend/v1/Lehre/deleteProjektarbeitAbgabe",e,null)},postSerientermin(t,e,r,n,s){const a={datum:t,paabgabetyp_kurzbz:e,bezeichnung:r,kurzbz:n,projektarbeit_ids:s};return this.$fhcApi.post("/api/frontend/v1/Lehre/postSerientermin",a,null)},fetchDeadlines(t){const e={person_id:t};return this.$fhcApi.post("/api/frontend/v1/Lehre/fetchDeadlines",e,null)}},J={getLvMenu(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/LvMenu/getLvMenu/${t}/${e}`,{})}},x={person:{getMessages(t,e,r){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessages/"+r.id+"/"+r.type+"/"+r.size+"/"+r.page)},getVorlagen(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getVorlagen/")},getMsgVarsLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/")},getMessageVarsPerson(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessageVarsPerson/"+t.id+"/"+t.type_id)},getMsgVarsPrestudent(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsPrestudent/"+t.id+"/"+t.type_id)},getPersonId(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getPersonId/"+t.id+"/"+t.type_id)},getUid(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getUid/"+t.id+"/"+t.type_id)},getDataVorlage(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getDataVorlage/"+t)},getNameOfDefaultRecipient(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getNameOfDefaultRecipient/"+t.id+"/"+t.type_id)},getPreviewText(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/getPreviewText/"+t.id+"/"+t.type_id,e)},getReplyData(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getReplyData/"+t)},sendMessageFromModalContext(t,e,r){return this.$fhcApi.post(t,"api/frontend/v1/messages/messages/sendMessage/"+e,r)},sendMessage(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/sendMessage/"+t,e)},deleteMessage(t){return this.$fhcApi.post("api/frontend/v1/messages/messages/deleteMessage/"+t)}}},H={getVorlagen(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagen/")},getVorlagenByLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/")}},B={getStudiensemester:function(){return this.$fhcApi.get("/components/Cis/Mylv/Studiensemester",{})},getAllStudienSemester:function(t=void 0,e=void 0,r=void 0,n=void 0){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienAllSemester",{studiensemester:t,studiengang:e,semester:r,studienplan:n})},getStudiengaengeForStudienSemester:function(t){return this.$fhcApi.get(`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${t}`,{})},getStudienplaeneBySemester:function(t,e){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienplaeneBySemester",{studiengang:t,studiensemester:e})},getLvPlanForStudiensemester:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${t}/${e}`,{})},getLvEvaluierungInfo:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/Studium/getLvEvaluierungInfo/${t}/${e}`,{})}},j={search:_,phrasen:A,navigation:y,dashboard:{async getViewData(){return this.$fhcApi.get("/api/frontend/v1/Cis4FhcApi/getViewData",null,null)}},filter:$,studstatus:S,profil:C,profilUpdate:T,lvPlan:E,bookmark:{getBookmarks:function(){return this.$fhcApi.get("/api/frontend/v1/Bookmark/getBookmarks",{})},delete:function(t){return this.$fhcApi.get(`/api/frontend/v1/Bookmark/delete/${t}`,{})},update:function({bookmark_id:t,url:e,title:r,tag:n=null}){return this.$fhcApi.post(`/api/frontend/v1/Bookmark/update/${t}`,{url:e,title:r})},insert:function({url:t,title:e,tag:r}){return this.$fhcApi.post("/api/frontend/v1/Bookmark/insert",{url:t,title:e,tag:r})}},stv:k,notiz:P,betriebsmittel:O,checkperson:w,ampeln:{open:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/open",{})},all:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/all",{})},confirm:function(t){return this.$fhcApi.get(`/api/frontend/v1/Ampeln/confirm/${t}`,{})}},ort:R,cms:F,lehre:D,addons:J,messages:x,vorlagen:H,addons:J,studiengang:{studiengangInformation:function(){return this.$fhcApi.get("/api/frontend/v1/Studgang/getStudiengangInfo",{})},getStudiengangByKz:function(t){return this.$fhcApi.get("/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz",{studiengang_kz:t})}},menu:{getMenu:function(){return this.$fhcApi.get("/api/frontend/v1/CisMenu/getMenu",{})}},authinfo:{getAuthUID(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthUID",{})},getAuthInfo(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthInfo",{})}},studium:B,language:{getAll(){return this.$fhcApi.get("/api/frontend/v1/language/get")}}},L={install:(t,e)=>{if(t.config.globalProperties.$fhcApi)return void(e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory.addEndpoints(e.factory)));function r(t,e,r,n){if("string"==typeof t&&void 0===n)[e,r,n]=[t,e,r],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===r&&void 0===n&&(n=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},n?n.form=t:n={form:t}}return[e,r,n]}function n(t){const e=t.data;return delete t.data,e.meta?e.meta.response=t:e.meta={response:t},e}FHC_JS_DATA_STORAGE_OBJECT.app_root,FHC_JS_DATA_STORAGE_OBJECT.ci_router;const s=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});s.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,r])=>{if(r instanceof FileList)for(const n of r)t.FormData.append(e+(r.length>1?"[]":""),n);else Array.isArray(r)?r.every(t=>!(t instanceof File))?t.jsondata[e]=r:r.forEach(n=>t.FormData.append(e+(r.length>1?"[]":""),n)):t.jsondata[e]=r;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),s.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(r=>(e.config[r.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[r.type])(r,e.config))),n(e)),e=>"ERR_CANCELED"==e.code?Promise.reject({handled:!0,...e}):"off"==e.config?.errorHandling||!1===e.config?.errorHandling||"success"==e.config?.errorHandling?Promise.reject(e):e.response?404==e.response.status?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL,!0),Promise.reject({handled:!0,...e})):(e.response.data.errors=e.response.data.errors.filter(r=>(e.config[r.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[r.type])(r,e.config)),e.response.data.errors.length?Promise.reject(e):Promise.reject({handled:!0,...e})):e.request?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL),Promise.reject({handled:!0,...e})):(t.config.globalProperties.$fhcAlert.alertError(e.message),Promise.reject({handled:!0,...e}))),t.config.globalProperties.$fhcApi={getUri:t=>(console.warn("$fhcApi.getUri is DEPRECATED! Use $api.getUri instead."),s.getUri({url:t})),get:(t,e,n,a)=>(console.warn("$fhcApi.get is DEPRECATED! Use $api.get instead."),[e,n,a]=r(t,e,n,a),n&&(a?a.params=n:a={params:n}),s.get(e,a)),post:(t,e,n,a)=>(console.warn("$fhcApi.post is DEPRECATED! Use $api.post instead."),[e,n,a]=r(t,e,n,a),s.post(e,n,a)),_defaultErrorHandlers:{validation(e,r){const n=t.config.globalProperties.$fhcAlert;return r?.form?(r.form.clearValidation(),r.form.setFeedback(!1,e.messages),!1):Array.isArray(e.messages)?(e.messages.forEach(n.alertError),!1):"object"!=typeof e.messages||(r?.errorHeader?Object.values(e.messages).forEach(e=>n.alertDefault("error",Array.isArray(r.errorHeader)?t.config.globalProperties.$p.t.apply(null,r.errorHeader):r.errorHeader,e,!0)):Object.entries(e.messages).forEach(([t,e])=>n.alertDefault("error",t,e,!0)),!1)},general(e,r){const n=t.config.globalProperties.$fhcAlert;r?.form?r.form.setFeedback(!1,e.message):r?.errorHeader?n.alertDefault("error",Array.isArray(r.errorHeader)?t.config.globalProperties.$p.t.apply(null,r.errorHeader):r.errorHeader,e.message,!0):n.alertError(e.message)},php(e){const r=t.config.globalProperties.$fhcAlert;var n="";switch(n+="Message: "+e.message+"\n\n",n+="Filename: "+e.filename+"\n",n+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(n+="\nBacktrace: ",e.backtrace.forEach(t=>{n+="\n\tFile: "+t.file+"\n",n+="\tLine: "+t.line+"\n",n+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":r.alertDefault("warn","PHP "+e.severity,n,!0);break;case"Notice":case"User Notice":case"Runtime Notice":r.alertDefault("info","PHP "+e.severity,n,!0);break;default:n="Type: PHP "+e.severity+"\n\n"+n,r.alertSystemError(n)}},exception(e){const r=t.config.globalProperties.$fhcAlert;var n="";n+="Type: "+e.class+"\n\n",n+="Message: "+e.message+"\n\n",n+="Filename: "+e.filename+"\n",n+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(n+="\nBacktrace: ",e.backtrace.forEach(t=>{n+="\n\tFile: "+t.file+"\n",n+="\tLine: "+t.line+"\n",n+="\tFunction: "+t.function+"\n"})),r.alertSystemError(n)},db(e){const r=t.config.globalProperties.$fhcAlert;var n="";void 0!==e.heading&&(n+=e.heading+"\n\n"),void 0!==e.code&&(n+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(n+="SQL: "+e.sql+"\n\n"),void 0!==e.message?n+="Message: "+e.message+"\n\n":void 0!==e.messages&&(n+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(n+="Filename: "+e.filename+"\n"),void 0!==e.line&&(n+="Line Number: "+e.line+"\n"),r.alertSystemError(n)},auth(e,r){const n=t.config.globalProperties.$fhcAlert;var s="";s+="Controller name: "+e.controller+"\n",s+="Method name: "+e.method+"\n",s+="Required permissions: "+e.required_permissions,r?.errorHeader?n.alertDefault("error",Array.isArray(r.errorHeader)?t.config.globalProperties.$p.t.apply(null,r.errorHeader):r.errorHeader,e.message,!0):n.alertDefault("error",e.message,s)}}};class a{constructor(e,r){void 0===r?(this.$fhcApi={getUri:e=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.getUri(e)),get:(e,r,n,s)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.get(e,r,n,s)),post:(e,r,n,s)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.post(e,r,n,s))},Object.defineProperty(this.$fhcApi,"factory",{get:()=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory)}),t.config.globalProperties.$fhcApi.factory=this):Object.defineProperty(this,"$fhcApi",{get(){return(r||this).$fhcApi}}),this.addEndpoints(e,!0)}addEndpoints(t,e){Object.keys(t).forEach(e=>{Object.defineProperty(this,e,{get(){return"function"==typeof t[e]?t[e].bind(this):new a(t[e],this.$fhcApi.factory)}})}),e||console.warn("$fhcApi.factory.addEndpoints() is DEPRECATED!")}}const i=new a(j);e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),i.addEndpoints(e.factory)),t.config.globalProperties.$fhcApi.factory=i,t.provide("$fhcApi",t.config.globalProperties.$fhcApi)}};const z="error",U="retval",G={get:function(t,e,r=null){return G._axiosCall(t,e,"get",r)},post:function(t,e,r=null){return G._axiosCall(t,e,"post",r)},isSuccess:function(t){return!("object"!=typeof t||!t.hasOwnProperty(z)||!t.hasOwnProperty(U)||0!=t.error)},isError:function(t){return!G.isSuccess(t)},hasData:function(t){return!(!G.isSuccess(t)||!("object"==typeof t[U]&&Object.keys(t[U]).length>0||"array"==typeof t[U]&&t[U].length>0||"string"==typeof t[U]&&""!=t[U].trim()||"number"==typeof t[U]))},getData:function(t){return G.hasData(t)?t[U]:null},getError:function(t){return"object"==typeof t&&Object.keys(t).length>0&&t.hasOwnProperty(U)?t[U]:"Generic error"},getErrorCode:function(t){return"object"==typeof t&&t.hasOwnProperty(z)?t[z]:1},_generateRouterURI:function(t){var e=null;return"undefined"!=typeof FHC_JS_DATA_STORAGE_OBJECT&&(e=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"+t),e},_printDebug:function(t,e,r){},_axiosCall:function(t,e,r,n){let s={method:r,url:G._generateRouterURI(t),timeout:5e3};if("get"==r?s.params=e:s.data=e,"object"==typeof n)for(var a in n)s[a]=n[a];return axios(s)}},M=document.createElement("div"),I=Vue.createApp({name:"FhcAlertApp",components:{PvToast:e,PvConfirm:r},methods:{mailToUrl:t=>"mailto:"+FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto+"?subject=Meldung%20Systemfehler&body="+("\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method+"%0D%0A\n\t\t\t\tFehler Meldung: "+t.message.detail+"%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!"),openMessagecard(t){bootstrap.Collapse.getOrCreateInstance(t.target.getAttribute("href")).toggle()}},unmounted(){M.parentElement.removeChild(M)},computed:{showmaillink:function(){return""!==FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto}},template:'\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t'});I.use(t),I.use(n);const N=I.mount(M);document.body.appendChild(M);var V={install:(t,e)=>{t.config.globalProperties.$p||t.use(tt);const r={alertSuccess(t){if(Array.isArray(t))return t.forEach(this.alertSuccess);N.$refs.toast.add({severity:"success",summary:"Info",detail:t,life:1e3})},alertInfo(t){if(Array.isArray(t))return t.forEach(this.alertInfo);N.$refs.toast.add({severity:"info",summary:"Info",detail:t,life:3e3})},alertWarning(t){if(Array.isArray(t))return t.forEach(this.alertWarning);N.$refs.toast.add({severity:"warn",summary:"Achtung",detail:t})},alertError(t){if(Array.isArray(t))return t.forEach(this.alertError);N.$refs.toast.add({severity:"error",summary:"Achtung",detail:t})},alertSystemError(e){if(Array.isArray(e))return e.forEach(this.alertSystemError);N.$refs.alert.add({severity:"error",summary:Vue.computed(()=>t.config.globalProperties.$p.t("alert/systemerror")),detail:e})},confirmDelete:()=>new Promise((e,r)=>{N.$confirm.require({group:"fhcAlertConfirm",header:Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:Vue.computed(()=>t.config.globalProperties.$p.t("alert/confirm_delete")),acceptLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/loeschen")),acceptClass:"p-button-danger",rejectLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:"p-button-secondary",accept(){e(!0)},reject(){e(!1)}})}),confirm:e=>new Promise((r,n)=>{N.$confirm.require({group:e?.group??"fhcAlertConfirm",header:e?.header??Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:e?.message??"",acceptLabel:e?.acceptLabel??"Ok",acceptClass:e?.acceptClass??"btn btn-primary",rejectLabel:e?.rejectLabel??Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:e?.rejectClass??"btn btn-outline-secondary",accept(){r(!0)},reject(){r(!1)}})}),alertDefault(t,e,r,n=!1,s=!1){let a={severity:t,summary:e,detail:r,html:s};n||(a.life=3e3),N.$refs.toast.add(a)},alertMultiple(t,e="info",r="Info",n=!1,s=!1){return!!t.every(t=>"string"==typeof t)&&(t.forEach(t=>this.alertDefault(e,r,t,n,s)),!0)},handleSystemError(t){if(!t.hasOwnProperty("name")||t.name.toLowerCase()!=="AbortError".toLowerCase()){if("string"==typeof t)return r.alertSystemError(t);if(Array.isArray(t)&&t.every(t=>"string"==typeof t))return t.every(r.alertSystemError);if(!t.hasOwnProperty("handled")||!t.handled){if("object"==typeof t&&null!==t){let e="";return t.hasOwnProperty("response")&&t.response?.data?.retval?e+="Error Message: "+(t.response.data.retval.message||t.response.data.retval)+"\r\n":t.hasOwnProperty("message")&&(e+="Error Message: "+t.message.toUpperCase()+"\r\n"),t.hasOwnProperty("config")&&t.config.hasOwnProperty("url")&&(e+="Error ConfigURL: "+t.config.url+"\r\n"),t.hasOwnProperty("stack")&&(e+="Error Stack: "+t.stack+"\r\n"),""==e&&(e="Error Message: "+JSON.stringify(t)+"\r\n"),e+="Error Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,r.alertSystemError(e)}r.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method)}}},handleSystemMessage(t){if("string"==typeof t)return r.alertWarning(t);if(Array.isArray(t)){if(t.every(t=>"string"==typeof t))return t.every(r.alertWarning);if(t.every(t=>"object"==typeof t)&&null!==msg)return t.every(t=>{t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?r.alertWarning(JSON.stringify(t.data.retval)):r.alertSystemError(JSON.stringify(t))})}"object"!=typeof t||null===t?r.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method):t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?r.alertWarning(JSON.stringify(t.data.retval)):r.alertSystemError(JSON.stringify(t))},resetFormValidation(t){const e=new Event("fhc-form-reset");t.querySelectorAll(["[data-fhc-form-validate],[data-fhc-form-error]"]).forEach(t=>t.dispatchEvent(e))},handleFormValidation(t,e){if(void 0===e){if(t&&t.nodeType===Node.ELEMENT_NODE)return e=>r.handleFormValidation(e,t)}else if(400==t?.response?.status){let n=G.getError(t.response.data);"object"!=typeof n&&(n=t.response.data),r.resetFormValidation(e);const s=Object.entries(n).filter(([t,r])=>{const n=e.querySelector('[data-fhc-form-validate="'+t+'"]');return!n||(n.dispatchEvent(new CustomEvent("fhc-form-invalidate",{detail:r})),!1)}).map(t=>t[1]),a=e.querySelector("[data-fhc-form-error]");return void(a&&s.length?a.dispatchEvent(new CustomEvent("fhc-form-error",{detail:s})):s.forEach(r.alertError))}if(400==t?.response?.status){let e=G.getError(t.response.data);r.alertError("object"==typeof e?Object.values(e):e)}else r.handleSystemError(t)}};t.config.globalProperties.$fhcAlert=r,t.provide("$fhcAlert",t.config.globalProperties.$fhcAlert)}},q={install:(t,e)=>{if(t.config.globalProperties.$api)return;function r(t,e){Array.isArray(t)?t.forEach(e):Object.entries(t).forEach(([t,r])=>r.forEach(r=>e(r,t)))}t.config.globalProperties.$fhcAlert||t.use(V);let n={success:!0,fail:!0,combine:{form:["validation","general"],toast:["validation","general","not_found","site_failed"]},handler:{form(t,e){t.clearValidation(),e.forEach(e=>t.setFeedback(!1,e.messages||e.message))},async toast(e){const r=t.config.globalProperties.$p;if(!r)return Promise.reject("Phrasen plugin not loaded!");async function n(t){t=t.reduce((t,e)=>{switch(e.type){case"not_found":case"site_failed":e.message?t[e.message]=[e.url]:t._default=[e.url];break;case"general":t._default||(t._default=[]),t._default.push(e.message);break;case"validation":Object.entries(e.messages).forEach(([e,r])=>{t[e]||(t[e]=[]),Array.isArray(r)?t[e].push(...r):t[e].push(r)})}return t},{});let e=0;const n=await Promise.all(Object.entries(t).sort((t,e)=>["_default"].indexOf(e[0])-["_default"].indexOf(t[0])).map(async([t,n])=>{if("_default"==t){await r.loadCategory("dashboard");t='
'+r.t("dashboard/general")+"
"}else t="
"+t+"
";return e+=n.length,t+"
"+n.join("
")+"
"}));return{counter:e,msgs:n}}let s,a;Array.isArray(e)?({counter:s,msgs:a}=await n(e)):({counter:s,msgs:a}=await Object.entries(e).reduce(async(t,[e,r])=>{const s=await t,{counter:a,msgs:i}=await n(r);return s.counter+=a,s.msgs.push("
"+e+"
"+i.join("")+"
"),s},Promise.resolve({counter:0,msgs:[]}))),await r.loadCategory("ui");const i=r.t("ui/n_errors",{n:s});t.config.globalProperties.$fhcAlert.alertDefault("error",i,"
"+a.join("")+"
",!0,!0)},php(e){r(e,(e,r)=>{var n="";switch(n+="Message: "+e.message+"\n\n",n+="Filename: "+e.filename+"\n",n+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(n+="\nBacktrace: ",e.backtrace.forEach(t=>{n+="\n\tFile: "+t.file+"\n",n+="\tLine: "+t.line+"\n",n+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":r?r+=": PHP "+e.severity:r="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("warn",r,n,!0);break;case"Notice":case"User Notice":case"Runtime Notice":r?r+=": PHP "+e.severity:r="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("info",r,n,!0);break;default:n="Type: PHP "+e.severity+"\n\n"+n,r&&(n=r+"\n\n"+n),t.config.globalProperties.$fhcAlert.alertSystemError(n)}})},exception(e){r(e,(e,r)=>{var n="";r&&(n+=r+"\n\n"),n+="Type: "+e.class+"\n\n",n+="Message: "+e.message+"\n\n",n+="Filename: "+e.filename+"\n",n+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(n+="\nBacktrace: ",e.backtrace.forEach(t=>{n+="\n\tFile: "+t.file+"\n",n+="\tLine: "+t.line+"\n",n+="\tFunction: "+t.function+"\n"})),t.config.globalProperties.$fhcAlert.alertSystemError(n)})},db(e){r(e,(e,r)=>{var n="";r&&(n+=r+"\n\n"),void 0!==e.heading&&(n+=e.heading+"\n\n"),void 0!==e.code&&(n+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(n+="SQL: "+e.sql+"\n\n"),void 0!==e.message?n+="Message: "+e.message+"\n\n":void 0!==e.messages&&(n+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(n+="Filename: "+e.filename+"\n"),void 0!==e.line&&(n+="Line Number: "+e.line+"\n"),t.config.globalProperties.$fhcAlert.alertSystemError(n)})},auth(e){r(e,(e,r)=>{r?r+=": "+e.message:r=e.message;var n="";n+="Controller name: "+e.controller+"\n",n+="Method name: "+e.method+"\n",n+="Required permissions: "+e.required_permissions,t.config.globalProperties.$fhcAlert.alertDefault("error",r,n,!0)})}}};function s(t,e,r,n){if("string"==typeof t&&void 0===n)[e,r,n]=[t,e,r],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===r&&void 0===n&&(n=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},n?n.form=t:n={form:t}}return[e,r,n]}function a(t){if("string"==typeof t.data||t.data instanceof String)return a({data:t});const e=t.data;return delete t.data,e?(e.meta?e.meta.response=t:e.meta={response:t},e):{meta:{response:t},data:null}}function i(t){if(!1===t||"off"===t)return{...n,success:!1,fail:!1};if(!t||!0===t)return{...n};if("success"===t)return{...n,fail:!1};if("fail"===t)return{...n,success:!1};const{success:e,fail:r,handler:s,combine:a}=t;return t={...n},Object.entries({fail:r,success:e}).forEach(([e,r])=>{void 0!==r&&(t[e]=r)}),Object.entries({handler:s,combine:a}).forEach(([e,r])=>{void 0!==r&&(t[e]={...t[e],...r})}),t}function o(t){const e=i(t?.errorHandling);if(t?.form){const r=e.handler.form;e.handler={...e.handler,form:e=>r(t.form,e)}}else e.combine={...e.combine,form:[]};return e}function l(t){return t.response?404==t.response.status?[{type:"not_found",message:t.message,url:t.request.responseURL}]:null==t.response.data.errors?[]:t.response.data.errors:t.request?[{type:"site_failed",message:t.message,url:t.request.responseURL}]:[{type:"script",message:t.message}]}function c(t,e){const r={},n=[];if(null==e)return{};for(;e.length;)n.push(e.pop());for(var s of n){let n=s.type,i=null;for(var a in t.combine){let e=t.combine[a].includes(n),r=t.handler[a];if(e&&r&&(i=a,"form"==i))break}i&&(n=i);t.handler[n]?(r[n]||(r[n]=[]),Array.isArray(s)?r[n].push(...s):r[n].push(s)):e.push(s)}return r}void 0!==e?.errorHandling&&(n=i(e.errorHandling));const d=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});d.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,r])=>{if(r instanceof FileList)for(const n of r)t.FormData.append(e+(r.length>1?"[]":""),n);else Array.isArray(r)?r.every(t=>!(t instanceof File))?t.jsondata[e]=r:r.forEach(n=>t.FormData.append(e+(r.length>1?"[]":""),n)):t.jsondata[e]=r;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),d.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(r=>(e.config[r.type+"ErrorHandler"]||t.config.globalProperties.$api._defaultErrorHandlers[r.type])(r,e.config))),a(e)),t=>{if("ERR_CANCELED"==t.code)return Promise.reject({handled:!0,...t});const e=o(t.config);if(!e.fail)return Promise.reject(t);const r=l(t),n=c(e,r);for(var s in n)e.handler[s](n[s]);return r.length?Promise.reject(t):Promise.reject({handled:!0,...t})}),t.config.globalProperties.$api={getUri:t=>d.getUri({url:t}),get:(t,e,r,n)=>([e,r,n]=s(t,e,r,n),r&&(n?n.params=r:n={params:r}),d.get(e,n)),post:(t,e,r,n)=>([e,r,n]=s(t,e,r,n),d.post(e,r,n)),call(e,r,n){if(Array.isArray(e)){const a=t.config.globalProperties.$api;return Promise.allSettled(e.map((t,e)=>(Array.isArray(t)||(t=["#"+e,t]),a.call(t[1],{errorHeader:t[0],errorHandling:!1})))).then(t=>{const[,,e]=s(n,void 0,void 0,r||{}),a=o(e);if(!a.success&&!a.fail)return t;const i={};for(var d of t){const[t,e]="fulfilled"===d.status?[a.success,d.value]:[a.fail,d.reason];if(!t)return;const r=c(a,l(e));for(var u in r)i[u]?i[u][e.config.errorHeader]=r[u]:i[u]={[e.config.errorHeader]:r[u]}}for(var p in i)a.handler[p](i[p]);return t})}let{method:a,url:i,params:d,config:u}=e;return void 0!==r&&(u=r),a||(a="get"),a.toLowerCase&&(a=a.toLowerCase()),"get"==a?this.get(n,i,d,u):"post"==a?this.post(n,i,d,u):void console.error("FhcApi: method not allowed:",a)},getErrorHandler:t=>o(t)},t.provide("$api",t.config.globalProperties.$api)}},Z={loadCategory:t=>({method:"get",url:"/api/frontend/v1/phrasen/loadModule/"+t}),setLanguage:(t,e)=>({method:"post",url:"/api/frontend/v1/phrasen/setLanguage",params:{categories:t,language:e}}),getLanguage:()=>({method:"get",url:"/api/frontend/v1/phrasen/getLanguage"}),getActiveDbLanguages:()=>({method:"get",url:"/api/frontend/v1/phrasen/getAllLanguages"})};const W=Vue.reactive({}),K={};let Q=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language),X=Vue.computed(()=>Q.value?FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(t=>t.sprache==Q.value).LC_Time:null);const Y={user_language:Q,user_locale:X,setLanguage(t){const e=Object.keys(W);return this.config.globalProperties.$api.call(Z.setLanguage(e,t)).then(e=>(e.data.forEach(t=>{W[t.category][t.phrase]=t.text}),Q.value=t,e))},loadCategory(t){return Array.isArray(t)?Promise.all(t.map(this.config.globalProperties.$p.loadCategory)):(K[t]||(K[t]=this.config.globalProperties.$api.call(Z.loadCategory(t)).then(e=>e?.data?function(t,e){return t.filter(t=>t.category==e).reduce((t,e)=>(t[e.phrase]||(t[e.phrase]=e.text),t),{})}(e.data,t):{}).then(e=>{W[t]=e})),K[t])},t_ref(t,e,r){return console.warn("deprecated"),Vue.computed(()=>this.t(t,e,r))},t(t,e,r){if(void 0===r&&(Array.isArray(t)&&2==t.length||t.split&&2==t.split("/").length)&&(r=e,[t,e]=t.split?t.split("/"):t),void 0===e)return console.error("invalid input",t,e,r),"";let n=Vue.computed(()=>W[t]?function(t,e,r){let n=W[t][e];return n?(r&&(n=n.replace(/\{([^}]*)\}/g,(t,e)=>void 0===r[e]?t:r[e])),n):"<< PHRASE "+e+">>"}(t,e,r):"");return W[t]||this.loadCategory(t),n.value}};var tt={install(t,e){t.config.globalProperties.$fhcApi||t.use(L),t.config.globalProperties.$api||t.use(q),t.config.globalProperties.$p={t:Y.t,loadCategory:e=>Y.loadCategory.call(t,e),setLanguage:e=>Y.setLanguage.call(t,e),user_language:Q,user_locale:X,t_ref:Y.t_ref},t.provide("$p",t.config.globalProperties.$p)}},et={search:t=>({method:"post",url:"/api/frontend/v1/searchbar/search",params:t}),searchCis:t=>({method:"post",url:"/api/frontend/v1/searchbar/searchCis",params:t}),searchStv:t=>({method:"post",url:"/api/frontend/v1/searchbar/searchStv",params:t})};let rt=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.theme.name);const nt=FHC_JS_DATA_STORAGE_OBJECT.theme.modes,st=t=>{if(!t)return;for(const t of nt)document.documentElement.classList.remove(t);rt.value=t,document.documentElement.classList.add(t),document.body.setAttribute("data-bs-theme",t);let e=document.querySelector('link[href*="primevue/resources/themes"]');"dark"==t?e.attributes.href.value=e.attributes.href.value.replace("bootstrap4-light-blue","bootstrap4-dark-blue"):("light"==t||e.attributes.href.value.includes("bootstrap4-dark-blue"))&&(e.attributes.href.value=e.attributes.href.value.replace("bootstrap4-dark-blue","bootstrap4-light-blue")),localStorage.setItem("theme",t)};var at={install:(t,e)=>{document.documentElement.classList.add(rt.value),(()=>{let t=localStorage.getItem("theme");t&&nt.includes(t)||(t=nt[0],localStorage.setItem("theme",t)),st(t)})(),t.config.globalProperties.$theme={theme_name:rt,theme_modes:nt,switchTheme:t=>{st(t)}}}};const it=Vue.createApp({name:"CisApp",components:{FhcSearchbar:v,CisMenu:b},data:function(){return{searchbaroptions:{origin:"cis",cssclass:"",calcheightonly:!0,types:{employee:Vue.computed(()=>this.$p.t("search/type_employee")),student:Vue.computed(()=>this.$p.t("search/type_student")),room:Vue.computed(()=>this.$p.t("search/type_room")),organisationunit:Vue.computed(()=>this.$p.t("search/type_organisationunit")),cms:Vue.computed(()=>this.$p.t("search/type_cms")),dms:Vue.computed(()=>this.$p.t("search/type_dms"))},actions:{employee:{defaultaction:{type:"link",action:function(t){return FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/Cis/Profil/View/"+t.uid}},childactions:[]},student:{defaultaction:{type:"link",action:function(t){return FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/Cis/Profil/View/"+t.uid}},childactions:[]},room:{defaultaction:{type:"link",renderif:function(t){return null!==t.content_id},action:function(t){return FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/CisVue/Cms/content/"+t.content_id}},childactions:[{label:"LV-Plan",icon:"fas fa-bookmark",type:"link",action:function(t){return FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/CisVue/Cms/getRoomInformation/"+t.ort_kurzbz}},{label:"Rauminformation",icon:"fas fa-info-circle",type:"link",renderif:function(t){return null!==t.content_id},action:function(t){return FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/CisVue/Cms/content/"+t.content_id}}]},organisationunit:{defaultaction:{type:"link",renderif:function(t){return!!t.mailgroup},action:function(t){return"mailto:"+t.mailgroup}},childactions:[]},cms:{defaultaction:{type:"link",action:function(t){return FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/CisVue/Cms/content/"+t.content_id}},childactions:[]},dms:{defaultaction:{type:"link",action:function(t){return FHC_JS_DATA_STORAGE_OBJECT.app_root+"cms/dms.php?id="+t.dms_id}},childactions:[]}}}}},methods:{searchfunction:function(t){return this.$api.call(et.searchCis(t))}}});it.use(primevue.config.default,{zIndex:{overlay:9e3,tooltip:8e3}}),it.use(tt),it.use(at),it.mount("#cis-header"); //# sourceMappingURL=Cis.js.map diff --git a/public/dist/js/apps/Cis.js.map b/public/dist/js/apps/Cis.js.map index 6ca6341fd..1a7714f63 100644 --- a/public/dist/js/apps/Cis.js.map +++ b/public/dist/js/apps/Cis.js.map @@ -1 +1 @@ -{"version":3,"file":"Cis.js","sources":["../../../js/components/searchbar/result/template/action.js","../../../js/components/searchbar/result/template/frame.js","../../../js/components/searchbar/result/template/actions.js","../../../js/components/searchbar/result/person.js","../../../js/components/searchbar/result/room.js","../../../js/components/searchbar/result/employee.js","../../../js/components/searchbar/result/organisationunit.js","../../../js/components/searchbar/result/student.js","../../../js/components/searchbar/result/prestudent.js","../../../js/components/searchbar/result/dms.js","../../../js/components/searchbar/result/cms.js","../../../js/components/searchbar/result/mergedstudent.js","../../../js/components/searchbar/result/mergedperson.js","../../../js/components/searchbar/searchbar.js","../../../js/api/factory/cis/menu.js","../../../js/components/Cis/Menu.js","../../../js/components/Cis/Menu/Entry.js","../../../js/components/Cis/Sprachen.js","../../../js/components/Cis/ThemeSwitch.js","../../../js/api/search.js","../../../js/api/phrasen.js","../../../js/api/navigation.js","../../../js/api/filter.js","../../../js/api/studstatus.js","../../../js/api/profil.js","../../../js/api/profilUpdate.js","../../../js/api/lvPlan.js","../../../js/api/stv.js","../../../js/api/stv/verband.js","../../../js/api/stv/students.js","../../../js/api/stv/filter.js","../../../js/api/stv/konto.js","../../../js/api/stv/group.js","../../../js/api/stv/kontakt.js","../../../js/api/stv/prestudent.js","../../../js/api/stv/status.js","../../../js/api/stv/details.js","../../../js/api/stv/exam.js","../../../js/api/stv/abschlusspruefung.js","../../../js/api/stv/grades.js","../../../js/api/stv/mobility.js","../../../js/api/stv/archiv.js","../../../js/api/stv/documents.js","../../../js/api/stv/exemptions.js","../../../js/api/stv/jointstudies.js","../../../js/api/stv/courselist.js","../../../js/api/notiz.js","../../../js/api/notiz/person.js","../../../js/api/betriebsmittel.js","../../../js/api/betriebsmittel/person.js","../../../js/api/checkperson.js","../../../js/api/ort.js","../../../js/api/cms.js","../../../js/api/lehre.js","../../../js/api/addons.js","../../../js/api/messages.js","../../../js/api/messages/person.js","../../../js/api/vorlagen.js","../../../js/api/studium.js","../../../js/api/fhcapifactory.js","../../../js/api/dashboard.js","../../../js/api/bookmark.js","../../../js/api/ampeln.js","../../../js/api/studiengang.js","../../../js/api/menu.js","../../../js/api/authinfo.js","../../../js/api/language.js","../../../js/plugin/OldFhcApi.js","../../../js/RESTClient.js","../../../js/plugins/FhcAlert.js","../../../js/plugins/Api.js","../../../js/api/factory/phrasen.js","../../../js/plugins/Phrasen.js","../../../js/api/factory/searchbar.js","../../../js/plugins/Theme.js","../../../js/apps/Cis.js"],"sourcesContent":["export default {\n\tname: 'SearchbarResultTemplateAction',\n\temits: [ 'actionexecuted' ],\n\tprops: { \n\t\tres: Object,\n\t\taction: Object\n\t},\n\tcomputed: {\n\t\tactionHref() {\n\t\t\tif (this.action.type !== 'link')\n\t\t\t\treturn 'javascript:void(0);';\n\t\t\treturn typeof this.action.action === 'function'\n\t\t\t\t? this.action.action(this.res) \n\t\t\t\t: this.action.action;\n\t\t}\n\t},\n\tmethods: {\n\t\tactionFunc() {\n\t\t\tif (this.action.type === 'function')\n\t\t\t\tthis.action.action(this.res);\n\t\t\tthis.$emit('actionexecuted');\n\t\t},\n\t\trenderif: function() {\n\t\t\tif(this.action?.renderif === undefined) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn this.action.renderif(this.res);\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t`\n};","import ResultAction from \"./action.js\";\nimport ResultActions from \"./actions.js\";\n\nexport default {\n\tname: 'SearchbarResultTemplateFrame',\n\tcomponents: {\n\t\tResultAction,\n\t\tResultActions\n\t},\n\temits: [ 'actionexecuted' ],\n\tprops: {\n\t\tres: Object,\n\t\tactions: Object,\n\t\ttitle: String,\n\t\timage: String,\n\t\timageFallback: String\n\t},\n\ttemplate: `\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{{ title }}\n\t\t\t\t\n\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t
`\n};","import ResultAction from \"./action.js\";\n\nexport default {\n\tname: 'SearchbarResultTemplateActions',\n\tcomponents: {\n\t\tResultAction\n\t},\n\temits: [ 'actionexecuted' ],\n\tprops: {\n\t\tres: Object,\n\t\tactions: Array\n\t},\n\tmethods: {\n\t\trenderif: function(action) {\n\t\t\tif(action?.renderif === undefined) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn action.renderif(this.res);\n\t\t}\n\t},\n\ttemplate: `\n\t
\n\t\t\n\t
`\n};","import TemplateFrame from \"./template/frame.js\";\n\nexport default {\n\tname: 'SearchbarResultPerson',\n\tcomponents: {\n\t\tTemplateFrame\n\t},\n\temits: [ 'actionexecuted' ],\n\tprops: {\n\t\tres: Object,\n\t\tactions: Object\n\t},\n\tcomputed: {\n\t\temails() {\n\t\t\treturn new Set(this.res.email);\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('person/person_id') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.person_id }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_emails') }}
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t`\n};","import TemplateFrame from \"./template/frame.js\";\n\nexport default {\n\tname: 'SearchbarResultRoom',\n\tcomponents: {\n\t\tTemplateFrame\n\t},\n\temits: [ 'actionexecuted' ],\n\tprops: {\n\t\tmode: String,\n\t\tres: Object,\n\t\tactions: Object\n\t},\n\tcomputed: {\n\t\tequipment() {\n\t\t\tif (!this.res.equipment)\n\t\t\t\treturn \"\";\n\t\t\treturn this.res.equipment.replace(new RegExp('
', 'ig'), '');\n\t\t},\n\t\taddress() {\n\t\t\tlet address = this.res.zip || '';\n\t\t\tif (this.res.city)\n\t\t\t\taddress += (address ? ' ' : '') + this.res.city;\n\t\t\tif (this.res.street)\n\t\t\t\taddress += (address ? ', ' : '') + this.res.street;\n\t\t\tif (this.res.floor)\n\t\t\t\taddress += (address ? ' / ' : '') + this.$p.t('search/result_address_floor', this.res);\n\n\t\t\treturn address || this.$p.t('search/result_address_none');\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_room_address') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ address }}\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_workplaces') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.sitzplaetze }}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_building') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.building }}\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_equipment') }}
\n\t\t\t\t
\n\t\t\t\t\t
','')\">
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t`\n};","import TemplateFrame from \"./template/frame.js\";\n\nexport default {\n\tname: 'SearchbarResultEmployee',\n\tcomponents: {\n\t\tTemplateFrame\n\t},\n\temits: [ 'actionexecuted' ],\n\tprops: {\n\t\tres: Object,\n\t\tactions: Object\n\t},\n\ttemplate: `\n\t\n\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_stdkst') }}
\n\t\t\t\t
\n\t\t\t\t\t
    0\">\n\t\t\t\t\t\t
  • {{ stdkst }}
  • \n\t\t\t\t\t
\n\t\t\t\t\t{{ $p.t('search/result_stdkst_none') }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('lehre/organisationseinheit') }}
\n\t\t\t\t
\n\t\t\t\t\t
    0\">\n\t\t\t\t\t\t
  • {{ oe }}
  • \n\t\t\t\t\t
\n\t\t\t\t\t{{ $p.t('search/result_oe_none') }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_emails') }}
\n\t\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('person/telefon') }}
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t`\n};","import TemplateFrame from \"./template/frame.js\";\n\nexport default {\n\tname: 'SearchbarResultOrganistationunit',\n\tcomponents: {\n\t\tTemplateFrame\n\t},\n\temits: [ 'actionexecuted' ],\n\tprops: {\n\t\tres: Object,\n\t\tactions: Object\n\t},\n\ttemplate: `\n\t\n\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_parent_oe') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.parentoe_name }}\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_group_emails') }}
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t{{ res.mailgroup }}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_leader') }}
\n\t\t\t\t
\n\t\t\t\t\t
    0\">\n\t\t\t\t\t\t
  • {{ leader.name }}
  • \n\t\t\t\t\t
\n\t\t\t\t\t{{ $p.t('search/result_leader_none') }}\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_number_of_employees') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.number_of_people }}\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t`\n};","import TemplateFrame from \"./template/frame.js\";\n\nexport default {\n\tname: 'SearchbarResultStudent',\n\tcomponents: {\n\t\tTemplateFrame\n\t},\n\temits: [ 'actionexecuted' ],\n\tprops: {\n\t\tmode: String,\n\t\tres: Object,\n\t\tactions: Object\n\t},\n\tcomputed: {\n\t\tphoto_url() {\n\t\t\tif (this.mode != 'simple')\n\t\t\t\treturn this.res.photo_url;\n\t\t\tif (this.res.foto)\n\t\t\t\treturn 'data:image/jpeg;base64,' + this.res.foto;\n\t\t\treturn null;\n\t\t},\n\t\temails() {\n\t\t\tif (this.mode == 'simple')\n\t\t\t\treturn new Set([this.res.email]);\n\t\t\treturn new Set(this.res.email);\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_student_uid') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.uid }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('person/person_id') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.person_id }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('person/matrikelnummer') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.matrikelnr }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_emails') }}
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t`\n};","import TemplateFrame from \"./template/frame.js\";\n\nexport default {\n\tname: 'SearchbarResultPrestudent',\n\tcomponents: {\n\t\tTemplateFrame\n\t},\n\temits: [ 'actionexecuted' ],\n\tprops: {\n\t\tmode: String,\n\t\tres: Object,\n\t\tactions: Object\n\t},\n\tcomputed: {\n\t\ttitle() {\n\t\t\tif (this.mode == 'simple')\n\t\t\t\treturn this.res.name;\n\t\t\treturn this.res.name + ' (' + this.res.status + ' ' + this.res.stg_kuerzel + ')';\n\t\t},\n\t\tphoto_url() {\n\t\t\tif (this.mode != 'simple')\n\t\t\t\treturn this.res.photo_url;\n\t\t\tif (this.res.foto)\n\t\t\t\treturn 'data:image/jpeg;base64,' + this.res.foto;\n\t\t\treturn null;\n\t\t},\n\t\temails() {\n\t\t\tif (this.mode == 'simple')\n\t\t\t\treturn new Set([this.res.email]);\n\t\t\treturn new Set(this.res.email);\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('person/person_id') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.person_id }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_emails') }}
\n\t\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_student_uid') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.uid }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('person/matrikelnummer') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.matrikelnr }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_prestudent_id') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.prestudent_id }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('lehre/studiengang') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.bezeichnung }} {{ res.orgform ? '(' + res.orgform + ')' : '' }}\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t`\n};","import TemplateFrame from \"./template/frame.js\";\n\nexport default {\n\tname: 'SearchbarResultDms',\n\tcomponents: {\n\t\tTemplateFrame\n\t},\n\temits: [ 'actionexecuted' ],\n\tprops: {\n\t\tres: Object,\n\t\tactions: Object\n\t},\n\tcomputed: {\n\t\ticon() {\n\t\t\tswitch (this.res.mimetype) {\n\t\t\t\tcase 'application/pdf':\n\t\t\t\t\treturn 'file-pdf';\n\t\t\t\tcase 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':\n\t\t\t\tcase 'application/msword':\n\t\t\t\t\treturn 'file-word';\n\t\t\t\tcase 'application/vnd.openxmlformats-officedocument.presentationml.presentation':\n\t\t\t\tcase 'application/mspowerpoint':\n\t\t\t\t\treturn 'file-powerpoint';\n\t\t\t\tcase 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':\n\t\t\t\tcase 'application/vnd.ms-excel':\n\t\t\t\t\treturn 'file-excel';\n\t\t\t\tcase 'application/x-zip':\n\t\t\t\tcase 'application/zip':\n\t\t\t\t\treturn 'file-zipper';\n\t\t\t\tcase 'image/jpeg':\n\t\t\t\tcase 'image/gif':\n\t\t\t\tcase 'image/png':\n\t\t\t\t\treturn 'file-image';\n\t\t\t\tdefault:\n\t\t\t\t\treturn 'file';\n\t\t\t}\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_dms_id') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.dms_id }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_version') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.version }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_keywords') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.keywords }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('global/beschreibung') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.description }}\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t`\n};","import TemplateFrame from \"./template/frame.js\";\n\nexport default {\n\tname: 'SearchbarResultCms',\n\tcomponents: {\n\t\tTemplateFrame\n\t},\n\temits: [ 'actionexecuted' ],\n\tprops: {\n\t\tres: Object,\n\t\tactions: Object\n\t},\n\tinject: [\n\t\t'query'\n\t],\n\tcomputed: {\n\t\tpreview() {\n\t\t\tif (this.res.template_kurzbz != 'redirect') {\n\t\t\t\tlet text = this.res.content.replace(//ig, '').replace(/<[^>]+>/ig, '').replace(/^\\s+|\\s+$/g, '');\n\n\t\t\t\tif (text.length > 1000) {\n\t\t\t\t\t// NOTE(chris): focus on searched text!\n\t\t\t\t\tlet lower = text.toLowerCase();\n\t\t\t\t\tlet firstOccurence = Math.min(this.query.split(' ').reduce((a, c) => {\n\t\t\t\t\t\t// NOTE(chris): filter query for words that affects the content field and get the lowest index of them\n\t\t\t\t\t\tif (c == 'or')\n\t\t\t\t\t\t\treturn a;\n\t\t\t\t\t\tlet i = c.indexOf(':');\n\t\t\t\t\t\tif (i < 0 || (i > 0 && ['content', 'inhalt'].includes(c.split(':')[0]))) {\n\t\t\t\t\t\t\tlet posInText = lower.indexOf(c);\n\t\t\t\t\t\t\tif (posInText >= 0)\n\t\t\t\t\t\t\t\ta.push(posInText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn a;\n\t\t\t\t\t}, []));\n\n\t\t\t\t\tif (firstOccurence) {\n\t\t\t\t\t\tif (firstOccurence + 997 >= text.length) {\n\t\t\t\t\t\t\tfirstOccurence = text.length - 997;\n\t\t\t\t\t\t\tif (firstOccurence > 0)\n\t\t\t\t\t\t\t\treturn '...' + text.substr(firstOccurence, 997);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn '...' + text.substr(firstOccurence, 994) + '...';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\ttext = text.substr(0, 997) + '...';\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn text;\n\t\t\t}\n\t\t\t\n\t\t\tlet url = this.res.content_url;\n\t\t\tif (url.substr(0, 16) == '../index.ci.php/')\n\t\t\t\turl = this.$fhcApi.getUri(url.substr(16));\n\t\t\telse if (url.substr(0, 3) == '../')\n\t\t\t\turl = FHC_JS_DATA_STORAGE_OBJECT.app_root.replace(/\\/+$/, '') + url.substr(2);\n\t\t\treturn '' + url + '';\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t\t
\n\t\t
\n\t\t\t{{ $p.t('search/result_content_none') }}\n\t\t
\n\t`\n};","import ResultPrestudent from \"./prestudent.js\";\nimport ResultStudent from \"./student.js\";\n\nexport default {\nname: 'SearchbarResultMergedstudent',\n\t\tcomponents: {\n\t\tResultPrestudent,\n\t\tResultStudent\n\t},\n\temits: [ 'actionexecuted' ],\n\tprops: {\n\t\tmode: String,\n\t\tres: Object,\n\t\tactions: Object\n\t},\n\tcomputed: {\n\t\tprestudent() {\n\t\t\tconst prestudent = this.res.list.filter(item => item.type == 'prestudent');\n\t\t\treturn prestudent.pop();\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t`\n};","import TemplateFrame from \"./template/frame.js\";\nimport TemplateAction from \"./template/action.js\";\n\nexport default {\n\tname: 'SearchbarResultMergedperson',\n\tcomponents: {\n\t\tTemplateFrame,\n\t\tTemplateAction\n\t},\n\temits: [ 'actionexecuted' ],\n\tprops: {\n\t\tmode: String,\n\t\tres: Object,\n\t\tactions: Object\n\t},\n\tcomputed: {\n\t\tperson() {\n\t\t\t // Cummulate all emails\n\t\t\tconst email = this.res.list.reduce((a, c) => [...a, ...(Array.isArray(c.email) ? c.email : [c.email])], []);\n\n\t\t\t// Use person entry if available (with cummulated emails)\n\t\t\tconst person = this.res.list.find(item => item.type == 'person');\n\t\t\tif (person)\n\t\t\t\treturn {...person, email};\n\n\t\t\t // Those properties should be the same in all entries\n\t\t\tconst { person_id, name } = this.res.list[0];\n\t\t\t // Get first photo (prefer student photo if available)\n\t\t\tlet photo_url;\n\t\t\tif (this.mode == 'simple') {\n\t\t\t\tlet foto = (this.students ? this.students.find(el => el.foto) : null)?.foto;\n\t\t\t\tif (foto)\n\t\t\t\t\tfoto = 'data:image/jpeg;base64,' + foto;\n\t\t\t\tphoto_url = foto || this.employee?.photo_url;\n\t\t\t} else\n\t\t\t\tphoto_url = ((this.students ? this.students.find(el => el.photo_url) : null) || this.employee)?.photo_url;\n\n\t\t\treturn { person_id, name, photo_url, email };\n\t\t},\n\t\temployee() {\n\t\t\treturn this.res.list.find(item => [\n\t\t\t\t'employee',\n\t\t\t\t'unassigned_employee',\n\t\t\t\t'mitarbeiter',\n\t\t\t\t'mitarbeiter_ohne_zuordnung'\n\t\t\t].includes(item.type)) || null;\n\t\t},\n\t\tstudents() {\n\t\t\tconst students = this.res.list.filter(item => [\n\t\t\t\t\t'student',\n\t\t\t\t\t'prestudent',\n\t\t\t\t\t'studentcis',\n\t\t\t\t\t'studentStv'\n\t\t\t\t].includes(item.type))\n\t\t\t\t.filter((item, idx, arr) => {\n\t\t\t\t\tif (item.type === 'prestudent') {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet prestudentwithsameuidexists = arr.some(tmpitem => {\n\t\t\t\t\t\treturn tmpitem.uid === item.uid && tmpitem.type === 'prestudent';\n\t\t\t\t\t});\n\n\t\t\t\t\tif (prestudentwithsameuidexists) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}).sort((a, b) => (a.sort || 0) - (b.sort || 0));\n\t\t\treturn students.length ? students : null;\n\t\t},\n\t\temails() {\n\t\t\t// Remove duplicates\n\t\t\treturn new Set(this.person.email);\n\t\t},\n\t\ttelurl() {\n\t\t\treturn 'tel:' + this.employee?.phone;\n\t\t},\n\t\tinaktiv() {\n\t\t\treturn this.res.list.some(item => item?.aktiv === false);\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('person/person_id') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ person.person_id }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_emails') }}
\n\t\t\t\t\n\t\t\t
\n\n\t\t\t\n\n\t\t\t\n\t\t
\n\t`\n};","import person from \"./result/person.js\";\nimport room from \"./result/room.js\";\nimport employee from \"./result/employee.js\";\nimport organisationunit from \"./result/organisationunit.js\";\nimport student from \"./result/student.js\";\nimport prestudent from \"./result/prestudent.js\";\nimport dms from \"./result/dms.js\";\nimport cms from \"./result/cms.js\";\nimport mergedStudent from \"./result/mergedstudent.js\";\nimport mergedPerson from \"./result/mergedperson.js\";\n\nexport default {\n\tname: \"FhcSearchbar\",\n\tcomponents: {\n\t\tperson,\n\t\troom,\n\t\temployee,\n\t\torganisationunit,\n\t\tstudent,\n\t\tprestudent,\n\t\tdms,\n\t\tcms,\n\t\tmergedStudent,\n\t\tmergedPerson\n\t},\n props: [ \"searchoptions\", \"searchfunction\" ],\n provide() {\n return {\n query: Vue.computed(() => this.lastQuery)\n };\n },\n data: function() {\n return {\n searchtimer: null,\n hidetimer: null,\n searchsettings: {\n searchstr: this.getSearchStr(),\n types: this.getInitiallySelectedTypes(),\n },\n searchresult: [],\n searchmode: '',\n showresult: false, \n searching: false,\n error: null,\n abortController: null,\n\t\t\tsettingsDropdown: null,\n lastQuery: ''\n };\n },\n\tcomputed: {\n\t\tsearchTypesPlaceholder() {\n\t\t\tif (!this.searchsettings.types.length) {\n\t\t\t\treturn Object.values(this.typeLabels).join(' / ');\n\t\t\t}\n\t\t\treturn this.searchsettings.types.map(type => this.typeLabels[type]).join(' / ');\n\t\t},\n\t\ttypes() {\n\t\t\tif (!this.searchoptions.types)\n\t\t\t\treturn [];\n\t\t\tif (Array.isArray(this.searchoptions.types))\n\t\t\t\treturn this.searchoptions.types;\n\t\t\treturn Object.keys(this.searchoptions.types);\n\t\t},\n\t\ttypeLabels() {\n\t\t\tif (!this.searchoptions.types)\n\t\t\t\treturn {};\n\t\t\tif (Array.isArray(this.searchoptions.types)) {\n\t\t\t\treturn this.searchoptions.types.reduce((res, type) => {\n\t\t\t\t\tres[type] = type;\n\t\t\t\t\treturn res\n\t\t\t\t}, {});\n\t\t\t}\n\t\t\treturn this.searchoptions.types;\n\t\t}\n\t},\n\ttemplate: /*html*/`\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n \n \n \n
\n\n
\n
\n
\n
\n \n
\n
{{ error }}
\n
{{ $p.t('search/error_no_results') }}
\n \n
\n
\n
\n\n\t\t\t\n\t\t\t\t 0\"\n\t\t\t\t\tclass=\"d-flex flex-column m-3\"\n\t\t\t\t>\n\t\t\t\t\t\n\t\t\t\t\t\t{{ $p.t('search/applyfilter_label') }}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{{ label }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n
\n\t\t\n `,\n watch:{\n\t\t'searchsettings.searchstr': function (newSearchValue) {\n\t\t\tif(this.searchoptions.origin){\n\t\t\t\tsessionStorage.setItem(`${this.searchoptions.origin}_searchstr`,newSearchValue);\n\t\t\t}\n\t\t},\n\t\t'searchsettings.types'(newValue) {\n\t\t\tif (Array.isArray(newValue) && newValue.length === 0) {\n\t\t\t\tthis.searchsettings.types = [...this.types];\n\t\t\t}\n\t\t\t// stores the search types in the localstorage, only if the newValue is also an array\n\t\t\tif (Array.isArray(newValue) && this.searchoptions.origin) {\n\t\t\t\tlocalStorage.setItem(`${this.searchoptions.origin}_searchtypes`, JSON.stringify(newValue));\n\t\t\t}\n\t\t\tthis.search();\n\t\t}\n },\n\tmounted(){\n\t\tthis.settingsDropdown = new bootstrap.Collapse(this.$refs.settings, {\n\t\t\ttoggle: false\n\t\t});\n\n\t\tif (!this.searchoptions.origin){\n\t\t\tconsole.warn(\"No origin defined in the searchoptions for the searchbar, please define the origin property in the searchbaroptions to allow reliable storage of searchstr and searchtypes accross applications.\");\n\t\t}\n\t},\n\tupdated() {\n\t\tif(this.showresult) {\n\t\t\tVue.nextTick(() => {\n\t\t\t\tthis.calcSearchResultHeight();\n\t\t\t});\n\t\t}\n\t},\n methods: {\n \tclearInput() {\n \t\tthis.searchsettings.searchstr = \"\";\n \t\tthis.hideresult();\n \t\tthis.$refs.input.focus()\n \t},\n\t\tgetInitiallySelectedTypes() {\n\t\t\tlet result = false;\n\t\t\tif (this.searchoptions.origin) {\n\t\t\t\tlet localStorageValue = localStorage.getItem(`${this.searchoptions.origin}_searchtypes`);\n\t\t\t\tif (localStorageValue) {\n\t\t\t\t\tresult = JSON.parse(localStorageValue);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (result)\n\t\t\t\treturn result;\n\t\t\tif (!this.searchoptions.types)\n\t\t\t\treturn [];\n\t\t\tif (Array.isArray(this.searchoptions.types))\n\t\t\t\treturn [...this.searchoptions.types];\n\t\t\treturn Object.keys(this.searchoptions.types);\n\t\t},\n\t\tgetSearchStr: function(){\n\t\t\tif (!this.searchoptions.origin)\n\t\t\t\treturn '';\n\t\t\treturn sessionStorage.getItem(`${this.searchoptions.origin}_searchstr`) ?? '';\n\t\t},\n\t\tcheckSettingsVisibility: function(event) {\n\t\t\t// hides the settings collapsible if the user clicks somewhere else\n\t\t\tif (!this.$refs.settings.contains(event.target))\n\t\t\t{\n\t\t\t\tthis.settingsDropdown.hide();\n\t\t\t}\n\t\t},\n\t\thandleShowSettings: function() {\n\t\t\t// adds the event listener checkSettingsVisibility only when the collapsible is shown\n\t\t\tdocument.addEventListener(\"click\", this.checkSettingsVisibility);\n\t\t},\n\t\thandleHideSettings: function () {\n\t\t\t// removes the event listener checkSettingsVisibility when the collapsible is hidden\n\t\t\tdocument.removeEventListener(\"click\", this.checkSettingsVisibility);\n\t\t},\n\t\tcalcSearchResultHeight: function() {\n\t\t\tconst rect = this.$refs.results.getBoundingClientRect();\n\t\t\tif( rect.height > 0 && rect.height < (window.innerHeight * 0.8) ) {\n\t\t\t\tthis.$refs.result.style.height = Math.ceil(rect.height + 16) + 'px';\n\t\t\t} else {\n\t\t\t\tthis.$refs.result.style.height = Math.floor(window.innerHeight * 0.8) + 'px';\n\t\t\t}\n\t\t},\n calcSearchResultExtent: function() {\n\t\t\tif(!this.showresult) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(this.searchoptions?.calcheightonly === undefined \n\t\t\t\t|| this.searchoptions.calcheightonly === false) {\n\t\t\t\tvar rect = this.$refs.searchbox.getBoundingClientRect();\n\t\t\t\tthis.$refs.result.style.top = Math.floor(rect.bottom + 3) + 'px';\n\t\t\t\tthis.$refs.result.style.right = Math.floor(rect.right) + 'px';\n\t\t\t\tthis.$refs.result.style.width = Math.floor(rect.width) + 'px';\n\t\t\t}\n this.calcSearchResultHeight();\n },\n search: function() {\n if( this.searchtimer !== null ) {\n clearTimeout(this.searchtimer);\n }\n if (this.abortController) {\n this.abortController.abort();\n this.abortController = null;\n }\n if( this.searchsettings.searchstr.length >= 2 ) {\n this.calcSearchResultExtent();\n this.searchtimer = setTimeout(\n this.callsearchapi,\n 500\n );\n } else { \n this.showresult = false;\n }\n },\n callsearchapi: function() {\n this.error = null;\n this.searchresult.splice(0, this.searchresult.length);\n this.searching = true;\n this.showsearchresult();\n if(this.searchsettings.types.length === 0) {\n this.error = this.$p.t('search/error_missing_type');\n this.searching = false;\n return;\n }\n\n if (this.abortController)\n this.abortController.abort();\n this.abortController = new AbortController();\n\n this.searchfunction(this.searchsettings, { timeout: 50000, signal: this.abortController.signal })\n .then(response=>{\n if (!response.data) {\n this.error = this.$p.t('search/error_general');\n } else {\n let res = response.data.map(el => el.data ? {...el, ...JSON.parse(el.data)} : el);\n this.lastQuery = response.meta.searchstring;\n if (this.searchoptions.mergeResults) {\n let counter = 0;\n let mergeTypes = [];\n let mergedType = 'merged-';\n let mergeKey = '';\n\n switch (this.searchoptions.mergeResults) {\n case 'student':\n mergeTypes = ['student', 'prestudent'];\n mergedType += this.searchoptions.mergeResults;\n mergeKey = 'uid';\n break;\n case 'person':\n mergeTypes = ['person', 'employee', 'student', 'prestudent'];\n mergedType += this.searchoptions.mergeResults;\n mergeKey = 'person_id';\n break;\n }\n\n if (mergeTypes.length) {\n res = Object.values(res.reduce((a, c) => {\n if (!mergeTypes.includes(c.renderer)) {\n a['nomerge' + counter++] = c;\n } else if (c[mergeKey] === null) {\n a['nomerge' + counter++] = c;\n } else if (a[c[mergeKey]] === undefined) {\n a[c[mergeKey]] = {\n rank: c.rank,\n renderer: mergedType,\n type: mergedType,\n list: [c]\n };\n } else {\n a[c[mergeKey]].list.push(c);\n if (c.rank > a[c[mergeKey]].rank)\n a[c[mergeKey]].rank = c.rank;\n }\n return a;\n }, {})).sort((a, b) => b.rank - a.rank);\n }\n }\n this.searchresult = res;\n this.searchmode = response.meta.mode;\n }\n this.searching = false;\n this.retry = 0;\n })\n .catch(error=> {\n if (error.code == \"ERR_CANCELED\") {\n return this.retry = 0;\n }\n if (error.code == \"ECONNABORTED\" && this.retry) {\n this.retry--;\n return this.callsearchapi();\n }\n\n this.error = this.$p.t('search/error_general', error);\n this.searching = false;\n this.retry = 0;\n });\n },\n refreshsearch: function() {\n this.search();\n this.togglesettings();\n },\n hideresult: function() {\n this.showresult = false;\n window.removeEventListener('resize', this.calcSearchResultExtent);\n },\n showsearchresult: function() {\n if( this.searchsettings.searchstr.length >= 2 ) {\n this.showresult = true;\n window.addEventListener('resize', this.calcSearchResultExtent);\n\t\t\t\tthis.calcSearchResultExtent();\n }\n },\n searchfocusin: function(e) {\n e.preventDefault();\n e.stopPropagation();\n if( this.hidetimer !== null ) {\n clearTimeout(this.hidetimer);\n }\n\t\t\tif (this.searchsettings.searchstr.length >= 2\n\t\t\t\t&& this.searchresult.length === 0) {\n\t\t\t\tthis.search();\n\t\t\t}\n },\n searchfocusout: function(e) {\n e.preventDefault();\n e.stopPropagation();\n this.hidetimer = setTimeout(\n this.hideresult,\n 100\n );\n },\n dash2camelCase(string) {\n return string.replace(/-([a-z])/g, g => g[1].toUpperCase());\n },\n isValidRenderer(renderer) {\n const camelCaseRenderer = this.dash2camelCase(renderer);\n return Object.keys(this.$.components).includes(camelCaseRenderer);\n },\n\t\tgetActions(res) {\n\t\t\tlet actions = this.searchoptions.actions[this.dash2camelCase(res.renderer)];\n\t\t\tif (actions) {\n\t\t\t\treturn actions;\n\t\t\t}\n\t\t\treturn this.searchoptions.actions[res.type];\n\t\t}\n }\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetMenu() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/CisMenu/getMenu'\n\t\t};\n\t}\n};","import CisMenuEntry from \"./Menu/Entry.js\";\nimport FhcSearchbar from \"../searchbar/searchbar.js\";\nimport CisSprachen from \"./Sprachen.js\"\nimport ThemeSwitch from \"./ThemeSwitch.js\";\nimport ApiCisMenu from '../../api/factory/cis/menu.js';\n\nexport default {\n components: {\n CisMenuEntry,\n FhcSearchbar,\n\t\tCisSprachen,\n\t\tThemeSwitch,\n },\n props: {\n\t\trootUrl: String,\n logoUrl: String,\n avatarUrl: String,\n logoutUrl: String,\n\t\tselectedtypes: Array,\n searchbaroptions: Object,\n searchfunction: Function\n },\n data: () => {\n return {\n entries: [],\n\t\t\tactiveEntry:null,\n\t\t\turl:null,\n\t\t\turlMatchRankings:[],\n\t\t\tnavUserDropdown:null,\n\t\t\tmenuOpen:true,\n };\n },\n\tprovide(){\n\t\treturn{\n\t\t\tsetActiveEntry: this.setActiveEntry,\n\t\t\taddUrlCount: this.addUrlCount,\n\t\t\tmakeParentContentActive: this.makeParentContentActive,\n\t\t}\n\t},\n\tcomputed:{\n\t\tmenuCollapseAriaLabel(){\n\t\t\tif(this.menuOpen){\n\t\t\t\treturn this.$p.t('global', 'collapseMenu');\n\t\t\t}else{\n\t\t\t\treturn this.$p.t('global', 'extendMenu');\n\t\t\t}\n\t\t},\n\t\thighestMatchingUrlCount(){\n\t\t\t// gets the hightest ranking inside the array\n\t\t\tlet highestMatch = Math.max(...this.urlMatchRankings);\n\n\t\t\tif(this.urlMatchRankings.length > 0){\n\t\t\t\t// if more than one entry has the same ranking, none should be active\n\t\t\t\treturn this.urlMatchRankings.filter((value)=>value == highestMatch).length > 1 ? null : highestMatch;\n\t\t\t}\n\n\t\t\treturn null;\n\t\t},\n\t\tsite_url(){\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router;\n\t\t}\n\t},\n\tmethods: {\n\t\tfetchMenu() {\n\t\t\treturn this.$api\n\t\t\t\t.call(ApiCisMenu.getMenu())\n\t\t\t\t.then(res => res.data)\n\t\t\t\t.then(menu => {\n\t\t\t\t\tthis.entries = menu;\n\t\t\t\t});\n\t\t},\n\t\tcheckSettingsVisibility: function (event) {\n\t\t\t// hides the settings collapsible if the user clicks somewhere else\n\t\t\tif (!this.$refs.navUserDropdown.contains(event.target)) {\n\t\t\t\tthis.navUserDropdown.hide();\n\t\t\t}\n\t\t},\n\t\thandleShowNavUser(){\n\t\t\tdocument.addEventListener(\"click\", this.checkSettingsVisibility);\n\t\t},\n\t\thandleHideNavUser(){\n\t\t\tdocument.removeEventListener(\"click\", this.checkSettingsVisibility);\n\t\t},\n\t\tmakeParentContentActive(content_id, collection=this.entries, parent=null){\n\t\t\tif(!collection) return;\n\t\t\tif (typeof collection == 'object' && !Array.isArray(collection) && Object.entries(collection).length > 0) {\n\t\t\t\tcollection = Object.values(collection);\n\t\t\t}\n\t\t\tfor(let entry of collection){\n\t\t\t\tif(entry.content_id == content_id){\n\t\t\t\t\tthis.activeEntry = parent;\n\t\t\t\t}\n\t\t\t\tthis.makeParentContentActive(content_id, entry.childs, entry.content_id);\n\t\t\t}\n\t\t\t\n\t\t},\n\t\taddUrlCount(count){\n\t\t\tthis.urlMatchRankings.push(count);\n\t\t},\n\n\t\tsetActiveEntry(content_id){\n\t\t\tthis.activeEntry = content_id;\n\t\t},\n\t},\n\tcreated(){\n\t\tthis.fetchMenu();\n\t},\n\tmounted(){\n\t\tthis.$p.loadCategory(['ui', 'global', 'profilUpdate'])\n\t\tthis.navUserDropdown = new bootstrap.Collapse(this.$refs.navUserDropdown,{\n\t\t\ttoggle: false\n\t\t});\n\t},\n template: /*html*/`\n\t\n\t\n
\n\t\t
\n\t\t\t\n\t\t\t\t\"Corporate\n\t\t\t\n\t\t\t\n\t\t
\n
\n\t
\n\t\t\n\t\t
    \n\t\t\t
  • Profil
  • \n\t\t\t
  • \n\t\t\t\t\n\t\t\t
  • \n\t\t\t

  • \n\t\t\t
  • Logout
  • \n\t\t
\n\t
\n `\n};\n","export default {\n name: 'CisMenuEntry',\n props: {\n entry: Object,\n level: {\n type: Number,\n default: 1\n },\n\t\tactiveContent: [String, Number],\n\t\thighestMatchingUrlCount: Number,\n },\n data: () => {\n\t\treturn {\n\t\t\tcollapse: null,\n\t\t\turlCount:0,\n }\n },\n\tinject: ['makeParentContentActive', 'setActiveEntry','addUrlCount'],\n\twatch:{\n\t\thighestMatchingUrlCount: function(newValue)\n\t\t{\n\t\t\t// if this entry has the most matching url parts then it should be active\n\t\t\tif (this.activeContent == null && newValue == this.urlCount)\n\t\t\t{\n\t\t\t\tthis.setActiveEntry(this.entry.content_id);\n\t\t\t}\n\t\t},\n\t\tactiveContent: function(newValue){\n\t\t\tif(newValue == this.entry.content_id){\n\t\t\t\t// wenn der Menupunkt nicht bereits offen ist\n\t\t\t\tif (!this.entry.menu_open){\n\t\t\t\t\tthis.entry.menu_open = true;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tif (this.searchRecursiveChild(this.entry, 'content_id',newValue)) {\n\t\t\t\t\tthis.entry.menu_open = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis.entry.menu_open = false;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'entry.menu_open': function (newValue,oldValue) {\n\t\t\tif (newValue) \n\t\t\t{\n\t\t\t\t// only invokes .show if this.collapse is not null\n\t\t\t\tthis.collapse && this.collapse.show();\n\t\t\t} \n\t\t\telse \n\t\t\t{\n\t\t\t\t// only invokes .hide if this.collapse is not null\n\t\t\t\tthis.collapse && this.collapse.hide();\n\t\t\t\tif (this.activeContent == this.entry.content_id)\n\t\t\t\t{\n\t\t\t\t\tthis.makeParentContentActive(this.entry.content_id);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n computed: {\n\t\tactive: function () {\n\t\t\tif (this.entry.menu_open){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\telse if (this.activeContent) {\n\t\t\t\treturn this.activeContent == this.entry.content_id;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n link() {\n if (this.entry.template_kurzbz == 'redirect') {\n if (!this.entry.content)\n return '';\n let xmlDoc = (new DOMParser()).parseFromString(this.entry.content,\"text/xml\");\n let url = xmlDoc.getElementsByTagName('url')[0];\n\n if (!url)\n return '';\n // TODO(chris): replace get params\n url = url.childNodes[0].nodeValue + \"\";\n\t\t\t\tif (url.includes(\"../cms/news.php\")) {\n\t\t\t\t\tlet news_regex = new RegExp(\"^\\.\\./cms/news\\.php\");\n\t\t\t\t\turl = url.replace(news_regex, FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/CisVue/Cms/news');\n\t\t\t\t}\n\t\t\t\telse if (url.includes(\"../cms/content.php?\")) {\n\t\t\t\t\tlet content_regex = new RegExp(\"^\\.\\./cms/content.php\\\\?content_id=([0-9]+)\");\n\t\t\t\t\tlet content_regex_result = content_regex.exec(url);\n\t\t\t\t\t// content_regex_result[1] will be the first matched group\n\t\t\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/CisVue/Cms/content/' + content_regex_result[1];\n\t\t\t\t}\n\t\t\t\telse if(url.includes(\"../index.ci.php\")){\n\t\t\t\t\tlet index_regex = new RegExp(\"^\\.\\./index\\.ci\\.php\");\n\t\t\t\t\turl = url.replace(index_regex, FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router);\n\t\t\t\t}\n\t\t\t\telse if (url.includes(\"../\")) {\n\t\t\t\t\tlet relative_regex = new RegExp(\"^\\.\\./\");\n\t\t\t\t\turl = url.replace(relative_regex, FHC_JS_DATA_STORAGE_OBJECT.app_root);\n\t\t\t\t}\n\t\t\t\treturn url;\n }\n return FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/CisVue/Cms/content/' + this.entry.content_id;\n },\n\t\thasFullLink() {\n\t\t\treturn this.link.startsWith(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router)\n\t\t},\n target() {\n if (this.entry.template_kurzbz == 'redirect') {\n if (!this.entry.content)\n return '';\n let xmlDoc = (new DOMParser()).parseFromString(this.entry.content,\"text/xml\");\n let target = xmlDoc.getElementsByTagName('target')[0];\n if (!target)\n return '';\n \n target = target.childNodes[0].nodeValue + \"\";\n if (target == 'content' || target == '_self')\n target = \"\";\n return target;\n }\n return ''\n },\n hasChilds() {\n return this.entry.childs && this.entry.childs.length !== 0;\n }\n },\n methods: {\n\t\tgetUrlMatchPoints(url,link){\n\t\t\tlet splitted_link = link.split('/');\n\t\t\tlet splitted_url = url.href.split('/');\n\n\t\t\tlet count = 0;\n\n\t\t\tfor(let part_url of splitted_url)\n\t\t\t{\n\t\t\t\tfor (let part_link of splitted_link)\n\t\t\t\t{\n\t\t\t\t\tif(part_url == part_link)\n\t\t\t\t\t{\n\t\t\t\t\t\tcount++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.urlCount = count;\n\t\t\tthis.addUrlCount(count);\n\t\t},\n\t\tcheckActiveUrl(url){\n\t\t\tthis.getUrlMatchPoints(url,this.link);\n\t\t\t\n\t\t\tlet url_hash_spaceSymbol_regex = new RegExp(\"%20\",\"gi\");\n\t\t\tlet url_hash_sharpSymbol_regex = new RegExp(\"^#\");\n\t\t\tlet url_hash = url.hash;\n\t\t\turl_hash = url_hash.replace(url_hash_spaceSymbol_regex, \" \").replace(url_hash_sharpSymbol_regex,\"\");\n\t\t\t\n\t\t\t// if the url hash contains the titel of the menu \n\t\t\t// or if the url equals the link of a menu \n\t\t\t// then set the menu active \n\t\t\tif (url_hash == this.entry.titel || url.href == this.link) {\n\t\t\t\t\tthis.setActiveEntry(this.entry.content_id);\n\t\t\t}\n\t\t},\n\t\t// searches the childs of an entry recursively based on the value of a property\n\t\tsearchRecursiveChild(entry,property,value){\n\t\t\tif (typeof entry.childs == 'object' && !Array.isArray(entry.childs) && Object.entries(entry.childs).length > 0){\n\t\t\t\tentry.childs = Object.values(entry.childs);\n\t\t\t}\n\t\t\tfor (let child of entry.childs) {\n\t\t\t\tif (child[property] == value) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif ((child.childs instanceof Array && child.childs.length > 0) || Object.values(child.childs).length > 0) {\n\t\t\t\t\tif (this.searchRecursiveChild(child, property, value)){\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\t\n\t\t\treturn false;\n\t\t},\n toggleCollapse(evt) {\n\t\t\tif (this.active)\n\t\t\t{\n\t\t\t\tthis.makeParentContentActive(this.entry.content_id); \n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.setActiveEntry(this.entry.content_id);\n\t\t\t}\n }\n },\n mounted() {\n if (this.$refs.children) {\n if (this.entry.menu_open)\n this.$refs.children.className += ' show';\n this.collapse = new bootstrap.Collapse(this.$refs.children, { toggle: false });\n }\n\n\t\tthis.checkActiveUrl(new URL(window.location.href));\n },\n template: /*html*/`\n\t
\n INCLUDE\n
\n `\n};","export default {\n\tdata(){\n\t\treturn {\n\t\t\tallActiveLanguages: FHC_JS_DATA_STORAGE_OBJECT.server_languages,\n\t\t}\n\t}, \n\temits: ['languageChanged'],\n\tmethods:{\n\t\tchangeLanguage: function(lang){\n\t\t\tif(this.allActiveLanguages.some(l => l.sprache === lang))\n\t\t\t{\n\t\t\t\tconst isReload = document.querySelector('[cis4Reload]')\n\t\t\t\tthis.$p.setLanguage(lang)\n\t\t\t\t.then(res => res.data)\n\t\t\t\t.then(data =>\n\t\t\t\t{\n\t\t\t\t\tif(isReload) window.location.reload()\n\t\t\t\t\telse this.$emit('languageChanged', lang);\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t},\n\ttemplate:/*html*/`\n\t
\n\t\t
\n\t\t\t\n\t\t
\n\t
\n\t`,\n};","export default {\n\tdata:()=>{\n\t\treturn{\n\t\t\ttheme: null,\n\t\t}\n\t},\n\tmethods:{\n\t\tswitchTheme(nextTheme){\n\t\t\tthis.theme = nextTheme;\n\t\t\tthis.$theme.switchTheme(this.theme);\n\t\t},\n\t\t\n\t},\n\tcomputed:{\n\t\tnextTheme(){\n\t\t\treturn this.$theme.theme_modes[(this.$theme.theme_modes.indexOf(this.theme) + 1) % this.$theme.theme_modes.length];\n\t\t},\n\t},\n\tcreated(){\n\t\tthis.theme = localStorage.getItem('theme');\n\t\tif (!this.theme || !this.$theme.theme_modes.includes(this.theme)) {\n\t\t\tthis.theme = this.$theme.theme_modes[0];\n\t\t}\n\t},\n\ttemplate:/*html*/`\n\n\t\n\t`\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsearch(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/search';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchAdvanced(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/searchAdvanced';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchdummy(searchsettings) {\n\t\tconst url = 'public/js/apps/api/dummyapi.php/Search';\n\t\treturn this.$fhcApi.post(url, searchsettings);\n\t}\n};\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/loadModule/' + category);\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst payload = {categories, language}\n\t\treturn this.$fhcApi.post('/api/frontend/v1/phrasen/setLanguage', payload);\n\t},\n\tgetLanguage() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getLanguage', {});\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getAllLanguages', {});\n\t}\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetHeader(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/header',\n\t\t\t{ navigation_page }\n\t\t);\n\t},\n\tgetMenu: function(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/menu',\n\t\t\t{ navigation_page }\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/saveCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t);\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/applyFilterFields',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t);\n\t},\n\taddFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/addFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tgetFilter(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tabmeldung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/abmeldung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(stdsem, prestudent_id, grund) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/abmeldung/createAntrag', {\n\t\t\t\tstudiensemester: stdsem,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\tif (!Array.isArray(antrag_id))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t\t{ antrag_id }\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag_id.map(antrag => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t{ antrag_id: antrag.studierendenantrag_id },\n\t\t\t\t{ errorHeader: '#' + antrag.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t},\n\tunterbrechung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/unterbrechung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(studiensemester, prestudent_id, grund, datum_wiedereinstieg, attachment) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/createAntrag', {\n\t\t\t\tstudiensemester,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund,\n\t\t\t\tdatum_wiedereinstieg,\n\t\t\t\tattachment\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/cancelAntrag', {\n\t\t\t\tantrag_id\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t}\n\t},\n\twiederholung: {\n\t\tgetDetails(prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/' + prestudent_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tgetLvs(antrag_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getLvs/' + antrag_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tcreate(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/createAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/cancelAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tsaveLvs(forbiddenLvs, mandatoryLvs) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/saveLvs', {\n\t\t\t\tforbiddenLvs,\n\t\t\t\tmandatoryLvs\n\t\t\t});\n\t\t}\n\t},\n\tleitung: {\n\t\tgetStgs() {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getActiveStgs');\n\t\t},\n\t\tgetAntraege(url, config, params) {\n\t\t\treturn this.$fhcApi\n\t\t\t\t.get('/api/frontend/v1/studstatus/leitung/getAntraege/' + url)\n\t\t\t\t.then(res => res.data); // Return data for tabulator\n\t\t},\n\t\tgetHistory(antrag_id) {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getHistory/' + antrag_id)\n\t\t},\n\t\tgetPrestudents(query, signal) {\n\t\t\treturn this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/getPrestudents',\n\t\t\t\t{ query },\n\t\t\t\t{\n signal: signal,\n timeout: 30000\n }\n\t\t\t);\n\t\t},\n\t\tapprove(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treopen(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tunpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tobject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tapproveObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tdenyObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t}\n};","export default {\n\n getView: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getView/${uid}`,{}\n );\n },\n\n fotoSperre: function (value) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/fotoSperre/${value}`,\n {}\n );\n \n },\n\n isStudent: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isStudent`,\n {\n uid:uid,\n }\n );\n },\n\n isMitarbeiter: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isMitarbeiter/${uid}`,\n {}\n );\n },\n\n getZustellAdresse: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellAdresse`,{}\n );\n },\n\n getZustellKontakt: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellKontakt`,{}\n );\n },\n\n getGemeinden: function(nation,zip){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getGemeinden/${nation}/${zip}`,\n {}\n );\n \n },\n getAllNationen:function(){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Profil/getAllNationen\",{}\n );\n },\n}","export default {\n //! API calls for profil update requests\n \n getStatus: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getStatus`,{});\n },\n \n getTopic: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getTopic`,{});\n },\n \n acceptProfilRequest: function ({profil_update_id, uid, status_message, topic, requested_change}) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/acceptProfilRequest\",{profil_update_id, uid, status_message, topic, requested_change});\n },\n \n denyProfilRequest: function ({profil_update_id, uid, topic, status_message}) {\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/denyProfilRequest\",{profil_update_id,uid,topic,status_message});\n },\n \n insertFile: function (dms, replace = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n dms);\n\n },\n \n getProfilRequestFiles: function (requestID) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`,{});\n },\n \n selectProfilRequest: function (uid = null, id = null) {\n\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/selectProfilRequest`,\n {...(uid?{uid}:{}),\n ...(id?{id}:{})\n });\n },\n \n insertProfilRequest: function (topic, payload, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/insertProfilRequest\",\n {\n topic,\n payload,\n ...(fileID ? { fileID } : {}),\n });\n },\n \n updateProfilRequest: function (topic, payload, ID, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/updateProfilRequest`,\n {\n topic,\n payload,\n ID,\n ...(fileID ? { fileID: fileID } : {}),\n });\n },\n \n deleteProfilRequest: function (requestID) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/deleteProfilRequest`,\n {\n requestID,\n });\n },\n };\n ","\nexport default {\n\tgetRoomInfo(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getRoomplan',\n\t\t\t{ ort_kurzbz, start_date, end_date}\n\t\t);\n\t},\n\tgetStunden() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/Stunden',\n\t\t\t{}\n\t\t);\n\t},\n\tgetOrtReservierungen(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/LvPlan/getReservierungen/${ort_kurzbz}`,\n\t\t\t{ start_date, end_date}\n\t\t);\n\t},\n\tgetLvPlanReservierungen(start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getReservierungen',\n\t\t\t{ start_date, end_date }\n\t\t);\n\t},\n\tgetLehreinheitStudiensemester(lehreinheit_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${lehreinheit_id}`,\n\t\t\t{}\n\t\t);\n\t},\n\tstudiensemesterDateInterval(date) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${date}`,\n\t\t\t{}\n\t\t);\n\t},\n\tLvPlanEvents(start_date, end_date, lv_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/LvPlanEvents',\n\t\t\t{ start_date, end_date, lv_id }\n\t\t);\n\t},\n\t\n\t\n};","import verband from './stv/verband.js';\nimport students from './stv/students.js';\nimport filter from './stv/filter.js';\nimport konto from './stv/konto.js';\nimport group from './stv/group.js';\nimport kontakt from './stv/kontakt.js';\nimport prestudent from './stv/prestudent.js';\nimport status from './stv/status.js';\nimport details from './stv/details.js';\nimport exam from './stv/exam.js';\nimport abschlusspruefung from './stv/abschlusspruefung.js';\nimport grades from './stv/grades.js';\nimport mobility from './stv/mobility.js';\nimport archiv from './stv/archiv.js';\nimport documents from './stv/documents.js';\nimport exemptions from './stv/exemptions.js';\nimport jointstudies from \"./stv/jointstudies.js\";\nimport courselist from './stv/courselist.js';\n\nexport default {\n\tverband,\n\tstudents,\n\tfilter,\n\tkonto,\n\tgroup,\n\tkontakt,\n\tprestudent,\n\tstatus,\n\tdetails,\n\texam,\n\tabschlusspruefung,\n\tgrades,\n\tmobility,\n\tarchiv,\n\tdocuments,\n\texemptions,\n\tjointstudies,\n\tcourselist,\n\tconfigStudent() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/student');\n\t},\n\tconfigStudents() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/students');\n\t}\n};\n","export default {\n\tget() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/verband');\n\t},\n\tfavorites: {\n\t\tget() {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/stv/favorites');\n\t\t},\n\t\tset(favorites) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/stv/favorites/set', {\n\t\t\t\tfavorites\n\t\t\t});\n\t\t}\n\t}\n}","export default {\n\tuid(uid, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/uid/'\n\t\t\t+ encodeURIComponent(uid);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tprestudent(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/prestudent/'\n\t\t\t+ encodeURIComponent(prestudent_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tperson(person_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/person/'\n\t\t\t+ encodeURIComponent(person_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tverband(relative_path) {\n\t\treturn this.$fhcApi.getUri('api/frontend/v1/stv/students/' + relative_path);\n\t}\n}","export default {\n\tgetStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/filter/getStg');\n\t},\n\tsetStg(studiengang_kz) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/filter/setStg', {\n\t\t\tstudiengang_kz\n\t\t});\n\t}\n};","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/konto/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id),\n\t\t\t\tonly_open: self.filter,\n\t\t\t\tstudiengang_kz: self.studiengang_kz_intern ? self.stg_kz : ''\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tcheckDoubles(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/checkDoubles', data, {\n\t\t\tconfirmErrorHandler: error => true\n\t\t});\n\t},\n\tinsert(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/insert', data);\n\t},\n\tcounter(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/counter', data);\n\t},\n\tedit(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/update', data);\n\t},\n\tdelete(buchungsnr) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/delete', {buchungsnr});\n\t},\n\tgetBuchungstypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/konto/getBuchungstypen');\n\t}\n};","export default {\n\tgetGruppen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/Gruppen/getGruppen/' + params.id);\n\t},\n\tdeleteGroup(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/Gruppen/deleteGruppe/', params);\n\t}\n}","export default {\n\t//------------- address.js-----------\n\tgetAdressen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressen/' + params.id);\n\t},\n\taddNewAddress(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewAddress/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadAddress(address_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadAddress/', {address_id});\n\t},\n\tupdateAddress(form, address_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateAddress/' + address_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteAddress(address_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteAddress/', {address_id});\n\t},\n\tgetPlaces(plz) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getPlaces/' + plz);\n\t},\n\tgetFirmen(searchString) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getFirmen/' + searchString);\n\t},\n\tgetNations() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getNations/');\n\t},\n\tgetAdressentypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressentypen/');\n\t},\n\n\t//------------- bankverbindung.js-----------\n\tgetBankverbindung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getBankverbindung/' + params.id);\n\t},\n\taddNewBankverbindung(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewBankverbindung/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadBankverbindung(bankverbindung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadBankverbindung/', {bankverbindung_id});\n\t},\n\tupdateBankverbindung(form, bankverbindung_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateBankverbindung/' + bankverbindung_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteBankverbindung(bankverbindung_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteBankverbindung/', {bankverbindung_id});\n\t},\n\n\t//------------- contact.js-----------\n\tgetKontakte (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakte/' + params.id);\n\t},\n\taddNewContact(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewContact/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadContact(kontakt_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadContact/', {kontakt_id});\n\t},\n\tupdateContact(form, kontakt_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateContact/' + kontakt_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteContact(kontakt_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteContact/', {kontakt_id});\n\t},\n\tgetStandorteByFirma(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getStandorteByFirma/' + searchString);\n\t},\n\tgetKontakttypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakttypen/');\n\t}\n};","export default {\n\n//------------- Prestudent.js------------------------------------------------------\n\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\treturn \tthis.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/prestudent/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t);\n\t},\n\tupdatePrestudent(form, prestudent_id, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/prestudent/updatePrestudent/' + prestudent_id,\n\t\t\tdata\n\t\t);\n\t},\n\tgetBezeichnungZGV() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungZGV/');\n\t},\n\tgetBezeichnungMZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungMZgv/');\n\t},\n\tgetBezeichnungDZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungDZgv/');\n\t},\n\tgetStgs() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStgs/');\n\t},\n\tgetAusbildung() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAusbildung/');\n\t},\n\tgetAufmerksamdurch() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAufmerksamdurch/');\n\t},\n\tgetBerufstaetigkeit() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBerufstaetigkeit/');\n\t},\n\tgetTypenStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getTypenStg/');\n\t},\n\tgetBisstandort() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBisstandort/');\n\t},\n\n//------------- MultiStatus.js------------------------------------------------------\n\tgetHistoryPrestudent (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getHistoryPrestudent/' + params.id);\n\t},\n\tgetMaxSem(studiengang_kzs) {\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/status/getMaxSemester/', {studiengang_kzs});\n\t},\n\tadvanceStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/advanceStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tconfirmStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/confirmStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tisLastStatus(id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/isLastStatus/' + id);\n\t},\n\tdeleteStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/deleteStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tgetLastBismeldestichtag() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getLastBismeldestichtag/');\n\t},\n\n//------------- History.js------------------------------------------------------\n\tgetHistoryPrestudents (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getHistoryPrestudents/' + params.id);\n\t},\n\n}","export default {\n\n//------------- Modal.js------------------------------------------------------\n\n\tinsertStatus(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/status/insertStatus/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/status/loadStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tupdateStatus(form, {prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}, data) {\n\t\treturn this.$fhcApi.post(\n\t\t\tform,\n\t\t\t'api/frontend/v1/stv/status/updateStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester,\n\t\t\tdata\n\t\t);\n\t},\n\tgetStudienplaene(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudienplaene/' + prestudent_id);\n\t},\n\tgetStudiengang(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudiengang/' + prestudent_id);\n\t},\n\tgetStatusgruende() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusgruende/');\n\t},\n\tgetStati() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStati/');\n\t},\n\n//------------- Dropdown.js------------------------------------------------------\n\n\taddStudent(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/addStudent/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tchangeStatus(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/changeStatus/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tgetStatusarray() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusarray/');\n\t}\n}","export default {\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/student/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(url);\n\t},\n\tsave(form, prestudent_id, studiensemester_kurzbz, data) {\n\t\tlet url = 'api/frontend/v1/stv/student/save/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(form, url, data);\n\t},\n}\n","export default {\n\tgetPruefungen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getPruefungen/' + params.id);\n\t},\n\tloadPruefung(pruefung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/loadPruefung/' + pruefung_id);\n\t},\n\tgetTypenPruefungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getTypenPruefungen');\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/getAllLehreinheiten/', data)\n\t},\n\tgetLvsByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsByStudent/' + uid)\n\t},\n\tgetLvsandLesByStudent(uid, semester){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsandLesByStudent/' + uid + '/' + semester);\n\t},\n\tgetLvsAndMas(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsAndMas/' + uid)\n\t},\n\tgetMitarbeiterLv(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getMitarbeiterLv/' + id)\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getNoten');\n\t},\n\tcheckZeugnisnoteLv(data){\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/', data)\n\t},\n\taddPruefung(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/insertPruefung/', data);\n\t},\n\tupdatePruefung(form, id, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/updatePruefung/' + id, data);\n\t},\n\tdeletePruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/deletePruefung/' + id)\n\t}\n}","export default {\n\n\tgetAbschlusspruefung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/' + params.id);\n\t},\n\taddNewAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/', data\n\t\t);\n\t},\n\tloadAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/', {id});\n\t},\n\tupdateAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/', data\n\t\t);\n\t},\n\tdeleteAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/', {id});\n\t},\n\tgetTypenAbschlusspruefung(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/');\n\t},\n\tgetTypenAntritte(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/');\n\t},\n\tgetBeurteilungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/');\n\t},\n\tgetAkadGrade(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getAkadGrade/', {studiengang_kz});\n\t},\n\tgetTypStudiengang(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/', {studiengang_kz});\n\t},\n\tgetMitarbeiter(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/' + searchString);\n\t},\n\tgetPruefer(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getPruefer/' + searchString);\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getNoten/');\n\t},\n\tcheckForExistingExams(uids) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/', {uids}\n\t\t);\n\t}\n}","export default {\n\tlist() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/grades/list');\n\t},\n\tgetCertificate(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getCertificate/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetTeacherProposal(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getTeacherProposal/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetRepeaterGrades(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getRepeaterGrades/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tupdateCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, note, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/updateCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz,\n\t\t\t\tnote\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tdeleteCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/deleteCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyTeacherProposalToCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyTeacherProposalToCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id, lv_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate',\n\t\t\t{\n\t\t\t\tstudierendenantrag_lehrveranstaltung_id\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lv_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tgetGradeFromPoints(points, lehrveranstaltung_id, studiensemester_kurzbz, manualErrorHandling) {\n\t\tconst config = manualErrorHandling ? {errorHandling: false} : {};\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/grades/getGradeFromPoints',\n\t\t\t{\n\t\t\t\t\"points\": points,\n\t\t\t\t\"lehrveranstaltung_id\": lehrveranstaltung_id,\n\t\t\t\t\"studiensemester_kurzbz\": studiensemester_kurzbz\n\t\t\t},\n\t\t\tconfig\n\t\t\t);\n\t}\n}","export default {\n\tgetMobilitaeten (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getMobilitaeten/' + params.id);\n\t},\n\tgetProgramsMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getProgramsMobility/');\n\t},\n\taddNewMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/insertMobility/', data);\n\t},\n\tloadMobility(bisio_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/loadMobility/' + bisio_id);\n\t},\n\tupdateMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/updateMobility/', data);\n\t},\n\tdeleteMobility(bisio_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobility/' + bisio_id);\n\t},\n\tgetLVList(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLVList/' + studiengang_kz);\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/getAllLehreinheiten/', data)\n\t},\n\tgetLvsandLesByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLvsandLesByStudent/' + uid);\n\t},\n\tgetPurposes(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getPurposes/' + params.id);\n\t},\n\tgetSupports(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getSupports/' + params.id);\n\t},\n\tgetListPurposes() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListPurposes/');\n\t},\n\tgetListSupports() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListSupports/');\n\t},\n\tdeleteMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilityPurpose/' + params.bisio_id, params);\n\t},\n\taddMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilityPurpose/' + params.bisio_id, params);\n\t},\n\tdeleteMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilitySupport/' + params.bisio_id, params);\n\t},\n\taddMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilitySupport/' + params.bisio_id, params);\n\t},\n\n}","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/archiv/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id)\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tgetArchivVorlagen() {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/getArchivVorlagen');\n\t},\n\tarchive(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archive',\n\t\t\tdata\n\t\t);\n\t},\n\tarchiveSigned(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archiveSigned',\n\t\t\tdata\n\t\t);\n\t},\n\tupdate(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/update', data);\n\t},\n\tdelete({akte_id, studiengang_kz}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/delete', {akte_id, studiengang_kz});\n\t}\n};\n","export default {\n\tgetDocumentsUnaccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tgetDocumentsAccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsAccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tdeleteZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteZuordnung/' + params.prestudent_id + '/' + params.dokument_kurzbz);\n\t},\n\tcreateZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/createZuordnung/'\n\t\t\t+ params.prestudent_id + '/'\n\t\t\t+ params.dokument_kurzbz);\n\t},\n\tloadAkte(akte_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/loadAkte/' + akte_id);\n\t},\n\tgetDoktypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDoktypen/');\n\t},\n\tupdateFile(akte_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/updateAkte/' + akte_id,\n\t\t\tdata);\n\t},\n\tdeleteFile(akte_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteAkte/' + akte_id);\n\t},\n\tuploadFile(prestudent_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/uploadDokument/' + prestudent_id,\n\t\t\tdata);\n\t},\n}","export default {\n\tgetAnrechnungen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getAnrechnungen/' + params.id);\n\t},\n\tgetLehrveranstaltungen(prestudent_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/' + prestudent_id);\n\t},\n\tgetBegruendungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getBegruendungen/');\n\t},\n\tgetLvsKompatibel(lv_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLvsKompatibel/' + lv_id);\n\t},\n\tgetLektoren(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLektoren/' + studiengang_kz);\n\t},\n\taddNewAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/insertAnrechnung/', data);\n\t},\n\tloadAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/loadAnrechnung/' + anrechnung_id);\n\t},\n\teditAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/updateAnrechnung/', data);\n\t},\n\tdeleteAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/anrechnungen/deleteAnrechnung/' + anrechnung_id);\n\t},\n}","export default {\n\tgetStudies(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudien/' + params.id);\n\t},\n\tgetTypenMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/');\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/');\n\t},\n\tgetStudyprograms(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/');\n\t},\n\tgetListPartner(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/');\n\t},\n\tgetStatiPrestudent(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/');\n\t},\n\tloadStudy(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/loadStudie/' + id);\n\t},\n\tinsertStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/insertStudie/', data);\n\t},\n\tupdateStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/updateStudie/', data);\n\t},\n\tdeleteStudy(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/GemeinsameStudien/deleteStudie/' + id);\n\t},\n\n}","export default {\n\tgetCourselist(url, config, params) {\n\t\t//corresponding logic controller Stundenplan.php\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStundenplan/'\n\t\t\t+ params.student_uid + '/'\n\t\t\t+ params.start_date + '/'\n\t\t\t+ params.end_date + '/'\n\t\t\t+ params.group_consecutiveHours + '/'\n\t\t\t+ params.dbStundenplanTable\n\t\t);\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStudiensemester/');\n\t},\n}","import person from \"./notiz/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetNotizen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getUid/');\n\t},\n\taddNewNotiz(form, id, formData) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(form, notiz_id, formData){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getMitarbeiter/' + event);\n\t},\n\tisBerechtigt(id, type_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/isBerechtigt/');\n\t}\n}","import person from \"./betriebsmittel/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetAllBetriebsmittel(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/' + params.type + '/' + params.id);\n\t},\n\taddNewBetriebsmittel(form, person_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/' +\n\t\t\tperson_id, formData\n\t\t);\n\t},\n\tloadBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/' + betriebsmittelperson_id);\n\t},\n\tupdateBetriebsmittel(form, betriebsmittelperson_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/' + betriebsmittelperson_id,\n\t\t\tformData);\n\t},\n\tdeleteBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/' +\tbetriebsmittelperson_id);\n\t},\n\tgetTypenBetriebsmittel(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/');\n\t},\n\tloadInventarliste(query){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/' +\tquery);\n\t}\n}","export default {\n\tupdatePersonUnrulyStatus(person_id, unrulyParam) {\n\n\t\ttry {\n\t\t\tconst payload = {person_id, unruly: unrulyParam}\n\t\t\tconst url = '/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus';\n\t\t\treturn this.$fhcApi.post(url, payload, null);\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t},\n\tfilterPerson(payload, base = ''){\n\n\t\ttry {\n\t\t\tconst url = base + '/api/frontend/v1/checkperson/CheckPerson/filterPerson';\n\t\t\treturn axios.post(url, payload)\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t}\n}","export default {\n getContentID(ort_kurbz) {\n\t\treturn this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Ort/ContentID\",\n\t\t\t{ ort_kurzbz: ort_kurbz }\n\t\t);\n\t},\n\tgetRooms(datum, von, bis, typ, personenanzahl = 0) {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getRooms\",\n\t\t\t{ datum, von, bis, typ, personenanzahl }\n\t\t);\n\t},\n\tgetRoomTypes() {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getTypes\"\n\t\t);\n\t}\n}","export default {\n content(content_id, version=null, sprache=null, sichtbar=null) {\n return this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/content\",\n\t\t\t{ \n\t\t\t\tcontent_id: content_id,\n\t\t\t\t...(version?{version}:{}),\n\t\t\t\t...(sprache?{sprache}:{}),\n\t\t\t\t...(sichtbar?{sichtbar}:{}),\n }\n );\n },\n\t//api function used for the news View that renders the html\n\tgetNews(page = 1, page_size = 10, sprache) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNews\",\n\t\t\t{\n\t\t\t\tpage,\n\t\t\t\tpage_size,\n\t\t\t\tsprache,\n\t\t\t},\n\t\t);\n\t},\n\t//api function used for the widget component\n\tnews(limit) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/news\",\n\t\t\t{\n\t\t\t\tlimit: limit\n\t\t\t}\n\t\t);\n\t},\n\tgetNewsRowCount: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNewsRowCount\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetNewsExtra: function(){\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getStudiengangInfoForNews\",\n\t\t\t{}\n\t\t);\n\t}\n }","export default {\n getStudentenMail(lehreinheit_id) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Lehre/lvStudentenMail\",\n { lehreinheit_id: lehreinheit_id }\n );\n },\n\tgetLvInfo(studiensemester_kurzbz, lehrveranstaltung_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/LV/${studiensemester_kurzbz}/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentPruefungen(lehrveranstaltung_id){\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentProjektarbeiten(uid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getStudentProjektarbeiten/${uid}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentProjektabgaben(detail) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getStudentProjektabgaben`\n\t\t\t, {\n\t\t\t\tprojektarbeit_id: detail.projektarbeit_id,\n\t\t\t\tstudent_uid: detail.student_uid\n\t\t\t}\n\t\t);\n\t},\n\tpostStudentProjektarbeitEndupload(formData) {\n\t\tconst url = '/api/frontend/v1/Lehre/postStudentProjektarbeitEndupload';\n\t\tconst headers = {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\treturn this.$fhcApi.post(url, formData, headers)\n\t},\n\tpostStudentProjektarbeitZwischenabgabe(formData) {\n\t\tconst url = '/api/frontend/v1/Lehre/postStudentProjektarbeitZwischenabgabe';\n\t\tconst headers = {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\treturn this.$fhcApi.post(url, formData, headers)\n\t},\n\tgetStudentProjektarbeitAbgabeFile(paabgabe_id, student_uid) {\n\t\tconst url = `/Cis/Abgabetool/getStudentProjektarbeitAbgabeFile?paabgabe_id=${paabgabe_id}&student_uid=${student_uid}`;\n\n\t\twindow.location = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + url\n\t},\n\tgetMitarbeiterProjektarbeiten(uid, all) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getMitarbeiterProjektarbeiten?showall=${all}`\n\t\t\t, {}\n\t\t);\n\t},\n\tpostProjektarbeitAbgabe(termin) {\n\t\tconst payload = {\n\t\t\tpaabgabe_id: termin.paabgabe_id,\n\t\t\tpaabgabetyp_kurzbz: termin.bezeichnung.paabgabetyp_kurzbz,\n\t\t\tdatum: termin.datum,\n\t\t\tfixtermin: termin.fixtermin,\n\t\t\tinsertvon: termin.insertvon,\n\t\t\tkurzbz: termin.kurzbz,\n\t\t\tprojektarbeit_id: termin.projektarbeit_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/postProjektarbeitAbgabe';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t\t\n\t},\n\tdeleteProjektarbeitAbgabe(paabgabe_id) {\n\t\tconst payload = {\n\t\t\tpaabgabe_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/deleteProjektarbeitAbgabe';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t},\n\tpostSerientermin(datum, paabgabetyp_kurzbz, bezeichnung, kurzbz, projektarbeit_ids) {\n\t\tconst payload = {\n\t\t\tdatum, paabgabetyp_kurzbz, bezeichnung, kurzbz, projektarbeit_ids\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/postSerientermin';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t},\n\tfetchDeadlines(person_id) {\n\t\tconst payload = {\n\t\t\tperson_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/fetchDeadlines';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t}\n }","export default {\n getLvMenu(lvid, studiensemester_kurzbz) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/LvMenu/getLvMenu/${lvid}/${studiensemester_kurzbz}`,\n {}\n );\n },\n\n \n }","import person from \"./messages/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\t\tgetMessages(url, config, params) {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessages/' + params.id + '/' + params.type + '/' + params.size + '/' + params.page);\n\t\t},\n\t\tgetVorlagen(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagen/');\n\t\t},\n\t\tgetMsgVarsLoggedInUser(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/');\n\t\t},\n\t\tgetMessageVarsPerson(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessageVarsPerson/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetMsgVarsPrestudent(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsPrestudent/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPersonId(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getPersonId/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetUid(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getUid/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetVorlagentext(vorlage_kurzbz){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagentext/' + vorlage_kurzbz);\n\t\t},\n\t\tgetNameOfDefaultRecipient(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getNameOfDefaultRecipient/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPreviewText(params, data){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/getPreviewText/' + params.id + '/' + params.type_id,\n\t\t\t\tdata);\n\t\t},\n\t\tgetReplyData(messageId){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getReplyData/' + messageId);\n\t\t},\n\t\tsendMessageFromModalContext(form, id, data) {\n\t\t\treturn this.$fhcApi.post(form,'api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tsendMessage(id, data) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tdeleteMessage(messageId){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/deleteMessage/' + messageId);\n\t\t}\n}","export default {\n\tgetVorlagen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagen/');\n\t},\n\tgetVorlagenByLoggedInUser() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/');\n\t}\n}","export default {\n\n\tgetStudiensemester: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/components/Cis/Mylv/Studiensemester',\n\t\t\t{}\n\t\t);\n\t},\n\n\tgetAllStudienSemester: function (studiensemester=undefined, studiengang=undefined, semester=undefined, studienplan=undefined) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/Studium/getStudienAllSemester',\n\t\t\t{studiensemester, studiengang, semester, studienplan}\n\t\t);\n\t},\n\n\tgetStudiengaengeForStudienSemester: function (studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${studiensemester}`,\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudienplaeneBySemester: function (studiengang, studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudienplaeneBySemester`,\n\t\t\t{\n\t\t\t\tstudiengang,\n\t\t\t\tstudiensemester,\n\t\t\t}\n\t\t);\n\t},\n\tgetLvPlanForStudiensemester: function (studiensemester, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${studiensemester}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\tgetLvEvaluierungInfo: function (studiensemester_kurzbz, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getLvEvaluierungInfo/${studiensemester_kurzbz}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\t\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport search from \"./search.js\";\nimport phrasen from \"./phrasen.js\";\nimport navigation from \"./navigation.js\";\nimport filter from \"./filter.js\";\nimport studstatus from \"./studstatus.js\";\nimport profil from \"./profil.js\";\nimport profilUpdate from \"./profilUpdate.js\";\nimport lvPlan from \"./lvPlan.js\";\nimport bookmark from \"./bookmark.js\";\nimport stv from \"./stv.js\";\nimport notiz from \"./notiz.js\";\nimport betriebsmittel from \"./betriebsmittel.js\";\nimport checkperson from \"./checkperson.js\";\nimport ampeln from \"./ampeln.js\";\nimport ort from \"./ort.js\";\nimport cms from \"./cms.js\";\nimport lehre from \"./lehre.js\";\nimport addons from \"./addons.js\";\nimport messages from \"./messages.js\";\nimport vorlagen from \"./vorlagen.js\";\nimport studiengang from \"./studiengang.js\";\nimport menu from \"./menu.js\";\nimport dashboard from \"./dashboard.js\";\nimport authinfo from \"./authinfo.js\";\nimport studium from \"./studium.js\";\nimport language from \"./language.js\";\n\nexport default {\n search,\n phrasen,\n navigation,\n dashboard,\n filter,\n studstatus,\n profil,\n profilUpdate,\n lvPlan,\n bookmark,\n stv,\n notiz,\n betriebsmittel,\n checkperson,\n ampeln,\n ort,\n cms,\n lehre,\n addons,\n messages,\n vorlagen,\n addons,\n\tstudiengang,\n\tmenu,\n\tauthinfo,\n\tstudium,\n language\n};\n","export default {\n\tasync getViewData() {\n\t\tconst url = `/api/frontend/v1/Cis4FhcApi/getViewData`;\n\t\treturn this.$fhcApi.get(url, null, null)\n\t},\n}","export default {\n\n getBookmarks: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/getBookmarks`\n ,{}\n );\n },\n \n delete: function (bookmark_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/delete/${bookmark_id}`\n ,{}\n ); \n },\n\n\tupdate: function ({ bookmark_id, url, title, tag=null}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/Bookmark/update/${bookmark_id}`\n\t\t\t, {\n\t\t\t\turl: url,\n\t\t\t\ttitle: title\n\t\t\t}\n\t\t);\n\t},\n\n insert: function ({url, title, tag}) {\n return this.$fhcApi.post(\n `/api/frontend/v1/Bookmark/insert`\n ,{\n url: url,\n title: title,\n tag: tag\n }\n ); \n },\n}","export default {\n \n open: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/open`,{});\n },\n\n all: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/all`,{});\n },\n\n confirm: function (ampel_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/confirm/${ampel_id}`,{});\n },\n\n}","export default {\n\tstudiengangInformation: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Studgang/getStudiengangInfo\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudiengangByKz: function (studiengang_kz) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz\",\n\t\t\t{\n\t\t\t\t\"studiengang_kz\": studiengang_kz\n\t\t\t}\n\t\t);\n\t}\n}","export default {\n\tgetMenu: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/CisMenu/getMenu\",\n\t\t\t{}\n\t\t);\n\t}\n\n}","\nexport default {\n\tgetAuthUID() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthUID',\n\t\t\t{ }\n\t\t);\n\t},\n\tgetAuthInfo() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthInfo',\n\t\t\t{}\n\t\t);\n\t},\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAll() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/language/get');\n\t}\n};","/** TODO(chris):\n * when deleting this file be sure to\n * remove line 1 & 90 from ../plugins/Phrasen.js\n */\nimport FhcApiFactory from '../api/fhcapifactory.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$fhcApi) {\n\t\t\t/* Deprecated Code start */\n\t\t\tif (options?.factory) {\n\t\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\t\tapp.config.globalProperties.$fhcApi.factory.addEndpoints(options.factory);\n\t\t\t}\n\t\t\t/* Deprecated Code end */\n\t\t\treturn;\n\t\t}\n\n\t\tfunction _get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\n\t\tfunction _clean_return_value(response) {\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = {response};\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tconst baseURL = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\";\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(response => {\n\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\treturn _clean_return_value(response);\n\n\t\t\t// NOTE(chris): loop through errors\n\t\t\tif (response.data.errors)\n\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t);\n\n\t\t\treturn _clean_return_value(response);\n\t\t}, error => {\n\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\n\t\t\tif (error.config?.errorHandling == 'off'\n\t\t\t\t|| error.config?.errorHandling === false\n\t\t\t\t|| error.config?.errorHandling == 'success')\n\t\t\t\treturn Promise.reject(error);\n\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL, true);\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t\t}\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\terror.response.data.errors = error.response.data.errors.filter(\n\t\t\t\t\terr => (error.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, error.config)\n\t\t\t\t);\n\t\t\t\tif (!error.response.data.errors.length)\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else if (error.request) {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertError(error.message);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t}\n\n\t\t\treturn Promise.reject(error);\n\t\t});\n\n\t\tapp.config.globalProperties.$fhcApi = {\n\t\t\tgetUri(url) {\n\t\t\t\tconsole.warn('$fhcApi.getUri is DEPRECATED! Use $api.getUri instead.');\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\tconsole.warn('$fhcApi.get is DEPRECATED! Use $api.get instead.');\n\t\t\t\t[uri, params, config] = _get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\tconsole.warn('$fhcApi.post is DEPRECATED! Use $api.post instead.');\n\t\t\t\t[uri, data, config] = _get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\t_defaultErrorHandlers: {\n\t\t\t\tvalidation(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form) {\n\t\t\t\t\t\tconfig.form.clearValidation();\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.messages);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(error.messages)) {\n\t\t\t\t\t\terror.messages.forEach($fhcAlert.alertError);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (typeof error.messages == 'object') {\n\t\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t\tObject.values(error.messages).forEach(\n\t\t\t\t\t\t\t\tvalue => $fhcAlert.alertDefault(\n\t\t\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tObject.entries(error.messages).forEach(\n\t\t\t\t\t\t\t\t([key, value]) => $fhcAlert.alertDefault('error', key, value, true)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tgeneral(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form)\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.message);\n\t\t\t\t\telse if (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertError(error.message);\n\t\t\t\t},\n\t\t\t\tphp(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('warn', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('info', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\texception(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tdb(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tauth(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertDefault('error', error.message, message);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/* Deprecated Code start */\n\t\tclass FhcApiFactoryWrapper {\n\t\t\tconstructor(factorypart, root) {\n\t\t\t\tif (root === undefined) {\n\t\t\t\t\tthis.$fhcApi = {\n\t\t\t\t\t\tgetUri(url) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.getUri(url);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget(form, uri, params, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.get(form, uri, params, config);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpost(form, uri, data, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.post(form, uri, data, config);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tObject.defineProperty(this.$fhcApi, 'factory', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.factory;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tapp.config.globalProperties.$fhcApi.factory = this;\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty(this, '$fhcApi', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\treturn (root || this).$fhcApi;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.addEndpoints(factorypart, true)\n\t\t\t}\n\n\t\t\taddEndpoints(factorypart, noWarn) {\n\t\t\t\tObject.keys(factorypart).forEach(key => {\n\t\t\t\t\tObject.defineProperty(this, key, {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tif (typeof factorypart[key] == 'function')\n\t\t\t\t\t\t\t\treturn factorypart[key].bind(this);\n\t\t\t\t\t\t\treturn new FhcApiFactoryWrapper(factorypart[key], this.$fhcApi.factory);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tif (!noWarn) console.warn('$fhcApi.factory.addEndpoints() is DEPRECATED!');\n\t\t\t}\n\t\t}\n\n\t\tconst factory = new FhcApiFactoryWrapper(FhcApiFactory);\n\t\tif (options?.factory) {\n\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\tfactory.addEndpoints(options.factory);\n\t\t}\n\n\t\tapp.config.globalProperties.$fhcApi.factory = factory;\n\t\t/* Deprecated Code end */\n\t\t\n\t\tapp.provide('$fhcApi', app.config.globalProperties.$fhcApi);\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n//--------------------------------------------------------------------------------------------------------------------\n// Configs\n\n// To see debug messages into the browser console set this parameter as true\nconst CORE_REST_CLIENT_DEBUG = false;\n\n// Default timeout (milliseconds)\nconst CORE_REST_CLIENT_TIMEOUT = 5000;\n\n//--------------------------------------------------------------------------------------------------------------------\n// Constants\n\n// Success\nconst CORE_REST_CLIENT_SUCCESS = 0;\n\n// Properties present in a response\nconst CORE_REST_CLIENT_ERROR = \"error\";\nconst CORE_REST_CLIENT_RETVAL = \"retval\";\n\n// HTTP method parameters\nconst CRC_HTTP_GET_METHOD = \"get\";\nconst CRC_HTTP_POST_METHOD = \"post\";\n\n/**\n * Definition and initialization of the object CoreRESTClient\n */\nexport const CoreRESTClient = {\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Public methods\n\n\t/**\n\t * Performs a call using the HTTP GET method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tget: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_GET_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Performs a call using the HTTP POST method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tpost: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_POST_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Checks if the response is a success\n\t */\n\tisSuccess: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR)\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL) && response.error == CORE_REST_CLIENT_SUCCESS)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Checks if the response is an error\n\t */\n\tisError: function(response) {\n\t\treturn !CoreRESTClient.isSuccess(response);\n\t},\n\n\t/**\n\t * Checks if the response has data\n\t */\n\thasData: function(response) {\n\n\t\tif (CoreRESTClient.isSuccess(response))\n\t\t{\n\t\t\tif ((typeof response[CORE_REST_CLIENT_RETVAL] === \"object\" && Object.keys(response[CORE_REST_CLIENT_RETVAL]).length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"array\" && response[CORE_REST_CLIENT_RETVAL].length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"string\" && response[CORE_REST_CLIENT_RETVAL].trim() != \"\")\n\t\t\t\t|| typeof response[CORE_REST_CLIENT_RETVAL] === \"number\")\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Retrives data from response object\n\t */\n\tgetData: function(response) {\n\n\t\tif (CoreRESTClient.hasData(response))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Retrives error message from response object\n\t */\n\tgetError: function(response) {\n\n\t\tif (typeof response === \"object\"\n\t\t\t&& Object.keys(response).length > 0\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn \"Generic error\";\n\t},\n\n\t/**\n\t * Retrives code from response object\n\t */\n\tgetErrorCode: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_ERROR];\n\t\t}\n\n\t\treturn 1; // Generic error\n\t},\n\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Private methods\n\n\t/**\n\t * Generate the router URI using the connection parameters\n\t */\n\t_generateRouterURI: function(wsURL) {\n\t\tvar uri = null;\n\n\t\t// Checks if global JS object FHC_JS_DATA_STORAGE_OBJECT exists\n\t\tif (typeof FHC_JS_DATA_STORAGE_OBJECT !== \"undefined\")\n\t\t{\n\t\t\turi = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\" + wsURL;\n\t\t}\n\n\t\treturn uri;\n\t},\n\n\t/**\n\t * Method to print debug info after a controller has been called\n\t */\n\t_printDebug: function(parameters, response, errorThrown) {\n\n\t\tif (CORE_REST_CLIENT_DEBUG === true) // If global const CORE_REST_CLIENT_DEBUG is true, but really true!\n\t\t{\n\t\t\t// Print info about called controller\n\t\t\tconsole.log(\"Called controller: \" + parameters.remoteController);\n\t\t\tconsole.log(\"Call parameters:\"); // parameters given to this call\n\t\t\tconsole.log(parameters);\n\n\t\t\tif (response != null) // if there is a response...\n\t\t\t{\n\t\t\t\tconsole.log(\"Controller Response:\");\n\t\t\t\tconsole.log(response); // ...print it\n\t\t\t}\n\t\t\tif (errorThrown != null) // if there is a jQuery error...\n\t\t\t{\n\t\t\t\tconsole.log(\"jQuery error:\");\n\t\t\t\tconsole.log(errorThrown); // ...print it\n\t\t\t}\n\t\t\tconsole.log(\"--------------------------------------------------------------------------------------------\");\n\t\t}\n\t},\n\n\t/**\n\t * Performs a call to the server were the CI PHP layer is running\n\t * - wsURL: alias of the core controller to call\n\t * - wsParameters: parameters to give to the called controller\n\t * - type: POST or GET HTTP method\n\t * - axiosParameters: an object to configure the axios call\n\t */\n\t_axiosCall: function(wsURL, wsParameters, type, axiosParameters) {\n\n\t\t// Axios config object\n\t\tlet axiosCallObj = {\n\t\t\tmethod: type,\n\t\t\turl: CoreRESTClient._generateRouterURI(wsURL),\n\t\t\ttimeout: CORE_REST_CLIENT_TIMEOUT // default time out\n\t\t};\n\n\t\t// The ajax call is HTTP GET\n\t\tif (type == CRC_HTTP_GET_METHOD)\n\t\t{\n\t\t\taxiosCallObj.params = wsParameters;\n\t\t}\n\t\t// The ajax call is HTTP POST\n\t\telse\n\t\t{\n\t\t\taxiosCallObj.data = wsParameters;\n\t\t}\n\n\t\t// Check if axiosParameters is an object\n\t\tif (typeof axiosParameters === \"object\")\n\t\t{\n\t\t\t// And then copies the its properties into axiosCallObj\n\t\t\tfor (var prop in axiosParameters) axiosCallObj[prop] = axiosParameters[prop];\n\t\t}\n\n\t\t// Perform the ajax call via axios\n\t\treturn axios(axiosCallObj);\n\t}\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n * \n * @usage:\n * Preperations:\n * Be sure to have PrimeVue loaded with the toast and confirmdialog\n * components as primevue variable\n * Install:\n * Import this Plugin and install it with the app.use() function.\n * Use:\n * In your component you can call now the global property $fhcAlert\n * which has the following functions:\n * \n * alertSuccess\n * ------------\n * Displays a success message\n * @param string\tmessage\n * @return void\n * \n * alertInfo\n * ---------\n * Displays an info message\n * @param string\tmessage\n * @return void\n * \n * alertWarning\n * ------------\n * Displays a warning\n * @param string\tmessage\n * @return void\n * \n * alertError\n * ----------\n * Displays an error\n * @param string\tmessage\n * @return void\n * \n * alertSystemError\n * ----------------\n * Displays an alert with the error details and a button to mail\n * the error to the Support Team\n * @param string\tmessage\n * @return void\n * \n * confirmDelete\n * -------------\n * Displays a confirmation dialog and returns a Promise which resolves\n * with true or false depending und the pressed button.\n * @return Promise\n * \n * alertDefault\n * ------------\n * Displays an alert\n * @param string\tseverity\t\tcan be 'success', 'info', 'warning', 'error'\n * @param string\ttitle\n * @param string\tmessage\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * alertMultiple\n * -------------\n * Displays multiple alerts\n * @param array\t\tmessageArray\n * @param string\tseverity\t\t(optional) defaults to 'info'\n * @param string\ttitle\t\t\t(optional) defaults to 'Info'\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * handleSystemError\n * -----------------\n * Automatiticly determine how to display an system error and display it.\n * This would be used in a catch block of an ajax call.\n * @param mixed\t\terror\n * @return void\n * \n * handleSystemMessage\n * -------------------\n * Automatiticly determine how to display a message and display it.\n * @param mixed\t\tmessage\n * @return void\n */\nimport PvConfig from \"../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js\";\nimport PvToast from \"../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js\";\nimport PvConfirm from \"../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js\";\nimport PvConfirmationService from \"../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js\";\nimport FhcPhrasen from \"./Phrasen.js\";\n\nimport {CoreRESTClient} from '../RESTClient.js';\n\nconst helperAppContainer = document.createElement('div');\n\nconst helperApp = Vue.createApp({\n\tname: \"FhcAlertApp\",\n\tcomponents: {\n\t\tPvToast,\n\t\tPvConfirm\n\t},\n\tmethods: {\n\t\tmailToUrl(slotProps) {\n\t\t\tlet mailTo = FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto;\n\t\t\tlet subject = 'Meldung%20Systemfehler';\n\t\t\tlet body = `\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: ` + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method + `%0D%0A\n\t\t\t\tFehler Meldung: ` + slotProps.message.detail + `%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!`\n\n\t\t\treturn \"mailto:\" + mailTo + \"?subject=\" + subject + \"&body=\" + body;\n\t\t},\n\t\topenMessagecard(e) {\n\t\t\tbootstrap.Collapse.getOrCreateInstance(e.target.getAttribute('href')).toggle();\n\t\t}\n\t},\n\tunmounted() {\n\t\thelperAppContainer.parentElement.removeChild(helperAppContainer);\n\t},\n\tcomputed: {\n\t\tshowmaillink: function() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto !== '';\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t`\n});\n\nhelperApp.use(PvConfig);\nhelperApp.use(PvConfirmationService);\n//helperApp.use(FhcPhrasen);\n\nconst helperAppInstance = helperApp.mount(helperAppContainer);\n\ndocument.body.appendChild(helperAppContainer);\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (!app.config.globalProperties.$p)\n\t\t\tapp.use(FhcPhrasen);\n\n\t\tconst $fhcAlert = {\n\t\t\talertSuccess(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSuccess);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'success', summary: 'Info', detail: message, life: 1000});\n\t\t\t},\n\t\t\talertInfo(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertInfo);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'info', summary: 'Info', detail: message, life: 3000 });\n\t\t\t},\n\t\t\talertWarning(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertWarning);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'warn', summary: 'Achtung', detail: message});\n\t\t\t},\n\t\t\talertError(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertError);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'error', summary: 'Achtung', detail: message });\n\t\t\t},\n\t\t\talertSystemError(message) {\n\t\t\t\t//TODO(Manu) for translation of content of template: restructure in data\n\t\t\t\t//and update definitions with translations\n\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSystemError);\n\t\t\t\thelperAppInstance.$refs.alert.add({\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t\tsummary: Vue.computed(() => app.config.globalProperties.$p.t('alert/systemerror')),\n\t\t\t\t\tdetail: message});\n\t\t\t},\n\t\t\tconfirmDelete() {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: 'fhcAlertConfirm',\n\t\t\t\t\t\theader: Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: Vue.computed(() => app.config.globalProperties.$p.t('alert/confirm_delete')),\n\t\t\t\t\t\tacceptLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/loeschen')),\n\t\t\t\t\t\tacceptClass: 'p-button-danger',\n\t\t\t\t\t\trejectLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: 'p-button-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tconfirm(options) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: options?.group ?? 'fhcAlertConfirm',\n\t\t\t\t\t\theader: options?.header ?? Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: options?.message ?? '',\n\t\t\t\t\t\tacceptLabel: options?.acceptLabel ?? 'Ok',\n\t\t\t\t\t\tacceptClass: options?.acceptClass ?? 'btn btn-primary',\n\t\t\t\t\t\trejectLabel: options?.rejectLabel ?? Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: options?.rejectClass ?? 'btn btn-outline-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\talertDefault(severity, title, message, sticky = false, html = false) {\n\t\t\t\tlet options = { severity: severity, summary: title, detail: message, html };\n\t\t\t\t\n\t\t\t\tif (!sticky)\n\t\t\t\t\toptions.life = 3000;\n\n\t\t\t\thelperAppInstance.$refs.toast.add(options);\n\t\t\t},\n\t\t\talertMultiple(messageArray, severity = 'info', title = 'Info', sticky = false, html = false){\n\t\t\t\t// Check, if array has only string values\n\t\t\t\tif (messageArray.every(message => typeof message === 'string')) {\n\t\t\t\t\tmessageArray.forEach(message => this.alertDefault(severity, title, message, sticky, html));\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\thandleSystemError(error) {\n\t\t\t\t// don't show an error message to the user if the error was an aborted request\n\t\t\t\tif(error.hasOwnProperty('name') && error.name.toLowerCase() === \"AbortError\".toLowerCase())\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is string\n\t\t\t\tif (typeof error === 'string')\n\t\t\t\t\treturn $fhcAlert.alertSystemError(error);\n\n\t\t\t\t// Error is array of strings\n\t\t\t\tif (Array.isArray(error) && error.every(err => typeof err === 'string'))\n\t\t\t\t\treturn error.every($fhcAlert.alertSystemError);\n\n\t\t\t\t// Error has been handled already\n\t\t\t\tif (error.hasOwnProperty('handled') && error.handled)\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is object\n\t\t\t\tif (typeof error === 'object' && error !== null) {\n\t\t\t\t\tlet errMsg = '';\n\n\n\t\t\t\t\tif (error.hasOwnProperty('response') && error.response?.data?.retval)\n\t\t\t\t\t\terrMsg += 'Error Message: ' + (error.response.data.retval.message || error.response.data.retval) + '\\r\\n';\n\t\t\t\t\telse if (error.hasOwnProperty('message'))\n\t\t\t\t\t\terrMsg += 'Error Message: ' + error.message.toUpperCase() + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('config') && error.config.hasOwnProperty('url'))\n\t\t\t\t\t\terrMsg += 'Error ConfigURL: ' + error.config.url + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('stack'))\n\t\t\t\t\t\terrMsg += 'Error Stack: ' + error.stack + '\\r\\n';\n\t\t\t\t\t\n\t\t\t\t\t// Fallback object error message\n\t\t\t\t\tif (errMsg == '')\n\t\t\t\t\t\terrMsg = 'Error Message: ' + JSON.stringify(error) + '\\r\\n';\n\n\t\t\t\t\terrMsg += 'Error Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\n\t\t\t\t\treturn $fhcAlert.alertSystemError(errMsg);\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\thandleSystemMessage(message) {\n\t\t\t\t// Message is string\n\t\t\t\tif (typeof message === 'string')\n\t\t\t\t\treturn $fhcAlert.alertWarning(message);\n\n\t\t\t\t// Message is array of strings\n\t\t\t\tif (Array.isArray(message)) {\n\t\t\t\t\t// If Array has only Strings\n\t\t\t\t\tif (message.every(msg => typeof msg === 'string'))\n\t\t\t\t\t\treturn message.every($fhcAlert.alertWarning);\n\n\t\t\t\t\t// If Array has only Objects\n\t\t\t\t\tif (message.every(msg => typeof msg === 'object') && msg !== null) {\n\t\t\t\t\t\treturn message.every(msg => {\n\t\t\t\t\t\t\tif (msg.hasOwnProperty('data') && msg.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(msg.data.retval));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(msg));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Message is Object with data property\n\t\t\t\tif (typeof message === 'object' && message !== null){\n\t\t\t\t\tif (message.hasOwnProperty('data') && message.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t// NOTE(chris): changed: alertSystemError => alertWarning\n\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(message.data.retval));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(message));\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\tresetFormValidation(form) {\n\t\t\t\tconst event = new Event('fhc-form-reset');\n\t\t\t\tform.querySelectorAll(['[data-fhc-form-validate],[data-fhc-form-error]']).forEach(el => el.dispatchEvent(event));\n\t\t\t\t/*const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\tif (alert) {\n\t\t\t\t\talert.innerHTML = '';\n\t\t\t\t\talert.classList.add('d-none');\n\t\t\t\t}\n\t\t\t\tform.querySelectorAll('.invalid-feedback').forEach(n => n.remove());\n\t\t\t\tform.querySelectorAll('.is-invalid').forEach(n => n.classList.remove('is-invalid'));\n\t\t\t\tform.querySelectorAll('.is-valid').forEach(n => n.classList.remove('is-valid'));*/\n\t\t\t},\n\t\t\thandleFormValidation(error, form) {\n\t\t\t\tif (form === undefined) {\n\t\t\t\t\tif (error && error.nodeType === Node.ELEMENT_NODE)\n\t\t\t\t\t\treturn err => $fhcAlert.handleFormValidation(err, error);\n\t\t\t\t} else {\n\t\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t\tif (typeof errors !== \"object\")\n\t\t\t\t\t\t\terrors = error.response.data;\n\n\t\t\t\t\t\t// NOTE(chris): reset form validation\n\t\t\t\t\t\t$fhcAlert.resetFormValidation(form);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// NOTE(chris): set form input validation\n\t\t\t\t\t\tconst notFound = Object.entries(errors).filter(([key, detail]) => {\n\t\t\t\t\t\t\tconst input = form.querySelector('[data-fhc-form-validate=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\tinput.dispatchEvent(new CustomEvent('fhc-form-invalidate', {detail}));\n\n\t\t\t\t\t\t\t/*const input = form.querySelector('[name=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\tinput.classList.add('is-invalid');\n\t\t\t\t\t\t\tconst feedback = document.createElement('div');\n\t\t\t\t\t\t\tfeedback.classList.add('invalid-feedback');\n\t\t\t\t\t\t\tfeedback.innerHTML = detail;\n\t\t\t\t\t\t\tinput.after(feedback);*/\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}).map(arr => arr[1]);\n\n\n\t\t\t\t\t\t//const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\t\t\tconst alert = form.querySelector('[data-fhc-form-error]');\n\t\t\t\t\t\tif (alert && notFound.length) {\n\t\t\t\t\t\t\talert.dispatchEvent(new CustomEvent('fhc-form-error', {detail: notFound}));\n\t\t\t\t\t\t\t/*notFound.forEach(txt => {\n\t\t\t\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\t\t\t\tp.innerHTML = txt;\n\t\t\t\t\t\t\t\talert.append(p);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (notFound.length) {\n\t\t\t\t\t\t\t\talert.lastChild.classList.add('mb-0');\n\t\t\t\t\t\t\t\talert.classList.remove('d-none');\n\t\t\t\t\t\t\t}*/\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnotFound.forEach($fhcAlert.alertError);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t$fhcAlert.alertError((typeof errors === 'object') ? Object.values(errors) : errors);\n\t\t\t\t} else {\n\t\t\t\t\t$fhcAlert.handleSystemError(error);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tapp.config.globalProperties.$fhcAlert = $fhcAlert;\n\t\tapp.provide('$fhcAlert', app.config.globalProperties.$fhcAlert);\n\t}\n}","import FhcAlert from './FhcAlert.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$api) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!app.config.globalProperties.$fhcAlert)\n\t\t\tapp.use(FhcAlert);\n\n\t\tfunction _send_array_or_object(errors, func) {\n\t\t\tif (Array.isArray(errors))\n\t\t\t\terrors.forEach(func);\n\t\t\telse\n\t\t\t\tObject.entries(errors).forEach(\n\t\t\t\t\t([title, errs]) => errs.forEach(\n\t\t\t\t\t\terror => func(error, title)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t}\n\t\tlet DEFAULT_ERROR_CONFIG = {\n\t\t\tsuccess: true,\n\t\t\tfail: true,\n\t\t\tcombine: {\n\t\t\t\tform: ['validation', 'general'],\n\t\t\t\ttoast: ['validation', 'general', 'not_found', 'site_failed']\n\t\t\t},\n\t\t\thandler: {\n\t\t\t\tform(form, errors) {\n\t\t\t\t\tform.clearValidation();\n\t\t\t\t\terrors.forEach(err => form.setFeedback(\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\terr.messages || err.message\n\t\t\t\t\t));\n\t\t\t\t},\n\t\t\t\tasync toast(errors) {\n\t\t\t\t\tconst $p = app.config.globalProperties.$p;\n\t\t\t\t\tif (!$p)\n\t\t\t\t\t\treturn Promise.reject('Phrasen plugin not loaded!');\n\t\t\t\t\n\t\t\t\t\tasync function _format_toast(errors) {\n\t\t\t\t\t\terrors = errors.reduce((result, err) => {\n\t\t\t\t\t\t\tswitch (err.type) {\n\t\t\t\t\t\t\tcase 'not_found':\n\t\t\t\t\t\t\tcase 'site_failed':\n\t\t\t\t\t\t\t\tif (err.message)\n\t\t\t\t\t\t\t\t\tresult[err.message] = [err.url];\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tresult._default = [err.url];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'general':\n\t\t\t\t\t\t\t\tif (!result._default)\n\t\t\t\t\t\t\t\t\tresult._default = [];\n\t\t\t\t\t\t\t\tresult._default.push(err.message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'validation':\n\t\t\t\t\t\t\t\tObject.entries(err.messages)\n\t\t\t\t\t\t\t\t\t.forEach(([field, msg]) => {\n\t\t\t\t\t\t\t\t\t\tif (!result[field])\n\t\t\t\t\t\t\t\t\t\t\tresult[field] = [];\n\t\t\t\t\t\t\t\t\t\tif (Array.isArray(msg))\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(...msg);\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(msg);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}, {});\n\t\t\t\t\t\tlet counter = 0;\n\t\t\t\t\t\tconst msgs = await Promise.all(Object.entries(errors)\n\t\t\t\t\t\t\t.sort((a, b) => ['_default'].indexOf(b[0]) - ['_default'].indexOf(a[0])) // sort _default first\n\t\t\t\t\t\t\t.map(async ([field, msgs]) => {\n\t\t\t\t\t\t\t\tif (field == '_default') {\n\t\t\t\t\t\t\t\t\tawait $p.loadCategory('dashboard');\n\t\t\t\t\t\t\t\t\tconst general = $p.t('dashboard/general');\n\t\t\t\t\t\t\t\t\tfield = '
' + general + '
';\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfield = '
' + field + '
';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcounter += msgs.length;\n\t\t\t\t\t\t\t\treturn field\n\t\t\t\t\t\t\t\t\t+ '
'\n\t\t\t\t\t\t\t\t\t+ msgs.join('
')\n\t\t\t\t\t\t\t\t\t+ '
';\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcounter,\n\t\t\t\t\t\t\tmsgs\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet counter, msgs;\n\t\t\t\t\tif (Array.isArray(errors)) {\n\t\t\t\t\t\t({ counter, msgs } = await _format_toast(errors));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t({ counter, msgs } = await Object.entries(errors)\n\t\t\t\t\t\t\t.reduce(async (res, [title, errs]) => {\n\t\t\t\t\t\t\t\tconst result = await res;\n\t\t\t\t\t\t\t\tconst { counter, msgs } = await _format_toast(errs);\n\t\t\t\t\t\t\t\tresult.counter += counter;\n\t\t\t\t\t\t\t\tresult.msgs.push('
'\n\t\t\t\t\t\t\t\t\t+ title\n\t\t\t\t\t\t\t\t\t+ '
'\n\t\t\t\t\t\t\t\t\t+ msgs.join('')\n\t\t\t\t\t\t\t\t\t+ '
');\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}, Promise.resolve({ counter: 0, msgs: []})));\n\t\t\t\t\t}\n\n\t\t\t\t\tawait $p.loadCategory('ui');\n\t\t\t\t\tconst n_errors = $p.t('ui/n_errors', { n: counter });\n\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\tn_errors,\n\t\t\t\t\t\t'
' + msgs.join('') + '
',\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tphp(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('warn', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('info', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\tmessage = title + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\texception(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tdb(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tauth(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\ttitle += ': ' + error.message;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ttitle = error.message;\n\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (options?.errorHandling !== undefined)\n\t\t\tDEFAULT_ERROR_CONFIG = _merge_error_config(options.errorHandling);\n\t\t\n\t\tfunction get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\t\tfunction clean_return_value(response) {\n\t\t\tif (typeof response.data === 'string' || response.data instanceof String)\n\t\t\t\treturn clean_return_value({ data: response });\n\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result)\n\t\t\t\treturn {meta: {response}, data: null};\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = { response };\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tfunction _merge_error_config(config) {\n\t\t\tif (config === false || config === 'off')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false, fail: false };\n\t\t\t\n\t\t\tif (!config || config === true)\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tif (config === 'success')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, fail: false };\n\t\t\t\n\t\t\tif (config === 'fail')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false };\n\t\t\t\n\t\t\tconst { success, fail, handler, combine } = config;\n\t\t\t\n\t\t\tconfig = { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tObject.entries({ fail, success }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = value;\n\t\t\t});\n\t\t\tObject.entries({ handler, combine }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = { ...config[key], ...value };\n\t\t\t});\n\n\t\t\treturn config;\n\t\t}\n\t\tfunction get_error_handler(config) {\n\t\t\tconst result = _merge_error_config(config?.errorHandling);\n\n\t\t\tif (!config?.form) {\n\t\t\t\tresult.combine = { ...result.combine, form: [] };\n\t\t\t} else {\n\t\t\t\tconst formHandler = result.handler.form;\n\t\t\t\tresult.handler = { ...result.handler, form: errors => formHandler(config.form, errors) };\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t\tfunction get_error_list(error) {\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\treturn [{\n\t\t\t\t\t\ttype: 'not_found',\n\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t\t}];\n\t\t\t\t} else {\n\t\t\t\t\tif (error.response.data.errors == undefined) return [];\n\t\t\t\t\treturn error.response.data.errors;\n\t\t\t\t}\n\t\t\t} else if (error.request) {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'site_failed',\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t}];\n\t\t\t} else {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'script',\n\t\t\t\t\tmessage: error.message\n\t\t\t\t}];\n\t\t\t}\n\t\t}\n\t\tfunction popHandleableErrors(errorHandling, errors) {\n\t\t\tconst result = {};\n\t\t\tconst copy = [];\n\n\t\t\tif (errors == undefined) return {};\n\n\t\t\twhile (errors.length)\n\t\t\t\tcopy.push(errors.pop());\n\t\t\tfor (var error of copy) {\n\t\t\t\tlet type = error.type;\n\t\t\t\tlet newType = null;\n\t\t\t\tfor (var t in errorHandling.combine) {\n\t\t\t\t\tlet newTypeCombinesType = errorHandling\n\t\t\t\t\t\t.combine[t]\n\t\t\t\t\t\t.includes(type);\n\t\t\t\t\tlet newTypeHasHandler = errorHandling.handler[t];\n\t\t\t\t\tif (newTypeCombinesType && newTypeHasHandler) {\n\t\t\t\t\t\tnewType = t;\n\t\t\t\t\t\tif (newType == 'form')\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (newType)\n\t\t\t\t\ttype = newType;\n\t\t\t\tconst handler = errorHandling.handler[type];\n\t\t\t\tif (handler) {\n\t\t\t\t\tif (!result[type])\n\t\t\t\t\t\tresult[type] = [];\n\t\t\t\t\tif (Array.isArray(error))\n\t\t\t\t\t\tresult[type].push(...error);\n\t\t\t\t\telse\n\t\t\t\t\t\tresult[type].push(error);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\terrors.push(error);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t+ FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(\n\t\t\tresponse => {\n\t\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\t\treturn clean_return_value(response);\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\tif (response.data.errors)\n\t\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$api._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t\t);\n\n\t\t\t\treturn clean_return_value(response);\n\t\t\t},\n\t\t\terror => {\n\t\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\n\t\t\t\tconst errorConfig = get_error_handler(error.config);\n\n\t\t\t\tif (!errorConfig.fail)\n\t\t\t\t\treturn Promise.reject(error);\n\n\t\t\t\tconst remaining = get_error_list(error);\n\n\t\t\t\tconst errors = popHandleableErrors(errorConfig, remaining);\n\n\t\t\t\tfor (var type in errors) {\n\t\t\t\t\terrorConfig.handler[type](errors[type]);\n\t\t\t\t}\n\n\t\t\t\tif (remaining.length)\n\t\t\t\t\treturn Promise.reject(error);\n\t\t\t\t\n\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\t\t\t}\n\t\t);\n\n\t\tapp.config.globalProperties.$api = {\n\t\t\tgetUri(url) {\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\t[uri, params, config] = get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\t[uri, data, config] = get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\tcall(factory, configoverwrite, form) {\n\t\t\t\tif (Array.isArray(factory)) {\n\t\t\t\t\tconst $api = app.config.globalProperties.$api;\n\n\t\t\t\t\treturn Promise\n\t\t\t\t\t\t.allSettled(factory.map((config, index) => {\n\t\t\t\t\t\t\tif (!Array.isArray(config))\n\t\t\t\t\t\t\t\tconfig = ['#' + index, config];\n\t\t\t\t\t\t\treturn $api.call(config[1], {\n\t\t\t\t\t\t\t\terrorHeader: config[0],\n\t\t\t\t\t\t\t\terrorHandling: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}))\n\t\t\t\t\t\t.then(result => {\n\t\t\t\t\t\t\tconst [ , , config ] = get_config(form, undefined, undefined, configoverwrite || {});\n\t\t\t\t\t\t\tconst errorConfig = get_error_handler(config);\n\n\t\t\t\t\t\t\tif (!errorConfig.success && !errorConfig.fail) {\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst typedErrors = {};\n\t\t\t\t\t\t\tfor (var res of result) {\n\t\t\t\t\t\t\t\tconst [ allowed, item ] = res.status === 'fulfilled'\n\t\t\t\t\t\t\t\t\t? [ errorConfig.success, res.value ]\n\t\t\t\t\t\t\t\t\t: [ errorConfig.fail, res.reason ];\n\t\t\t\t\t\t\t\tif (!allowed)\n\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\tconst errors = popHandleableErrors(errorConfig, get_error_list(item));\n\n\t\t\t\t\t\t\t\tfor (var type in errors) {\n\t\t\t\t\t\t\t\t\tif (!typedErrors[type])\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type] = {\n\t\t\t\t\t\t\t\t\t\t\t[item.config.errorHeader]: errors[type]\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type][item.config.errorHeader] = errors[type];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfor (var errType in typedErrors) {\n\t\t\t\t\t\t\t\terrorConfig.handler[errType](typedErrors[errType]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tlet { method, url, params, config } = factory;\n\t\t\t\tif (configoverwrite !== undefined) {\n\t\t\t\t\tconfig = configoverwrite;\n\t\t\t\t}\n\t\t\t\tif (!method) {\n\t\t\t\t\tmethod = 'get';\n\t\t\t\t}\n\t\t\t\tif (method.toLowerCase)\n\t\t\t\t\tmethod = method.toLowerCase();\n\t\t\t\tif (method == 'get') {\n\t\t\t\t\treturn this.get(form, url, params, config);\n\t\t\t\t} else if (method == 'post') {\n\t\t\t\t\treturn this.post(form, url, params, config);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"FhcApi: method not allowed:\", method);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tapp.provide('$api', app.config.globalProperties.$api);\n\t}\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/loadModule/' + category\n\t\t};\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst params = {categories, language}\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/phrasen/setLanguage',\n\t\t\tparams\n\t\t};\n\t},\n\tgetLanguage() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getLanguage'\n\t\t};\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getAllLanguages'\n\t\t};\n\t}\n};","import OldFhcApi from '../plugin/OldFhcApi.js'; // TODO(chris): remove at some point\nimport PluginsApi from './Api.js';\nimport ApiPhrasen from '../api/factory/phrasen.js';\n\nconst categories = Vue.reactive({});\nconst loadingModules = {};\nlet user_language = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language);\nexport let user_locale = Vue.computed(()=>{\n\tif(!user_language.value) return null;\n\treturn FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(language => language.sprache == user_language.value).LC_Time;\n});\n\nfunction extractCategory(obj, category) {\n\treturn obj.filter(e => e.category == category).reduce((res, elem) => {\n\t\tif (!res[elem.phrase])\n\t\t\tres[elem.phrase] = elem.text;\n\t\treturn res;\n\t}, {});\n}\nfunction getValueForLoadedPhrase(category, phrase, params) {\n\tlet result = categories[category][phrase];\n\tif (!result)\n\t\treturn '<< PHRASE ' + phrase + '>>';\n\tif (params)\n\t\tresult = result.replace(/\\{([^}]*)\\}/g, (match, p1) => params[p1] === undefined ? match : params[p1]);\n\treturn result;\n}\n\nconst phrasen = {\n\tuser_language,\n\tuser_locale,\n\tsetLanguage(language) {\n\t\tconst catArray = Object.keys(categories)\n\t\treturn this.config.globalProperties.$api\n\t\t\t.call(ApiPhrasen.setLanguage(catArray, language))\n\t\t\t.then(res => {\n\t\t\t\tres.data.forEach(row => {\n\t\t\t\t\tcategories[row.category][row.phrase] = row.text\n\t\t\t\t})\n\n\t\t\t\t// update the reactive data that holds the current active user_language\n\t\t\t\tuser_language.value = language;\n\n\t\t\t\treturn res\n\t\t\t})\n\t},\n\tloadCategory(category) {\n\t\tif (Array.isArray(category))\n\t\t\treturn Promise.all(category.map(this.config.globalProperties\n\t\t\t\t.$p.loadCategory));\n\n\t\tif (!loadingModules[category])\n\t\t\tloadingModules[category] = this.config.globalProperties.$api\n\t\t\t\t.call(ApiPhrasen.loadCategory(category))\n\t\t\t\t.then(res => res?.data ? extractCategory(res.data, category) : {})\n\t\t\t\t.then(res => {\n\t\t\t\t\tcategories[category] = res;\n\t\t\t\t});\n\t\treturn loadingModules[category];\n\t},\n\tt_ref(category, phrase, params) {\n\t\tconsole.warn('deprecated');\n\t\treturn Vue.computed(() => this.t(category, phrase, params));\n\t},\n\tt(category, phrase, params) {\n\t\tif (params === undefined && (\n\t\t\t(Array.isArray(category) && category.length == 2) ||\n\t\t\t(category.split && category.split('/').length == 2))\n\t\t\t) {\n\t\t\tparams = phrase;\n\t\t\t[category, phrase] = category.split ? category.split('/') : category;\n\t\t}\n\t\tif (phrase === undefined) {\n\t\t\tconsole.error('invalid input', category, phrase, params);\n\t\t\treturn '';\n\t\t}\n\t\tlet val = Vue.computed(() => {\n\t\t\tif (!categories[category])\n\t\t\t\treturn '';\n\t\t\treturn getValueForLoadedPhrase(category, phrase, params);\n\t\t});\n\t\tif (!categories[category])\n\t\t\tthis.loadCategory(category);\n\t\treturn val.value;\n\t}\n};\n\nexport default {\n\tinstall(app, options) {\n\t\tif (!app.config.globalProperties.$fhcApi)\n\t\t\tapp.use(OldFhcApi); // TODO(chris): remove at some point\n\t\tif (!app.config.globalProperties.$api)\n\t\t\tapp.use(PluginsApi);\n\t\tapp.config.globalProperties.$p = {\n\t\t\tt: phrasen.t,\n\t\t\tloadCategory: cat => phrasen.loadCategory.call(app, cat),\n\t\t\tsetLanguage: lang => phrasen.setLanguage.call(app, lang),\n\t\t\tuser_language: user_language,\n\t\t\tuser_locale,\n\t\t\tt_ref: phrasen.t_ref\n\t\t};\n\t\tapp.provide('$p', app.config.globalProperties.$p);\n\t}\n}","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsearch(params) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/searchbar/search',\n\t\t\tparams\n\t\t};\n\t},\n\tsearchCis(params) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/searchbar/searchCis',\n\t\t\tparams\n\t\t};\n\t},\n\tsearchStv(params) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/searchbar/searchStv',\n\t\t\tparams\n\t\t};\n\t}\n};","let theme_name = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.theme.name);\nconst theme_modes = FHC_JS_DATA_STORAGE_OBJECT.theme.modes;\n\nconst toggleTheme = (theme)=>{\n\tif (!theme) return;\n\n\tfor (const theme of theme_modes) {\n\t\tdocument.documentElement.classList.remove(theme);\n\t}\n\ttheme_name.value = theme;\n\tdocument.documentElement.classList.add(theme);\n\n\tdocument.body.setAttribute(\"data-bs-theme\", theme);\n\n\tlet stylesheet = document.querySelector('link[href*=\"primevue/resources/themes\"]');\n\tif (theme == \"dark\") {\n\t\tstylesheet.attributes.href.value = stylesheet.attributes.href.value.replace(\"bootstrap4-light-blue\", \"bootstrap4-dark-blue\");\n\t} else if (theme == \"light\") {\n\t\tstylesheet.attributes.href.value = stylesheet.attributes.href.value.replace(\"bootstrap4-dark-blue\", \"bootstrap4-light-blue\");\n\t}\n\telse{\n\t\tif (stylesheet.attributes.href.value.includes(\"bootstrap4-dark-blue\"))\n\t\t\tstylesheet.attributes.href.value = stylesheet.attributes.href.value.replace(\"bootstrap4-dark-blue\", \"bootstrap4-light-blue\");\n\t}\n\n\tlocalStorage.setItem(\"theme\", theme);\n}\n\nconst initializeTheme = ()=>{\n\t\n\tlet theme = localStorage.getItem(\"theme\");\n\tif (!theme || !theme_modes.includes(theme)) {\n\t\t// set the first theme mode as default\n\t\ttheme = theme_modes[0];\n\t\tlocalStorage.setItem(\"theme\",theme);\n\t}\n\ttoggleTheme(theme);\n}\n\n\nexport default {\n\tinstall: (app,options)=>{\n\t\t\n\t\tdocument.documentElement.classList.add(theme_name.value);\n\n\t\tinitializeTheme();\n\n\t\tapp.config.globalProperties.$theme = {\n\t\t\ttheme_name,\n\t\t\ttheme_modes,\n\t\t\tswitchTheme: (theme) => {\n\t\t\t\ttoggleTheme(theme);\n\t\t\t}, \n\t\t} \n\t}\n}","import FhcSearchbar from \"../components/searchbar/searchbar.js\";\nimport CisMenu from \"../components/Cis/Menu.js\";\nimport PluginsPhrasen from '../plugins/Phrasen.js';\nimport ApiSearchbar from '../api/factory/searchbar.js';\nimport Theme from \"../plugins/Theme.js\";\n\nconst app = Vue.createApp({\n name: 'CisApp',\n components: {\n FhcSearchbar,\n CisMenu\n },\n data: function() {\n return {\n searchbaroptions: {\n\t\t\t\torigin: \"cis\",\n\t\t\t\tcssclass: \"\",\n\t\t\t\tcalcheightonly: true,\n\t\t\t\ttypes: {\n\t\t\t\t\temployee: Vue.computed(() => this.$p.t(\"search/type_employee\")),\n\t\t\t\t\tstudent: Vue.computed(() => this.$p.t(\"search/type_student\")),\n\t\t\t\t\troom: Vue.computed(() => this.$p.t(\"search/type_room\")),\n\t\t\t\t\torganisationunit: Vue.computed(() => this.$p.t(\"search/type_organisationunit\")),\n\t\t\t\t\tcms: Vue.computed(() => this.$p.t(\"search/type_cms\")),\n\t\t\t\t\tdms: Vue.computed(() => this.$p.t(\"search/type_dms\"))\n\t\t\t\t},\n actions: {\n employee: {\n defaultaction: {\n type: \"link\",\n action: function(data) {\n\t\t\t\t\t\t\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router+\n\t\t\t\t\t\t\t\t\t\t\"/Cis/Profil/View/\"+data.uid;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n childactions: []\n\t\t\t\t\t},\n\t\t\t\t\tstudent: {\n\t\t\t\t\t\tdefaultaction: {\n\t\t\t\t\t\t\ttype: \"link\",\n\t\t\t\t\t\t\taction: function (data) {\n\t\t\t\t\t\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\t\t\t\t\t\t\"/Cis/Profil/View/\" + data.uid;\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tchildactions: []\n\t\t\t\t\t},\n room: {\n defaultaction: {\n type: \"link\",\n\t\t\t\t\t\t\trenderif: function(data) {\n\t\t\t\t\t\t\t\tif(data.content_id === null){\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t},\n action: function(data) { \n\t\t\t\t\t\t\t\tconst link= FHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\t\t\t\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\t\t\t\t\t\t'/CisVue/Cms/content/' + data.content_id;\n\t\t\t\t\t\t\t\treturn link;\n }\n },\n childactions: [\n {\n label: \"LV-Plan\",\n icon: \"fas fa-bookmark\",\n type: \"link\",\n action: function(data) {\n\t\t\t\t\t\t\t\t\tconst link = FHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\t\t\t\t\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\t\t\t\t\t\t\t'/CisVue/Cms/getRoomInformation/' + data.ort_kurzbz;\n\t\t\t\t\t\t\t\t\treturn link;\n }\n },\n {\n label: \"Rauminformation\",\n icon: \"fas fa-info-circle\",\n type: \"link\",\n renderif: function(data) {\n\t\t\t\t\t\t\t\t\tif(data.content_id === null){\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn true;\n },\n action: function(data) {\n\t\t\t\t\t\t\t\t\tconst link= FHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\t\t\t\t\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\t\t\t\t\t\t\t'/CisVue/Cms/content/' + data.content_id;\n\t\t\t\t\t\t\t\t\treturn link;\n }\n },\n ]\n },\n organisationunit: {\n defaultaction: {\n type: \"link\",\n\t\t\t\t\t\t\trenderif: function(data) {\n\t\t\t\t\t\t\t\tif(data.mailgroup) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t},\n action: function(data) {\n const link = 'mailto:' + data.mailgroup;\n\t\t\t\t\t\t\t\treturn link;\n }\n },\n childactions: []\n },\n\t\t\t\t\tcms: {\n\t\t\t\t\t\tdefaultaction: {\n\t\t\t\t\t\t\ttype: \"link\",\n\t\t\t\t\t\t\taction: function (data) {\n\t\t\t\t\t\t\t\tconst link = FHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\t\t\t\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\t\t\t\t\t\t'/CisVue/Cms/content/' + data.content_id;\n\t\t\t\t\t\t\t\treturn link;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tchildactions: []\n\t\t\t\t\t},\n\t\t\t\t\tdms: {\n\t\t\t\t\t\tdefaultaction: {\n\t\t\t\t\t\t\ttype: \"link\",\n\t\t\t\t\t\t\taction: function (data) {\n\t\t\t\t\t\t\t\tconst link = FHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\t\t\t\t\t\t\t'cms/dms.php?id=' + data.dms_id;\n\t\t\t\t\t\t\t\treturn link;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tchildactions: []\n\t\t\t\t\t}\n }\n }\n };\n },\n methods: {\n searchfunction: function(searchsettings) {\n \treturn this.$api.call(ApiSearchbar.searchCis(searchsettings));\n }\n }\n});\napp.use(primevue.config.default, {\n\tzIndex: {\n\t\toverlay: 9000,\n\t\ttooltip: 8000\n\t}\n})\napp.use(PluginsPhrasen);\napp.use(Theme);\napp.mount('#cis-header');\n"],"names":["TemplateAction","name","emits","props","res","Object","action","computed","actionHref","this","type","methods","actionFunc","$emit","renderif","undefined","template","TemplateFrame","components","ResultAction","ResultActions","actions","Array","title","String","image","imageFallback","person$3","emails","Set","email","room","mode","equipment","replace","RegExp","address","zip","city","street","floor","$p","t","employee","organisationunit","student","photo_url","foto","prestudent$1","status","stg_kuerzel","dms","icon","mimetype","cms$1","inject","preview","template_kurzbz","text","content","length","lower","toLowerCase","firstOccurence","Math","min","query","split","reduce","a","c","i","indexOf","includes","posInText","push","substr","url","content_url","$fhcApi","getUri","FHC_JS_DATA_STORAGE_OBJECT","app_root","mergedStudent","ResultPrestudent","ResultStudent","prestudent","list","filter","item","pop","mergedPerson","person","isArray","find","person_id","students","el","idx","arr","some","tmpitem","uid","sort","b","telurl","phone","inaktiv","aktiv","FhcSearchbar","cms","provide","Vue","lastQuery","data","searchtimer","hidetimer","searchsettings","searchstr","getSearchStr","types","getInitiallySelectedTypes","searchresult","searchmode","showresult","searching","error","abortController","settingsDropdown","searchTypesPlaceholder","map","typeLabels","join","values","searchoptions","keys","watch","newSearchValue","origin","sessionStorage","setItem","newValue","localStorage","JSON","stringify","search","mounted","bootstrap","Collapse","$refs","settings","toggle","console","warn","updated","nextTick","calcSearchResultHeight","clearInput","hideresult","input","focus","result","localStorageValue","getItem","parse","checkSettingsVisibility","event","contains","target","hide","handleShowSettings","document","addEventListener","handleHideSettings","removeEventListener","rect","results","getBoundingClientRect","height","window","innerHeight","style","ceil","calcSearchResultExtent","calcheightonly","searchbox","top","bottom","right","width","clearTimeout","abort","setTimeout","callsearchapi","splice","showsearchresult","AbortController","searchfunction","timeout","signal","then","response","meta","searchstring","mergeResults","counter","mergeTypes","mergedType","mergeKey","renderer","rank","retry","catch","code","refreshsearch","togglesettings","searchfocusin","e","preventDefault","stopPropagation","searchfocusout","dash2camelCase","string","g","toUpperCase","isValidRenderer","camelCaseRenderer","$","getActions","ApiCisMenu","getMenu","method","CisMenu","CisMenuEntry","entry","level","Number","default","activeContent","highestMatchingUrlCount","collapse","urlCount","setActiveEntry","content_id","menu_open","searchRecursiveChild","oldValue","show","makeParentContentActive","active","link","DOMParser","parseFromString","getElementsByTagName","childNodes","nodeValue","news_regex","ci_router","content_regex_result","exec","index_regex","relative_regex","hasFullLink","startsWith","hasChilds","childs","getUrlMatchPoints","splitted_link","splitted_url","href","count","part_url","part_link","addUrlCount","checkActiveUrl","url_hash_spaceSymbol_regex","url_hash_sharpSymbol_regex","url_hash","hash","titel","property","value","entries","child","toggleCollapse","evt","children","className","URL","location","CisSprachen","allActiveLanguages","server_languages","changeLanguage","lang","l","sprache","isReload","querySelector","setLanguage","reload","ThemeSwitch","theme","switchTheme","nextTheme","$theme","theme_modes","created","rootUrl","logoUrl","avatarUrl","logoutUrl","selectedtypes","searchbaroptions","Function","activeEntry","urlMatchRankings","navUserDropdown","menuOpen","menuCollapseAriaLabel","highestMatch","max","site_url","fetchMenu","$api","call","menu","handleShowNavUser","handleHideNavUser","collection","parent","loadCategory","config","post","searchAdvanced","searchdummy","phrasen$1","category","get","categories","language","payload","getLanguage","getActiveDbLanguages","navigation","getHeader","navigation_page","filter$1","saveCustomFilter","wsParams","filterUniqueId","filterType","customFilterName","removeCustomFilter","filterId","applyFilterFields","filterFields","addFilterField","filterField","removeFilterField","getFilterById","getFilter","studstatus","abmeldung","getDetails","antrag_id","prestudent_id","create","stdsem","grund","studiensemester","errorHandling","cancel","Promise","allSettled","antrag","studierendenantrag_id","errorHeader","unterbrechung","datum_wiedereinstieg","attachment","wiederholung","getLvs","saveLvs","forbiddenLvs","mandatoryLvs","leitung","getStgs","getAntraege","params","getHistory","getPrestudents","approve","reject","reopen","pause","unpause","object","approveObjection","denyObjection","profil","getView","fotoSperre","isStudent","isMitarbeiter","getZustellAdresse","getZustellKontakt","getGemeinden","nation","getAllNationen","profilUpdate","getStatus","getTopic","acceptProfilRequest","profil_update_id","status_message","topic","requested_change","denyProfilRequest","insertFile","getProfilRequestFiles","requestID","selectProfilRequest","id","insertProfilRequest","fileID","updateProfilRequest","ID","deleteProfilRequest","lvPlan","getRoomInfo","ort_kurzbz","start_date","end_date","getStunden","getOrtReservierungen","getLvPlanReservierungen","getLehreinheitStudiensemester","lehreinheit_id","studiensemesterDateInterval","date","LvPlanEvents","lv_id","stv","verband","favorites","set","studiensemester_kurzbz","encodeURIComponent","relative_path","getStg","setStg","studiengang_kz","konto","tabulatorConfig","self","ajaxURL","ajaxParams","modelValue","only_open","studiengang_kz_intern","stg_kz","ajaxRequestFunc","ajaxResponse","checkDoubles","form","confirmErrorHandler","insert","edit","delete","buchungsnr","getBuchungstypen","group","getGruppen","deleteGroup","kontakt","getAdressen","addNewAddress","loadAddress","address_id","updateAddress","deleteAddress","getPlaces","plz","getFirmen","searchString","getNations","getAdressentypen","getBankverbindung","addNewBankverbindung","loadBankverbindung","bankverbindung_id","updateBankverbindung","deleteBankverbindung","getKontakte","addNewContact","loadContact","kontakt_id","updateContact","deleteContact","getStandorteByFirma","getKontakttypen","updatePrestudent","getBezeichnungZGV","getBezeichnungMZgv","getBezeichnungDZgv","getAusbildung","getAufmerksamdurch","getBerufstaetigkeit","getTypenStg","getBisstandort","getHistoryPrestudent","getMaxSem","studiengang_kzs","advanceStatus","status_kurzbz","ausbildungssemester","confirmStatus","isLastStatus","deleteStatus","getLastBismeldestichtag","getHistoryPrestudents","insertStatus","loadStatus","updateStatus","getStudienplaene","getStudiengang","getStatusgruende","getStati","addStudent","changeStatus","getStatusarray","details","save","exam","getPruefungen","loadPruefung","pruefung_id","getTypenPruefungen","getAllLehreinheiten","getLvsByStudent","getLvsandLesByStudent","semester","getLvsAndMas","getMitarbeiterLv","getNoten","checkZeugnisnoteLv","addPruefung","updatePruefung","deletePruefung","abschlusspruefung","getAbschlusspruefung","addNewAbschlusspruefung","loadAbschlusspruefung","updateAbschlusspruefung","deleteAbschlusspruefung","getTypenAbschlusspruefung","getTypenAntritte","getBeurteilungen","getAkadGrade","getTypStudiengang","getMitarbeiter","getPruefer","checkForExistingExams","uids","grades","getCertificate","getTeacherProposal","getRepeaterGrades","updateCertificate","lehrveranstaltung_id","student_uid","note","lehrveranstaltung_bezeichnung","deleteCertificate","copyTeacherProposalToCertificate","copyRepeaterGradeToCertificate","studierendenantrag_lehrveranstaltung_id","lv_bezeichnung","getGradeFromPoints","points","manualErrorHandling","mobility","getMobilitaeten","getProgramsMobility","addNewMobility","loadMobility","bisio_id","updateMobility","deleteMobility","getLVList","getPurposes","getSupports","getListPurposes","getListSupports","deleteMobilityPurpose","addMobilityPurpose","deleteMobilitySupport","addMobilitySupport","archiv","getArchivVorlagen","archive","archiveSigned","update","akte_id","documents","getDocumentsUnaccepted","getDocumentsAccepted","deleteZuordnung","dokument_kurzbz","createZuordnung","loadAkte","getDoktypen","updateFile","deleteFile","uploadFile","exemptions","getAnrechnungen","getLehrveranstaltungen","getBegruendungen","getLvsKompatibel","getLektoren","addNewAnrechnung","loadAnrechnung","anrechnung_id","editAnrechnung","deleteAnrechnung","jointstudies","getStudies","getTypenMobility","getStudiensemester","getStudyprograms","getListPartner","getStatiPrestudent","loadStudy","insertStudy","updateStudy","deleteStudy","courselist","getCourselist","group_consecutiveHours","dbStundenplanTable","configStudent","configStudents","notiz","getNotizen","getUid","addNewNotiz","formData","loadNotiz","notiz_id","loadDokumente","deleteNotiz","type_id","updateNotiz","isBerechtigt","betriebsmittel","getAllBetriebsmittel","addNewBetriebsmittel","loadBetriebsmittel","betriebsmittelperson_id","updateBetriebsmittel","deleteBetriebsmittel","getTypenBetriebsmittel","loadInventarliste","checkperson","updatePersonUnrulyStatus","unrulyParam","unruly","filterPerson","base","axios","ort","getContentID","ort_kurbz","getRooms","datum","von","bis","typ","personenanzahl","getRoomTypes","version","sichtbar","getNews","page","page_size","news","limit","getNewsRowCount","getNewsExtra","lehre","getStudentenMail","getLvInfo","getStudentPruefungen","getStudentProjektarbeiten","getStudentProjektabgaben","detail","projektarbeit_id","postStudentProjektarbeitEndupload","Headers","postStudentProjektarbeitZwischenabgabe","getStudentProjektarbeitAbgabeFile","paabgabe_id","getMitarbeiterProjektarbeiten","all","postProjektarbeitAbgabe","termin","paabgabetyp_kurzbz","bezeichnung","fixtermin","insertvon","kurzbz","deleteProjektarbeitAbgabe","postSerientermin","projektarbeit_ids","fetchDeadlines","addons","getLvMenu","lvid","messages","getMessages","size","getVorlagen","getMsgVarsLoggedInUser","getMessageVarsPerson","getMsgVarsPrestudent","getPersonId","getVorlagentext","vorlage_kurzbz","getNameOfDefaultRecipient","getPreviewText","getReplyData","messageId","sendMessageFromModalContext","sendMessage","deleteMessage","vorlagen","getVorlagenByLoggedInUser","studium","getAllStudienSemester","studiengang","studienplan","getStudiengaengeForStudienSemester","getStudienplaeneBySemester","getLvPlanForStudiensemester","getLvEvaluierungInfo","FhcApiFactory","phrasen","dashboard","getViewData","bookmark","getBookmarks","bookmark_id","tag","ampeln","open","confirm","ampel_id","studiengangInformation","getStudiengangByKz","authinfo","getAuthUID","getAuthInfo","getAll","OldFhcApi","install","app","options","globalProperties","factory","addEndpoints","_get_config","uri","TypeError","clearValidation","setFeedback","_clean_return_value","fhcApiAxios","baseURL","interceptors","request","use","FormData","every","FileList","File","newData","nd","key","file","append","jsondata","forEach","errors","err","_defaultErrorHandlers","handled","$fhcAlert","alertDefault","message","responseURL","alertError","validation","apply","general","php","filename","line","backtrace","function","severity","alertSystemError","exception","class","db","heading","sql","auth","controller","required_permissions","FhcApiFactoryWrapper","constructor","factorypart","root","defineProperty","noWarn","bind","CORE_REST_CLIENT_ERROR","CORE_REST_CLIENT_RETVAL","CoreRESTClient","wsURL","wsParameters","axiosParameters","_axiosCall","isSuccess","hasOwnProperty","isError","hasData","trim","getData","getError","getErrorCode","_generateRouterURI","_printDebug","parameters","errorThrown","axiosCallObj","prop","helperAppContainer","createElement","helperApp","createApp","PvToast","PvConfirm","mailToUrl","slotProps","systemerror_mailto","called_path","called_method","openMessagecard","getOrCreateInstance","getAttribute","unmounted","parentElement","removeChild","showmaillink","PvConfig","PvConfirmationService","helperAppInstance","mount","body","appendChild","FhcAlert","FhcPhrasen","alertSuccess","toast","add","summary","life","alertInfo","alertWarning","alert","confirmDelete","resolve","$confirm","require","header","acceptLabel","acceptClass","rejectLabel","rejectClass","accept","sticky","html","alertMultiple","messageArray","handleSystemError","errMsg","retval","stack","handleSystemMessage","msg","resetFormValidation","Event","querySelectorAll","dispatchEvent","handleFormValidation","nodeType","Node","ELEMENT_NODE","notFound","CustomEvent","PluginsApi","_send_array_or_object","func","errs","DEFAULT_ERROR_CONFIG","success","fail","combine","handler","async","_format_toast","_default","field","msgs","n_errors","n","get_config","clean_return_value","_merge_error_config","get_error_handler","formHandler","get_error_list","popHandleableErrors","copy","newType","newTypeCombinesType","newTypeHasHandler","errorConfig","remaining","configoverwrite","index","typedErrors","allowed","reason","errType","ApiPhrasen","reactive","loadingModules","user_language","ref","user_locale","LC_Time","catArray","row","phrase","obj","elem","extractCategory","t_ref","val","match","p1","getValueForLoadedPhrase","PluginsPhrasen","cat","ApiSearchbar","searchCis","searchStv","theme_name","modes","toggleTheme","documentElement","classList","remove","setAttribute","stylesheet","attributes","Theme","initializeTheme","cssclass","defaultaction","childactions","label","mailgroup","dms_id","primevue","zIndex","overlay","tooltip"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Cis.js","sources":["../../../js/components/searchbar/result/template/action.js","../../../js/components/searchbar/result/template/frame.js","../../../js/components/searchbar/result/template/actions.js","../../../js/components/searchbar/result/person.js","../../../js/components/searchbar/result/room.js","../../../js/components/searchbar/result/employee.js","../../../js/components/searchbar/result/organisationunit.js","../../../js/components/searchbar/result/student.js","../../../js/components/searchbar/result/prestudent.js","../../../js/components/searchbar/result/dms.js","../../../js/components/searchbar/result/cms.js","../../../js/components/searchbar/result/mergedstudent.js","../../../js/components/searchbar/result/mergedperson.js","../../../js/components/searchbar/searchbar.js","../../../js/api/factory/cis/menu.js","../../../js/components/Cis/Menu.js","../../../js/components/Cis/Menu/Entry.js","../../../js/components/Cis/Sprachen.js","../../../js/components/Cis/ThemeSwitch.js","../../../js/api/search.js","../../../js/api/phrasen.js","../../../js/api/navigation.js","../../../js/api/filter.js","../../../js/api/studstatus.js","../../../js/api/profil.js","../../../js/api/profilUpdate.js","../../../js/api/lvPlan.js","../../../js/api/stv.js","../../../js/api/stv/verband.js","../../../js/api/stv/students.js","../../../js/api/stv/filter.js","../../../js/api/stv/konto.js","../../../js/api/stv/group.js","../../../js/api/stv/kontakt.js","../../../js/api/stv/prestudent.js","../../../js/api/stv/status.js","../../../js/api/stv/details.js","../../../js/api/stv/exam.js","../../../js/api/stv/abschlusspruefung.js","../../../js/api/stv/grades.js","../../../js/api/stv/mobility.js","../../../js/api/stv/archiv.js","../../../js/api/stv/documents.js","../../../js/api/stv/exemptions.js","../../../js/api/stv/jointstudies.js","../../../js/api/stv/courselist.js","../../../js/api/notiz.js","../../../js/api/notiz/person.js","../../../js/api/betriebsmittel.js","../../../js/api/betriebsmittel/person.js","../../../js/api/checkperson.js","../../../js/api/ort.js","../../../js/api/cms.js","../../../js/api/lehre.js","../../../js/api/addons.js","../../../js/api/messages.js","../../../js/api/messages/person.js","../../../js/api/vorlagen.js","../../../js/api/studium.js","../../../js/api/fhcapifactory.js","../../../js/api/dashboard.js","../../../js/api/bookmark.js","../../../js/api/ampeln.js","../../../js/api/studiengang.js","../../../js/api/menu.js","../../../js/api/authinfo.js","../../../js/api/language.js","../../../js/plugin/OldFhcApi.js","../../../js/RESTClient.js","../../../js/plugins/FhcAlert.js","../../../js/plugins/Api.js","../../../js/api/factory/phrasen.js","../../../js/plugins/Phrasen.js","../../../js/api/factory/searchbar.js","../../../js/plugins/Theme.js","../../../js/apps/Cis.js"],"sourcesContent":["export default {\n\tname: 'SearchbarResultTemplateAction',\n\temits: [ 'actionexecuted' ],\n\tprops: { \n\t\tres: Object,\n\t\taction: Object\n\t},\n\tcomputed: {\n\t\tactionHref() {\n\t\t\tif (this.action.type !== 'link')\n\t\t\t\treturn 'javascript:void(0);';\n\t\t\treturn typeof this.action.action === 'function'\n\t\t\t\t? this.action.action(this.res) \n\t\t\t\t: this.action.action;\n\t\t}\n\t},\n\tmethods: {\n\t\tactionFunc() {\n\t\t\tif (this.action.type === 'function')\n\t\t\t\tthis.action.action(this.res);\n\t\t\tthis.$emit('actionexecuted');\n\t\t},\n\t\trenderif: function() {\n\t\t\tif(this.action?.renderif === undefined) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn this.action.renderif(this.res);\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t`\n};","import ResultAction from \"./action.js\";\nimport ResultActions from \"./actions.js\";\n\nexport default {\n\tname: 'SearchbarResultTemplateFrame',\n\tcomponents: {\n\t\tResultAction,\n\t\tResultActions\n\t},\n\temits: [ 'actionexecuted' ],\n\tprops: {\n\t\tres: Object,\n\t\tactions: Object,\n\t\ttitle: String,\n\t\timage: String,\n\t\timageFallback: String\n\t},\n\ttemplate: `\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{{ title }}\n\t\t\t\t\n\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t
`\n};","import ResultAction from \"./action.js\";\n\nexport default {\n\tname: 'SearchbarResultTemplateActions',\n\tcomponents: {\n\t\tResultAction\n\t},\n\temits: [ 'actionexecuted' ],\n\tprops: {\n\t\tres: Object,\n\t\tactions: Array\n\t},\n\tmethods: {\n\t\trenderif: function(action) {\n\t\t\tif(action?.renderif === undefined) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn action.renderif(this.res);\n\t\t}\n\t},\n\ttemplate: `\n\t
\n\t\t\n\t
`\n};","import TemplateFrame from \"./template/frame.js\";\n\nexport default {\n\tname: 'SearchbarResultPerson',\n\tcomponents: {\n\t\tTemplateFrame\n\t},\n\temits: [ 'actionexecuted' ],\n\tprops: {\n\t\tres: Object,\n\t\tactions: Object\n\t},\n\tcomputed: {\n\t\temails() {\n\t\t\treturn new Set(this.res.email);\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('person/person_id') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.person_id }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_emails') }}
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t`\n};","import TemplateFrame from \"./template/frame.js\";\n\nexport default {\n\tname: 'SearchbarResultRoom',\n\tcomponents: {\n\t\tTemplateFrame\n\t},\n\temits: [ 'actionexecuted' ],\n\tprops: {\n\t\tmode: String,\n\t\tres: Object,\n\t\tactions: Object\n\t},\n\tcomputed: {\n\t\tequipment() {\n\t\t\tif (!this.res.equipment)\n\t\t\t\treturn \"\";\n\t\t\treturn this.res.equipment.replace(new RegExp('
', 'ig'), '');\n\t\t},\n\t\taddress() {\n\t\t\tlet address = this.res.zip || '';\n\t\t\tif (this.res.city)\n\t\t\t\taddress += (address ? ' ' : '') + this.res.city;\n\t\t\tif (this.res.street)\n\t\t\t\taddress += (address ? ', ' : '') + this.res.street;\n\t\t\tif (this.res.floor)\n\t\t\t\taddress += (address ? ' / ' : '') + this.$p.t('search/result_address_floor', this.res);\n\n\t\t\treturn address || this.$p.t('search/result_address_none');\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_room_address') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ address }}\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_workplaces') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.sitzplaetze }}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_building') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.building }}\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_equipment') }}
\n\t\t\t\t
\n\t\t\t\t\t
','')\">
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t`\n};","import TemplateFrame from \"./template/frame.js\";\n\nexport default {\n\tname: 'SearchbarResultEmployee',\n\tcomponents: {\n\t\tTemplateFrame\n\t},\n\temits: [ 'actionexecuted' ],\n\tprops: {\n\t\tres: Object,\n\t\tactions: Object\n\t},\n\ttemplate: `\n\t\n\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_stdkst') }}
\n\t\t\t\t
\n\t\t\t\t\t
    0\">\n\t\t\t\t\t\t
  • {{ stdkst }}
  • \n\t\t\t\t\t
\n\t\t\t\t\t{{ $p.t('search/result_stdkst_none') }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('lehre/organisationseinheit') }}
\n\t\t\t\t
\n\t\t\t\t\t
    0\">\n\t\t\t\t\t\t
  • {{ oe }}
  • \n\t\t\t\t\t
\n\t\t\t\t\t{{ $p.t('search/result_oe_none') }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_emails') }}
\n\t\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('person/telefon') }}
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t`\n};","import TemplateFrame from \"./template/frame.js\";\n\nexport default {\n\tname: 'SearchbarResultOrganistationunit',\n\tcomponents: {\n\t\tTemplateFrame\n\t},\n\temits: [ 'actionexecuted' ],\n\tprops: {\n\t\tres: Object,\n\t\tactions: Object\n\t},\n\ttemplate: `\n\t\n\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_parent_oe') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.parentoe_name }}\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_group_emails') }}
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t{{ res.mailgroup }}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_leader') }}
\n\t\t\t\t
\n\t\t\t\t\t
    0\">\n\t\t\t\t\t\t
  • {{ leader.name }}
  • \n\t\t\t\t\t
\n\t\t\t\t\t{{ $p.t('search/result_leader_none') }}\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_number_of_employees') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.number_of_people }}\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t`\n};","import TemplateFrame from \"./template/frame.js\";\n\nexport default {\n\tname: 'SearchbarResultStudent',\n\tcomponents: {\n\t\tTemplateFrame\n\t},\n\temits: [ 'actionexecuted' ],\n\tprops: {\n\t\tmode: String,\n\t\tres: Object,\n\t\tactions: Object\n\t},\n\tcomputed: {\n\t\tphoto_url() {\n\t\t\tif (this.mode != 'simple')\n\t\t\t\treturn this.res.photo_url;\n\t\t\tif (this.res.foto)\n\t\t\t\treturn 'data:image/jpeg;base64,' + this.res.foto;\n\t\t\treturn null;\n\t\t},\n\t\temails() {\n\t\t\tif (this.mode == 'simple')\n\t\t\t\treturn new Set([this.res.email]);\n\t\t\treturn new Set(this.res.email);\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_student_uid') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.uid }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('person/person_id') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.person_id }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('person/matrikelnummer') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.matrikelnr }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_emails') }}
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t`\n};","import TemplateFrame from \"./template/frame.js\";\n\nexport default {\n\tname: 'SearchbarResultPrestudent',\n\tcomponents: {\n\t\tTemplateFrame\n\t},\n\temits: [ 'actionexecuted' ],\n\tprops: {\n\t\tmode: String,\n\t\tres: Object,\n\t\tactions: Object\n\t},\n\tcomputed: {\n\t\ttitle() {\n\t\t\tif (this.mode == 'simple')\n\t\t\t\treturn this.res.name;\n\t\t\treturn this.res.name + ' (' + this.res.status + ' ' + this.res.stg_kuerzel + ')';\n\t\t},\n\t\tphoto_url() {\n\t\t\tif (this.mode != 'simple')\n\t\t\t\treturn this.res.photo_url;\n\t\t\tif (this.res.foto)\n\t\t\t\treturn 'data:image/jpeg;base64,' + this.res.foto;\n\t\t\treturn null;\n\t\t},\n\t\temails() {\n\t\t\tif (this.mode == 'simple')\n\t\t\t\treturn new Set([this.res.email]);\n\t\t\treturn new Set(this.res.email);\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('person/person_id') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.person_id }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_emails') }}
\n\t\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_student_uid') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.uid }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('person/matrikelnummer') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.matrikelnr }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_prestudent_id') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.prestudent_id }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('lehre/studiengang') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.bezeichnung }} {{ res.orgform ? '(' + res.orgform + ')' : '' }}\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t`\n};","import TemplateFrame from \"./template/frame.js\";\n\nexport default {\n\tname: 'SearchbarResultDms',\n\tcomponents: {\n\t\tTemplateFrame\n\t},\n\temits: [ 'actionexecuted' ],\n\tprops: {\n\t\tres: Object,\n\t\tactions: Object\n\t},\n\tcomputed: {\n\t\ticon() {\n\t\t\tswitch (this.res.mimetype) {\n\t\t\t\tcase 'application/pdf':\n\t\t\t\t\treturn 'file-pdf';\n\t\t\t\tcase 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':\n\t\t\t\tcase 'application/msword':\n\t\t\t\t\treturn 'file-word';\n\t\t\t\tcase 'application/vnd.openxmlformats-officedocument.presentationml.presentation':\n\t\t\t\tcase 'application/mspowerpoint':\n\t\t\t\t\treturn 'file-powerpoint';\n\t\t\t\tcase 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':\n\t\t\t\tcase 'application/vnd.ms-excel':\n\t\t\t\t\treturn 'file-excel';\n\t\t\t\tcase 'application/x-zip':\n\t\t\t\tcase 'application/zip':\n\t\t\t\t\treturn 'file-zipper';\n\t\t\t\tcase 'image/jpeg':\n\t\t\t\tcase 'image/gif':\n\t\t\t\tcase 'image/png':\n\t\t\t\t\treturn 'file-image';\n\t\t\t\tdefault:\n\t\t\t\t\treturn 'file';\n\t\t\t}\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_dms_id') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.dms_id }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_version') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.version }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_keywords') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.keywords }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('global/beschreibung') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ res.description }}\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t`\n};","import TemplateFrame from \"./template/frame.js\";\n\nexport default {\n\tname: 'SearchbarResultCms',\n\tcomponents: {\n\t\tTemplateFrame\n\t},\n\temits: [ 'actionexecuted' ],\n\tprops: {\n\t\tres: Object,\n\t\tactions: Object\n\t},\n\tinject: [\n\t\t'query'\n\t],\n\tcomputed: {\n\t\tpreview() {\n\t\t\tif (this.res.template_kurzbz != 'redirect') {\n\t\t\t\tlet text = this.res.content.replace(//ig, '').replace(/<[^>]+>/ig, '').replace(/^\\s+|\\s+$/g, '');\n\n\t\t\t\tif (text.length > 1000) {\n\t\t\t\t\t// NOTE(chris): focus on searched text!\n\t\t\t\t\tlet lower = text.toLowerCase();\n\t\t\t\t\tlet firstOccurence = Math.min(this.query.split(' ').reduce((a, c) => {\n\t\t\t\t\t\t// NOTE(chris): filter query for words that affects the content field and get the lowest index of them\n\t\t\t\t\t\tif (c == 'or')\n\t\t\t\t\t\t\treturn a;\n\t\t\t\t\t\tlet i = c.indexOf(':');\n\t\t\t\t\t\tif (i < 0 || (i > 0 && ['content', 'inhalt'].includes(c.split(':')[0]))) {\n\t\t\t\t\t\t\tlet posInText = lower.indexOf(c);\n\t\t\t\t\t\t\tif (posInText >= 0)\n\t\t\t\t\t\t\t\ta.push(posInText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn a;\n\t\t\t\t\t}, []));\n\n\t\t\t\t\tif (firstOccurence) {\n\t\t\t\t\t\tif (firstOccurence + 997 >= text.length) {\n\t\t\t\t\t\t\tfirstOccurence = text.length - 997;\n\t\t\t\t\t\t\tif (firstOccurence > 0)\n\t\t\t\t\t\t\t\treturn '...' + text.substr(firstOccurence, 997);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn '...' + text.substr(firstOccurence, 994) + '...';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\ttext = text.substr(0, 997) + '...';\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn text;\n\t\t\t}\n\t\t\t\n\t\t\tlet url = this.res.content_url;\n\t\t\tif (url.substr(0, 16) == '../index.ci.php/')\n\t\t\t\turl = this.$fhcApi.getUri(url.substr(16));\n\t\t\telse if (url.substr(0, 3) == '../')\n\t\t\t\turl = FHC_JS_DATA_STORAGE_OBJECT.app_root.replace(/\\/+$/, '') + url.substr(2);\n\t\t\treturn '' + url + '';\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t\t
\n\t\t
\n\t\t\t{{ $p.t('search/result_content_none') }}\n\t\t
\n\t`\n};","import ResultPrestudent from \"./prestudent.js\";\nimport ResultStudent from \"./student.js\";\n\nexport default {\nname: 'SearchbarResultMergedstudent',\n\t\tcomponents: {\n\t\tResultPrestudent,\n\t\tResultStudent\n\t},\n\temits: [ 'actionexecuted' ],\n\tprops: {\n\t\tmode: String,\n\t\tres: Object,\n\t\tactions: Object\n\t},\n\tcomputed: {\n\t\tprestudent() {\n\t\t\tconst prestudent = this.res.list.filter(item => item.type == 'prestudent');\n\t\t\treturn prestudent.pop();\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t`\n};","import TemplateFrame from \"./template/frame.js\";\nimport TemplateAction from \"./template/action.js\";\n\nexport default {\n\tname: 'SearchbarResultMergedperson',\n\tcomponents: {\n\t\tTemplateFrame,\n\t\tTemplateAction\n\t},\n\temits: [ 'actionexecuted' ],\n\tprops: {\n\t\tmode: String,\n\t\tres: Object,\n\t\tactions: Object\n\t},\n\tcomputed: {\n\t\tperson() {\n\t\t\t // Cummulate all emails\n\t\t\tconst email = this.res.list.reduce((a, c) => [...a, ...(Array.isArray(c.email) ? c.email : [c.email])], []);\n\n\t\t\t// Use person entry if available (with cummulated emails)\n\t\t\tconst person = this.res.list.find(item => item.type == 'person');\n\t\t\tif (person)\n\t\t\t\treturn {...person, email};\n\n\t\t\t // Those properties should be the same in all entries\n\t\t\tconst { person_id, name } = this.res.list[0];\n\t\t\t // Get first photo (prefer student photo if available)\n\t\t\tlet photo_url;\n\t\t\tif (this.mode == 'simple') {\n\t\t\t\tlet foto = (this.students ? this.students.find(el => el.foto) : null)?.foto;\n\t\t\t\tif (foto)\n\t\t\t\t\tfoto = 'data:image/jpeg;base64,' + foto;\n\t\t\t\tphoto_url = foto || this.employee?.photo_url;\n\t\t\t} else\n\t\t\t\tphoto_url = ((this.students ? this.students.find(el => el.photo_url) : null) || this.employee)?.photo_url;\n\n\t\t\treturn { person_id, name, photo_url, email };\n\t\t},\n\t\temployee() {\n\t\t\treturn this.res.list.find(item => [\n\t\t\t\t'employee',\n\t\t\t\t'unassigned_employee',\n\t\t\t\t'mitarbeiter',\n\t\t\t\t'mitarbeiter_ohne_zuordnung'\n\t\t\t].includes(item.type)) || null;\n\t\t},\n\t\tstudents() {\n\t\t\tconst students = this.res.list.filter(item => [\n\t\t\t\t\t'student',\n\t\t\t\t\t'prestudent',\n\t\t\t\t\t'studentcis',\n\t\t\t\t\t'studentStv'\n\t\t\t\t].includes(item.type))\n\t\t\t\t.filter((item, idx, arr) => {\n\t\t\t\t\tif (item.type === 'prestudent') {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet prestudentwithsameuidexists = arr.some(tmpitem => {\n\t\t\t\t\t\treturn tmpitem.uid === item.uid && tmpitem.type === 'prestudent';\n\t\t\t\t\t});\n\n\t\t\t\t\tif (prestudentwithsameuidexists) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}).sort((a, b) => (a.sort || 0) - (b.sort || 0));\n\t\t\treturn students.length ? students : null;\n\t\t},\n\t\temails() {\n\t\t\t// Remove duplicates\n\t\t\treturn new Set(this.person.email);\n\t\t},\n\t\ttelurl() {\n\t\t\treturn 'tel:' + this.employee?.phone;\n\t\t},\n\t\tinaktiv() {\n\t\t\treturn this.res.list.some(item => item?.aktiv === false);\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('person/person_id') }}
\n\t\t\t\t
\n\t\t\t\t\t{{ person.person_id }}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ $p.t('search/result_emails') }}
\n\t\t\t\t\n\t\t\t
\n\n\t\t\t\n\n\t\t\t\n\t\t
\n\t`\n};","import person from \"./result/person.js\";\nimport room from \"./result/room.js\";\nimport employee from \"./result/employee.js\";\nimport organisationunit from \"./result/organisationunit.js\";\nimport student from \"./result/student.js\";\nimport prestudent from \"./result/prestudent.js\";\nimport dms from \"./result/dms.js\";\nimport cms from \"./result/cms.js\";\nimport mergedStudent from \"./result/mergedstudent.js\";\nimport mergedPerson from \"./result/mergedperson.js\";\n\nexport default {\n\tname: \"FhcSearchbar\",\n\tcomponents: {\n\t\tperson,\n\t\troom,\n\t\temployee,\n\t\torganisationunit,\n\t\tstudent,\n\t\tprestudent,\n\t\tdms,\n\t\tcms,\n\t\tmergedStudent,\n\t\tmergedPerson\n\t},\n props: [ \"searchoptions\", \"searchfunction\" ],\n provide() {\n return {\n query: Vue.computed(() => this.lastQuery)\n };\n },\n data: function() {\n return {\n searchtimer: null,\n hidetimer: null,\n searchsettings: {\n searchstr: this.getSearchStr(),\n types: this.getInitiallySelectedTypes(),\n },\n searchresult: [],\n searchmode: '',\n showresult: false, \n searching: false,\n error: null,\n abortController: null,\n\t\t\tsettingsDropdown: null,\n lastQuery: ''\n };\n },\n\tcomputed: {\n\t\tsearchTypesPlaceholder() {\n\t\t\tif (!this.searchsettings.types.length) {\n\t\t\t\treturn Object.values(this.typeLabels).join(' / ');\n\t\t\t}\n\t\t\treturn this.searchsettings.types.map(type => this.typeLabels[type]).join(' / ');\n\t\t},\n\t\ttypes() {\n\t\t\tif (!this.searchoptions.types)\n\t\t\t\treturn [];\n\t\t\tif (Array.isArray(this.searchoptions.types))\n\t\t\t\treturn this.searchoptions.types;\n\t\t\treturn Object.keys(this.searchoptions.types);\n\t\t},\n\t\ttypeLabels() {\n\t\t\tif (!this.searchoptions.types)\n\t\t\t\treturn {};\n\t\t\tif (Array.isArray(this.searchoptions.types)) {\n\t\t\t\treturn this.searchoptions.types.reduce((res, type) => {\n\t\t\t\t\tres[type] = type;\n\t\t\t\t\treturn res\n\t\t\t\t}, {});\n\t\t\t}\n\t\t\treturn this.searchoptions.types;\n\t\t}\n\t},\n\ttemplate: /*html*/`\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n \n \n \n
\n\n
\n
\n
\n
\n \n
\n
{{ error }}
\n
{{ $p.t('search/error_no_results') }}
\n \n
\n
\n
\n\n\t\t\t\n\t\t\t\t 0\"\n\t\t\t\t\tclass=\"d-flex flex-column m-3\"\n\t\t\t\t>\n\t\t\t\t\t\n\t\t\t\t\t\t{{ $p.t('search/applyfilter_label') }}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{{ label }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n
\n\t\t\n `,\n watch:{\n\t\t'searchsettings.searchstr': function (newSearchValue) {\n\t\t\tif(this.searchoptions.origin){\n\t\t\t\tsessionStorage.setItem(`${this.searchoptions.origin}_searchstr`,newSearchValue);\n\t\t\t}\n\t\t},\n\t\t'searchsettings.types'(newValue) {\n\t\t\tif (Array.isArray(newValue) && newValue.length === 0) {\n\t\t\t\tthis.searchsettings.types = [...this.types];\n\t\t\t}\n\t\t\t// stores the search types in the localstorage, only if the newValue is also an array\n\t\t\tif (Array.isArray(newValue) && this.searchoptions.origin) {\n\t\t\t\tlocalStorage.setItem(`${this.searchoptions.origin}_searchtypes`, JSON.stringify(newValue));\n\t\t\t}\n\t\t\tthis.search();\n\t\t}\n },\n\tmounted(){\n\t\tthis.settingsDropdown = new bootstrap.Collapse(this.$refs.settings, {\n\t\t\ttoggle: false\n\t\t});\n\n\t\tif (!this.searchoptions.origin){\n\t\t\tconsole.warn(\"No origin defined in the searchoptions for the searchbar, please define the origin property in the searchbaroptions to allow reliable storage of searchstr and searchtypes accross applications.\");\n\t\t}\n\t},\n\tupdated() {\n\t\tif(this.showresult) {\n\t\t\tVue.nextTick(() => {\n\t\t\t\tthis.calcSearchResultHeight();\n\t\t\t});\n\t\t}\n\t},\n methods: {\n \tclearInput() {\n \t\tthis.searchsettings.searchstr = \"\";\n \t\tthis.hideresult();\n \t\tthis.$refs.input.focus()\n \t},\n\t\tgetInitiallySelectedTypes() {\n\t\t\tlet result = false;\n\t\t\tif (this.searchoptions.origin) {\n\t\t\t\tlet localStorageValue = localStorage.getItem(`${this.searchoptions.origin}_searchtypes`);\n\t\t\t\tif (localStorageValue) {\n\t\t\t\t\tresult = JSON.parse(localStorageValue);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (result)\n\t\t\t\treturn result;\n\t\t\tif (!this.searchoptions.types)\n\t\t\t\treturn [];\n\t\t\tif (Array.isArray(this.searchoptions.types))\n\t\t\t\treturn [...this.searchoptions.types];\n\t\t\treturn Object.keys(this.searchoptions.types);\n\t\t},\n\t\tgetSearchStr: function(){\n\t\t\tif (!this.searchoptions.origin)\n\t\t\t\treturn '';\n\t\t\treturn sessionStorage.getItem(`${this.searchoptions.origin}_searchstr`) ?? '';\n\t\t},\n\t\tcheckSettingsVisibility: function(event) {\n\t\t\t// hides the settings collapsible if the user clicks somewhere else\n\t\t\tif (!this.$refs.settings.contains(event.target))\n\t\t\t{\n\t\t\t\tthis.settingsDropdown.hide();\n\t\t\t}\n\t\t},\n\t\thandleShowSettings: function() {\n\t\t\t// adds the event listener checkSettingsVisibility only when the collapsible is shown\n\t\t\tdocument.addEventListener(\"click\", this.checkSettingsVisibility);\n\t\t},\n\t\thandleHideSettings: function () {\n\t\t\t// removes the event listener checkSettingsVisibility when the collapsible is hidden\n\t\t\tdocument.removeEventListener(\"click\", this.checkSettingsVisibility);\n\t\t},\n\t\tcalcSearchResultHeight: function() {\n\t\t\tconst rect = this.$refs.results.getBoundingClientRect();\n\t\t\tif( rect.height > 0 && rect.height < (window.innerHeight * 0.8) ) {\n\t\t\t\tthis.$refs.result.style.height = Math.ceil(rect.height + 16) + 'px';\n\t\t\t} else {\n\t\t\t\tthis.$refs.result.style.height = Math.floor(window.innerHeight * 0.8) + 'px';\n\t\t\t}\n\t\t},\n calcSearchResultExtent: function() {\n\t\t\tif(!this.showresult) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(this.searchoptions?.calcheightonly === undefined \n\t\t\t\t|| this.searchoptions.calcheightonly === false) {\n\t\t\t\tvar rect = this.$refs.searchbox.getBoundingClientRect();\n\t\t\t\tthis.$refs.result.style.top = Math.floor(rect.bottom + 3) + 'px';\n\t\t\t\tthis.$refs.result.style.right = Math.floor(rect.right) + 'px';\n\t\t\t\tthis.$refs.result.style.width = Math.floor(rect.width) + 'px';\n\t\t\t}\n this.calcSearchResultHeight();\n },\n search: function() {\n if( this.searchtimer !== null ) {\n clearTimeout(this.searchtimer);\n }\n if (this.abortController) {\n this.abortController.abort();\n this.abortController = null;\n }\n if( this.searchsettings.searchstr.length >= 2 ) {\n this.calcSearchResultExtent();\n this.searchtimer = setTimeout(\n this.callsearchapi,\n 500\n );\n } else { \n this.showresult = false;\n }\n },\n callsearchapi: function() {\n this.error = null;\n this.searchresult.splice(0, this.searchresult.length);\n this.searching = true;\n this.showsearchresult();\n if(this.searchsettings.types.length === 0) {\n this.error = this.$p.t('search/error_missing_type');\n this.searching = false;\n return;\n }\n\n if (this.abortController)\n this.abortController.abort();\n this.abortController = new AbortController();\n\n this.searchfunction(this.searchsettings, { timeout: 50000, signal: this.abortController.signal })\n .then(response=>{\n if (!response.data) {\n this.error = this.$p.t('search/error_general');\n } else {\n let res = response.data.map(el => el.data ? {...el, ...JSON.parse(el.data)} : el);\n this.lastQuery = response.meta.searchstring;\n if (this.searchoptions.mergeResults) {\n let counter = 0;\n let mergeTypes = [];\n let mergedType = 'merged-';\n let mergeKey = '';\n\n switch (this.searchoptions.mergeResults) {\n case 'student':\n mergeTypes = ['student', 'prestudent'];\n mergedType += this.searchoptions.mergeResults;\n mergeKey = 'uid';\n break;\n case 'person':\n mergeTypes = ['person', 'employee', 'student', 'prestudent'];\n mergedType += this.searchoptions.mergeResults;\n mergeKey = 'person_id';\n break;\n }\n\n if (mergeTypes.length) {\n res = Object.values(res.reduce((a, c) => {\n if (!mergeTypes.includes(c.renderer)) {\n a['nomerge' + counter++] = c;\n } else if (c[mergeKey] === null) {\n a['nomerge' + counter++] = c;\n } else if (a[c[mergeKey]] === undefined) {\n a[c[mergeKey]] = {\n rank: c.rank,\n renderer: mergedType,\n type: mergedType,\n list: [c]\n };\n } else {\n a[c[mergeKey]].list.push(c);\n if (c.rank > a[c[mergeKey]].rank)\n a[c[mergeKey]].rank = c.rank;\n }\n return a;\n }, {})).sort((a, b) => b.rank - a.rank);\n }\n }\n this.searchresult = res;\n this.searchmode = response.meta.mode;\n }\n this.searching = false;\n this.retry = 0;\n })\n .catch(error=> {\n if (error.code == \"ERR_CANCELED\") {\n return this.retry = 0;\n }\n if (error.code == \"ECONNABORTED\" && this.retry) {\n this.retry--;\n return this.callsearchapi();\n }\n\n this.error = this.$p.t('search/error_general', error);\n this.searching = false;\n this.retry = 0;\n });\n },\n refreshsearch: function() {\n this.search();\n this.togglesettings();\n },\n hideresult: function() {\n this.showresult = false;\n window.removeEventListener('resize', this.calcSearchResultExtent);\n },\n showsearchresult: function() {\n if( this.searchsettings.searchstr.length >= 2 ) {\n this.showresult = true;\n window.addEventListener('resize', this.calcSearchResultExtent);\n\t\t\t\tthis.calcSearchResultExtent();\n }\n },\n searchfocusin: function(e) {\n e.preventDefault();\n e.stopPropagation();\n if( this.hidetimer !== null ) {\n clearTimeout(this.hidetimer);\n }\n\t\t\tif (this.searchsettings.searchstr.length >= 2\n\t\t\t\t&& this.searchresult.length === 0) {\n\t\t\t\tthis.search();\n\t\t\t}\n },\n searchfocusout: function(e) {\n e.preventDefault();\n e.stopPropagation();\n this.hidetimer = setTimeout(\n this.hideresult,\n 100\n );\n },\n dash2camelCase(string) {\n return string.replace(/-([a-z])/g, g => g[1].toUpperCase());\n },\n isValidRenderer(renderer) {\n const camelCaseRenderer = this.dash2camelCase(renderer);\n return Object.keys(this.$.components).includes(camelCaseRenderer);\n },\n\t\tgetActions(res) {\n\t\t\tlet actions = this.searchoptions.actions[this.dash2camelCase(res.renderer)];\n\t\t\tif (actions) {\n\t\t\t\treturn actions;\n\t\t\t}\n\t\t\treturn this.searchoptions.actions[res.type];\n\t\t}\n }\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetMenu() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/CisMenu/getMenu'\n\t\t};\n\t}\n};","import CisMenuEntry from \"./Menu/Entry.js\";\nimport FhcSearchbar from \"../searchbar/searchbar.js\";\nimport CisSprachen from \"./Sprachen.js\"\nimport ThemeSwitch from \"./ThemeSwitch.js\";\nimport ApiCisMenu from '../../api/factory/cis/menu.js';\n\nexport default {\n components: {\n CisMenuEntry,\n FhcSearchbar,\n\t\tCisSprachen,\n\t\tThemeSwitch,\n },\n props: {\n\t\trootUrl: String,\n logoUrl: String,\n avatarUrl: String,\n logoutUrl: String,\n\t\tselectedtypes: Array,\n searchbaroptions: Object,\n searchfunction: Function\n },\n data: () => {\n return {\n entries: [],\n\t\t\tactiveEntry:null,\n\t\t\turl:null,\n\t\t\turlMatchRankings:[],\n\t\t\tnavUserDropdown:null,\n\t\t\tmenuOpen:true,\n };\n },\n\tprovide(){\n\t\treturn{\n\t\t\tsetActiveEntry: this.setActiveEntry,\n\t\t\taddUrlCount: this.addUrlCount,\n\t\t\tmakeParentContentActive: this.makeParentContentActive,\n\t\t}\n\t},\n\tcomputed:{\n\t\tmenuCollapseAriaLabel(){\n\t\t\tif(this.menuOpen){\n\t\t\t\treturn this.$p.t('global', 'collapseMenu');\n\t\t\t}else{\n\t\t\t\treturn this.$p.t('global', 'extendMenu');\n\t\t\t}\n\t\t},\n\t\thighestMatchingUrlCount(){\n\t\t\t// gets the hightest ranking inside the array\n\t\t\tlet highestMatch = Math.max(...this.urlMatchRankings);\n\n\t\t\tif(this.urlMatchRankings.length > 0){\n\t\t\t\t// if more than one entry has the same ranking, none should be active\n\t\t\t\treturn this.urlMatchRankings.filter((value)=>value == highestMatch).length > 1 ? null : highestMatch;\n\t\t\t}\n\n\t\t\treturn null;\n\t\t},\n\t\tsite_url(){\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router;\n\t\t}\n\t},\n\tmethods: {\n\t\tfetchMenu() {\n\t\t\treturn this.$api\n\t\t\t\t.call(ApiCisMenu.getMenu())\n\t\t\t\t.then(res => res.data)\n\t\t\t\t.then(menu => {\n\t\t\t\t\tthis.entries = menu;\n\t\t\t\t});\n\t\t},\n\t\tcheckSettingsVisibility: function (event) {\n\t\t\t// hides the settings collapsible if the user clicks somewhere else\n\t\t\tif (!this.$refs.navUserDropdown.contains(event.target)) {\n\t\t\t\tthis.navUserDropdown.hide();\n\t\t\t}\n\t\t},\n\t\thandleShowNavUser(){\n\t\t\tdocument.addEventListener(\"click\", this.checkSettingsVisibility);\n\t\t},\n\t\thandleHideNavUser(){\n\t\t\tdocument.removeEventListener(\"click\", this.checkSettingsVisibility);\n\t\t},\n\t\tmakeParentContentActive(content_id, collection=this.entries, parent=null){\n\t\t\tif(!collection) return;\n\t\t\tif (typeof collection == 'object' && !Array.isArray(collection) && Object.entries(collection).length > 0) {\n\t\t\t\tcollection = Object.values(collection);\n\t\t\t}\n\t\t\tfor(let entry of collection){\n\t\t\t\tif(entry.content_id == content_id){\n\t\t\t\t\tthis.activeEntry = parent;\n\t\t\t\t}\n\t\t\t\tthis.makeParentContentActive(content_id, entry.childs, entry.content_id);\n\t\t\t}\n\t\t\t\n\t\t},\n\t\taddUrlCount(count){\n\t\t\tthis.urlMatchRankings.push(count);\n\t\t},\n\n\t\tsetActiveEntry(content_id){\n\t\t\tthis.activeEntry = content_id;\n\t\t},\n\t},\n\tcreated(){\n\t\tthis.fetchMenu();\n\t},\n\tmounted(){\n\t\tthis.$p.loadCategory(['ui', 'global', 'profilUpdate'])\n\t\tthis.navUserDropdown = new bootstrap.Collapse(this.$refs.navUserDropdown,{\n\t\t\ttoggle: false\n\t\t});\n\t},\n template: /*html*/`\n\t\n\t\n
\n\t\t
\n\t\t\t\n\t\t\t\t\"Corporate\n\t\t\t\n\t\t\t\n\t\t
\n
\n\t
\n\t\t\n\t\t
    \n\t\t\t
  • Profil
  • \n\t\t\t
  • \n\t\t\t\t\n\t\t\t
  • \n\t\t\t

  • \n\t\t\t
  • Logout
  • \n\t\t
\n\t
\n `\n};\n","export default {\n name: 'CisMenuEntry',\n props: {\n entry: Object,\n level: {\n type: Number,\n default: 1\n },\n\t\tactiveContent: [String, Number],\n\t\thighestMatchingUrlCount: Number,\n },\n data: () => {\n\t\treturn {\n\t\t\tcollapse: null,\n\t\t\turlCount:0,\n }\n },\n\tinject: ['makeParentContentActive', 'setActiveEntry','addUrlCount'],\n\twatch:{\n\t\thighestMatchingUrlCount: function(newValue)\n\t\t{\n\t\t\t// if this entry has the most matching url parts then it should be active\n\t\t\tif (this.activeContent == null && newValue == this.urlCount)\n\t\t\t{\n\t\t\t\tthis.setActiveEntry(this.entry.content_id);\n\t\t\t}\n\t\t},\n\t\tactiveContent: function(newValue){\n\t\t\tif(newValue == this.entry.content_id){\n\t\t\t\t// wenn der Menupunkt nicht bereits offen ist\n\t\t\t\tif (!this.entry.menu_open){\n\t\t\t\t\tthis.entry.menu_open = true;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tif (this.searchRecursiveChild(this.entry, 'content_id',newValue)) {\n\t\t\t\t\tthis.entry.menu_open = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis.entry.menu_open = false;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'entry.menu_open': function (newValue,oldValue) {\n\t\t\tif (newValue) \n\t\t\t{\n\t\t\t\t// only invokes .show if this.collapse is not null\n\t\t\t\tthis.collapse && this.collapse.show();\n\t\t\t} \n\t\t\telse \n\t\t\t{\n\t\t\t\t// only invokes .hide if this.collapse is not null\n\t\t\t\tthis.collapse && this.collapse.hide();\n\t\t\t\tif (this.activeContent == this.entry.content_id)\n\t\t\t\t{\n\t\t\t\t\tthis.makeParentContentActive(this.entry.content_id);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n computed: {\n\t\tactive: function () {\n\t\t\tif (this.entry.menu_open){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\telse if (this.activeContent) {\n\t\t\t\treturn this.activeContent == this.entry.content_id;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n link() {\n if (this.entry.template_kurzbz == 'redirect') {\n if (!this.entry.content)\n return '';\n let xmlDoc = (new DOMParser()).parseFromString(this.entry.content,\"text/xml\");\n let url = xmlDoc.getElementsByTagName('url')[0];\n\n if (!url)\n return '';\n // TODO(chris): replace get params\n url = url.childNodes[0].nodeValue + \"\";\n\t\t\t\tif (url.includes(\"../cms/news.php\")) {\n\t\t\t\t\tlet news_regex = new RegExp(\"^\\.\\./cms/news\\.php\");\n\t\t\t\t\turl = url.replace(news_regex, FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/CisVue/Cms/news');\n\t\t\t\t}\n\t\t\t\telse if (url.includes(\"../cms/content.php?\")) {\n\t\t\t\t\tlet content_regex = new RegExp(\"^\\.\\./cms/content.php\\\\?content_id=([0-9]+)\");\n\t\t\t\t\tlet content_regex_result = content_regex.exec(url);\n\t\t\t\t\t// content_regex_result[1] will be the first matched group\n\t\t\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/CisVue/Cms/content/' + content_regex_result[1];\n\t\t\t\t}\n\t\t\t\telse if(url.includes(\"../index.ci.php\")){\n\t\t\t\t\tlet index_regex = new RegExp(\"^\\.\\./index\\.ci\\.php\");\n\t\t\t\t\turl = url.replace(index_regex, FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router);\n\t\t\t\t}\n\t\t\t\telse if (url.includes(\"../\")) {\n\t\t\t\t\tlet relative_regex = new RegExp(\"^\\.\\./\");\n\t\t\t\t\turl = url.replace(relative_regex, FHC_JS_DATA_STORAGE_OBJECT.app_root);\n\t\t\t\t}\n\t\t\t\treturn url;\n }\n return FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/CisVue/Cms/content/' + this.entry.content_id;\n },\n\t\thasFullLink() {\n\t\t\treturn this.link.startsWith(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router)\n\t\t},\n target() {\n if (this.entry.template_kurzbz == 'redirect') {\n if (!this.entry.content)\n return '';\n let xmlDoc = (new DOMParser()).parseFromString(this.entry.content,\"text/xml\");\n let target = xmlDoc.getElementsByTagName('target')[0];\n if (!target)\n return '';\n \n target = target.childNodes[0].nodeValue + \"\";\n if (target == 'content' || target == '_self')\n target = \"\";\n return target;\n }\n return ''\n },\n hasChilds() {\n return this.entry.childs && this.entry.childs.length !== 0;\n }\n },\n methods: {\n\t\tgetUrlMatchPoints(url,link){\n\t\t\tlet splitted_link = link.split('/');\n\t\t\tlet splitted_url = url.href.split('/');\n\n\t\t\tlet count = 0;\n\n\t\t\tfor(let part_url of splitted_url)\n\t\t\t{\n\t\t\t\tfor (let part_link of splitted_link)\n\t\t\t\t{\n\t\t\t\t\tif(part_url == part_link)\n\t\t\t\t\t{\n\t\t\t\t\t\tcount++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.urlCount = count;\n\t\t\tthis.addUrlCount(count);\n\t\t},\n\t\tcheckActiveUrl(url){\n\t\t\tthis.getUrlMatchPoints(url,this.link);\n\t\t\t\n\t\t\tlet url_hash_spaceSymbol_regex = new RegExp(\"%20\",\"gi\");\n\t\t\tlet url_hash_sharpSymbol_regex = new RegExp(\"^#\");\n\t\t\tlet url_hash = url.hash;\n\t\t\turl_hash = url_hash.replace(url_hash_spaceSymbol_regex, \" \").replace(url_hash_sharpSymbol_regex,\"\");\n\t\t\t\n\t\t\t// if the url hash contains the titel of the menu \n\t\t\t// or if the url equals the link of a menu \n\t\t\t// then set the menu active \n\t\t\tif (url_hash == this.entry.titel || url.href == this.link) {\n\t\t\t\t\tthis.setActiveEntry(this.entry.content_id);\n\t\t\t}\n\t\t},\n\t\t// searches the childs of an entry recursively based on the value of a property\n\t\tsearchRecursiveChild(entry,property,value){\n\t\t\tif (typeof entry.childs == 'object' && !Array.isArray(entry.childs) && Object.entries(entry.childs).length > 0){\n\t\t\t\tentry.childs = Object.values(entry.childs);\n\t\t\t}\n\t\t\tfor (let child of entry.childs) {\n\t\t\t\tif (child[property] == value) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif ((child.childs instanceof Array && child.childs.length > 0) || Object.values(child.childs).length > 0) {\n\t\t\t\t\tif (this.searchRecursiveChild(child, property, value)){\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\t\n\t\t\treturn false;\n\t\t},\n toggleCollapse(evt) {\n\t\t\tif (this.active)\n\t\t\t{\n\t\t\t\tthis.makeParentContentActive(this.entry.content_id); \n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.setActiveEntry(this.entry.content_id);\n\t\t\t}\n }\n },\n mounted() {\n if (this.$refs.children) {\n if (this.entry.menu_open)\n this.$refs.children.className += ' show';\n this.collapse = new bootstrap.Collapse(this.$refs.children, { toggle: false });\n }\n\n\t\tthis.checkActiveUrl(new URL(window.location.href));\n },\n template: /*html*/`\n\t
\n INCLUDE\n
\n `\n};","export default {\n\tdata(){\n\t\treturn {\n\t\t\tallActiveLanguages: FHC_JS_DATA_STORAGE_OBJECT.server_languages,\n\t\t}\n\t}, \n\temits: ['languageChanged'],\n\tmethods:{\n\t\tchangeLanguage: function(lang){\n\t\t\tif(this.allActiveLanguages.some(l => l.sprache === lang))\n\t\t\t{\n\t\t\t\tconst isReload = document.querySelector('[cis4Reload]')\n\t\t\t\tthis.$p.setLanguage(lang)\n\t\t\t\t.then(res => res.data)\n\t\t\t\t.then(data =>\n\t\t\t\t{\n\t\t\t\t\tif(isReload) window.location.reload()\n\t\t\t\t\telse this.$emit('languageChanged', lang);\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t},\n\ttemplate:/*html*/`\n\t
\n\t\t
\n\t\t\t\n\t\t
\n\t
\n\t`,\n};","export default {\n\tdata:()=>{\n\t\treturn{\n\t\t\ttheme: null,\n\t\t}\n\t},\n\tmethods:{\n\t\tswitchTheme(nextTheme){\n\t\t\tthis.theme = nextTheme;\n\t\t\tthis.$theme.switchTheme(this.theme);\n\t\t},\n\t\t\n\t},\n\tcomputed:{\n\t\tnextTheme(){\n\t\t\treturn this.$theme.theme_modes[(this.$theme.theme_modes.indexOf(this.theme) + 1) % this.$theme.theme_modes.length];\n\t\t},\n\t},\n\tcreated(){\n\t\tthis.theme = localStorage.getItem('theme');\n\t\tif (!this.theme || !this.$theme.theme_modes.includes(this.theme)) {\n\t\t\tthis.theme = this.$theme.theme_modes[0];\n\t\t}\n\t},\n\ttemplate:/*html*/`\n\n\t\n\t`\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsearch(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/search';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchAdvanced(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/searchAdvanced';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchdummy(searchsettings) {\n\t\tconst url = 'public/js/apps/api/dummyapi.php/Search';\n\t\treturn this.$fhcApi.post(url, searchsettings);\n\t}\n};\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/loadModule/' + category);\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst payload = {categories, language}\n\t\treturn this.$fhcApi.post('/api/frontend/v1/phrasen/setLanguage', payload);\n\t},\n\tgetLanguage() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getLanguage', {});\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getAllLanguages', {});\n\t}\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetHeader(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/header',\n\t\t\t{ navigation_page }\n\t\t);\n\t},\n\tgetMenu: function(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/menu',\n\t\t\t{ navigation_page }\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/saveCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t);\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/applyFilterFields',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t);\n\t},\n\taddFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/addFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tgetFilter(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tabmeldung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/abmeldung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(stdsem, prestudent_id, grund) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/abmeldung/createAntrag', {\n\t\t\t\tstudiensemester: stdsem,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\tif (!Array.isArray(antrag_id))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t\t{ antrag_id }\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag_id.map(antrag => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t{ antrag_id: antrag.studierendenantrag_id },\n\t\t\t\t{ errorHeader: '#' + antrag.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t},\n\tunterbrechung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/unterbrechung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(studiensemester, prestudent_id, grund, datum_wiedereinstieg, attachment) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/createAntrag', {\n\t\t\t\tstudiensemester,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund,\n\t\t\t\tdatum_wiedereinstieg,\n\t\t\t\tattachment\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/cancelAntrag', {\n\t\t\t\tantrag_id\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t}\n\t},\n\twiederholung: {\n\t\tgetDetails(prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/' + prestudent_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tgetLvs(antrag_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getLvs/' + antrag_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tcreate(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/createAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/cancelAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tsaveLvs(forbiddenLvs, mandatoryLvs) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/saveLvs', {\n\t\t\t\tforbiddenLvs,\n\t\t\t\tmandatoryLvs\n\t\t\t});\n\t\t}\n\t},\n\tleitung: {\n\t\tgetStgs() {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getActiveStgs');\n\t\t},\n\t\tgetAntraege(url, config, params) {\n\t\t\treturn this.$fhcApi\n\t\t\t\t.get('/api/frontend/v1/studstatus/leitung/getAntraege/' + url)\n\t\t\t\t.then(res => res.data); // Return data for tabulator\n\t\t},\n\t\tgetHistory(antrag_id) {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getHistory/' + antrag_id)\n\t\t},\n\t\tgetPrestudents(query, signal) {\n\t\t\treturn this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/getPrestudents',\n\t\t\t\t{ query },\n\t\t\t\t{\n signal: signal,\n timeout: 30000\n }\n\t\t\t);\n\t\t},\n\t\tapprove(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treopen(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tunpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tobject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tapproveObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tdenyObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t}\n};","export default {\n\n getView: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getView/${uid}`,{}\n );\n },\n\n fotoSperre: function (value) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/fotoSperre/${value}`,\n {}\n );\n \n },\n\n isStudent: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isStudent`,\n {\n uid:uid,\n }\n );\n },\n\n isMitarbeiter: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isMitarbeiter/${uid}`,\n {}\n );\n },\n\n getZustellAdresse: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellAdresse`,{}\n );\n },\n\n getZustellKontakt: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellKontakt`,{}\n );\n },\n\n getGemeinden: function(nation,zip){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getGemeinden/${nation}/${zip}`,\n {}\n );\n \n },\n getAllNationen:function(){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Profil/getAllNationen\",{}\n );\n },\n}","export default {\n //! API calls for profil update requests\n \n getStatus: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getStatus`,{});\n },\n \n getTopic: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getTopic`,{});\n },\n \n acceptProfilRequest: function ({profil_update_id, uid, status_message, topic, requested_change}) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/acceptProfilRequest\",{profil_update_id, uid, status_message, topic, requested_change});\n },\n \n denyProfilRequest: function ({profil_update_id, uid, topic, status_message}) {\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/denyProfilRequest\",{profil_update_id,uid,topic,status_message});\n },\n \n insertFile: function (dms, replace = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n dms);\n\n },\n \n getProfilRequestFiles: function (requestID) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`,{});\n },\n \n selectProfilRequest: function (uid = null, id = null) {\n\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/selectProfilRequest`,\n {...(uid?{uid}:{}),\n ...(id?{id}:{})\n });\n },\n \n insertProfilRequest: function (topic, payload, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/insertProfilRequest\",\n {\n topic,\n payload,\n ...(fileID ? { fileID } : {}),\n });\n },\n \n updateProfilRequest: function (topic, payload, ID, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/updateProfilRequest`,\n {\n topic,\n payload,\n ID,\n ...(fileID ? { fileID: fileID } : {}),\n });\n },\n \n deleteProfilRequest: function (requestID) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/deleteProfilRequest`,\n {\n requestID,\n });\n },\n };\n ","\nexport default {\n\tgetRoomInfo(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getRoomplan',\n\t\t\t{ ort_kurzbz, start_date, end_date}\n\t\t);\n\t},\n\tgetStunden() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/Stunden',\n\t\t\t{}\n\t\t);\n\t},\n\tgetOrtReservierungen(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/LvPlan/getReservierungen/${ort_kurzbz}`,\n\t\t\t{ start_date, end_date}\n\t\t);\n\t},\n\tgetLvPlanReservierungen(start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getReservierungen',\n\t\t\t{ start_date, end_date }\n\t\t);\n\t},\n\tgetLehreinheitStudiensemester(lehreinheit_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${lehreinheit_id}`,\n\t\t\t{}\n\t\t);\n\t},\n\tstudiensemesterDateInterval(date) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${date}`,\n\t\t\t{}\n\t\t);\n\t},\n\tLvPlanEvents(start_date, end_date, lv_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/LvPlanEvents',\n\t\t\t{ start_date, end_date, lv_id }\n\t\t);\n\t},\n\t\n\t\n};","import verband from './stv/verband.js';\nimport students from './stv/students.js';\nimport filter from './stv/filter.js';\nimport konto from './stv/konto.js';\nimport group from './stv/group.js';\nimport kontakt from './stv/kontakt.js';\nimport prestudent from './stv/prestudent.js';\nimport status from './stv/status.js';\nimport details from './stv/details.js';\nimport exam from './stv/exam.js';\nimport abschlusspruefung from './stv/abschlusspruefung.js';\nimport grades from './stv/grades.js';\nimport mobility from './stv/mobility.js';\nimport archiv from './stv/archiv.js';\nimport documents from './stv/documents.js';\nimport exemptions from './stv/exemptions.js';\nimport jointstudies from \"./stv/jointstudies.js\";\nimport courselist from './stv/courselist.js';\n\nexport default {\n\tverband,\n\tstudents,\n\tfilter,\n\tkonto,\n\tgroup,\n\tkontakt,\n\tprestudent,\n\tstatus,\n\tdetails,\n\texam,\n\tabschlusspruefung,\n\tgrades,\n\tmobility,\n\tarchiv,\n\tdocuments,\n\texemptions,\n\tjointstudies,\n\tcourselist,\n\tconfigStudent() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/student');\n\t},\n\tconfigStudents() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/students');\n\t}\n};\n","export default {\n\tget() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/verband');\n\t},\n\tfavorites: {\n\t\tget() {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/stv/favorites');\n\t\t},\n\t\tset(favorites) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/stv/favorites/set', {\n\t\t\t\tfavorites\n\t\t\t});\n\t\t}\n\t}\n}","export default {\n\tuid(uid, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/uid/'\n\t\t\t+ encodeURIComponent(uid);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tprestudent(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/prestudent/'\n\t\t\t+ encodeURIComponent(prestudent_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tperson(person_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/person/'\n\t\t\t+ encodeURIComponent(person_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tverband(relative_path) {\n\t\treturn this.$fhcApi.getUri('api/frontend/v1/stv/students/' + relative_path);\n\t}\n}","export default {\n\tgetStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/filter/getStg');\n\t},\n\tsetStg(studiengang_kz) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/filter/setStg', {\n\t\t\tstudiengang_kz\n\t\t});\n\t}\n};","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/konto/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id),\n\t\t\t\tonly_open: self.filter,\n\t\t\t\tstudiengang_kz: self.studiengang_kz_intern ? self.stg_kz : ''\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tcheckDoubles(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/checkDoubles', data, {\n\t\t\tconfirmErrorHandler: error => true\n\t\t});\n\t},\n\tinsert(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/insert', data);\n\t},\n\tcounter(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/counter', data);\n\t},\n\tedit(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/update', data);\n\t},\n\tdelete(buchungsnr) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/delete', {buchungsnr});\n\t},\n\tgetBuchungstypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/konto/getBuchungstypen');\n\t}\n};","export default {\n\tgetGruppen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/Gruppen/getGruppen/' + params.id);\n\t},\n\tdeleteGroup(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/Gruppen/deleteGruppe/', params);\n\t}\n}","export default {\n\t//------------- address.js-----------\n\tgetAdressen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressen/' + params.id);\n\t},\n\taddNewAddress(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewAddress/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadAddress(address_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadAddress/', {address_id});\n\t},\n\tupdateAddress(form, address_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateAddress/' + address_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteAddress(address_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteAddress/', {address_id});\n\t},\n\tgetPlaces(plz) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getPlaces/' + plz);\n\t},\n\tgetFirmen(searchString) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getFirmen/' + searchString);\n\t},\n\tgetNations() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getNations/');\n\t},\n\tgetAdressentypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressentypen/');\n\t},\n\n\t//------------- bankverbindung.js-----------\n\tgetBankverbindung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getBankverbindung/' + params.id);\n\t},\n\taddNewBankverbindung(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewBankverbindung/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadBankverbindung(bankverbindung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadBankverbindung/', {bankverbindung_id});\n\t},\n\tupdateBankverbindung(form, bankverbindung_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateBankverbindung/' + bankverbindung_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteBankverbindung(bankverbindung_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteBankverbindung/', {bankverbindung_id});\n\t},\n\n\t//------------- contact.js-----------\n\tgetKontakte (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakte/' + params.id);\n\t},\n\taddNewContact(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewContact/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadContact(kontakt_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadContact/', {kontakt_id});\n\t},\n\tupdateContact(form, kontakt_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateContact/' + kontakt_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteContact(kontakt_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteContact/', {kontakt_id});\n\t},\n\tgetStandorteByFirma(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getStandorteByFirma/' + searchString);\n\t},\n\tgetKontakttypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakttypen/');\n\t}\n};","export default {\n\n//------------- Prestudent.js------------------------------------------------------\n\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\treturn \tthis.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/prestudent/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t);\n\t},\n\tupdatePrestudent(form, prestudent_id, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/prestudent/updatePrestudent/' + prestudent_id,\n\t\t\tdata\n\t\t);\n\t},\n\tgetBezeichnungZGV() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungZGV/');\n\t},\n\tgetBezeichnungMZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungMZgv/');\n\t},\n\tgetBezeichnungDZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungDZgv/');\n\t},\n\tgetStgs() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStgs/');\n\t},\n\tgetAusbildung() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAusbildung/');\n\t},\n\tgetAufmerksamdurch() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAufmerksamdurch/');\n\t},\n\tgetBerufstaetigkeit() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBerufstaetigkeit/');\n\t},\n\tgetTypenStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getTypenStg/');\n\t},\n\tgetBisstandort() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBisstandort/');\n\t},\n\n//------------- MultiStatus.js------------------------------------------------------\n\tgetHistoryPrestudent (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getHistoryPrestudent/' + params.id);\n\t},\n\tgetMaxSem(studiengang_kzs) {\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/status/getMaxSemester/', {studiengang_kzs});\n\t},\n\tadvanceStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/advanceStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tconfirmStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/confirmStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tisLastStatus(id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/isLastStatus/' + id);\n\t},\n\tdeleteStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/deleteStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tgetLastBismeldestichtag() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getLastBismeldestichtag/');\n\t},\n\n//------------- History.js------------------------------------------------------\n\tgetHistoryPrestudents (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getHistoryPrestudents/' + params.id);\n\t},\n\n}","export default {\n\n//------------- Modal.js------------------------------------------------------\n\n\tinsertStatus(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/status/insertStatus/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/status/loadStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tupdateStatus(form, {prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}, data) {\n\t\treturn this.$fhcApi.post(\n\t\t\tform,\n\t\t\t'api/frontend/v1/stv/status/updateStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester,\n\t\t\tdata\n\t\t);\n\t},\n\tgetStudienplaene(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudienplaene/' + prestudent_id);\n\t},\n\tgetStudiengang(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudiengang/' + prestudent_id);\n\t},\n\tgetStatusgruende() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusgruende/');\n\t},\n\tgetStati() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStati/');\n\t},\n\n//------------- Dropdown.js------------------------------------------------------\n\n\taddStudent(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/addStudent/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tchangeStatus(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/changeStatus/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tgetStatusarray() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusarray/');\n\t}\n}","export default {\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/student/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(url);\n\t},\n\tsave(form, prestudent_id, studiensemester_kurzbz, data) {\n\t\tlet url = 'api/frontend/v1/stv/student/save/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(form, url, data);\n\t},\n}\n","export default {\n\tgetPruefungen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getPruefungen/' + params.id);\n\t},\n\tloadPruefung(pruefung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/loadPruefung/' + pruefung_id);\n\t},\n\tgetTypenPruefungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getTypenPruefungen');\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/getAllLehreinheiten/', data)\n\t},\n\tgetLvsByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsByStudent/' + uid)\n\t},\n\tgetLvsandLesByStudent(uid, semester){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsandLesByStudent/' + uid + '/' + semester);\n\t},\n\tgetLvsAndMas(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsAndMas/' + uid)\n\t},\n\tgetMitarbeiterLv(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getMitarbeiterLv/' + id)\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getNoten');\n\t},\n\tcheckZeugnisnoteLv(data){\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/', data)\n\t},\n\taddPruefung(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/insertPruefung/', data);\n\t},\n\tupdatePruefung(form, id, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/updatePruefung/' + id, data);\n\t},\n\tdeletePruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/deletePruefung/' + id)\n\t}\n}","export default {\n\n\tgetAbschlusspruefung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/' + params.id);\n\t},\n\taddNewAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/', data\n\t\t);\n\t},\n\tloadAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/', {id});\n\t},\n\tupdateAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/', data\n\t\t);\n\t},\n\tdeleteAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/', {id});\n\t},\n\tgetTypenAbschlusspruefung(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/');\n\t},\n\tgetTypenAntritte(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/');\n\t},\n\tgetBeurteilungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/');\n\t},\n\tgetAkadGrade(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getAkadGrade/', {studiengang_kz});\n\t},\n\tgetTypStudiengang(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/', {studiengang_kz});\n\t},\n\tgetMitarbeiter(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/' + searchString);\n\t},\n\tgetPruefer(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getPruefer/' + searchString);\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getNoten/');\n\t},\n\tcheckForExistingExams(uids) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/', {uids}\n\t\t);\n\t}\n}","export default {\n\tlist() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/grades/list');\n\t},\n\tgetCertificate(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getCertificate/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetTeacherProposal(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getTeacherProposal/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetRepeaterGrades(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getRepeaterGrades/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tupdateCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, note, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/updateCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz,\n\t\t\t\tnote\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tdeleteCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/deleteCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyTeacherProposalToCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyTeacherProposalToCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id, lv_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate',\n\t\t\t{\n\t\t\t\tstudierendenantrag_lehrveranstaltung_id\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lv_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tgetGradeFromPoints(points, lehrveranstaltung_id, studiensemester_kurzbz, manualErrorHandling) {\n\t\tconst config = manualErrorHandling ? {errorHandling: false} : {};\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/grades/getGradeFromPoints',\n\t\t\t{\n\t\t\t\t\"points\": points,\n\t\t\t\t\"lehrveranstaltung_id\": lehrveranstaltung_id,\n\t\t\t\t\"studiensemester_kurzbz\": studiensemester_kurzbz\n\t\t\t},\n\t\t\tconfig\n\t\t\t);\n\t}\n}","export default {\n\tgetMobilitaeten (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getMobilitaeten/' + params.id);\n\t},\n\tgetProgramsMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getProgramsMobility/');\n\t},\n\taddNewMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/insertMobility/', data);\n\t},\n\tloadMobility(bisio_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/loadMobility/' + bisio_id);\n\t},\n\tupdateMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/updateMobility/', data);\n\t},\n\tdeleteMobility(bisio_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobility/' + bisio_id);\n\t},\n\tgetLVList(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLVList/' + studiengang_kz);\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/getAllLehreinheiten/', data)\n\t},\n\tgetLvsandLesByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLvsandLesByStudent/' + uid);\n\t},\n\tgetPurposes(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getPurposes/' + params.id);\n\t},\n\tgetSupports(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getSupports/' + params.id);\n\t},\n\tgetListPurposes() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListPurposes/');\n\t},\n\tgetListSupports() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListSupports/');\n\t},\n\tdeleteMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilityPurpose/' + params.bisio_id, params);\n\t},\n\taddMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilityPurpose/' + params.bisio_id, params);\n\t},\n\tdeleteMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilitySupport/' + params.bisio_id, params);\n\t},\n\taddMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilitySupport/' + params.bisio_id, params);\n\t},\n\n}","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/archiv/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id)\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tgetArchivVorlagen() {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/getArchivVorlagen');\n\t},\n\tarchive(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archive',\n\t\t\tdata\n\t\t);\n\t},\n\tarchiveSigned(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archiveSigned',\n\t\t\tdata\n\t\t);\n\t},\n\tupdate(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/update', data);\n\t},\n\tdelete({akte_id, studiengang_kz}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/delete', {akte_id, studiengang_kz});\n\t}\n};\n","export default {\n\tgetDocumentsUnaccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tgetDocumentsAccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsAccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tdeleteZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteZuordnung/' + params.prestudent_id + '/' + params.dokument_kurzbz);\n\t},\n\tcreateZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/createZuordnung/'\n\t\t\t+ params.prestudent_id + '/'\n\t\t\t+ params.dokument_kurzbz);\n\t},\n\tloadAkte(akte_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/loadAkte/' + akte_id);\n\t},\n\tgetDoktypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDoktypen/');\n\t},\n\tupdateFile(akte_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/updateAkte/' + akte_id,\n\t\t\tdata);\n\t},\n\tdeleteFile(akte_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteAkte/' + akte_id);\n\t},\n\tuploadFile(prestudent_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/uploadDokument/' + prestudent_id,\n\t\t\tdata);\n\t},\n}","export default {\n\tgetAnrechnungen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getAnrechnungen/' + params.id);\n\t},\n\tgetLehrveranstaltungen(prestudent_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/' + prestudent_id);\n\t},\n\tgetBegruendungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getBegruendungen/');\n\t},\n\tgetLvsKompatibel(lv_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLvsKompatibel/' + lv_id);\n\t},\n\tgetLektoren(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLektoren/' + studiengang_kz);\n\t},\n\taddNewAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/insertAnrechnung/', data);\n\t},\n\tloadAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/loadAnrechnung/' + anrechnung_id);\n\t},\n\teditAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/updateAnrechnung/', data);\n\t},\n\tdeleteAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/anrechnungen/deleteAnrechnung/' + anrechnung_id);\n\t},\n}","export default {\n\tgetStudies(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudien/' + params.id);\n\t},\n\tgetTypenMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/');\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/');\n\t},\n\tgetStudyprograms(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/');\n\t},\n\tgetListPartner(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/');\n\t},\n\tgetStatiPrestudent(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/');\n\t},\n\tloadStudy(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/loadStudie/' + id);\n\t},\n\tinsertStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/insertStudie/', data);\n\t},\n\tupdateStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/updateStudie/', data);\n\t},\n\tdeleteStudy(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/GemeinsameStudien/deleteStudie/' + id);\n\t},\n\n}","export default {\n\tgetCourselist(url, config, params) {\n\t\t//corresponding logic controller Stundenplan.php\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStundenplan/'\n\t\t\t+ params.student_uid + '/'\n\t\t\t+ params.start_date + '/'\n\t\t\t+ params.end_date + '/'\n\t\t\t+ params.group_consecutiveHours + '/'\n\t\t\t+ params.dbStundenplanTable\n\t\t);\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStudiensemester/');\n\t},\n}","import person from \"./notiz/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetNotizen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getUid/');\n\t},\n\taddNewNotiz(form, id, formData) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(form, notiz_id, formData){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getMitarbeiter/' + event);\n\t},\n\tisBerechtigt(id, type_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/isBerechtigt/');\n\t}\n}","import person from \"./betriebsmittel/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetAllBetriebsmittel(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/' + params.type + '/' + params.id);\n\t},\n\taddNewBetriebsmittel(form, person_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/' +\n\t\t\tperson_id, formData\n\t\t);\n\t},\n\tloadBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/' + betriebsmittelperson_id);\n\t},\n\tupdateBetriebsmittel(form, betriebsmittelperson_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/' + betriebsmittelperson_id,\n\t\t\tformData);\n\t},\n\tdeleteBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/' +\tbetriebsmittelperson_id);\n\t},\n\tgetTypenBetriebsmittel(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/');\n\t},\n\tloadInventarliste(query){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/' +\tquery);\n\t}\n}","export default {\n\tupdatePersonUnrulyStatus(person_id, unrulyParam) {\n\n\t\ttry {\n\t\t\tconst payload = {person_id, unruly: unrulyParam}\n\t\t\tconst url = '/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus';\n\t\t\treturn this.$fhcApi.post(url, payload, null);\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t},\n\tfilterPerson(payload, base = ''){\n\n\t\ttry {\n\t\t\tconst url = base + '/api/frontend/v1/checkperson/CheckPerson/filterPerson';\n\t\t\treturn axios.post(url, payload)\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t}\n}","export default {\n getContentID(ort_kurbz) {\n\t\treturn this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Ort/ContentID\",\n\t\t\t{ ort_kurzbz: ort_kurbz }\n\t\t);\n\t},\n\tgetRooms(datum, von, bis, typ, personenanzahl = 0) {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getRooms\",\n\t\t\t{ datum, von, bis, typ, personenanzahl }\n\t\t);\n\t},\n\tgetRoomTypes() {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getTypes\"\n\t\t);\n\t}\n}","export default {\n content(content_id, version=null, sprache=null, sichtbar=null) {\n return this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/content\",\n\t\t\t{ \n\t\t\t\tcontent_id: content_id,\n\t\t\t\t...(version?{version}:{}),\n\t\t\t\t...(sprache?{sprache}:{}),\n\t\t\t\t...(sichtbar?{sichtbar}:{}),\n }\n );\n },\n\t//api function used for the news View that renders the html\n\tgetNews(page = 1, page_size = 10, sprache) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNews\",\n\t\t\t{\n\t\t\t\tpage,\n\t\t\t\tpage_size,\n\t\t\t\tsprache,\n\t\t\t},\n\t\t);\n\t},\n\t//api function used for the widget component\n\tnews(limit) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/news\",\n\t\t\t{\n\t\t\t\tlimit: limit\n\t\t\t}\n\t\t);\n\t},\n\tgetNewsRowCount: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNewsRowCount\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetNewsExtra: function(){\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getStudiengangInfoForNews\",\n\t\t\t{}\n\t\t);\n\t}\n }","export default {\n getStudentenMail(lehreinheit_id) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Lehre/lvStudentenMail\",\n { lehreinheit_id: lehreinheit_id }\n );\n },\n\tgetLvInfo(studiensemester_kurzbz, lehrveranstaltung_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/LV/${studiensemester_kurzbz}/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentPruefungen(lehrveranstaltung_id){\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentProjektarbeiten(uid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getStudentProjektarbeiten/${uid}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentProjektabgaben(detail) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getStudentProjektabgaben`\n\t\t\t, {\n\t\t\t\tprojektarbeit_id: detail.projektarbeit_id,\n\t\t\t\tstudent_uid: detail.student_uid\n\t\t\t}\n\t\t);\n\t},\n\tpostStudentProjektarbeitEndupload(formData) {\n\t\tconst url = '/api/frontend/v1/Lehre/postStudentProjektarbeitEndupload';\n\t\tconst headers = {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\treturn this.$fhcApi.post(url, formData, headers)\n\t},\n\tpostStudentProjektarbeitZwischenabgabe(formData) {\n\t\tconst url = '/api/frontend/v1/Lehre/postStudentProjektarbeitZwischenabgabe';\n\t\tconst headers = {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\treturn this.$fhcApi.post(url, formData, headers)\n\t},\n\tgetStudentProjektarbeitAbgabeFile(paabgabe_id, student_uid) {\n\t\tconst url = `/Cis/Abgabetool/getStudentProjektarbeitAbgabeFile?paabgabe_id=${paabgabe_id}&student_uid=${student_uid}`;\n\n\t\twindow.location = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + url\n\t},\n\tgetMitarbeiterProjektarbeiten(uid, all) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getMitarbeiterProjektarbeiten?showall=${all}`\n\t\t\t, {}\n\t\t);\n\t},\n\tpostProjektarbeitAbgabe(termin) {\n\t\tconst payload = {\n\t\t\tpaabgabe_id: termin.paabgabe_id,\n\t\t\tpaabgabetyp_kurzbz: termin.bezeichnung.paabgabetyp_kurzbz,\n\t\t\tdatum: termin.datum,\n\t\t\tfixtermin: termin.fixtermin,\n\t\t\tinsertvon: termin.insertvon,\n\t\t\tkurzbz: termin.kurzbz,\n\t\t\tprojektarbeit_id: termin.projektarbeit_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/postProjektarbeitAbgabe';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t\t\n\t},\n\tdeleteProjektarbeitAbgabe(paabgabe_id) {\n\t\tconst payload = {\n\t\t\tpaabgabe_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/deleteProjektarbeitAbgabe';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t},\n\tpostSerientermin(datum, paabgabetyp_kurzbz, bezeichnung, kurzbz, projektarbeit_ids) {\n\t\tconst payload = {\n\t\t\tdatum, paabgabetyp_kurzbz, bezeichnung, kurzbz, projektarbeit_ids\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/postSerientermin';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t},\n\tfetchDeadlines(person_id) {\n\t\tconst payload = {\n\t\t\tperson_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/fetchDeadlines';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t}\n }","export default {\n getLvMenu(lvid, studiensemester_kurzbz) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/LvMenu/getLvMenu/${lvid}/${studiensemester_kurzbz}`,\n {}\n );\n },\n\n \n }","import person from \"./messages/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\t\tgetMessages(url, config, params) {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessages/' + params.id + '/' + params.type + '/' + params.size + '/' + params.page);\n\t\t},\n\t\tgetVorlagen(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagen/');\n\t\t},\n\t\tgetMsgVarsLoggedInUser(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/');\n\t\t},\n\t\tgetMessageVarsPerson(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessageVarsPerson/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetMsgVarsPrestudent(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsPrestudent/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPersonId(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getPersonId/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetUid(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getUid/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetDataVorlage(vorlage_kurzbz){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getDataVorlage/' + vorlage_kurzbz);\n\t\t},\n\t\tgetNameOfDefaultRecipient(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getNameOfDefaultRecipient/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPreviewText(params, data){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/getPreviewText/' + params.id + '/' + params.type_id,\n\t\t\t\tdata);\n\t\t},\n\t\tgetReplyData(messageId){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getReplyData/' + messageId);\n\t\t},\n\t\tsendMessageFromModalContext(form, id, data) {\n\t\t\treturn this.$fhcApi.post(form,'api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tsendMessage(id, data) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tdeleteMessage(messageId){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/deleteMessage/' + messageId);\n\t\t}\n}","export default {\n\tgetVorlagen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagen/');\n\t},\n\tgetVorlagenByLoggedInUser() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/');\n\t}\n}","export default {\n\n\tgetStudiensemester: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/components/Cis/Mylv/Studiensemester',\n\t\t\t{}\n\t\t);\n\t},\n\n\tgetAllStudienSemester: function (studiensemester=undefined, studiengang=undefined, semester=undefined, studienplan=undefined) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/Studium/getStudienAllSemester',\n\t\t\t{studiensemester, studiengang, semester, studienplan}\n\t\t);\n\t},\n\n\tgetStudiengaengeForStudienSemester: function (studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${studiensemester}`,\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudienplaeneBySemester: function (studiengang, studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudienplaeneBySemester`,\n\t\t\t{\n\t\t\t\tstudiengang,\n\t\t\t\tstudiensemester,\n\t\t\t}\n\t\t);\n\t},\n\tgetLvPlanForStudiensemester: function (studiensemester, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${studiensemester}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\tgetLvEvaluierungInfo: function (studiensemester_kurzbz, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getLvEvaluierungInfo/${studiensemester_kurzbz}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\t\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport search from \"./search.js\";\nimport phrasen from \"./phrasen.js\";\nimport navigation from \"./navigation.js\";\nimport filter from \"./filter.js\";\nimport studstatus from \"./studstatus.js\";\nimport profil from \"./profil.js\";\nimport profilUpdate from \"./profilUpdate.js\";\nimport lvPlan from \"./lvPlan.js\";\nimport bookmark from \"./bookmark.js\";\nimport stv from \"./stv.js\";\nimport notiz from \"./notiz.js\";\nimport betriebsmittel from \"./betriebsmittel.js\";\nimport checkperson from \"./checkperson.js\";\nimport ampeln from \"./ampeln.js\";\nimport ort from \"./ort.js\";\nimport cms from \"./cms.js\";\nimport lehre from \"./lehre.js\";\nimport addons from \"./addons.js\";\nimport messages from \"./messages.js\";\nimport vorlagen from \"./vorlagen.js\";\nimport studiengang from \"./studiengang.js\";\nimport menu from \"./menu.js\";\nimport dashboard from \"./dashboard.js\";\nimport authinfo from \"./authinfo.js\";\nimport studium from \"./studium.js\";\nimport language from \"./language.js\";\n\nexport default {\n search,\n phrasen,\n navigation,\n dashboard,\n filter,\n studstatus,\n profil,\n profilUpdate,\n lvPlan,\n bookmark,\n stv,\n notiz,\n betriebsmittel,\n checkperson,\n ampeln,\n ort,\n cms,\n lehre,\n addons,\n messages,\n vorlagen,\n addons,\n\tstudiengang,\n\tmenu,\n\tauthinfo,\n\tstudium,\n language\n};\n","export default {\n\tasync getViewData() {\n\t\tconst url = `/api/frontend/v1/Cis4FhcApi/getViewData`;\n\t\treturn this.$fhcApi.get(url, null, null)\n\t},\n}","export default {\n\n getBookmarks: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/getBookmarks`\n ,{}\n );\n },\n \n delete: function (bookmark_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/delete/${bookmark_id}`\n ,{}\n ); \n },\n\n\tupdate: function ({ bookmark_id, url, title, tag=null}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/Bookmark/update/${bookmark_id}`\n\t\t\t, {\n\t\t\t\turl: url,\n\t\t\t\ttitle: title\n\t\t\t}\n\t\t);\n\t},\n\n insert: function ({url, title, tag}) {\n return this.$fhcApi.post(\n `/api/frontend/v1/Bookmark/insert`\n ,{\n url: url,\n title: title,\n tag: tag\n }\n ); \n },\n}","export default {\n \n open: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/open`,{});\n },\n\n all: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/all`,{});\n },\n\n confirm: function (ampel_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/confirm/${ampel_id}`,{});\n },\n\n}","export default {\n\tstudiengangInformation: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Studgang/getStudiengangInfo\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudiengangByKz: function (studiengang_kz) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz\",\n\t\t\t{\n\t\t\t\t\"studiengang_kz\": studiengang_kz\n\t\t\t}\n\t\t);\n\t}\n}","export default {\n\tgetMenu: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/CisMenu/getMenu\",\n\t\t\t{}\n\t\t);\n\t}\n\n}","\nexport default {\n\tgetAuthUID() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthUID',\n\t\t\t{ }\n\t\t);\n\t},\n\tgetAuthInfo() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthInfo',\n\t\t\t{}\n\t\t);\n\t},\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAll() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/language/get');\n\t}\n};","/** TODO(chris):\n * when deleting this file be sure to\n * remove line 1 & 90 from ../plugins/Phrasen.js\n */\nimport FhcApiFactory from '../api/fhcapifactory.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$fhcApi) {\n\t\t\t/* Deprecated Code start */\n\t\t\tif (options?.factory) {\n\t\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\t\tapp.config.globalProperties.$fhcApi.factory.addEndpoints(options.factory);\n\t\t\t}\n\t\t\t/* Deprecated Code end */\n\t\t\treturn;\n\t\t}\n\n\t\tfunction _get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\n\t\tfunction _clean_return_value(response) {\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = {response};\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tconst baseURL = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\";\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(response => {\n\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\treturn _clean_return_value(response);\n\n\t\t\t// NOTE(chris): loop through errors\n\t\t\tif (response.data.errors)\n\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t);\n\n\t\t\treturn _clean_return_value(response);\n\t\t}, error => {\n\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\n\t\t\tif (error.config?.errorHandling == 'off'\n\t\t\t\t|| error.config?.errorHandling === false\n\t\t\t\t|| error.config?.errorHandling == 'success')\n\t\t\t\treturn Promise.reject(error);\n\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL, true);\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t\t}\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\terror.response.data.errors = error.response.data.errors.filter(\n\t\t\t\t\terr => (error.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, error.config)\n\t\t\t\t);\n\t\t\t\tif (!error.response.data.errors.length)\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else if (error.request) {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertError(error.message);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t}\n\n\t\t\treturn Promise.reject(error);\n\t\t});\n\n\t\tapp.config.globalProperties.$fhcApi = {\n\t\t\tgetUri(url) {\n\t\t\t\tconsole.warn('$fhcApi.getUri is DEPRECATED! Use $api.getUri instead.');\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\tconsole.warn('$fhcApi.get is DEPRECATED! Use $api.get instead.');\n\t\t\t\t[uri, params, config] = _get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\tconsole.warn('$fhcApi.post is DEPRECATED! Use $api.post instead.');\n\t\t\t\t[uri, data, config] = _get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\t_defaultErrorHandlers: {\n\t\t\t\tvalidation(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form) {\n\t\t\t\t\t\tconfig.form.clearValidation();\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.messages);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(error.messages)) {\n\t\t\t\t\t\terror.messages.forEach($fhcAlert.alertError);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (typeof error.messages == 'object') {\n\t\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t\tObject.values(error.messages).forEach(\n\t\t\t\t\t\t\t\tvalue => $fhcAlert.alertDefault(\n\t\t\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tObject.entries(error.messages).forEach(\n\t\t\t\t\t\t\t\t([key, value]) => $fhcAlert.alertDefault('error', key, value, true)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tgeneral(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form)\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.message);\n\t\t\t\t\telse if (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertError(error.message);\n\t\t\t\t},\n\t\t\t\tphp(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('warn', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('info', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\texception(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tdb(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tauth(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertDefault('error', error.message, message);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/* Deprecated Code start */\n\t\tclass FhcApiFactoryWrapper {\n\t\t\tconstructor(factorypart, root) {\n\t\t\t\tif (root === undefined) {\n\t\t\t\t\tthis.$fhcApi = {\n\t\t\t\t\t\tgetUri(url) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.getUri(url);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget(form, uri, params, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.get(form, uri, params, config);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpost(form, uri, data, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.post(form, uri, data, config);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tObject.defineProperty(this.$fhcApi, 'factory', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.factory;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tapp.config.globalProperties.$fhcApi.factory = this;\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty(this, '$fhcApi', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\treturn (root || this).$fhcApi;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.addEndpoints(factorypart, true)\n\t\t\t}\n\n\t\t\taddEndpoints(factorypart, noWarn) {\n\t\t\t\tObject.keys(factorypart).forEach(key => {\n\t\t\t\t\tObject.defineProperty(this, key, {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tif (typeof factorypart[key] == 'function')\n\t\t\t\t\t\t\t\treturn factorypart[key].bind(this);\n\t\t\t\t\t\t\treturn new FhcApiFactoryWrapper(factorypart[key], this.$fhcApi.factory);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tif (!noWarn) console.warn('$fhcApi.factory.addEndpoints() is DEPRECATED!');\n\t\t\t}\n\t\t}\n\n\t\tconst factory = new FhcApiFactoryWrapper(FhcApiFactory);\n\t\tif (options?.factory) {\n\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\tfactory.addEndpoints(options.factory);\n\t\t}\n\n\t\tapp.config.globalProperties.$fhcApi.factory = factory;\n\t\t/* Deprecated Code end */\n\t\t\n\t\tapp.provide('$fhcApi', app.config.globalProperties.$fhcApi);\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n//--------------------------------------------------------------------------------------------------------------------\n// Configs\n\n// To see debug messages into the browser console set this parameter as true\nconst CORE_REST_CLIENT_DEBUG = false;\n\n// Default timeout (milliseconds)\nconst CORE_REST_CLIENT_TIMEOUT = 5000;\n\n//--------------------------------------------------------------------------------------------------------------------\n// Constants\n\n// Success\nconst CORE_REST_CLIENT_SUCCESS = 0;\n\n// Properties present in a response\nconst CORE_REST_CLIENT_ERROR = \"error\";\nconst CORE_REST_CLIENT_RETVAL = \"retval\";\n\n// HTTP method parameters\nconst CRC_HTTP_GET_METHOD = \"get\";\nconst CRC_HTTP_POST_METHOD = \"post\";\n\n/**\n * Definition and initialization of the object CoreRESTClient\n */\nexport const CoreRESTClient = {\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Public methods\n\n\t/**\n\t * Performs a call using the HTTP GET method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tget: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_GET_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Performs a call using the HTTP POST method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tpost: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_POST_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Checks if the response is a success\n\t */\n\tisSuccess: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR)\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL) && response.error == CORE_REST_CLIENT_SUCCESS)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Checks if the response is an error\n\t */\n\tisError: function(response) {\n\t\treturn !CoreRESTClient.isSuccess(response);\n\t},\n\n\t/**\n\t * Checks if the response has data\n\t */\n\thasData: function(response) {\n\n\t\tif (CoreRESTClient.isSuccess(response))\n\t\t{\n\t\t\tif ((typeof response[CORE_REST_CLIENT_RETVAL] === \"object\" && Object.keys(response[CORE_REST_CLIENT_RETVAL]).length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"array\" && response[CORE_REST_CLIENT_RETVAL].length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"string\" && response[CORE_REST_CLIENT_RETVAL].trim() != \"\")\n\t\t\t\t|| typeof response[CORE_REST_CLIENT_RETVAL] === \"number\")\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Retrives data from response object\n\t */\n\tgetData: function(response) {\n\n\t\tif (CoreRESTClient.hasData(response))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Retrives error message from response object\n\t */\n\tgetError: function(response) {\n\n\t\tif (typeof response === \"object\"\n\t\t\t&& Object.keys(response).length > 0\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn \"Generic error\";\n\t},\n\n\t/**\n\t * Retrives code from response object\n\t */\n\tgetErrorCode: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_ERROR];\n\t\t}\n\n\t\treturn 1; // Generic error\n\t},\n\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Private methods\n\n\t/**\n\t * Generate the router URI using the connection parameters\n\t */\n\t_generateRouterURI: function(wsURL) {\n\t\tvar uri = null;\n\n\t\t// Checks if global JS object FHC_JS_DATA_STORAGE_OBJECT exists\n\t\tif (typeof FHC_JS_DATA_STORAGE_OBJECT !== \"undefined\")\n\t\t{\n\t\t\turi = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\" + wsURL;\n\t\t}\n\n\t\treturn uri;\n\t},\n\n\t/**\n\t * Method to print debug info after a controller has been called\n\t */\n\t_printDebug: function(parameters, response, errorThrown) {\n\n\t\tif (CORE_REST_CLIENT_DEBUG === true) // If global const CORE_REST_CLIENT_DEBUG is true, but really true!\n\t\t{\n\t\t\t// Print info about called controller\n\t\t\tconsole.log(\"Called controller: \" + parameters.remoteController);\n\t\t\tconsole.log(\"Call parameters:\"); // parameters given to this call\n\t\t\tconsole.log(parameters);\n\n\t\t\tif (response != null) // if there is a response...\n\t\t\t{\n\t\t\t\tconsole.log(\"Controller Response:\");\n\t\t\t\tconsole.log(response); // ...print it\n\t\t\t}\n\t\t\tif (errorThrown != null) // if there is a jQuery error...\n\t\t\t{\n\t\t\t\tconsole.log(\"jQuery error:\");\n\t\t\t\tconsole.log(errorThrown); // ...print it\n\t\t\t}\n\t\t\tconsole.log(\"--------------------------------------------------------------------------------------------\");\n\t\t}\n\t},\n\n\t/**\n\t * Performs a call to the server were the CI PHP layer is running\n\t * - wsURL: alias of the core controller to call\n\t * - wsParameters: parameters to give to the called controller\n\t * - type: POST or GET HTTP method\n\t * - axiosParameters: an object to configure the axios call\n\t */\n\t_axiosCall: function(wsURL, wsParameters, type, axiosParameters) {\n\n\t\t// Axios config object\n\t\tlet axiosCallObj = {\n\t\t\tmethod: type,\n\t\t\turl: CoreRESTClient._generateRouterURI(wsURL),\n\t\t\ttimeout: CORE_REST_CLIENT_TIMEOUT // default time out\n\t\t};\n\n\t\t// The ajax call is HTTP GET\n\t\tif (type == CRC_HTTP_GET_METHOD)\n\t\t{\n\t\t\taxiosCallObj.params = wsParameters;\n\t\t}\n\t\t// The ajax call is HTTP POST\n\t\telse\n\t\t{\n\t\t\taxiosCallObj.data = wsParameters;\n\t\t}\n\n\t\t// Check if axiosParameters is an object\n\t\tif (typeof axiosParameters === \"object\")\n\t\t{\n\t\t\t// And then copies the its properties into axiosCallObj\n\t\t\tfor (var prop in axiosParameters) axiosCallObj[prop] = axiosParameters[prop];\n\t\t}\n\n\t\t// Perform the ajax call via axios\n\t\treturn axios(axiosCallObj);\n\t}\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n * \n * @usage:\n * Preperations:\n * Be sure to have PrimeVue loaded with the toast and confirmdialog\n * components as primevue variable\n * Install:\n * Import this Plugin and install it with the app.use() function.\n * Use:\n * In your component you can call now the global property $fhcAlert\n * which has the following functions:\n * \n * alertSuccess\n * ------------\n * Displays a success message\n * @param string\tmessage\n * @return void\n * \n * alertInfo\n * ---------\n * Displays an info message\n * @param string\tmessage\n * @return void\n * \n * alertWarning\n * ------------\n * Displays a warning\n * @param string\tmessage\n * @return void\n * \n * alertError\n * ----------\n * Displays an error\n * @param string\tmessage\n * @return void\n * \n * alertSystemError\n * ----------------\n * Displays an alert with the error details and a button to mail\n * the error to the Support Team\n * @param string\tmessage\n * @return void\n * \n * confirmDelete\n * -------------\n * Displays a confirmation dialog and returns a Promise which resolves\n * with true or false depending und the pressed button.\n * @return Promise\n * \n * alertDefault\n * ------------\n * Displays an alert\n * @param string\tseverity\t\tcan be 'success', 'info', 'warning', 'error'\n * @param string\ttitle\n * @param string\tmessage\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * alertMultiple\n * -------------\n * Displays multiple alerts\n * @param array\t\tmessageArray\n * @param string\tseverity\t\t(optional) defaults to 'info'\n * @param string\ttitle\t\t\t(optional) defaults to 'Info'\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * handleSystemError\n * -----------------\n * Automatiticly determine how to display an system error and display it.\n * This would be used in a catch block of an ajax call.\n * @param mixed\t\terror\n * @return void\n * \n * handleSystemMessage\n * -------------------\n * Automatiticly determine how to display a message and display it.\n * @param mixed\t\tmessage\n * @return void\n */\nimport PvConfig from \"../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js\";\nimport PvToast from \"../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js\";\nimport PvConfirm from \"../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js\";\nimport PvConfirmationService from \"../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js\";\nimport FhcPhrasen from \"./Phrasen.js\";\n\nimport {CoreRESTClient} from '../RESTClient.js';\n\nconst helperAppContainer = document.createElement('div');\n\nconst helperApp = Vue.createApp({\n\tname: \"FhcAlertApp\",\n\tcomponents: {\n\t\tPvToast,\n\t\tPvConfirm\n\t},\n\tmethods: {\n\t\tmailToUrl(slotProps) {\n\t\t\tlet mailTo = FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto;\n\t\t\tlet subject = 'Meldung%20Systemfehler';\n\t\t\tlet body = `\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: ` + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method + `%0D%0A\n\t\t\t\tFehler Meldung: ` + slotProps.message.detail + `%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!`\n\n\t\t\treturn \"mailto:\" + mailTo + \"?subject=\" + subject + \"&body=\" + body;\n\t\t},\n\t\topenMessagecard(e) {\n\t\t\tbootstrap.Collapse.getOrCreateInstance(e.target.getAttribute('href')).toggle();\n\t\t}\n\t},\n\tunmounted() {\n\t\thelperAppContainer.parentElement.removeChild(helperAppContainer);\n\t},\n\tcomputed: {\n\t\tshowmaillink: function() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto !== '';\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t`\n});\n\nhelperApp.use(PvConfig);\nhelperApp.use(PvConfirmationService);\n//helperApp.use(FhcPhrasen);\n\nconst helperAppInstance = helperApp.mount(helperAppContainer);\n\ndocument.body.appendChild(helperAppContainer);\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (!app.config.globalProperties.$p)\n\t\t\tapp.use(FhcPhrasen);\n\n\t\tconst $fhcAlert = {\n\t\t\talertSuccess(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSuccess);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'success', summary: 'Info', detail: message, life: 1000});\n\t\t\t},\n\t\t\talertInfo(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertInfo);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'info', summary: 'Info', detail: message, life: 3000 });\n\t\t\t},\n\t\t\talertWarning(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertWarning);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'warn', summary: 'Achtung', detail: message});\n\t\t\t},\n\t\t\talertError(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertError);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'error', summary: 'Achtung', detail: message });\n\t\t\t},\n\t\t\talertSystemError(message) {\n\t\t\t\t//TODO(Manu) for translation of content of template: restructure in data\n\t\t\t\t//and update definitions with translations\n\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSystemError);\n\t\t\t\thelperAppInstance.$refs.alert.add({\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t\tsummary: Vue.computed(() => app.config.globalProperties.$p.t('alert/systemerror')),\n\t\t\t\t\tdetail: message});\n\t\t\t},\n\t\t\tconfirmDelete() {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: 'fhcAlertConfirm',\n\t\t\t\t\t\theader: Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: Vue.computed(() => app.config.globalProperties.$p.t('alert/confirm_delete')),\n\t\t\t\t\t\tacceptLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/loeschen')),\n\t\t\t\t\t\tacceptClass: 'p-button-danger',\n\t\t\t\t\t\trejectLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: 'p-button-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tconfirm(options) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: options?.group ?? 'fhcAlertConfirm',\n\t\t\t\t\t\theader: options?.header ?? Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: options?.message ?? '',\n\t\t\t\t\t\tacceptLabel: options?.acceptLabel ?? 'Ok',\n\t\t\t\t\t\tacceptClass: options?.acceptClass ?? 'btn btn-primary',\n\t\t\t\t\t\trejectLabel: options?.rejectLabel ?? Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: options?.rejectClass ?? 'btn btn-outline-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\talertDefault(severity, title, message, sticky = false, html = false) {\n\t\t\t\tlet options = { severity: severity, summary: title, detail: message, html };\n\t\t\t\t\n\t\t\t\tif (!sticky)\n\t\t\t\t\toptions.life = 3000;\n\n\t\t\t\thelperAppInstance.$refs.toast.add(options);\n\t\t\t},\n\t\t\talertMultiple(messageArray, severity = 'info', title = 'Info', sticky = false, html = false){\n\t\t\t\t// Check, if array has only string values\n\t\t\t\tif (messageArray.every(message => typeof message === 'string')) {\n\t\t\t\t\tmessageArray.forEach(message => this.alertDefault(severity, title, message, sticky, html));\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\thandleSystemError(error) {\n\t\t\t\t// don't show an error message to the user if the error was an aborted request\n\t\t\t\tif(error.hasOwnProperty('name') && error.name.toLowerCase() === \"AbortError\".toLowerCase())\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is string\n\t\t\t\tif (typeof error === 'string')\n\t\t\t\t\treturn $fhcAlert.alertSystemError(error);\n\n\t\t\t\t// Error is array of strings\n\t\t\t\tif (Array.isArray(error) && error.every(err => typeof err === 'string'))\n\t\t\t\t\treturn error.every($fhcAlert.alertSystemError);\n\n\t\t\t\t// Error has been handled already\n\t\t\t\tif (error.hasOwnProperty('handled') && error.handled)\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is object\n\t\t\t\tif (typeof error === 'object' && error !== null) {\n\t\t\t\t\tlet errMsg = '';\n\n\n\t\t\t\t\tif (error.hasOwnProperty('response') && error.response?.data?.retval)\n\t\t\t\t\t\terrMsg += 'Error Message: ' + (error.response.data.retval.message || error.response.data.retval) + '\\r\\n';\n\t\t\t\t\telse if (error.hasOwnProperty('message'))\n\t\t\t\t\t\terrMsg += 'Error Message: ' + error.message.toUpperCase() + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('config') && error.config.hasOwnProperty('url'))\n\t\t\t\t\t\terrMsg += 'Error ConfigURL: ' + error.config.url + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('stack'))\n\t\t\t\t\t\terrMsg += 'Error Stack: ' + error.stack + '\\r\\n';\n\t\t\t\t\t\n\t\t\t\t\t// Fallback object error message\n\t\t\t\t\tif (errMsg == '')\n\t\t\t\t\t\terrMsg = 'Error Message: ' + JSON.stringify(error) + '\\r\\n';\n\n\t\t\t\t\terrMsg += 'Error Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\n\t\t\t\t\treturn $fhcAlert.alertSystemError(errMsg);\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\thandleSystemMessage(message) {\n\t\t\t\t// Message is string\n\t\t\t\tif (typeof message === 'string')\n\t\t\t\t\treturn $fhcAlert.alertWarning(message);\n\n\t\t\t\t// Message is array of strings\n\t\t\t\tif (Array.isArray(message)) {\n\t\t\t\t\t// If Array has only Strings\n\t\t\t\t\tif (message.every(msg => typeof msg === 'string'))\n\t\t\t\t\t\treturn message.every($fhcAlert.alertWarning);\n\n\t\t\t\t\t// If Array has only Objects\n\t\t\t\t\tif (message.every(msg => typeof msg === 'object') && msg !== null) {\n\t\t\t\t\t\treturn message.every(msg => {\n\t\t\t\t\t\t\tif (msg.hasOwnProperty('data') && msg.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(msg.data.retval));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(msg));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Message is Object with data property\n\t\t\t\tif (typeof message === 'object' && message !== null){\n\t\t\t\t\tif (message.hasOwnProperty('data') && message.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t// NOTE(chris): changed: alertSystemError => alertWarning\n\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(message.data.retval));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(message));\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\tresetFormValidation(form) {\n\t\t\t\tconst event = new Event('fhc-form-reset');\n\t\t\t\tform.querySelectorAll(['[data-fhc-form-validate],[data-fhc-form-error]']).forEach(el => el.dispatchEvent(event));\n\t\t\t\t/*const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\tif (alert) {\n\t\t\t\t\talert.innerHTML = '';\n\t\t\t\t\talert.classList.add('d-none');\n\t\t\t\t}\n\t\t\t\tform.querySelectorAll('.invalid-feedback').forEach(n => n.remove());\n\t\t\t\tform.querySelectorAll('.is-invalid').forEach(n => n.classList.remove('is-invalid'));\n\t\t\t\tform.querySelectorAll('.is-valid').forEach(n => n.classList.remove('is-valid'));*/\n\t\t\t},\n\t\t\thandleFormValidation(error, form) {\n\t\t\t\tif (form === undefined) {\n\t\t\t\t\tif (error && error.nodeType === Node.ELEMENT_NODE)\n\t\t\t\t\t\treturn err => $fhcAlert.handleFormValidation(err, error);\n\t\t\t\t} else {\n\t\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t\tif (typeof errors !== \"object\")\n\t\t\t\t\t\t\terrors = error.response.data;\n\n\t\t\t\t\t\t// NOTE(chris): reset form validation\n\t\t\t\t\t\t$fhcAlert.resetFormValidation(form);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// NOTE(chris): set form input validation\n\t\t\t\t\t\tconst notFound = Object.entries(errors).filter(([key, detail]) => {\n\t\t\t\t\t\t\tconst input = form.querySelector('[data-fhc-form-validate=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\tinput.dispatchEvent(new CustomEvent('fhc-form-invalidate', {detail}));\n\n\t\t\t\t\t\t\t/*const input = form.querySelector('[name=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\tinput.classList.add('is-invalid');\n\t\t\t\t\t\t\tconst feedback = document.createElement('div');\n\t\t\t\t\t\t\tfeedback.classList.add('invalid-feedback');\n\t\t\t\t\t\t\tfeedback.innerHTML = detail;\n\t\t\t\t\t\t\tinput.after(feedback);*/\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}).map(arr => arr[1]);\n\n\n\t\t\t\t\t\t//const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\t\t\tconst alert = form.querySelector('[data-fhc-form-error]');\n\t\t\t\t\t\tif (alert && notFound.length) {\n\t\t\t\t\t\t\talert.dispatchEvent(new CustomEvent('fhc-form-error', {detail: notFound}));\n\t\t\t\t\t\t\t/*notFound.forEach(txt => {\n\t\t\t\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\t\t\t\tp.innerHTML = txt;\n\t\t\t\t\t\t\t\talert.append(p);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (notFound.length) {\n\t\t\t\t\t\t\t\talert.lastChild.classList.add('mb-0');\n\t\t\t\t\t\t\t\talert.classList.remove('d-none');\n\t\t\t\t\t\t\t}*/\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnotFound.forEach($fhcAlert.alertError);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t$fhcAlert.alertError((typeof errors === 'object') ? Object.values(errors) : errors);\n\t\t\t\t} else {\n\t\t\t\t\t$fhcAlert.handleSystemError(error);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tapp.config.globalProperties.$fhcAlert = $fhcAlert;\n\t\tapp.provide('$fhcAlert', app.config.globalProperties.$fhcAlert);\n\t}\n}","import FhcAlert from './FhcAlert.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$api) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!app.config.globalProperties.$fhcAlert)\n\t\t\tapp.use(FhcAlert);\n\n\t\tfunction _send_array_or_object(errors, func) {\n\t\t\tif (Array.isArray(errors))\n\t\t\t\terrors.forEach(func);\n\t\t\telse\n\t\t\t\tObject.entries(errors).forEach(\n\t\t\t\t\t([title, errs]) => errs.forEach(\n\t\t\t\t\t\terror => func(error, title)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t}\n\t\tlet DEFAULT_ERROR_CONFIG = {\n\t\t\tsuccess: true,\n\t\t\tfail: true,\n\t\t\tcombine: {\n\t\t\t\tform: ['validation', 'general'],\n\t\t\t\ttoast: ['validation', 'general', 'not_found', 'site_failed']\n\t\t\t},\n\t\t\thandler: {\n\t\t\t\tform(form, errors) {\n\t\t\t\t\tform.clearValidation();\n\t\t\t\t\terrors.forEach(err => form.setFeedback(\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\terr.messages || err.message\n\t\t\t\t\t));\n\t\t\t\t},\n\t\t\t\tasync toast(errors) {\n\t\t\t\t\tconst $p = app.config.globalProperties.$p;\n\t\t\t\t\tif (!$p)\n\t\t\t\t\t\treturn Promise.reject('Phrasen plugin not loaded!');\n\t\t\t\t\n\t\t\t\t\tasync function _format_toast(errors) {\n\t\t\t\t\t\terrors = errors.reduce((result, err) => {\n\t\t\t\t\t\t\tswitch (err.type) {\n\t\t\t\t\t\t\tcase 'not_found':\n\t\t\t\t\t\t\tcase 'site_failed':\n\t\t\t\t\t\t\t\tif (err.message)\n\t\t\t\t\t\t\t\t\tresult[err.message] = [err.url];\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tresult._default = [err.url];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'general':\n\t\t\t\t\t\t\t\tif (!result._default)\n\t\t\t\t\t\t\t\t\tresult._default = [];\n\t\t\t\t\t\t\t\tresult._default.push(err.message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'validation':\n\t\t\t\t\t\t\t\tObject.entries(err.messages)\n\t\t\t\t\t\t\t\t\t.forEach(([field, msg]) => {\n\t\t\t\t\t\t\t\t\t\tif (!result[field])\n\t\t\t\t\t\t\t\t\t\t\tresult[field] = [];\n\t\t\t\t\t\t\t\t\t\tif (Array.isArray(msg))\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(...msg);\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(msg);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}, {});\n\t\t\t\t\t\tlet counter = 0;\n\t\t\t\t\t\tconst msgs = await Promise.all(Object.entries(errors)\n\t\t\t\t\t\t\t.sort((a, b) => ['_default'].indexOf(b[0]) - ['_default'].indexOf(a[0])) // sort _default first\n\t\t\t\t\t\t\t.map(async ([field, msgs]) => {\n\t\t\t\t\t\t\t\tif (field == '_default') {\n\t\t\t\t\t\t\t\t\tawait $p.loadCategory('dashboard');\n\t\t\t\t\t\t\t\t\tconst general = $p.t('dashboard/general');\n\t\t\t\t\t\t\t\t\tfield = '
' + general + '
';\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfield = '
' + field + '
';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcounter += msgs.length;\n\t\t\t\t\t\t\t\treturn field\n\t\t\t\t\t\t\t\t\t+ '
'\n\t\t\t\t\t\t\t\t\t+ msgs.join('
')\n\t\t\t\t\t\t\t\t\t+ '
';\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcounter,\n\t\t\t\t\t\t\tmsgs\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet counter, msgs;\n\t\t\t\t\tif (Array.isArray(errors)) {\n\t\t\t\t\t\t({ counter, msgs } = await _format_toast(errors));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t({ counter, msgs } = await Object.entries(errors)\n\t\t\t\t\t\t\t.reduce(async (res, [title, errs]) => {\n\t\t\t\t\t\t\t\tconst result = await res;\n\t\t\t\t\t\t\t\tconst { counter, msgs } = await _format_toast(errs);\n\t\t\t\t\t\t\t\tresult.counter += counter;\n\t\t\t\t\t\t\t\tresult.msgs.push('
'\n\t\t\t\t\t\t\t\t\t+ title\n\t\t\t\t\t\t\t\t\t+ '
'\n\t\t\t\t\t\t\t\t\t+ msgs.join('')\n\t\t\t\t\t\t\t\t\t+ '
');\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}, Promise.resolve({ counter: 0, msgs: []})));\n\t\t\t\t\t}\n\n\t\t\t\t\tawait $p.loadCategory('ui');\n\t\t\t\t\tconst n_errors = $p.t('ui/n_errors', { n: counter });\n\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\tn_errors,\n\t\t\t\t\t\t'
' + msgs.join('') + '
',\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tphp(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('warn', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('info', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\tmessage = title + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\texception(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tdb(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tauth(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\ttitle += ': ' + error.message;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ttitle = error.message;\n\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (options?.errorHandling !== undefined)\n\t\t\tDEFAULT_ERROR_CONFIG = _merge_error_config(options.errorHandling);\n\t\t\n\t\tfunction get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\t\tfunction clean_return_value(response) {\n\t\t\tif (typeof response.data === 'string' || response.data instanceof String)\n\t\t\t\treturn clean_return_value({ data: response });\n\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result)\n\t\t\t\treturn {meta: {response}, data: null};\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = { response };\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tfunction _merge_error_config(config) {\n\t\t\tif (config === false || config === 'off')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false, fail: false };\n\t\t\t\n\t\t\tif (!config || config === true)\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tif (config === 'success')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, fail: false };\n\t\t\t\n\t\t\tif (config === 'fail')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false };\n\t\t\t\n\t\t\tconst { success, fail, handler, combine } = config;\n\t\t\t\n\t\t\tconfig = { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tObject.entries({ fail, success }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = value;\n\t\t\t});\n\t\t\tObject.entries({ handler, combine }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = { ...config[key], ...value };\n\t\t\t});\n\n\t\t\treturn config;\n\t\t}\n\t\tfunction get_error_handler(config) {\n\t\t\tconst result = _merge_error_config(config?.errorHandling);\n\n\t\t\tif (!config?.form) {\n\t\t\t\tresult.combine = { ...result.combine, form: [] };\n\t\t\t} else {\n\t\t\t\tconst formHandler = result.handler.form;\n\t\t\t\tresult.handler = { ...result.handler, form: errors => formHandler(config.form, errors) };\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t\tfunction get_error_list(error) {\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\treturn [{\n\t\t\t\t\t\ttype: 'not_found',\n\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t\t}];\n\t\t\t\t} else {\n\t\t\t\t\tif (error.response.data.errors == undefined) return [];\n\t\t\t\t\treturn error.response.data.errors;\n\t\t\t\t}\n\t\t\t} else if (error.request) {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'site_failed',\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t}];\n\t\t\t} else {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'script',\n\t\t\t\t\tmessage: error.message\n\t\t\t\t}];\n\t\t\t}\n\t\t}\n\t\tfunction popHandleableErrors(errorHandling, errors) {\n\t\t\tconst result = {};\n\t\t\tconst copy = [];\n\n\t\t\tif (errors == undefined) return {};\n\n\t\t\twhile (errors.length)\n\t\t\t\tcopy.push(errors.pop());\n\t\t\tfor (var error of copy) {\n\t\t\t\tlet type = error.type;\n\t\t\t\tlet newType = null;\n\t\t\t\tfor (var t in errorHandling.combine) {\n\t\t\t\t\tlet newTypeCombinesType = errorHandling\n\t\t\t\t\t\t.combine[t]\n\t\t\t\t\t\t.includes(type);\n\t\t\t\t\tlet newTypeHasHandler = errorHandling.handler[t];\n\t\t\t\t\tif (newTypeCombinesType && newTypeHasHandler) {\n\t\t\t\t\t\tnewType = t;\n\t\t\t\t\t\tif (newType == 'form')\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (newType)\n\t\t\t\t\ttype = newType;\n\t\t\t\tconst handler = errorHandling.handler[type];\n\t\t\t\tif (handler) {\n\t\t\t\t\tif (!result[type])\n\t\t\t\t\t\tresult[type] = [];\n\t\t\t\t\tif (Array.isArray(error))\n\t\t\t\t\t\tresult[type].push(...error);\n\t\t\t\t\telse\n\t\t\t\t\t\tresult[type].push(error);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\terrors.push(error);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t+ FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(\n\t\t\tresponse => {\n\t\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\t\treturn clean_return_value(response);\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\tif (response.data.errors)\n\t\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$api._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t\t);\n\n\t\t\t\treturn clean_return_value(response);\n\t\t\t},\n\t\t\terror => {\n\t\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\n\t\t\t\tconst errorConfig = get_error_handler(error.config);\n\n\t\t\t\tif (!errorConfig.fail)\n\t\t\t\t\treturn Promise.reject(error);\n\n\t\t\t\tconst remaining = get_error_list(error);\n\n\t\t\t\tconst errors = popHandleableErrors(errorConfig, remaining);\n\n\t\t\t\tfor (var type in errors) {\n\t\t\t\t\terrorConfig.handler[type](errors[type]);\n\t\t\t\t}\n\n\t\t\t\tif (remaining.length)\n\t\t\t\t\treturn Promise.reject(error);\n\t\t\t\t\n\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\t\t\t}\n\t\t);\n\n\t\tapp.config.globalProperties.$api = {\n\t\t\tgetUri(url) {\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\t[uri, params, config] = get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\t[uri, data, config] = get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\tcall(factory, configoverwrite, form) {\n\t\t\t\tif (Array.isArray(factory)) {\n\t\t\t\t\tconst $api = app.config.globalProperties.$api;\n\n\t\t\t\t\treturn Promise\n\t\t\t\t\t\t.allSettled(factory.map((config, index) => {\n\t\t\t\t\t\t\tif (!Array.isArray(config))\n\t\t\t\t\t\t\t\tconfig = ['#' + index, config];\n\t\t\t\t\t\t\treturn $api.call(config[1], {\n\t\t\t\t\t\t\t\terrorHeader: config[0],\n\t\t\t\t\t\t\t\terrorHandling: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}))\n\t\t\t\t\t\t.then(result => {\n\t\t\t\t\t\t\tconst [ , , config ] = get_config(form, undefined, undefined, configoverwrite || {});\n\t\t\t\t\t\t\tconst errorConfig = get_error_handler(config);\n\n\t\t\t\t\t\t\tif (!errorConfig.success && !errorConfig.fail) {\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst typedErrors = {};\n\t\t\t\t\t\t\tfor (var res of result) {\n\t\t\t\t\t\t\t\tconst [ allowed, item ] = res.status === 'fulfilled'\n\t\t\t\t\t\t\t\t\t? [ errorConfig.success, res.value ]\n\t\t\t\t\t\t\t\t\t: [ errorConfig.fail, res.reason ];\n\t\t\t\t\t\t\t\tif (!allowed)\n\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\tconst errors = popHandleableErrors(errorConfig, get_error_list(item));\n\n\t\t\t\t\t\t\t\tfor (var type in errors) {\n\t\t\t\t\t\t\t\t\tif (!typedErrors[type])\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type] = {\n\t\t\t\t\t\t\t\t\t\t\t[item.config.errorHeader]: errors[type]\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type][item.config.errorHeader] = errors[type];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfor (var errType in typedErrors) {\n\t\t\t\t\t\t\t\terrorConfig.handler[errType](typedErrors[errType]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tlet { method, url, params, config } = factory;\n\t\t\t\tif (configoverwrite !== undefined) {\n\t\t\t\t\tconfig = configoverwrite;\n\t\t\t\t}\n\t\t\t\tif (!method) {\n\t\t\t\t\tmethod = 'get';\n\t\t\t\t}\n\t\t\t\tif (method.toLowerCase)\n\t\t\t\t\tmethod = method.toLowerCase();\n\t\t\t\tif (method == 'get') {\n\t\t\t\t\treturn this.get(form, url, params, config);\n\t\t\t\t} else if (method == 'post') {\n\t\t\t\t\treturn this.post(form, url, params, config);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"FhcApi: method not allowed:\", method);\n\t\t\t\t}\n\t\t\t},\n\t\t\tgetErrorHandler(config) {\n\t\t\t\treturn get_error_handler(config);\n\t\t\t}\n\t\t};\n\n\t\tapp.provide('$api', app.config.globalProperties.$api);\n\t}\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/loadModule/' + category\n\t\t};\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst params = {categories, language}\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/phrasen/setLanguage',\n\t\t\tparams\n\t\t};\n\t},\n\tgetLanguage() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getLanguage'\n\t\t};\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getAllLanguages'\n\t\t};\n\t}\n};","import OldFhcApi from '../plugin/OldFhcApi.js'; // TODO(chris): remove at some point\nimport PluginsApi from './Api.js';\nimport ApiPhrasen from '../api/factory/phrasen.js';\n\nconst categories = Vue.reactive({});\nconst loadingModules = {};\nlet user_language = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language);\nexport let user_locale = Vue.computed(()=>{\n\tif(!user_language.value) return null;\n\treturn FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(language => language.sprache == user_language.value).LC_Time;\n});\n\nfunction extractCategory(obj, category) {\n\treturn obj.filter(e => e.category == category).reduce((res, elem) => {\n\t\tif (!res[elem.phrase])\n\t\t\tres[elem.phrase] = elem.text;\n\t\treturn res;\n\t}, {});\n}\nfunction getValueForLoadedPhrase(category, phrase, params) {\n\tlet result = categories[category][phrase];\n\tif (!result)\n\t\treturn '<< PHRASE ' + phrase + '>>';\n\tif (params)\n\t\tresult = result.replace(/\\{([^}]*)\\}/g, (match, p1) => params[p1] === undefined ? match : params[p1]);\n\treturn result;\n}\n\nconst phrasen = {\n\tuser_language,\n\tuser_locale,\n\tsetLanguage(language) {\n\t\tconst catArray = Object.keys(categories)\n\t\treturn this.config.globalProperties.$api\n\t\t\t.call(ApiPhrasen.setLanguage(catArray, language))\n\t\t\t.then(res => {\n\t\t\t\tres.data.forEach(row => {\n\t\t\t\t\tcategories[row.category][row.phrase] = row.text\n\t\t\t\t})\n\n\t\t\t\t// update the reactive data that holds the current active user_language\n\t\t\t\tuser_language.value = language;\n\n\t\t\t\treturn res\n\t\t\t})\n\t},\n\tloadCategory(category) {\n\t\tif (Array.isArray(category))\n\t\t\treturn Promise.all(category.map(this.config.globalProperties\n\t\t\t\t.$p.loadCategory));\n\n\t\tif (!loadingModules[category])\n\t\t\tloadingModules[category] = this.config.globalProperties.$api\n\t\t\t\t.call(ApiPhrasen.loadCategory(category))\n\t\t\t\t.then(res => res?.data ? extractCategory(res.data, category) : {})\n\t\t\t\t.then(res => {\n\t\t\t\t\tcategories[category] = res;\n\t\t\t\t});\n\t\treturn loadingModules[category];\n\t},\n\tt_ref(category, phrase, params) {\n\t\tconsole.warn('deprecated');\n\t\treturn Vue.computed(() => this.t(category, phrase, params));\n\t},\n\tt(category, phrase, params) {\n\t\tif (params === undefined && (\n\t\t\t(Array.isArray(category) && category.length == 2) ||\n\t\t\t(category.split && category.split('/').length == 2))\n\t\t\t) {\n\t\t\tparams = phrase;\n\t\t\t[category, phrase] = category.split ? category.split('/') : category;\n\t\t}\n\t\tif (phrase === undefined) {\n\t\t\tconsole.error('invalid input', category, phrase, params);\n\t\t\treturn '';\n\t\t}\n\t\tlet val = Vue.computed(() => {\n\t\t\tif (!categories[category])\n\t\t\t\treturn '';\n\t\t\treturn getValueForLoadedPhrase(category, phrase, params);\n\t\t});\n\t\tif (!categories[category])\n\t\t\tthis.loadCategory(category);\n\t\treturn val.value;\n\t}\n};\n\nexport default {\n\tinstall(app, options) {\n\t\tif (!app.config.globalProperties.$fhcApi)\n\t\t\tapp.use(OldFhcApi); // TODO(chris): remove at some point\n\t\tif (!app.config.globalProperties.$api)\n\t\t\tapp.use(PluginsApi);\n\t\tapp.config.globalProperties.$p = {\n\t\t\tt: phrasen.t,\n\t\t\tloadCategory: cat => phrasen.loadCategory.call(app, cat),\n\t\t\tsetLanguage: lang => phrasen.setLanguage.call(app, lang),\n\t\t\tuser_language: user_language,\n\t\t\tuser_locale,\n\t\t\tt_ref: phrasen.t_ref\n\t\t};\n\t\tapp.provide('$p', app.config.globalProperties.$p);\n\t}\n}","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsearch(params) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/searchbar/search',\n\t\t\tparams\n\t\t};\n\t},\n\tsearchCis(params) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/searchbar/searchCis',\n\t\t\tparams\n\t\t};\n\t},\n\tsearchStv(params) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/searchbar/searchStv',\n\t\t\tparams\n\t\t};\n\t}\n};","let theme_name = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.theme.name);\nconst theme_modes = FHC_JS_DATA_STORAGE_OBJECT.theme.modes;\n\nconst toggleTheme = (theme)=>{\n\tif (!theme) return;\n\n\tfor (const theme of theme_modes) {\n\t\tdocument.documentElement.classList.remove(theme);\n\t}\n\ttheme_name.value = theme;\n\tdocument.documentElement.classList.add(theme);\n\n\tdocument.body.setAttribute(\"data-bs-theme\", theme);\n\n\tlet stylesheet = document.querySelector('link[href*=\"primevue/resources/themes\"]');\n\tif (theme == \"dark\") {\n\t\tstylesheet.attributes.href.value = stylesheet.attributes.href.value.replace(\"bootstrap4-light-blue\", \"bootstrap4-dark-blue\");\n\t} else if (theme == \"light\") {\n\t\tstylesheet.attributes.href.value = stylesheet.attributes.href.value.replace(\"bootstrap4-dark-blue\", \"bootstrap4-light-blue\");\n\t}\n\telse{\n\t\tif (stylesheet.attributes.href.value.includes(\"bootstrap4-dark-blue\"))\n\t\t\tstylesheet.attributes.href.value = stylesheet.attributes.href.value.replace(\"bootstrap4-dark-blue\", \"bootstrap4-light-blue\");\n\t}\n\n\tlocalStorage.setItem(\"theme\", theme);\n}\n\nconst initializeTheme = ()=>{\n\t\n\tlet theme = localStorage.getItem(\"theme\");\n\tif (!theme || !theme_modes.includes(theme)) {\n\t\t// set the first theme mode as default\n\t\ttheme = theme_modes[0];\n\t\tlocalStorage.setItem(\"theme\",theme);\n\t}\n\ttoggleTheme(theme);\n}\n\n\nexport default {\n\tinstall: (app,options)=>{\n\t\t\n\t\tdocument.documentElement.classList.add(theme_name.value);\n\n\t\tinitializeTheme();\n\n\t\tapp.config.globalProperties.$theme = {\n\t\t\ttheme_name,\n\t\t\ttheme_modes,\n\t\t\tswitchTheme: (theme) => {\n\t\t\t\ttoggleTheme(theme);\n\t\t\t}, \n\t\t} \n\t}\n}","import FhcSearchbar from \"../components/searchbar/searchbar.js\";\nimport CisMenu from \"../components/Cis/Menu.js\";\nimport PluginsPhrasen from '../plugins/Phrasen.js';\nimport ApiSearchbar from '../api/factory/searchbar.js';\nimport Theme from \"../plugins/Theme.js\";\n\nconst app = Vue.createApp({\n name: 'CisApp',\n components: {\n FhcSearchbar,\n CisMenu\n },\n data: function() {\n return {\n searchbaroptions: {\n\t\t\t\torigin: \"cis\",\n\t\t\t\tcssclass: \"\",\n\t\t\t\tcalcheightonly: true,\n\t\t\t\ttypes: {\n\t\t\t\t\temployee: Vue.computed(() => this.$p.t(\"search/type_employee\")),\n\t\t\t\t\tstudent: Vue.computed(() => this.$p.t(\"search/type_student\")),\n\t\t\t\t\troom: Vue.computed(() => this.$p.t(\"search/type_room\")),\n\t\t\t\t\torganisationunit: Vue.computed(() => this.$p.t(\"search/type_organisationunit\")),\n\t\t\t\t\tcms: Vue.computed(() => this.$p.t(\"search/type_cms\")),\n\t\t\t\t\tdms: Vue.computed(() => this.$p.t(\"search/type_dms\"))\n\t\t\t\t},\n actions: {\n employee: {\n defaultaction: {\n type: \"link\",\n action: function(data) {\n\t\t\t\t\t\t\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router+\n\t\t\t\t\t\t\t\t\t\t\"/Cis/Profil/View/\"+data.uid;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n childactions: []\n\t\t\t\t\t},\n\t\t\t\t\tstudent: {\n\t\t\t\t\t\tdefaultaction: {\n\t\t\t\t\t\t\ttype: \"link\",\n\t\t\t\t\t\t\taction: function (data) {\n\t\t\t\t\t\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\t\t\t\t\t\t\"/Cis/Profil/View/\" + data.uid;\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tchildactions: []\n\t\t\t\t\t},\n room: {\n defaultaction: {\n type: \"link\",\n\t\t\t\t\t\t\trenderif: function(data) {\n\t\t\t\t\t\t\t\tif(data.content_id === null){\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t},\n action: function(data) { \n\t\t\t\t\t\t\t\tconst link= FHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\t\t\t\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\t\t\t\t\t\t'/CisVue/Cms/content/' + data.content_id;\n\t\t\t\t\t\t\t\treturn link;\n }\n },\n childactions: [\n {\n label: \"LV-Plan\",\n icon: \"fas fa-bookmark\",\n type: \"link\",\n action: function(data) {\n\t\t\t\t\t\t\t\t\tconst link = FHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\t\t\t\t\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\t\t\t\t\t\t\t'/CisVue/Cms/getRoomInformation/' + data.ort_kurzbz;\n\t\t\t\t\t\t\t\t\treturn link;\n }\n },\n {\n label: \"Rauminformation\",\n icon: \"fas fa-info-circle\",\n type: \"link\",\n renderif: function(data) {\n\t\t\t\t\t\t\t\t\tif(data.content_id === null){\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn true;\n },\n action: function(data) {\n\t\t\t\t\t\t\t\t\tconst link= FHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\t\t\t\t\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\t\t\t\t\t\t\t'/CisVue/Cms/content/' + data.content_id;\n\t\t\t\t\t\t\t\t\treturn link;\n }\n },\n ]\n },\n organisationunit: {\n defaultaction: {\n type: \"link\",\n\t\t\t\t\t\t\trenderif: function(data) {\n\t\t\t\t\t\t\t\tif(data.mailgroup) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t},\n action: function(data) {\n const link = 'mailto:' + data.mailgroup;\n\t\t\t\t\t\t\t\treturn link;\n }\n },\n childactions: []\n },\n\t\t\t\t\tcms: {\n\t\t\t\t\t\tdefaultaction: {\n\t\t\t\t\t\t\ttype: \"link\",\n\t\t\t\t\t\t\taction: function (data) {\n\t\t\t\t\t\t\t\tconst link = FHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\t\t\t\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\t\t\t\t\t\t'/CisVue/Cms/content/' + data.content_id;\n\t\t\t\t\t\t\t\treturn link;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tchildactions: []\n\t\t\t\t\t},\n\t\t\t\t\tdms: {\n\t\t\t\t\t\tdefaultaction: {\n\t\t\t\t\t\t\ttype: \"link\",\n\t\t\t\t\t\t\taction: function (data) {\n\t\t\t\t\t\t\t\tconst link = FHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\t\t\t\t\t\t\t'cms/dms.php?id=' + data.dms_id;\n\t\t\t\t\t\t\t\treturn link;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tchildactions: []\n\t\t\t\t\t}\n }\n }\n };\n },\n methods: {\n searchfunction: function(searchsettings) {\n \treturn this.$api.call(ApiSearchbar.searchCis(searchsettings));\n }\n }\n});\napp.use(primevue.config.default, {\n\tzIndex: {\n\t\toverlay: 9000,\n\t\ttooltip: 8000\n\t}\n})\napp.use(PluginsPhrasen);\napp.use(Theme);\napp.mount('#cis-header');\n"],"names":["TemplateAction","name","emits","props","res","Object","action","computed","actionHref","this","type","methods","actionFunc","$emit","renderif","undefined","template","TemplateFrame","components","ResultAction","ResultActions","actions","Array","title","String","image","imageFallback","person$3","emails","Set","email","room","mode","equipment","replace","RegExp","address","zip","city","street","floor","$p","t","employee","organisationunit","student","photo_url","foto","prestudent$1","status","stg_kuerzel","dms","icon","mimetype","cms$1","inject","preview","template_kurzbz","text","content","length","lower","toLowerCase","firstOccurence","Math","min","query","split","reduce","a","c","i","indexOf","includes","posInText","push","substr","url","content_url","$fhcApi","getUri","FHC_JS_DATA_STORAGE_OBJECT","app_root","mergedStudent","ResultPrestudent","ResultStudent","prestudent","list","filter","item","pop","mergedPerson","person","isArray","find","person_id","students","el","idx","arr","some","tmpitem","uid","sort","b","telurl","phone","inaktiv","aktiv","FhcSearchbar","cms","provide","Vue","lastQuery","data","searchtimer","hidetimer","searchsettings","searchstr","getSearchStr","types","getInitiallySelectedTypes","searchresult","searchmode","showresult","searching","error","abortController","settingsDropdown","searchTypesPlaceholder","map","typeLabels","join","values","searchoptions","keys","watch","newSearchValue","origin","sessionStorage","setItem","newValue","localStorage","JSON","stringify","search","mounted","bootstrap","Collapse","$refs","settings","toggle","console","warn","updated","nextTick","calcSearchResultHeight","clearInput","hideresult","input","focus","result","localStorageValue","getItem","parse","checkSettingsVisibility","event","contains","target","hide","handleShowSettings","document","addEventListener","handleHideSettings","removeEventListener","rect","results","getBoundingClientRect","height","window","innerHeight","style","ceil","calcSearchResultExtent","calcheightonly","searchbox","top","bottom","right","width","clearTimeout","abort","setTimeout","callsearchapi","splice","showsearchresult","AbortController","searchfunction","timeout","signal","then","response","meta","searchstring","mergeResults","counter","mergeTypes","mergedType","mergeKey","renderer","rank","retry","catch","code","refreshsearch","togglesettings","searchfocusin","e","preventDefault","stopPropagation","searchfocusout","dash2camelCase","string","g","toUpperCase","isValidRenderer","camelCaseRenderer","$","getActions","ApiCisMenu","getMenu","method","CisMenu","CisMenuEntry","entry","level","Number","default","activeContent","highestMatchingUrlCount","collapse","urlCount","setActiveEntry","content_id","menu_open","searchRecursiveChild","oldValue","show","makeParentContentActive","active","link","DOMParser","parseFromString","getElementsByTagName","childNodes","nodeValue","news_regex","ci_router","content_regex_result","exec","index_regex","relative_regex","hasFullLink","startsWith","hasChilds","childs","getUrlMatchPoints","splitted_link","splitted_url","href","count","part_url","part_link","addUrlCount","checkActiveUrl","url_hash_spaceSymbol_regex","url_hash_sharpSymbol_regex","url_hash","hash","titel","property","value","entries","child","toggleCollapse","evt","children","className","URL","location","CisSprachen","allActiveLanguages","server_languages","changeLanguage","lang","l","sprache","isReload","querySelector","setLanguage","reload","ThemeSwitch","theme","switchTheme","nextTheme","$theme","theme_modes","created","rootUrl","logoUrl","avatarUrl","logoutUrl","selectedtypes","searchbaroptions","Function","activeEntry","urlMatchRankings","navUserDropdown","menuOpen","menuCollapseAriaLabel","highestMatch","max","site_url","fetchMenu","$api","call","menu","handleShowNavUser","handleHideNavUser","collection","parent","loadCategory","config","post","searchAdvanced","searchdummy","phrasen$1","category","get","categories","language","payload","getLanguage","getActiveDbLanguages","navigation","getHeader","navigation_page","filter$1","saveCustomFilter","wsParams","filterUniqueId","filterType","customFilterName","removeCustomFilter","filterId","applyFilterFields","filterFields","addFilterField","filterField","removeFilterField","getFilterById","getFilter","studstatus","abmeldung","getDetails","antrag_id","prestudent_id","create","stdsem","grund","studiensemester","errorHandling","cancel","Promise","allSettled","antrag","studierendenantrag_id","errorHeader","unterbrechung","datum_wiedereinstieg","attachment","wiederholung","getLvs","saveLvs","forbiddenLvs","mandatoryLvs","leitung","getStgs","getAntraege","params","getHistory","getPrestudents","approve","reject","reopen","pause","unpause","object","approveObjection","denyObjection","profil","getView","fotoSperre","isStudent","isMitarbeiter","getZustellAdresse","getZustellKontakt","getGemeinden","nation","getAllNationen","profilUpdate","getStatus","getTopic","acceptProfilRequest","profil_update_id","status_message","topic","requested_change","denyProfilRequest","insertFile","getProfilRequestFiles","requestID","selectProfilRequest","id","insertProfilRequest","fileID","updateProfilRequest","ID","deleteProfilRequest","lvPlan","getRoomInfo","ort_kurzbz","start_date","end_date","getStunden","getOrtReservierungen","getLvPlanReservierungen","getLehreinheitStudiensemester","lehreinheit_id","studiensemesterDateInterval","date","LvPlanEvents","lv_id","stv","verband","favorites","set","studiensemester_kurzbz","encodeURIComponent","relative_path","getStg","setStg","studiengang_kz","konto","tabulatorConfig","self","ajaxURL","ajaxParams","modelValue","only_open","studiengang_kz_intern","stg_kz","ajaxRequestFunc","ajaxResponse","checkDoubles","form","confirmErrorHandler","insert","edit","delete","buchungsnr","getBuchungstypen","group","getGruppen","deleteGroup","kontakt","getAdressen","addNewAddress","loadAddress","address_id","updateAddress","deleteAddress","getPlaces","plz","getFirmen","searchString","getNations","getAdressentypen","getBankverbindung","addNewBankverbindung","loadBankverbindung","bankverbindung_id","updateBankverbindung","deleteBankverbindung","getKontakte","addNewContact","loadContact","kontakt_id","updateContact","deleteContact","getStandorteByFirma","getKontakttypen","updatePrestudent","getBezeichnungZGV","getBezeichnungMZgv","getBezeichnungDZgv","getAusbildung","getAufmerksamdurch","getBerufstaetigkeit","getTypenStg","getBisstandort","getHistoryPrestudent","getMaxSem","studiengang_kzs","advanceStatus","status_kurzbz","ausbildungssemester","confirmStatus","isLastStatus","deleteStatus","getLastBismeldestichtag","getHistoryPrestudents","insertStatus","loadStatus","updateStatus","getStudienplaene","getStudiengang","getStatusgruende","getStati","addStudent","changeStatus","getStatusarray","details","save","exam","getPruefungen","loadPruefung","pruefung_id","getTypenPruefungen","getAllLehreinheiten","getLvsByStudent","getLvsandLesByStudent","semester","getLvsAndMas","getMitarbeiterLv","getNoten","checkZeugnisnoteLv","addPruefung","updatePruefung","deletePruefung","abschlusspruefung","getAbschlusspruefung","addNewAbschlusspruefung","loadAbschlusspruefung","updateAbschlusspruefung","deleteAbschlusspruefung","getTypenAbschlusspruefung","getTypenAntritte","getBeurteilungen","getAkadGrade","getTypStudiengang","getMitarbeiter","getPruefer","checkForExistingExams","uids","grades","getCertificate","getTeacherProposal","getRepeaterGrades","updateCertificate","lehrveranstaltung_id","student_uid","note","lehrveranstaltung_bezeichnung","deleteCertificate","copyTeacherProposalToCertificate","copyRepeaterGradeToCertificate","studierendenantrag_lehrveranstaltung_id","lv_bezeichnung","getGradeFromPoints","points","manualErrorHandling","mobility","getMobilitaeten","getProgramsMobility","addNewMobility","loadMobility","bisio_id","updateMobility","deleteMobility","getLVList","getPurposes","getSupports","getListPurposes","getListSupports","deleteMobilityPurpose","addMobilityPurpose","deleteMobilitySupport","addMobilitySupport","archiv","getArchivVorlagen","archive","archiveSigned","update","akte_id","documents","getDocumentsUnaccepted","getDocumentsAccepted","deleteZuordnung","dokument_kurzbz","createZuordnung","loadAkte","getDoktypen","updateFile","deleteFile","uploadFile","exemptions","getAnrechnungen","getLehrveranstaltungen","getBegruendungen","getLvsKompatibel","getLektoren","addNewAnrechnung","loadAnrechnung","anrechnung_id","editAnrechnung","deleteAnrechnung","jointstudies","getStudies","getTypenMobility","getStudiensemester","getStudyprograms","getListPartner","getStatiPrestudent","loadStudy","insertStudy","updateStudy","deleteStudy","courselist","getCourselist","group_consecutiveHours","dbStundenplanTable","configStudent","configStudents","notiz","getNotizen","getUid","addNewNotiz","formData","loadNotiz","notiz_id","loadDokumente","deleteNotiz","type_id","updateNotiz","isBerechtigt","betriebsmittel","getAllBetriebsmittel","addNewBetriebsmittel","loadBetriebsmittel","betriebsmittelperson_id","updateBetriebsmittel","deleteBetriebsmittel","getTypenBetriebsmittel","loadInventarliste","checkperson","updatePersonUnrulyStatus","unrulyParam","unruly","filterPerson","base","axios","ort","getContentID","ort_kurbz","getRooms","datum","von","bis","typ","personenanzahl","getRoomTypes","version","sichtbar","getNews","page","page_size","news","limit","getNewsRowCount","getNewsExtra","lehre","getStudentenMail","getLvInfo","getStudentPruefungen","getStudentProjektarbeiten","getStudentProjektabgaben","detail","projektarbeit_id","postStudentProjektarbeitEndupload","Headers","postStudentProjektarbeitZwischenabgabe","getStudentProjektarbeitAbgabeFile","paabgabe_id","getMitarbeiterProjektarbeiten","all","postProjektarbeitAbgabe","termin","paabgabetyp_kurzbz","bezeichnung","fixtermin","insertvon","kurzbz","deleteProjektarbeitAbgabe","postSerientermin","projektarbeit_ids","fetchDeadlines","addons","getLvMenu","lvid","messages","getMessages","size","getVorlagen","getMsgVarsLoggedInUser","getMessageVarsPerson","getMsgVarsPrestudent","getPersonId","getDataVorlage","vorlage_kurzbz","getNameOfDefaultRecipient","getPreviewText","getReplyData","messageId","sendMessageFromModalContext","sendMessage","deleteMessage","vorlagen","getVorlagenByLoggedInUser","studium","getAllStudienSemester","studiengang","studienplan","getStudiengaengeForStudienSemester","getStudienplaeneBySemester","getLvPlanForStudiensemester","getLvEvaluierungInfo","FhcApiFactory","phrasen","dashboard","getViewData","bookmark","getBookmarks","bookmark_id","tag","ampeln","open","confirm","ampel_id","studiengangInformation","getStudiengangByKz","authinfo","getAuthUID","getAuthInfo","getAll","OldFhcApi","install","app","options","globalProperties","factory","addEndpoints","_get_config","uri","TypeError","clearValidation","setFeedback","_clean_return_value","fhcApiAxios","baseURL","interceptors","request","use","FormData","every","FileList","File","newData","nd","key","file","append","jsondata","forEach","errors","err","_defaultErrorHandlers","handled","$fhcAlert","alertDefault","message","responseURL","alertError","validation","apply","general","php","filename","line","backtrace","function","severity","alertSystemError","exception","class","db","heading","sql","auth","controller","required_permissions","FhcApiFactoryWrapper","constructor","factorypart","root","defineProperty","noWarn","bind","CORE_REST_CLIENT_ERROR","CORE_REST_CLIENT_RETVAL","CoreRESTClient","wsURL","wsParameters","axiosParameters","_axiosCall","isSuccess","hasOwnProperty","isError","hasData","trim","getData","getError","getErrorCode","_generateRouterURI","_printDebug","parameters","errorThrown","axiosCallObj","prop","helperAppContainer","createElement","helperApp","createApp","PvToast","PvConfirm","mailToUrl","slotProps","systemerror_mailto","called_path","called_method","openMessagecard","getOrCreateInstance","getAttribute","unmounted","parentElement","removeChild","showmaillink","PvConfig","PvConfirmationService","helperAppInstance","mount","body","appendChild","FhcAlert","FhcPhrasen","alertSuccess","toast","add","summary","life","alertInfo","alertWarning","alert","confirmDelete","resolve","$confirm","require","header","acceptLabel","acceptClass","rejectLabel","rejectClass","accept","sticky","html","alertMultiple","messageArray","handleSystemError","errMsg","retval","stack","handleSystemMessage","msg","resetFormValidation","Event","querySelectorAll","dispatchEvent","handleFormValidation","nodeType","Node","ELEMENT_NODE","notFound","CustomEvent","PluginsApi","_send_array_or_object","func","errs","DEFAULT_ERROR_CONFIG","success","fail","combine","handler","async","_format_toast","_default","field","msgs","n_errors","n","get_config","clean_return_value","_merge_error_config","get_error_handler","formHandler","get_error_list","popHandleableErrors","copy","newType","newTypeCombinesType","newTypeHasHandler","errorConfig","remaining","configoverwrite","index","typedErrors","allowed","reason","errType","getErrorHandler","ApiPhrasen","reactive","loadingModules","user_language","ref","user_locale","LC_Time","catArray","row","phrase","obj","elem","extractCategory","t_ref","val","match","p1","getValueForLoadedPhrase","PluginsPhrasen","cat","ApiSearchbar","searchCis","searchStv","theme_name","modes","toggleTheme","documentElement","classList","remove","setAttribute","stylesheet","attributes","Theme","initializeTheme","cssclass","defaultaction","childactions","label","mailgroup","dms_id","primevue","zIndex","overlay","tooltip"],"mappings":"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"} \ No newline at end of file diff --git a/public/dist/js/apps/Cis/Documents.js b/public/dist/js/apps/Cis/Documents.js index c6704eddf..c94791fb5 100644 --- a/public/dist/js/apps/Cis/Documents.js +++ b/public/dist/js/apps/Cis/Documents.js @@ -1,4 +1,4 @@ -import e from"../../../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js?2025102901";import t from"../../../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js?2025102901";import r from"../../../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js?2025102901";import n from"../../../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js?2025102901";var i={search(e,t){return this.$fhcApi.post("/api/frontend/v1/searchbar/search",e,t)},searchAdvanced(e,t){return this.$fhcApi.post("/api/frontend/v1/searchbar/searchAdvanced",e,t)},searchdummy(e){return this.$fhcApi.post("public/js/apps/api/dummyapi.php/Search",e)}},s={loadCategory(e){return this.$fhcApi.get("/api/frontend/v1/phrasen/loadModule/"+e)},setLanguage(e,t){const r={categories:e,language:t};return this.$fhcApi.post("/api/frontend/v1/phrasen/setLanguage",r)},getLanguage(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getLanguage",{})},getActiveDbLanguages(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getAllLanguages",{})}},a={getHeader(e){return this.$fhcApi.get("/api/frontend/v1/navigation/header",{navigation_page:e})},getMenu:function(e){return this.$fhcApi.get("/api/frontend/v1/navigation/menu",{navigation_page:e})}},o={saveCustomFilter(e){return this.$fhcApi.post("/api/frontend/v1/filter/saveCustomFilter",{filterUniqueId:e.filterUniqueId,filterType:e.filterType,customFilterName:e.customFilterName})},removeCustomFilter(e){return this.$fhcApi.post("/api/frontend/v1/filter/removeCustomFilter",{filterUniqueId:e.filterUniqueId,filterType:e.filterType,filterId:e.filterId})},applyFilterFields(e){return this.$fhcApi.post("/api/frontend/v1/filter/applyFilterFields",{filterUniqueId:e.filterUniqueId,filterType:e.filterType,filterFields:e.filterFields})},addFilterField(e){return this.$fhcApi.post("/api/frontend/v1/filter/addFilterField",{filterUniqueId:e.filterUniqueId,filterType:e.filterType,filterField:e.filterField})},removeFilterField(e){return this.$fhcApi.post("/api/frontend/v1/filter/removeFilterField",{filterUniqueId:e.filterUniqueId,filterType:e.filterType,filterField:e.filterField})},getFilterById(e){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:e.filterUniqueId,filterType:e.filterType,filterId:e.filterId})},getFilter(e){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:e.filterUniqueId,filterType:e.filterType})}},p={abmeldung:{getDetails(e,t){const r="/api/frontend/v1/studstatus/abmeldung/"+(void 0!==e?"getDetailsForAntrag/"+e:"getDetailsForNewAntrag/"+t);return this.$fhcApi.get(r)},create(e,t,r){return this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/createAntrag",{studiensemester:e,prestudent_id:t,grund:r},{errorHandling:"strict"})},cancel(e){return Array.isArray(e)?Promise.allSettled(e.map(e=>this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:e.studierendenantrag_id},{errorHeader:"#"+e.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:e})}},unterbrechung:{getDetails(e,t){const r="/api/frontend/v1/studstatus/unterbrechung/"+(void 0!==e?"getDetailsForAntrag/"+e:"getDetailsForNewAntrag/"+t);return this.$fhcApi.get(r)},create(e,t,r,n,i){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/createAntrag",{studiensemester:e,prestudent_id:t,grund:r,datum_wiedereinstieg:n,attachment:i},{errorHandling:"strict"})},cancel(e){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/cancelAntrag",{antrag_id:e},{errorHandling:"strict"})}},wiederholung:{getDetails(e){const t="/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/"+e;return this.$fhcApi.get(t)},getLvs(e){const t="/api/frontend/v1/studstatus/wiederholung/getLvs/"+e;return this.$fhcApi.get(t)},create(e,t){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/createAntrag",{prestudent_id:e,studiensemester:t},{errorHandling:"strict"})},cancel(e,t){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/cancelAntrag",{prestudent_id:e,studiensemester:t},{errorHandling:"strict"})},saveLvs(e,t){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/saveLvs",{forbiddenLvs:e,mandatoryLvs:t})}},leitung:{getStgs(){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getActiveStgs")},getAntraege(e,t,r){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getAntraege/"+e).then(e=>e.data)},getHistory(e){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getHistory/"+e)},getPrestudents(e,t){return this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/getPrestudents",{query:e},{signal:t,timeout:3e4})},approve(e){return Array.isArray(e)?Promise.allSettled(e.map(e=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",e,{errorHeader:"#"+e.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",e)},reject(e){return Array.isArray(e)?Promise.allSettled(e.map(e=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",e,{errorHeader:"#"+e.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",e)},reopen(e){return Array.isArray(e)?Promise.allSettled(e.map(e=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",e,{errorHeader:"#"+e.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",e)},pause(e){return Array.isArray(e)?Promise.allSettled(e.map(e=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",e,{errorHeader:"#"+e.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",e)},unpause(e){return Array.isArray(e)?Promise.allSettled(e.map(e=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",e,{errorHeader:"#"+e.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",e)},object(e){return Array.isArray(e)?Promise.allSettled(e.map(e=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",e,{errorHeader:"#"+e.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",e)},approveObjection(e){return Array.isArray(e)?Promise.allSettled(e.map(e=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",e,{errorHeader:"#"+e.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",e)},denyObjection(e){return Array.isArray(e)?Promise.allSettled(e.map(e=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",e,{errorHeader:"#"+e.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",e)}}},u={getView:function(e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getView/${e}`,{})},fotoSperre:function(e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/fotoSperre/${e}`,{})},isStudent:function(e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/isStudent",{uid:e})},isMitarbeiter:function(e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/isMitarbeiter/${e}`,{})},getZustellAdresse:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellAdresse",{})},getZustellKontakt:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellKontakt",{})},getGemeinden:function(e,t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getGemeinden/${e}/${t}`,{})},getAllNationen:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getAllNationen",{})}},d={ +import e from"../../../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js?2025111701";import t from"../../../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js?2025111701";import r from"../../../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js?2025111701";import n from"../../../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js?2025111701";var i={search(e,t){return this.$fhcApi.post("/api/frontend/v1/searchbar/search",e,t)},searchAdvanced(e,t){return this.$fhcApi.post("/api/frontend/v1/searchbar/searchAdvanced",e,t)},searchdummy(e){return this.$fhcApi.post("public/js/apps/api/dummyapi.php/Search",e)}},s={loadCategory(e){return this.$fhcApi.get("/api/frontend/v1/phrasen/loadModule/"+e)},setLanguage(e,t){const r={categories:e,language:t};return this.$fhcApi.post("/api/frontend/v1/phrasen/setLanguage",r)},getLanguage(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getLanguage",{})},getActiveDbLanguages(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getAllLanguages",{})}},a={getHeader(e){return this.$fhcApi.get("/api/frontend/v1/navigation/header",{navigation_page:e})},getMenu:function(e){return this.$fhcApi.get("/api/frontend/v1/navigation/menu",{navigation_page:e})}},o={saveCustomFilter(e){return this.$fhcApi.post("/api/frontend/v1/filter/saveCustomFilter",{filterUniqueId:e.filterUniqueId,filterType:e.filterType,customFilterName:e.customFilterName})},removeCustomFilter(e){return this.$fhcApi.post("/api/frontend/v1/filter/removeCustomFilter",{filterUniqueId:e.filterUniqueId,filterType:e.filterType,filterId:e.filterId})},applyFilterFields(e){return this.$fhcApi.post("/api/frontend/v1/filter/applyFilterFields",{filterUniqueId:e.filterUniqueId,filterType:e.filterType,filterFields:e.filterFields})},addFilterField(e){return this.$fhcApi.post("/api/frontend/v1/filter/addFilterField",{filterUniqueId:e.filterUniqueId,filterType:e.filterType,filterField:e.filterField})},removeFilterField(e){return this.$fhcApi.post("/api/frontend/v1/filter/removeFilterField",{filterUniqueId:e.filterUniqueId,filterType:e.filterType,filterField:e.filterField})},getFilterById(e){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:e.filterUniqueId,filterType:e.filterType,filterId:e.filterId})},getFilter(e){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:e.filterUniqueId,filterType:e.filterType})}},p={abmeldung:{getDetails(e,t){const r="/api/frontend/v1/studstatus/abmeldung/"+(void 0!==e?"getDetailsForAntrag/"+e:"getDetailsForNewAntrag/"+t);return this.$fhcApi.get(r)},create(e,t,r){return this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/createAntrag",{studiensemester:e,prestudent_id:t,grund:r},{errorHandling:"strict"})},cancel(e){return Array.isArray(e)?Promise.allSettled(e.map(e=>this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:e.studierendenantrag_id},{errorHeader:"#"+e.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:e})}},unterbrechung:{getDetails(e,t){const r="/api/frontend/v1/studstatus/unterbrechung/"+(void 0!==e?"getDetailsForAntrag/"+e:"getDetailsForNewAntrag/"+t);return this.$fhcApi.get(r)},create(e,t,r,n,i){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/createAntrag",{studiensemester:e,prestudent_id:t,grund:r,datum_wiedereinstieg:n,attachment:i},{errorHandling:"strict"})},cancel(e){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/cancelAntrag",{antrag_id:e},{errorHandling:"strict"})}},wiederholung:{getDetails(e){const t="/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/"+e;return this.$fhcApi.get(t)},getLvs(e){const t="/api/frontend/v1/studstatus/wiederholung/getLvs/"+e;return this.$fhcApi.get(t)},create(e,t){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/createAntrag",{prestudent_id:e,studiensemester:t},{errorHandling:"strict"})},cancel(e,t){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/cancelAntrag",{prestudent_id:e,studiensemester:t},{errorHandling:"strict"})},saveLvs(e,t){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/saveLvs",{forbiddenLvs:e,mandatoryLvs:t})}},leitung:{getStgs(){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getActiveStgs")},getAntraege(e,t,r){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getAntraege/"+e).then(e=>e.data)},getHistory(e){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getHistory/"+e)},getPrestudents(e,t){return this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/getPrestudents",{query:e},{signal:t,timeout:3e4})},approve(e){return Array.isArray(e)?Promise.allSettled(e.map(e=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",e,{errorHeader:"#"+e.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",e)},reject(e){return Array.isArray(e)?Promise.allSettled(e.map(e=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",e,{errorHeader:"#"+e.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",e)},reopen(e){return Array.isArray(e)?Promise.allSettled(e.map(e=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",e,{errorHeader:"#"+e.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",e)},pause(e){return Array.isArray(e)?Promise.allSettled(e.map(e=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",e,{errorHeader:"#"+e.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",e)},unpause(e){return Array.isArray(e)?Promise.allSettled(e.map(e=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",e,{errorHeader:"#"+e.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",e)},object(e){return Array.isArray(e)?Promise.allSettled(e.map(e=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",e,{errorHeader:"#"+e.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",e)},approveObjection(e){return Array.isArray(e)?Promise.allSettled(e.map(e=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",e,{errorHeader:"#"+e.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",e)},denyObjection(e){return Array.isArray(e)?Promise.allSettled(e.map(e=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",e,{errorHeader:"#"+e.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",e)}}},u={getView:function(e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getView/${e}`,{})},fotoSperre:function(e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/fotoSperre/${e}`,{})},isStudent:function(e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/isStudent",{uid:e})},isMitarbeiter:function(e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/isMitarbeiter/${e}`,{})},getZustellAdresse:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellAdresse",{})},getZustellKontakt:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellKontakt",{})},getGemeinden:function(e,t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getGemeinden/${e}/${t}`,{})},getAllNationen:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getAllNationen",{})}},d={ //! API calls for profil update requests -getStatus:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getStatus",{})},getTopic:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getTopic",{})},acceptProfilRequest:function({profil_update_id:e,uid:t,status_message:r,topic:n,requested_change:i}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/acceptProfilRequest",{profil_update_id:e,uid:t,status_message:r,topic:n,requested_change:i})},denyProfilRequest:function({profil_update_id:e,uid:t,topic:r,status_message:n}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/denyProfilRequest",{profil_update_id:e,uid:t,topic:r,status_message:n})},insertFile:function(e,t=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/insertFile/${t}`,e)},getProfilRequestFiles:function(e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${e}`,{})},selectProfilRequest:function(e=null,t=null){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/selectProfilRequest",{...e?{uid:e}:{},...t?{id:t}:{}})},insertProfilRequest:function(e,t,r=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/insertProfilRequest",{topic:e,payload:t,...r?{fileID:r}:{}})},updateProfilRequest:function(e,t,r,n=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/updateProfilRequest",{topic:e,payload:t,ID:r,...n?{fileID:n}:{}})},deleteProfilRequest:function(e){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/deleteProfilRequest",{requestID:e})}},l={getRoomInfo(e,t,r){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getRoomplan",{ort_kurzbz:e,start_date:t,end_date:r})},getStunden(){return this.$fhcApi.get("/api/frontend/v1/LvPlan/Stunden",{})},getOrtReservierungen(e,t,r){return this.$fhcApi.post(`/api/frontend/v1/LvPlan/getReservierungen/${e}`,{start_date:t,end_date:r})},getLvPlanReservierungen(e,t){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getReservierungen",{start_date:e,end_date:t})},getLehreinheitStudiensemester(e){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${e}`,{})},studiensemesterDateInterval(e){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${e}`,{})},LvPlanEvents(e,t,r){return this.$fhcApi.get("/api/frontend/v1/LvPlan/LvPlanEvents",{start_date:e,end_date:t,lv_id:r})}},f={verband:{get(){return this.$fhcApi.get("api/frontend/v1/stv/verband")},favorites:{get(){return this.$fhcApi.get("api/frontend/v1/stv/favorites")},set(e){return this.$fhcApi.post("api/frontend/v1/stv/favorites/set",{favorites:e})}}},students:{uid(e,t){let r="api/frontend/v1/stv/students/"+encodeURIComponent(t)+"/uid/"+encodeURIComponent(e);return this.$fhcApi.getUri(r)},prestudent(e,t){let r="api/frontend/v1/stv/students/"+encodeURIComponent(t)+"/prestudent/"+encodeURIComponent(e);return this.$fhcApi.getUri(r)},person(e,t){let r="api/frontend/v1/stv/students/"+encodeURIComponent(t)+"/person/"+encodeURIComponent(e);return this.$fhcApi.getUri(r)},verband(e){return this.$fhcApi.getUri("api/frontend/v1/stv/students/"+e)}},filter:{getStg(){return this.$fhcApi.get("api/frontend/v1/stv/filter/getStg")},setStg(e){return this.$fhcApi.post("api/frontend/v1/stv/filter/setStg",{studiengang_kz:e})}},konto:{tabulatorConfig(e,t){return e.ajaxURL="api/frontend/v1/stv/konto/get",e.ajaxParams=()=>({person_id:t.modelValue.person_id||t.modelValue.map(e=>e.person_id),only_open:t.filter,studiengang_kz:t.studiengang_kz_intern?t.stg_kz:""}),e.ajaxRequestFunc=(e,t,r)=>this.$fhcApi.post(e,r,t),e.ajaxResponse=(e,t,r)=>r.data,e},checkDoubles(e,t){return this.$fhcApi.post(e,"api/frontend/v1/stv/konto/checkDoubles",t,{confirmErrorHandler:e=>!0})},insert(e,t){return this.$fhcApi.post(e,"api/frontend/v1/stv/konto/insert",t)},counter(e){return this.$fhcApi.post("api/frontend/v1/stv/konto/counter",e)},edit(e,t){return this.$fhcApi.post(e,"api/frontend/v1/stv/konto/update",t)},delete(e){return this.$fhcApi.post("api/frontend/v1/stv/konto/delete",{buchungsnr:e})},getBuchungstypen(){return this.$fhcApi.get("api/frontend/v1/stv/konto/getBuchungstypen")}},group:{getGruppen(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/Gruppen/getGruppen/"+r.id)},deleteGroup(e){return this.$fhcApi.post("api/frontend/v1/stv/Gruppen/deleteGruppe/",e)}},kontakt:{getAdressen(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressen/"+r.id)},addNewAddress(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/stv/kontakt/addNewAddress/"+t,r)},loadAddress(e){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadAddress/",{address_id:e})},updateAddress(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/stv/kontakt/updateAddress/"+t,r)},deleteAddress(e){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteAddress/",{address_id:e})},getPlaces(e){return this.$fhcApi.get("api/frontend/v1/stv/address/getPlaces/"+e)},getFirmen(e){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getFirmen/"+e)},getNations(){return this.$fhcApi.get("api/frontend/v1/stv/address/getNations/")},getAdressentypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressentypen/")},getBankverbindung(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getBankverbindung/"+r.id)},addNewBankverbindung(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/stv/kontakt/addNewBankverbindung/"+t,r)},loadBankverbindung(e){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadBankverbindung/",{bankverbindung_id:e})},updateBankverbindung(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/stv/kontakt/updateBankverbindung/"+t,r)},deleteBankverbindung(e){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteBankverbindung/",{bankverbindung_id:e})},getKontakte(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakte/"+r.id)},addNewContact(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/stv/kontakt/addNewContact/"+t,r)},loadContact(e){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadContact/",{kontakt_id:e})},updateContact(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/stv/kontakt/updateContact/"+t,r)},deleteContact(e){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteContact/",{kontakt_id:e})},getStandorteByFirma(e){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getStandorteByFirma/"+e)},getKontakttypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakttypen/")}},prestudent:{get(e,t){return this.$fhcApi.post("api/frontend/v1/stv/prestudent/get/"+encodeURIComponent(e)+"/"+encodeURIComponent(t))},updatePrestudent(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/stv/prestudent/updatePrestudent/"+t,r)},getBezeichnungZGV(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungZGV/")},getBezeichnungMZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungMZgv/")},getBezeichnungDZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungDZgv/")},getStgs(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStgs/")},getAusbildung(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAusbildung/")},getAufmerksamdurch(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAufmerksamdurch/")},getBerufstaetigkeit(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBerufstaetigkeit/")},getTypenStg(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getTypenStg/")},getBisstandort(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBisstandort/")},getHistoryPrestudent(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/status/getHistoryPrestudent/"+r.id)},getMaxSem(e){return this.$fhcApi.post("api/frontend/v1/stv/status/getMaxSemester/",{studiengang_kzs:e})},advanceStatus({prestudent_id:e,status_kurzbz:t,studiensemester_kurzbz:r,ausbildungssemester:n}){return this.$fhcApi.post("api/frontend/v1/stv/status/advanceStatus/"+e+"/"+t+"/"+r+"/"+n)},confirmStatus({prestudent_id:e,status_kurzbz:t,studiensemester_kurzbz:r,ausbildungssemester:n}){return this.$fhcApi.post("api/frontend/v1/stv/status/confirmStatus/"+e+"/"+t+"/"+r+"/"+n)},isLastStatus(e){return this.$fhcApi.get("api/frontend/v1/stv/status/isLastStatus/"+e)},deleteStatus({prestudent_id:e,status_kurzbz:t,studiensemester_kurzbz:r,ausbildungssemester:n}){return this.$fhcApi.post("api/frontend/v1/stv/status/deleteStatus/"+e+"/"+t+"/"+r+"/"+n)},getLastBismeldestichtag(){return this.$fhcApi.get("api/frontend/v1/stv/status/getLastBismeldestichtag/")},getHistoryPrestudents(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getHistoryPrestudents/"+r.id)}},status:{insertStatus(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/stv/status/insertStatus/"+t,r)},loadStatus({prestudent_id:e,status_kurzbz:t,studiensemester_kurzbz:r,ausbildungssemester:n}){return this.$fhcApi.post("api/frontend/v1/stv/status/loadStatus/"+e+"/"+t+"/"+r+"/"+n)},updateStatus(e,{prestudent_id:t,status_kurzbz:r,studiensemester_kurzbz:n,ausbildungssemester:i},s){return this.$fhcApi.post(e,"api/frontend/v1/stv/status/updateStatus/"+t+"/"+r+"/"+n+"/"+i,s)},getStudienplaene(e){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudienplaene/"+e)},getStudiengang(e){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudiengang/"+e)},getStatusgruende(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusgruende/")},getStati(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStati/")},addStudent(e,t){return this.$fhcApi.post("api/frontend/v1/stv/status/addStudent/"+e,t,{errorHeader:e})},changeStatus(e,t){return this.$fhcApi.post("api/frontend/v1/stv/status/changeStatus/"+e,t,{errorHeader:e})},getStatusarray(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusarray/")}},details:{get(e,t){let r="api/frontend/v1/stv/student/get/"+encodeURIComponent(e)+"/"+encodeURIComponent(t);return this.$fhcApi.post(r)},save(e,t,r,n){let i="api/frontend/v1/stv/student/save/"+encodeURIComponent(t)+"/"+encodeURIComponent(r);return this.$fhcApi.post(e,i,n)}},exam:{getPruefungen(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getPruefungen/"+r.id)},loadPruefung(e){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/loadPruefung/"+e)},getTypenPruefungen(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getTypenPruefungen")},getAllLehreinheiten(e){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/getAllLehreinheiten/",e)},getLvsByStudent(e){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsByStudent/"+e)},getLvsandLesByStudent(e,t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsandLesByStudent/"+e+"/"+t)},getLvsAndMas(e){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsAndMas/"+e)},getMitarbeiterLv(e){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getMitarbeiterLv/"+e)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getNoten")},checkZeugnisnoteLv(e){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/",e)},addPruefung(e,t){return this.$fhcApi.post(e,"api/frontend/v1/stv/pruefung/insertPruefung/",t)},updatePruefung(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/stv/pruefung/updatePruefung/"+t,r)},deletePruefung(e){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/deletePruefung/"+e)}},abschlusspruefung:{getAbschlusspruefung(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/"+r.id)},addNewAbschlusspruefung(e,t){return this.$fhcApi.post(e,"api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/",t)},loadAbschlusspruefung(e){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/",{id:e})},updateAbschlusspruefung(e,t){return this.$fhcApi.post(e,"api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/",t)},deleteAbschlusspruefung(e){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/",{id:e})},getTypenAbschlusspruefung(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/")},getTypenAntritte(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/")},getBeurteilungen(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/")},getAkadGrade(e){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getAkadGrade/",{studiengang_kz:e})},getTypStudiengang(e){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/",{studiengang_kz:e})},getMitarbeiter(e){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/"+e)},getPruefer(e){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getPruefer/"+e)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getNoten/")},checkForExistingExams(e){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/",{uids:e})}},grades:{list(){return this.$fhcApi.get("api/frontend/v1/stv/grades/list")},getCertificate(e,t){let r="api/frontend/v1/stv/grades/getCertificate/"+encodeURIComponent(e);return t&&(r=r+"/"+encodeURIComponent(t)),this.$fhcApi.get(r)},getTeacherProposal(e,t){let r="api/frontend/v1/stv/grades/getTeacherProposal/"+encodeURIComponent(e);return t&&(r=r+"/"+encodeURIComponent(t)),this.$fhcApi.get(r)},getRepeaterGrades(e,t){let r="api/frontend/v1/stv/grades/getRepeaterGrades/"+encodeURIComponent(e);return t&&(r=r+"/"+encodeURIComponent(t)),this.$fhcApi.get(r)},updateCertificate({lehrveranstaltung_id:e,student_uid:t,studiensemester_kurzbz:r,note:n,lehrveranstaltung_bezeichnung:i}){return this.$fhcApi.post("api/frontend/v1/stv/grades/updateCertificate",{lehrveranstaltung_id:e,student_uid:t,studiensemester_kurzbz:r,note:n},{errorHeader:i})},deleteCertificate({lehrveranstaltung_id:e,student_uid:t,studiensemester_kurzbz:r,lehrveranstaltung_bezeichnung:n}){return this.$fhcApi.post("api/frontend/v1/stv/grades/deleteCertificate",{lehrveranstaltung_id:e,student_uid:t,studiensemester_kurzbz:r},{errorHeader:n})},copyTeacherProposalToCertificate({lehrveranstaltung_id:e,student_uid:t,studiensemester_kurzbz:r,lehrveranstaltung_bezeichnung:n}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyTeacherProposalToCertificate",{lehrveranstaltung_id:e,student_uid:t,studiensemester_kurzbz:r},{errorHeader:n})},copyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id:e,lv_bezeichnung:t}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate",{studierendenantrag_lehrveranstaltung_id:e},{errorHeader:t})},getGradeFromPoints(e,t,r,n){const i=n?{errorHandling:!1}:{};return this.$fhcApi.post("api/frontend/v1/stv/grades/getGradeFromPoints",{points:e,lehrveranstaltung_id:t,studiensemester_kurzbz:r},i)}},mobility:{getMobilitaeten(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getMobilitaeten/"+r.id)},getProgramsMobility(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getProgramsMobility/")},addNewMobility(e,t){return this.$fhcApi.post(e,"api/frontend/v1/stv/mobility/insertMobility/",t)},loadMobility(e){return this.$fhcApi.get("api/frontend/v1/stv/mobility/loadMobility/"+e)},updateMobility(e,t){return this.$fhcApi.post(e,"api/frontend/v1/stv/mobility/updateMobility/",t)},deleteMobility(e){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobility/"+e)},getLVList(e){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLVList/"+e)},getAllLehreinheiten(e){return this.$fhcApi.post("api/frontend/v1/stv/mobility/getAllLehreinheiten/",e)},getLvsandLesByStudent(e){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLvsandLesByStudent/"+e)},getPurposes(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getPurposes/"+r.id)},getSupports(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getSupports/"+r.id)},getListPurposes(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListPurposes/")},getListSupports(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListSupports/")},deleteMobilityPurpose(e){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilityPurpose/"+e.bisio_id,e)},addMobilityPurpose(e){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilityPurpose/"+e.bisio_id,e)},deleteMobilitySupport(e){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilitySupport/"+e.bisio_id,e)},addMobilitySupport(e){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilitySupport/"+e.bisio_id,e)}},archiv:{tabulatorConfig(e,t){return e.ajaxURL="api/frontend/v1/stv/archiv/get",e.ajaxParams=()=>({person_id:t.modelValue.person_id||t.modelValue.map(e=>e.person_id)}),e.ajaxRequestFunc=(e,t,r)=>this.$fhcApi.post(e,r,t),e.ajaxResponse=(e,t,r)=>r.data,e},getArchivVorlagen(){return this.$fhcApi.post("api/frontend/v1/stv/archiv/getArchivVorlagen")},archive(e){return this.$fhcApi.post("api/frontend/v1/documents/archive",e)},archiveSigned(e){return this.$fhcApi.post("api/frontend/v1/documents/archiveSigned",e)},update(e){return this.$fhcApi.post("api/frontend/v1/stv/archiv/update",e)},delete({akte_id:e,studiengang_kz:t}){return this.$fhcApi.post("api/frontend/v1/stv/archiv/delete",{akte_id:e,studiengang_kz:t})}},documents:{getDocumentsUnaccepted(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/"+r.id+"/"+r.studiengang_kz)},getDocumentsAccepted(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsAccepted/"+r.id+"/"+r.studiengang_kz)},deleteZuordnung(e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteZuordnung/"+e.prestudent_id+"/"+e.dokument_kurzbz)},createZuordnung(e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/createZuordnung/"+e.prestudent_id+"/"+e.dokument_kurzbz)},loadAkte(e){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/loadAkte/"+e)},getDoktypen(){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDoktypen/")},updateFile(e,t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/updateAkte/"+e,t)},deleteFile(e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteAkte/"+e)},uploadFile(e,t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/uploadDokument/"+e,t)}},exemptions:{getAnrechnungen(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getAnrechnungen/"+r.id)},getLehrveranstaltungen(e){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/"+e)},getBegruendungen(){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getBegruendungen/")},getLvsKompatibel(e){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLvsKompatibel/"+e)},getLektoren(e){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLektoren/"+e)},addNewAnrechnung(e,t){return this.$fhcApi.post(e,"api/frontend/v1/stv/anrechnungen/insertAnrechnung/",t)},loadAnrechnung(e){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/loadAnrechnung/"+e)},editAnrechnung(e,t){return this.$fhcApi.post(e,"api/frontend/v1/stv/anrechnungen/updateAnrechnung/",t)},deleteAnrechnung(e){return this.$fhcApi.post("api/frontend/v1/stv/anrechnungen/deleteAnrechnung/"+e)}},jointstudies:{getStudies(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudien/"+r.id)},getTypenMobility(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/")},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/")},getStudyprograms(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/")},getListPartner(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/")},getStatiPrestudent(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/")},loadStudy(e){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/loadStudie/"+e)},insertStudy(e,t){return this.$fhcApi.post(e,"api/frontend/v1/stv/GemeinsameStudien/insertStudie/",t)},updateStudy(e,t){return this.$fhcApi.post(e,"api/frontend/v1/stv/GemeinsameStudien/updateStudie/",t)},deleteStudy(e){return this.$fhcApi.post("api/frontend/v1/stv/GemeinsameStudien/deleteStudie/"+e)}},courselist:{getCourselist(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStundenplan/"+r.student_uid+"/"+r.start_date+"/"+r.end_date+"/"+r.group_consecutiveHours+"/"+r.dbStundenplanTable)},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStudiensemester/")}},configStudent(){return this.$fhcApi.get("api/frontend/v1/stv/config/student")},configStudents(){return this.$fhcApi.get("api/frontend/v1/stv/config/students")}},g={person:{getNotizen(e,t,r){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getNotizen/"+r.id+"/"+r.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getUid/")},addNewNotiz(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/notiz/notizPerson/addNewNotiz/"+t,r)},loadNotiz(e){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadNotiz/",{notiz_id:e})},loadDokumente(e){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadDokumente/",{notiz_id:e})},deleteNotiz(e,t,r){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/deleteNotiz/",{notiz_id:e,type_id:t,id:r})},updateNotiz(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/notiz/notizPerson/updateNotiz/"+t,r)},getMitarbeiter(e){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getMitarbeiter/"+e)},isBerechtigt(e,t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/isBerechtigt/")}}},c={person:{getAllBetriebsmittel(e,t,r){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/"+r.type+"/"+r.id)},addNewBetriebsmittel(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/"+t,r)},loadBetriebsmittel(e){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/"+e)},updateBetriebsmittel(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/"+t,r)},deleteBetriebsmittel(e){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/"+e)},getTypenBetriebsmittel(){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/")},loadInventarliste(e){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/"+e)}}},h={updatePersonUnrulyStatus(e,t){try{const r={person_id:e,unruly:t},n="/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus";return this.$fhcApi.post(n,r,null)}catch(e){throw e}},filterPerson(e,t=""){try{const r=t+"/api/frontend/v1/checkperson/CheckPerson/filterPerson";return axios.post(r,e)}catch(e){throw e}}},v={getContentID(e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/ContentID",{ort_kurzbz:e})},getRooms(e,t,r,n,i=0){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getRooms",{datum:e,von:t,bis:r,typ:n,personenanzahl:i})},getRoomTypes(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getTypes")}},A={content(e,t=null,r=null,n=null){return this.$fhcApi.get("/api/frontend/v1/Cms/content",{content_id:e,...t?{version:t}:{},...r?{sprache:r}:{},...n?{sichtbar:n}:{}})},getNews(e=1,t=10,r){return this.$fhcApi.get("/api/frontend/v1/Cms/getNews",{page:e,page_size:t,sprache:r})},news(e){return this.$fhcApi.get("/api/frontend/v1/Cms/news",{limit:e})},getNewsRowCount:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getNewsRowCount",{})},getNewsExtra:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getStudiengangInfoForNews",{})}},m={getStudentenMail(e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Lehre/lvStudentenMail",{lehreinheit_id:e})},getLvInfo(e,t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/LV/${e}/${t}`,{})},getStudentPruefungen(e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/Pruefungen/${e}`,{})},getStudentProjektarbeiten(e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/getStudentProjektarbeiten/${e}`,{})},getStudentProjektabgaben(e){return this.$fhcApi.get("/api/frontend/v1/Lehre/getStudentProjektabgaben",{projektarbeit_id:e.projektarbeit_id,student_uid:e.student_uid})},postStudentProjektarbeitEndupload(e){return this.$fhcApi.post("/api/frontend/v1/Lehre/postStudentProjektarbeitEndupload",e,{Headers:{"Content-Type":"multipart/form-data"}})},postStudentProjektarbeitZwischenabgabe(e){return this.$fhcApi.post("/api/frontend/v1/Lehre/postStudentProjektarbeitZwischenabgabe",e,{Headers:{"Content-Type":"multipart/form-data"}})},getStudentProjektarbeitAbgabeFile(e,t){const r=`/Cis/Abgabetool/getStudentProjektarbeitAbgabeFile?paabgabe_id=${e}&student_uid=${t}`;window.location=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+r},getMitarbeiterProjektarbeiten(e,t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/getMitarbeiterProjektarbeiten?showall=${t}`,{})},postProjektarbeitAbgabe(e){const t={paabgabe_id:e.paabgabe_id,paabgabetyp_kurzbz:e.bezeichnung.paabgabetyp_kurzbz,datum:e.datum,fixtermin:e.fixtermin,insertvon:e.insertvon,kurzbz:e.kurzbz,projektarbeit_id:e.projektarbeit_id};return this.$fhcApi.post("/api/frontend/v1/Lehre/postProjektarbeitAbgabe",t,null)},deleteProjektarbeitAbgabe(e){const t={paabgabe_id:e};return this.$fhcApi.post("/api/frontend/v1/Lehre/deleteProjektarbeitAbgabe",t,null)},postSerientermin(e,t,r,n,i){const s={datum:e,paabgabetyp_kurzbz:t,bezeichnung:r,kurzbz:n,projektarbeit_ids:i};return this.$fhcApi.post("/api/frontend/v1/Lehre/postSerientermin",s,null)},fetchDeadlines(e){const t={person_id:e};return this.$fhcApi.post("/api/frontend/v1/Lehre/fetchDeadlines",t,null)}},_={getLvMenu(e,t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/LvMenu/getLvMenu/${e}/${t}`,{})}},b={person:{getMessages(e,t,r){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessages/"+r.id+"/"+r.type+"/"+r.size+"/"+r.page)},getVorlagen(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getVorlagen/")},getMsgVarsLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/")},getMessageVarsPerson(e){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessageVarsPerson/"+e.id+"/"+e.type_id)},getMsgVarsPrestudent(e){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsPrestudent/"+e.id+"/"+e.type_id)},getPersonId(e){return this.$fhcApi.get("api/frontend/v1/messages/messages/getPersonId/"+e.id+"/"+e.type_id)},getUid(e){return this.$fhcApi.get("api/frontend/v1/messages/messages/getUid/"+e.id+"/"+e.type_id)},getVorlagentext(e){return this.$fhcApi.get("api/frontend/v1/messages/messages/getVorlagentext/"+e)},getNameOfDefaultRecipient(e){return this.$fhcApi.get("api/frontend/v1/messages/messages/getNameOfDefaultRecipient/"+e.id+"/"+e.type_id)},getPreviewText(e,t){return this.$fhcApi.post("api/frontend/v1/messages/messages/getPreviewText/"+e.id+"/"+e.type_id,t)},getReplyData(e){return this.$fhcApi.get("api/frontend/v1/messages/messages/getReplyData/"+e)},sendMessageFromModalContext(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/messages/messages/sendMessage/"+t,r)},sendMessage(e,t){return this.$fhcApi.post("api/frontend/v1/messages/messages/sendMessage/"+e,t)},deleteMessage(e){return this.$fhcApi.post("api/frontend/v1/messages/messages/deleteMessage/"+e)}}},$={getVorlagen(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagen/")},getVorlagenByLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/")}},y={getStudiensemester:function(){return this.$fhcApi.get("/components/Cis/Mylv/Studiensemester",{})},getAllStudienSemester:function(e=void 0,t=void 0,r=void 0,n=void 0){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienAllSemester",{studiensemester:e,studiengang:t,semester:r,studienplan:n})},getStudiengaengeForStudienSemester:function(e){return this.$fhcApi.get(`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${e}`,{})},getStudienplaeneBySemester:function(e,t){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienplaeneBySemester",{studiengang:e,studiensemester:t})},getLvPlanForStudiensemester:function(e,t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${e}/${t}`,{})},getLvEvaluierungInfo:function(e,t){return this.$fhcApi.get(`/api/frontend/v1/Studium/getLvEvaluierungInfo/${e}/${t}`,{})}},S={search:i,phrasen:s,navigation:a,dashboard:{async getViewData(){return this.$fhcApi.get("/api/frontend/v1/Cis4FhcApi/getViewData",null,null)}},filter:o,studstatus:p,profil:u,profilUpdate:d,lvPlan:l,bookmark:{getBookmarks:function(){return this.$fhcApi.get("/api/frontend/v1/Bookmark/getBookmarks",{})},delete:function(e){return this.$fhcApi.get(`/api/frontend/v1/Bookmark/delete/${e}`,{})},update:function({bookmark_id:e,url:t,title:r,tag:n=null}){return this.$fhcApi.post(`/api/frontend/v1/Bookmark/update/${e}`,{url:t,title:r})},insert:function({url:e,title:t,tag:r}){return this.$fhcApi.post("/api/frontend/v1/Bookmark/insert",{url:e,title:t,tag:r})}},stv:f,notiz:g,betriebsmittel:c,checkperson:h,ampeln:{open:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/open",{})},all:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/all",{})},confirm:function(e){return this.$fhcApi.get(`/api/frontend/v1/Ampeln/confirm/${e}`,{})}},ort:v,cms:A,lehre:m,addons:_,messages:b,vorlagen:$,addons:_,studiengang:{studiengangInformation:function(){return this.$fhcApi.get("/api/frontend/v1/Studgang/getStudiengangInfo",{})},getStudiengangByKz:function(e){return this.$fhcApi.get("/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz",{studiengang_kz:e})}},menu:{getMenu:function(){return this.$fhcApi.get("/api/frontend/v1/CisMenu/getMenu",{})}},authinfo:{getAuthUID(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthUID",{})},getAuthInfo(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthInfo",{})}},studium:y,language:{getAll(){return this.$fhcApi.get("/api/frontend/v1/language/get")}}},E={install:(e,t)=>{if(e.config.globalProperties.$fhcApi)return void(t?.factory&&(console.warn("$fhcApi is DEPRECATED!"),e.config.globalProperties.$fhcApi.factory.addEndpoints(t.factory)));function r(e,t,r,n){if("string"==typeof e&&void 0===n)[t,r,n]=[e,t,r],e=void 0;else if(e){if("object"!=typeof e)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===t&&void 0===r&&void 0===n&&(n=e,e=void 0)}if(e){if(!e.clearValidation||!e.setFeedback)throw new TypeError("'form' is not a Form Component");e={clearValidation:e.clearValidation,setFeedback:e.setFeedback},n?n.form=e:n={form:e}}return[t,r,n]}function n(e){const t=e.data;return delete e.data,t.meta?t.meta.response=e:t.meta={response:e},t}FHC_JS_DATA_STORAGE_OBJECT.app_root,FHC_JS_DATA_STORAGE_OBJECT.ci_router;const i=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});i.interceptors.request.use(e=>{if("post"!=e.method||!e.data)return e;if(e.data instanceof FormData)return e;if(!Object.values(e.data).every(e=>!(e instanceof FileList)&&(!Array.isArray(e)||e.every(e=>!(e instanceof File))))){const t=Object.entries(e.data).reduce((e,[t,r])=>{if(r instanceof FileList)for(const n of r)e.FormData.append(t+(r.length>1?"[]":""),n);else Array.isArray(r)?r.every(e=>!(e instanceof File))?e.jsondata[t]=r:r.forEach(n=>e.FormData.append(t+(r.length>1?"[]":""),n)):e.jsondata[t]=r;return e},{FormData:new FormData,jsondata:{}});t.FormData.append("_jsondata",JSON.stringify(t.jsondata)),e.data=t.FormData}return e}),i.interceptors.response.use(t=>("off"==t.config?.errorHandling||!1===t.config?.errorHandling||"fail"==t.config?.errorHandling||t.data.errors&&(t.data.errors=t.data.errors.filter(r=>(t.config[r.type+"ErrorHandler"]||e.config.globalProperties.$fhcApi._defaultErrorHandlers[r.type])(r,t.config))),n(t)),t=>"ERR_CANCELED"==t.code?Promise.reject({handled:!0,...t}):"off"==t.config?.errorHandling||!1===t.config?.errorHandling||"success"==t.config?.errorHandling?Promise.reject(t):t.response?404==t.response.status?(e.config.globalProperties.$fhcAlert.alertDefault("error",t.message,t.request.responseURL,!0),Promise.reject({handled:!0,...t})):(t.response.data.errors=t.response.data.errors.filter(r=>(t.config[r.type+"ErrorHandler"]||e.config.globalProperties.$fhcApi._defaultErrorHandlers[r.type])(r,t.config)),t.response.data.errors.length?Promise.reject(t):Promise.reject({handled:!0,...t})):t.request?(e.config.globalProperties.$fhcAlert.alertDefault("error",t.message,t.request.responseURL),Promise.reject({handled:!0,...t})):(e.config.globalProperties.$fhcAlert.alertError(t.message),Promise.reject({handled:!0,...t}))),e.config.globalProperties.$fhcApi={getUri:e=>(console.warn("$fhcApi.getUri is DEPRECATED! Use $api.getUri instead."),i.getUri({url:e})),get:(e,t,n,s)=>(console.warn("$fhcApi.get is DEPRECATED! Use $api.get instead."),[t,n,s]=r(e,t,n,s),n&&(s?s.params=n:s={params:n}),i.get(t,s)),post:(e,t,n,s)=>(console.warn("$fhcApi.post is DEPRECATED! Use $api.post instead."),[t,n,s]=r(e,t,n,s),i.post(t,n,s)),_defaultErrorHandlers:{validation(t,r){const n=e.config.globalProperties.$fhcAlert;return r?.form?(r.form.clearValidation(),r.form.setFeedback(!1,t.messages),!1):Array.isArray(t.messages)?(t.messages.forEach(n.alertError),!1):"object"!=typeof t.messages||(r?.errorHeader?Object.values(t.messages).forEach(t=>n.alertDefault("error",Array.isArray(r.errorHeader)?e.config.globalProperties.$p.t.apply(null,r.errorHeader):r.errorHeader,t,!0)):Object.entries(t.messages).forEach(([e,t])=>n.alertDefault("error",e,t,!0)),!1)},general(t,r){const n=e.config.globalProperties.$fhcAlert;r?.form?r.form.setFeedback(!1,t.message):r?.errorHeader?n.alertDefault("error",Array.isArray(r.errorHeader)?e.config.globalProperties.$p.t.apply(null,r.errorHeader):r.errorHeader,t.message,!0):n.alertError(t.message)},php(t){const r=e.config.globalProperties.$fhcAlert;var n="";switch(n+="Message: "+t.message+"\n\n",n+="Filename: "+t.filename+"\n",n+="Line Number: "+t.line+"\n",t.backtrace&&t.backtrace.length&&(n+="\nBacktrace: ",t.backtrace.forEach(e=>{n+="\n\tFile: "+e.file+"\n",n+="\tLine: "+e.line+"\n",n+="\tFunction: "+e.function+"\n"})),t.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":r.alertDefault("warn","PHP "+t.severity,n,!0);break;case"Notice":case"User Notice":case"Runtime Notice":r.alertDefault("info","PHP "+t.severity,n,!0);break;default:n="Type: PHP "+t.severity+"\n\n"+n,r.alertSystemError(n)}},exception(t){const r=e.config.globalProperties.$fhcAlert;var n="";n+="Type: "+t.class+"\n\n",n+="Message: "+t.message+"\n\n",n+="Filename: "+t.filename+"\n",n+="Line Number: "+t.line+"\n",t.backtrace&&t.backtrace.length&&(n+="\nBacktrace: ",t.backtrace.forEach(e=>{n+="\n\tFile: "+e.file+"\n",n+="\tLine: "+e.line+"\n",n+="\tFunction: "+e.function+"\n"})),r.alertSystemError(n)},db(t){const r=e.config.globalProperties.$fhcAlert;var n="";void 0!==t.heading&&(n+=t.heading+"\n\n"),void 0!==t.code&&(n+="Code: "+t.code+"\n\n"),void 0!==t.sql&&(n+="SQL: "+t.sql+"\n\n"),void 0!==t.message?n+="Message: "+t.message+"\n\n":void 0!==t.messages&&(n+="Messages: "+t.messages.join("\n\t")+"\n\n"),void 0!==t.filename&&(n+="Filename: "+t.filename+"\n"),void 0!==t.line&&(n+="Line Number: "+t.line+"\n"),r.alertSystemError(n)},auth(t,r){const n=e.config.globalProperties.$fhcAlert;var i="";i+="Controller name: "+t.controller+"\n",i+="Method name: "+t.method+"\n",i+="Required permissions: "+t.required_permissions,r?.errorHeader?n.alertDefault("error",Array.isArray(r.errorHeader)?e.config.globalProperties.$p.t.apply(null,r.errorHeader):r.errorHeader,t.message,!0):n.alertDefault("error",t.message,i)}}};class s{constructor(t,r){void 0===r?(this.$fhcApi={getUri:t=>(console.warn("$fhcApi.factory is DEPRECATED!"),e.config.globalProperties.$fhcApi.getUri(t)),get:(t,r,n,i)=>(console.warn("$fhcApi.factory is DEPRECATED!"),e.config.globalProperties.$fhcApi.get(t,r,n,i)),post:(t,r,n,i)=>(console.warn("$fhcApi.factory is DEPRECATED!"),e.config.globalProperties.$fhcApi.post(t,r,n,i))},Object.defineProperty(this.$fhcApi,"factory",{get:()=>(console.warn("$fhcApi.factory is DEPRECATED!"),e.config.globalProperties.$fhcApi.factory)}),e.config.globalProperties.$fhcApi.factory=this):Object.defineProperty(this,"$fhcApi",{get(){return(r||this).$fhcApi}}),this.addEndpoints(t,!0)}addEndpoints(e,t){Object.keys(e).forEach(t=>{Object.defineProperty(this,t,{get(){return"function"==typeof e[t]?e[t].bind(this):new s(e[t],this.$fhcApi.factory)}})}),t||console.warn("$fhcApi.factory.addEndpoints() is DEPRECATED!")}}const a=new s(S);t?.factory&&(console.warn("$fhcApi is DEPRECATED!"),a.addEndpoints(t.factory)),e.config.globalProperties.$fhcApi.factory=a,e.provide("$fhcApi",e.config.globalProperties.$fhcApi)}};const P="error",T="retval",C={get:function(e,t,r=null){return C._axiosCall(e,t,"get",r)},post:function(e,t,r=null){return C._axiosCall(e,t,"post",r)},isSuccess:function(e){return!("object"!=typeof e||!e.hasOwnProperty(P)||!e.hasOwnProperty(T)||0!=e.error)},isError:function(e){return!C.isSuccess(e)},hasData:function(e){return!(!C.isSuccess(e)||!("object"==typeof e[T]&&Object.keys(e[T]).length>0||"array"==typeof e[T]&&e[T].length>0||"string"==typeof e[T]&&""!=e[T].trim()||"number"==typeof e[T]))},getData:function(e){return C.hasData(e)?e[T]:null},getError:function(e){return"object"==typeof e&&Object.keys(e).length>0&&e.hasOwnProperty(T)?e[T]:"Generic error"},getErrorCode:function(e){return"object"==typeof e&&e.hasOwnProperty(P)?e[P]:1},_generateRouterURI:function(e){var t=null;return"undefined"!=typeof FHC_JS_DATA_STORAGE_OBJECT&&(t=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"+e),t},_printDebug:function(e,t,r){},_axiosCall:function(e,t,r,n){let i={method:r,url:C._generateRouterURI(e),timeout:5e3};if("get"==r?i.params=t:i.data=t,"object"==typeof n)for(var s in n)i[s]=n[s];return axios(i)}},k=document.createElement("div"),F=Vue.createApp({name:"FhcAlertApp",components:{PvToast:t,PvConfirm:r},methods:{mailToUrl:e=>"mailto:"+FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto+"?subject=Meldung%20Systemfehler&body="+("\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method+"%0D%0A\n\t\t\t\tFehler Meldung: "+e.message.detail+"%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!"),openMessagecard(e){bootstrap.Collapse.getOrCreateInstance(e.target.getAttribute("href")).toggle()}},unmounted(){k.parentElement.removeChild(k)},computed:{showmaillink:function(){return""!==FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto}},template:'\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t'});F.use(e),F.use(n);const O=F.mount(k);document.body.appendChild(k);var D={install:(e,t)=>{e.config.globalProperties.$p||e.use(z);const r={alertSuccess(e){if(Array.isArray(e))return e.forEach(this.alertSuccess);O.$refs.toast.add({severity:"success",summary:"Info",detail:e,life:1e3})},alertInfo(e){if(Array.isArray(e))return e.forEach(this.alertInfo);O.$refs.toast.add({severity:"info",summary:"Info",detail:e,life:3e3})},alertWarning(e){if(Array.isArray(e))return e.forEach(this.alertWarning);O.$refs.toast.add({severity:"warn",summary:"Achtung",detail:e})},alertError(e){if(Array.isArray(e))return e.forEach(this.alertError);O.$refs.toast.add({severity:"error",summary:"Achtung",detail:e})},alertSystemError(t){if(Array.isArray(t))return t.forEach(this.alertSystemError);O.$refs.alert.add({severity:"error",summary:Vue.computed(()=>e.config.globalProperties.$p.t("alert/systemerror")),detail:t})},confirmDelete:()=>new Promise((t,r)=>{O.$confirm.require({group:"fhcAlertConfirm",header:Vue.computed(()=>e.config.globalProperties.$p.t("alert/attention")),message:Vue.computed(()=>e.config.globalProperties.$p.t("alert/confirm_delete")),acceptLabel:Vue.computed(()=>e.config.globalProperties.$p.t("ui/loeschen")),acceptClass:"p-button-danger",rejectLabel:Vue.computed(()=>e.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:"p-button-secondary",accept(){t(!0)},reject(){t(!1)}})}),confirm:t=>new Promise((r,n)=>{O.$confirm.require({group:t?.group??"fhcAlertConfirm",header:t?.header??Vue.computed(()=>e.config.globalProperties.$p.t("alert/attention")),message:t?.message??"",acceptLabel:t?.acceptLabel??"Ok",acceptClass:t?.acceptClass??"btn btn-primary",rejectLabel:t?.rejectLabel??Vue.computed(()=>e.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:t?.rejectClass??"btn btn-outline-secondary",accept(){r(!0)},reject(){r(!1)}})}),alertDefault(e,t,r,n=!1,i=!1){let s={severity:e,summary:t,detail:r,html:i};n||(s.life=3e3),O.$refs.toast.add(s)},alertMultiple(e,t="info",r="Info",n=!1,i=!1){return!!e.every(e=>"string"==typeof e)&&(e.forEach(e=>this.alertDefault(t,r,e,n,i)),!0)},handleSystemError(e){if(!e.hasOwnProperty("name")||e.name.toLowerCase()!=="AbortError".toLowerCase()){if("string"==typeof e)return r.alertSystemError(e);if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return e.every(r.alertSystemError);if(!e.hasOwnProperty("handled")||!e.handled){if("object"==typeof e&&null!==e){let t="";return e.hasOwnProperty("response")&&e.response?.data?.retval?t+="Error Message: "+(e.response.data.retval.message||e.response.data.retval)+"\r\n":e.hasOwnProperty("message")&&(t+="Error Message: "+e.message.toUpperCase()+"\r\n"),e.hasOwnProperty("config")&&e.config.hasOwnProperty("url")&&(t+="Error ConfigURL: "+e.config.url+"\r\n"),e.hasOwnProperty("stack")&&(t+="Error Stack: "+e.stack+"\r\n"),""==t&&(t="Error Message: "+JSON.stringify(e)+"\r\n"),t+="Error Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,r.alertSystemError(t)}r.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method)}}},handleSystemMessage(e){if("string"==typeof e)return r.alertWarning(e);if(Array.isArray(e)){if(e.every(e=>"string"==typeof e))return e.every(r.alertWarning);if(e.every(e=>"object"==typeof e)&&null!==msg)return e.every(e=>{e.hasOwnProperty("data")&&e.data.hasOwnProperty("retval")?r.alertWarning(JSON.stringify(e.data.retval)):r.alertSystemError(JSON.stringify(e))})}"object"!=typeof e||null===e?r.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method):e.hasOwnProperty("data")&&e.data.hasOwnProperty("retval")?r.alertWarning(JSON.stringify(e.data.retval)):r.alertSystemError(JSON.stringify(e))},resetFormValidation(e){const t=new Event("fhc-form-reset");e.querySelectorAll(["[data-fhc-form-validate],[data-fhc-form-error]"]).forEach(e=>e.dispatchEvent(t))},handleFormValidation(e,t){if(void 0===t){if(e&&e.nodeType===Node.ELEMENT_NODE)return t=>r.handleFormValidation(t,e)}else if(400==e?.response?.status){let n=C.getError(e.response.data);"object"!=typeof n&&(n=e.response.data),r.resetFormValidation(t);const i=Object.entries(n).filter(([e,r])=>{const n=t.querySelector('[data-fhc-form-validate="'+e+'"]');return!n||(n.dispatchEvent(new CustomEvent("fhc-form-invalidate",{detail:r})),!1)}).map(e=>e[1]),s=t.querySelector("[data-fhc-form-error]");return void(s&&i.length?s.dispatchEvent(new CustomEvent("fhc-form-error",{detail:i})):i.forEach(r.alertError))}if(400==e?.response?.status){let t=C.getError(e.response.data);r.alertError("object"==typeof t?Object.values(t):t)}else r.handleSystemError(e)}};e.config.globalProperties.$fhcAlert=r,e.provide("$fhcAlert",e.config.globalProperties.$fhcAlert)}},R={install:(e,t)=>{if(e.config.globalProperties.$api)return;function r(e,t){Array.isArray(e)?e.forEach(t):Object.entries(e).forEach(([e,r])=>r.forEach(r=>t(r,e)))}e.config.globalProperties.$fhcAlert||e.use(D);let n={success:!0,fail:!0,combine:{form:["validation","general"],toast:["validation","general","not_found","site_failed"]},handler:{form(e,t){e.clearValidation(),t.forEach(t=>e.setFeedback(!1,t.messages||t.message))},async toast(t){const r=e.config.globalProperties.$p;if(!r)return Promise.reject("Phrasen plugin not loaded!");async function n(e){e=e.reduce((e,t)=>{switch(t.type){case"not_found":case"site_failed":t.message?e[t.message]=[t.url]:e._default=[t.url];break;case"general":e._default||(e._default=[]),e._default.push(t.message);break;case"validation":Object.entries(t.messages).forEach(([t,r])=>{e[t]||(e[t]=[]),Array.isArray(r)?e[t].push(...r):e[t].push(r)})}return e},{});let t=0;const n=await Promise.all(Object.entries(e).sort((e,t)=>["_default"].indexOf(t[0])-["_default"].indexOf(e[0])).map(async([e,n])=>{if("_default"==e){await r.loadCategory("dashboard");e='
'+r.t("dashboard/general")+"
"}else e="
"+e+"
";return t+=n.length,e+"
"+n.join("
")+"
"}));return{counter:t,msgs:n}}let i,s;Array.isArray(t)?({counter:i,msgs:s}=await n(t)):({counter:i,msgs:s}=await Object.entries(t).reduce(async(e,[t,r])=>{const i=await e,{counter:s,msgs:a}=await n(r);return i.counter+=s,i.msgs.push("
"+t+"
"+a.join("")+"
"),i},Promise.resolve({counter:0,msgs:[]}))),await r.loadCategory("ui");const a=r.t("ui/n_errors",{n:i});e.config.globalProperties.$fhcAlert.alertDefault("error",a,"
"+s.join("")+"
",!0,!0)},php(t){r(t,(t,r)=>{var n="";switch(n+="Message: "+t.message+"\n\n",n+="Filename: "+t.filename+"\n",n+="Line Number: "+t.line+"\n",t.backtrace&&t.backtrace.length&&(n+="\nBacktrace: ",t.backtrace.forEach(e=>{n+="\n\tFile: "+e.file+"\n",n+="\tLine: "+e.line+"\n",n+="\tFunction: "+e.function+"\n"})),t.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":r?r+=": PHP "+t.severity:r="PHP "+t.severity,e.config.globalProperties.$fhcAlert.alertDefault("warn",r,n,!0);break;case"Notice":case"User Notice":case"Runtime Notice":r?r+=": PHP "+t.severity:r="PHP "+t.severity,e.config.globalProperties.$fhcAlert.alertDefault("info",r,n,!0);break;default:n="Type: PHP "+t.severity+"\n\n"+n,r&&(n=r+"\n\n"+n),e.config.globalProperties.$fhcAlert.alertSystemError(n)}})},exception(t){r(t,(t,r)=>{var n="";r&&(n+=r+"\n\n"),n+="Type: "+t.class+"\n\n",n+="Message: "+t.message+"\n\n",n+="Filename: "+t.filename+"\n",n+="Line Number: "+t.line+"\n",t.backtrace&&t.backtrace.length&&(n+="\nBacktrace: ",t.backtrace.forEach(e=>{n+="\n\tFile: "+e.file+"\n",n+="\tLine: "+e.line+"\n",n+="\tFunction: "+e.function+"\n"})),e.config.globalProperties.$fhcAlert.alertSystemError(n)})},db(t){r(t,(t,r)=>{var n="";r&&(n+=r+"\n\n"),void 0!==t.heading&&(n+=t.heading+"\n\n"),void 0!==t.code&&(n+="Code: "+t.code+"\n\n"),void 0!==t.sql&&(n+="SQL: "+t.sql+"\n\n"),void 0!==t.message?n+="Message: "+t.message+"\n\n":void 0!==t.messages&&(n+="Messages: "+t.messages.join("\n\t")+"\n\n"),void 0!==t.filename&&(n+="Filename: "+t.filename+"\n"),void 0!==t.line&&(n+="Line Number: "+t.line+"\n"),e.config.globalProperties.$fhcAlert.alertSystemError(n)})},auth(t){r(t,(t,r)=>{r?r+=": "+t.message:r=t.message;var n="";n+="Controller name: "+t.controller+"\n",n+="Method name: "+t.method+"\n",n+="Required permissions: "+t.required_permissions,e.config.globalProperties.$fhcAlert.alertDefault("error",r,n,!0)})}}};function i(e,t,r,n){if("string"==typeof e&&void 0===n)[t,r,n]=[e,t,r],e=void 0;else if(e){if("object"!=typeof e)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===t&&void 0===r&&void 0===n&&(n=e,e=void 0)}if(e){if(!e.clearValidation||!e.setFeedback)throw new TypeError("'form' is not a Form Component");e={clearValidation:e.clearValidation,setFeedback:e.setFeedback},n?n.form=e:n={form:e}}return[t,r,n]}function s(e){if("string"==typeof e.data||e.data instanceof String)return s({data:e});const t=e.data;return delete e.data,t?(t.meta?t.meta.response=e:t.meta={response:e},t):{meta:{response:e},data:null}}function a(e){if(!1===e||"off"===e)return{...n,success:!1,fail:!1};if(!e||!0===e)return{...n};if("success"===e)return{...n,fail:!1};if("fail"===e)return{...n,success:!1};const{success:t,fail:r,handler:i,combine:s}=e;return e={...n},Object.entries({fail:r,success:t}).forEach(([t,r])=>{void 0!==r&&(e[t]=r)}),Object.entries({handler:i,combine:s}).forEach(([t,r])=>{void 0!==r&&(e[t]={...e[t],...r})}),e}function o(e){const t=a(e?.errorHandling);if(e?.form){const r=t.handler.form;t.handler={...t.handler,form:t=>r(e.form,t)}}else t.combine={...t.combine,form:[]};return t}function p(e){return e.response?404==e.response.status?[{type:"not_found",message:e.message,url:e.request.responseURL}]:null==e.response.data.errors?[]:e.response.data.errors:e.request?[{type:"site_failed",message:e.message,url:e.request.responseURL}]:[{type:"script",message:e.message}]}function u(e,t){const r={},n=[];if(null==t)return{};for(;t.length;)n.push(t.pop());for(var i of n){let n=i.type,a=null;for(var s in e.combine){let t=e.combine[s].includes(n),r=e.handler[s];if(t&&r&&(a=s,"form"==a))break}a&&(n=a);e.handler[n]?(r[n]||(r[n]=[]),Array.isArray(i)?r[n].push(...i):r[n].push(i)):t.push(i)}return r}void 0!==t?.errorHandling&&(n=a(t.errorHandling));const d=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});d.interceptors.request.use(e=>{if("post"!=e.method||!e.data)return e;if(e.data instanceof FormData)return e;if(!Object.values(e.data).every(e=>!(e instanceof FileList)&&(!Array.isArray(e)||e.every(e=>!(e instanceof File))))){const t=Object.entries(e.data).reduce((e,[t,r])=>{if(r instanceof FileList)for(const n of r)e.FormData.append(t+(r.length>1?"[]":""),n);else Array.isArray(r)?r.every(e=>!(e instanceof File))?e.jsondata[t]=r:r.forEach(n=>e.FormData.append(t+(r.length>1?"[]":""),n)):e.jsondata[t]=r;return e},{FormData:new FormData,jsondata:{}});t.FormData.append("_jsondata",JSON.stringify(t.jsondata)),e.data=t.FormData}return e}),d.interceptors.response.use(t=>("off"==t.config?.errorHandling||!1===t.config?.errorHandling||"fail"==t.config?.errorHandling||t.data.errors&&(t.data.errors=t.data.errors.filter(r=>(t.config[r.type+"ErrorHandler"]||e.config.globalProperties.$api._defaultErrorHandlers[r.type])(r,t.config))),s(t)),e=>{if("ERR_CANCELED"==e.code)return Promise.reject({handled:!0,...e});const t=o(e.config);if(!t.fail)return Promise.reject(e);const r=p(e),n=u(t,r);for(var i in n)t.handler[i](n[i]);return r.length?Promise.reject(e):Promise.reject({handled:!0,...e})}),e.config.globalProperties.$api={getUri:e=>d.getUri({url:e}),get:(e,t,r,n)=>([t,r,n]=i(e,t,r,n),r&&(n?n.params=r:n={params:r}),d.get(t,n)),post:(e,t,r,n)=>([t,r,n]=i(e,t,r,n),d.post(t,r,n)),call(t,r,n){if(Array.isArray(t)){const s=e.config.globalProperties.$api;return Promise.allSettled(t.map((e,t)=>(Array.isArray(e)||(e=["#"+t,e]),s.call(e[1],{errorHeader:e[0],errorHandling:!1})))).then(e=>{const[,,t]=i(n,void 0,void 0,r||{}),s=o(t);if(!s.success&&!s.fail)return e;const a={};for(var d of e){const[e,t]="fulfilled"===d.status?[s.success,d.value]:[s.fail,d.reason];if(!e)return;const r=u(s,p(t));for(var l in r)a[l]?a[l][t.config.errorHeader]=r[l]:a[l]={[t.config.errorHeader]:r[l]}}for(var f in a)s.handler[f](a[f]);return e})}let{method:s,url:a,params:d,config:l}=t;return void 0!==r&&(l=r),s||(s="get"),s.toLowerCase&&(s=s.toLowerCase()),"get"==s?this.get(n,a,d,l):"post"==s?this.post(n,a,d,l):void console.error("FhcApi: method not allowed:",s)}},e.provide("$api",e.config.globalProperties.$api)}},B={loadCategory:e=>({method:"get",url:"/api/frontend/v1/phrasen/loadModule/"+e}),setLanguage:(e,t)=>({method:"post",url:"/api/frontend/v1/phrasen/setLanguage",params:{categories:e,language:t}}),getLanguage:()=>({method:"get",url:"/api/frontend/v1/phrasen/getLanguage"}),getActiveDbLanguages:()=>({method:"get",url:"/api/frontend/v1/phrasen/getAllLanguages"})};const H=Vue.reactive({}),J={};let L=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language),j=Vue.computed(()=>L.value?FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(e=>e.sprache==L.value).LC_Time:null);const w={user_language:L,user_locale:j,setLanguage(e){const t=Object.keys(H);return this.config.globalProperties.$api.call(B.setLanguage(t,e)).then(t=>(t.data.forEach(e=>{H[e.category][e.phrase]=e.text}),L.value=e,t))},loadCategory(e){return Array.isArray(e)?Promise.all(e.map(this.config.globalProperties.$p.loadCategory)):(J[e]||(J[e]=this.config.globalProperties.$api.call(B.loadCategory(e)).then(t=>t?.data?function(e,t){return e.filter(e=>e.category==t).reduce((e,t)=>(e[t.phrase]||(e[t.phrase]=t.text),e),{})}(t.data,e):{}).then(t=>{H[e]=t})),J[e])},t_ref(e,t,r){return console.warn("deprecated"),Vue.computed(()=>this.t(e,t,r))},t(e,t,r){if(void 0===r&&(Array.isArray(e)&&2==e.length||e.split&&2==e.split("/").length)&&(r=t,[e,t]=e.split?e.split("/"):e),void 0===t)return console.error("invalid input",e,t,r),"";let n=Vue.computed(()=>H[e]?function(e,t,r){let n=H[e][t];return n?(r&&(n=n.replace(/\{([^}]*)\}/g,(e,t)=>void 0===r[t]?e:r[t])),n):"<< PHRASE "+t+">>"}(e,t,r):"");return H[e]||this.loadCategory(e),n.value}};var z={install(e,t){e.config.globalProperties.$fhcApi||e.use(E),e.config.globalProperties.$api||e.use(R),e.config.globalProperties.$p={t:w.t,loadCategory:t=>w.loadCategory.call(e,t),setLanguage:t=>w.setLanguage.call(e,t),user_language:L,user_locale:j,t_ref:w.t_ref},e.provide("$p",e.config.globalProperties.$p)}};const G=Vue.createApp({name:"DocumentsApp",data:()=>({inscriptiontable:null,inscriptiontableFilters:{},studienerfolgsbestaetigungtable:null,studienerfolgsbestaetigungtableFilters:{},abschlussdokumentetable:null}),computed:{inscriptiontableFilter(){const e=[];for(var t in this.inscriptiontableFilters)this.inscriptiontableFilters[t]&&e.push({field:t,type:"=",value:this.inscriptiontableFilters[t]});return e},inscriptiontableEmpty(){return this.inscriptiontableFilters.Stsem?this.$p.t("tools","studienbeitragFuerSSNochNichtBezahlt",{stsem:this.inscriptiontableFilters.Stsem}):this.inscriptiontableFilters.Stg?this.$p.t("tools","studienbeitragFuerStgNochNichtBezahlt",{stsem:this.inscriptiontableFilters.Stg}):this.$p.t("tools","studienbeitragNochNichtBezahlt")},studienerfolgsbestaetigungtableFilter(){const e=[];for(var t in this.studienerfolgsbestaetigungtableFilters)this.studienerfolgsbestaetigungtableFilters[t]&&e.push({field:t,type:"=",value:this.studienerfolgsbestaetigungtableFilters[t]});return e}},methods:{changeFilter(e,t,r){this[e+"Filters"][t]=r.target.value,this[e].clearFilter(),this[e+"Filter"].length&&this[e].setFilter(this[e+"Filter"])}},mounted(){this.inscriptiontable=new Tabulator(this.$refs.inscriptiontable,{layout:"fitDataStretch",placeholder:this.$p.t("tools","studienbeitragNochNichtBezahlt")}),this.studienerfolgsbestaetigungtable=new Tabulator(this.$refs.studienerfolgsbestaetigungtable,{layout:"fitDataStretch"}),this.abschlussdokumentetable=new Tabulator(this.$refs.abschlussdokumentetable,{layout:"fitDataStretch",placeholder:this.$p.t("tools","nochKeineAbschlussdokumenteVorhanden")});const e=Vue.h("div",{class:"position-absolute top-0 left-0 w-100 h-100 d-flex justify-content-center align-items-center fw-bold text-muted"},[this.inscriptiontableEmpty]);this.inscriptiontable.on("dataSorted",(t,r)=>{r.length?Vue.render(null,this.inscriptiontable.element.querySelector(".tabulator-tableholder")):(e.children=[this.inscriptiontableEmpty],Vue.render(e,this.inscriptiontable.element.querySelector(".tabulator-tableholder")))})}});!function(){const e=/Chrome/.test(navigator.userAgent),t=/Firefox/.test(navigator.userAgent);if(e){const e=function(){const e=document.createElement("div");e.style.position="absolute",e.style.top="-9999px",e.style.width="100px",e.style.height="100px",e.style.overflow="scroll",document.body.appendChild(e);const t=e.offsetWidth-e.clientWidth;return document.body.removeChild(e),t}()+"px";document.body.style.setProperty("--scrollbar-width",e)}else t&&document.body.style.setProperty("--scrollbar-width","0px")}(),G.use(z),G.mount("#content"); +getStatus:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getStatus",{})},getTopic:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getTopic",{})},acceptProfilRequest:function({profil_update_id:e,uid:t,status_message:r,topic:n,requested_change:i}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/acceptProfilRequest",{profil_update_id:e,uid:t,status_message:r,topic:n,requested_change:i})},denyProfilRequest:function({profil_update_id:e,uid:t,topic:r,status_message:n}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/denyProfilRequest",{profil_update_id:e,uid:t,topic:r,status_message:n})},insertFile:function(e,t=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/insertFile/${t}`,e)},getProfilRequestFiles:function(e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${e}`,{})},selectProfilRequest:function(e=null,t=null){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/selectProfilRequest",{...e?{uid:e}:{},...t?{id:t}:{}})},insertProfilRequest:function(e,t,r=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/insertProfilRequest",{topic:e,payload:t,...r?{fileID:r}:{}})},updateProfilRequest:function(e,t,r,n=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/updateProfilRequest",{topic:e,payload:t,ID:r,...n?{fileID:n}:{}})},deleteProfilRequest:function(e){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/deleteProfilRequest",{requestID:e})}},l={getRoomInfo(e,t,r){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getRoomplan",{ort_kurzbz:e,start_date:t,end_date:r})},getStunden(){return this.$fhcApi.get("/api/frontend/v1/LvPlan/Stunden",{})},getOrtReservierungen(e,t,r){return this.$fhcApi.post(`/api/frontend/v1/LvPlan/getReservierungen/${e}`,{start_date:t,end_date:r})},getLvPlanReservierungen(e,t){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getReservierungen",{start_date:e,end_date:t})},getLehreinheitStudiensemester(e){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${e}`,{})},studiensemesterDateInterval(e){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${e}`,{})},LvPlanEvents(e,t,r){return this.$fhcApi.get("/api/frontend/v1/LvPlan/LvPlanEvents",{start_date:e,end_date:t,lv_id:r})}},f={verband:{get(){return this.$fhcApi.get("api/frontend/v1/stv/verband")},favorites:{get(){return this.$fhcApi.get("api/frontend/v1/stv/favorites")},set(e){return this.$fhcApi.post("api/frontend/v1/stv/favorites/set",{favorites:e})}}},students:{uid(e,t){let r="api/frontend/v1/stv/students/"+encodeURIComponent(t)+"/uid/"+encodeURIComponent(e);return this.$fhcApi.getUri(r)},prestudent(e,t){let r="api/frontend/v1/stv/students/"+encodeURIComponent(t)+"/prestudent/"+encodeURIComponent(e);return this.$fhcApi.getUri(r)},person(e,t){let r="api/frontend/v1/stv/students/"+encodeURIComponent(t)+"/person/"+encodeURIComponent(e);return this.$fhcApi.getUri(r)},verband(e){return this.$fhcApi.getUri("api/frontend/v1/stv/students/"+e)}},filter:{getStg(){return this.$fhcApi.get("api/frontend/v1/stv/filter/getStg")},setStg(e){return this.$fhcApi.post("api/frontend/v1/stv/filter/setStg",{studiengang_kz:e})}},konto:{tabulatorConfig(e,t){return e.ajaxURL="api/frontend/v1/stv/konto/get",e.ajaxParams=()=>({person_id:t.modelValue.person_id||t.modelValue.map(e=>e.person_id),only_open:t.filter,studiengang_kz:t.studiengang_kz_intern?t.stg_kz:""}),e.ajaxRequestFunc=(e,t,r)=>this.$fhcApi.post(e,r,t),e.ajaxResponse=(e,t,r)=>r.data,e},checkDoubles(e,t){return this.$fhcApi.post(e,"api/frontend/v1/stv/konto/checkDoubles",t,{confirmErrorHandler:e=>!0})},insert(e,t){return this.$fhcApi.post(e,"api/frontend/v1/stv/konto/insert",t)},counter(e){return this.$fhcApi.post("api/frontend/v1/stv/konto/counter",e)},edit(e,t){return this.$fhcApi.post(e,"api/frontend/v1/stv/konto/update",t)},delete(e){return this.$fhcApi.post("api/frontend/v1/stv/konto/delete",{buchungsnr:e})},getBuchungstypen(){return this.$fhcApi.get("api/frontend/v1/stv/konto/getBuchungstypen")}},group:{getGruppen(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/Gruppen/getGruppen/"+r.id)},deleteGroup(e){return this.$fhcApi.post("api/frontend/v1/stv/Gruppen/deleteGruppe/",e)}},kontakt:{getAdressen(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressen/"+r.id)},addNewAddress(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/stv/kontakt/addNewAddress/"+t,r)},loadAddress(e){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadAddress/",{address_id:e})},updateAddress(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/stv/kontakt/updateAddress/"+t,r)},deleteAddress(e){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteAddress/",{address_id:e})},getPlaces(e){return this.$fhcApi.get("api/frontend/v1/stv/address/getPlaces/"+e)},getFirmen(e){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getFirmen/"+e)},getNations(){return this.$fhcApi.get("api/frontend/v1/stv/address/getNations/")},getAdressentypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressentypen/")},getBankverbindung(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getBankverbindung/"+r.id)},addNewBankverbindung(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/stv/kontakt/addNewBankverbindung/"+t,r)},loadBankverbindung(e){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadBankverbindung/",{bankverbindung_id:e})},updateBankverbindung(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/stv/kontakt/updateBankverbindung/"+t,r)},deleteBankverbindung(e){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteBankverbindung/",{bankverbindung_id:e})},getKontakte(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakte/"+r.id)},addNewContact(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/stv/kontakt/addNewContact/"+t,r)},loadContact(e){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadContact/",{kontakt_id:e})},updateContact(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/stv/kontakt/updateContact/"+t,r)},deleteContact(e){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteContact/",{kontakt_id:e})},getStandorteByFirma(e){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getStandorteByFirma/"+e)},getKontakttypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakttypen/")}},prestudent:{get(e,t){return this.$fhcApi.post("api/frontend/v1/stv/prestudent/get/"+encodeURIComponent(e)+"/"+encodeURIComponent(t))},updatePrestudent(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/stv/prestudent/updatePrestudent/"+t,r)},getBezeichnungZGV(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungZGV/")},getBezeichnungMZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungMZgv/")},getBezeichnungDZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungDZgv/")},getStgs(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStgs/")},getAusbildung(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAusbildung/")},getAufmerksamdurch(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAufmerksamdurch/")},getBerufstaetigkeit(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBerufstaetigkeit/")},getTypenStg(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getTypenStg/")},getBisstandort(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBisstandort/")},getHistoryPrestudent(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/status/getHistoryPrestudent/"+r.id)},getMaxSem(e){return this.$fhcApi.post("api/frontend/v1/stv/status/getMaxSemester/",{studiengang_kzs:e})},advanceStatus({prestudent_id:e,status_kurzbz:t,studiensemester_kurzbz:r,ausbildungssemester:n}){return this.$fhcApi.post("api/frontend/v1/stv/status/advanceStatus/"+e+"/"+t+"/"+r+"/"+n)},confirmStatus({prestudent_id:e,status_kurzbz:t,studiensemester_kurzbz:r,ausbildungssemester:n}){return this.$fhcApi.post("api/frontend/v1/stv/status/confirmStatus/"+e+"/"+t+"/"+r+"/"+n)},isLastStatus(e){return this.$fhcApi.get("api/frontend/v1/stv/status/isLastStatus/"+e)},deleteStatus({prestudent_id:e,status_kurzbz:t,studiensemester_kurzbz:r,ausbildungssemester:n}){return this.$fhcApi.post("api/frontend/v1/stv/status/deleteStatus/"+e+"/"+t+"/"+r+"/"+n)},getLastBismeldestichtag(){return this.$fhcApi.get("api/frontend/v1/stv/status/getLastBismeldestichtag/")},getHistoryPrestudents(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getHistoryPrestudents/"+r.id)}},status:{insertStatus(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/stv/status/insertStatus/"+t,r)},loadStatus({prestudent_id:e,status_kurzbz:t,studiensemester_kurzbz:r,ausbildungssemester:n}){return this.$fhcApi.post("api/frontend/v1/stv/status/loadStatus/"+e+"/"+t+"/"+r+"/"+n)},updateStatus(e,{prestudent_id:t,status_kurzbz:r,studiensemester_kurzbz:n,ausbildungssemester:i},s){return this.$fhcApi.post(e,"api/frontend/v1/stv/status/updateStatus/"+t+"/"+r+"/"+n+"/"+i,s)},getStudienplaene(e){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudienplaene/"+e)},getStudiengang(e){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudiengang/"+e)},getStatusgruende(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusgruende/")},getStati(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStati/")},addStudent(e,t){return this.$fhcApi.post("api/frontend/v1/stv/status/addStudent/"+e,t,{errorHeader:e})},changeStatus(e,t){return this.$fhcApi.post("api/frontend/v1/stv/status/changeStatus/"+e,t,{errorHeader:e})},getStatusarray(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusarray/")}},details:{get(e,t){let r="api/frontend/v1/stv/student/get/"+encodeURIComponent(e)+"/"+encodeURIComponent(t);return this.$fhcApi.post(r)},save(e,t,r,n){let i="api/frontend/v1/stv/student/save/"+encodeURIComponent(t)+"/"+encodeURIComponent(r);return this.$fhcApi.post(e,i,n)}},exam:{getPruefungen(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getPruefungen/"+r.id)},loadPruefung(e){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/loadPruefung/"+e)},getTypenPruefungen(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getTypenPruefungen")},getAllLehreinheiten(e){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/getAllLehreinheiten/",e)},getLvsByStudent(e){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsByStudent/"+e)},getLvsandLesByStudent(e,t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsandLesByStudent/"+e+"/"+t)},getLvsAndMas(e){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsAndMas/"+e)},getMitarbeiterLv(e){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getMitarbeiterLv/"+e)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getNoten")},checkZeugnisnoteLv(e){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/",e)},addPruefung(e,t){return this.$fhcApi.post(e,"api/frontend/v1/stv/pruefung/insertPruefung/",t)},updatePruefung(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/stv/pruefung/updatePruefung/"+t,r)},deletePruefung(e){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/deletePruefung/"+e)}},abschlusspruefung:{getAbschlusspruefung(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/"+r.id)},addNewAbschlusspruefung(e,t){return this.$fhcApi.post(e,"api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/",t)},loadAbschlusspruefung(e){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/",{id:e})},updateAbschlusspruefung(e,t){return this.$fhcApi.post(e,"api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/",t)},deleteAbschlusspruefung(e){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/",{id:e})},getTypenAbschlusspruefung(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/")},getTypenAntritte(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/")},getBeurteilungen(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/")},getAkadGrade(e){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getAkadGrade/",{studiengang_kz:e})},getTypStudiengang(e){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/",{studiengang_kz:e})},getMitarbeiter(e){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/"+e)},getPruefer(e){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getPruefer/"+e)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getNoten/")},checkForExistingExams(e){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/",{uids:e})}},grades:{list(){return this.$fhcApi.get("api/frontend/v1/stv/grades/list")},getCertificate(e,t){let r="api/frontend/v1/stv/grades/getCertificate/"+encodeURIComponent(e);return t&&(r=r+"/"+encodeURIComponent(t)),this.$fhcApi.get(r)},getTeacherProposal(e,t){let r="api/frontend/v1/stv/grades/getTeacherProposal/"+encodeURIComponent(e);return t&&(r=r+"/"+encodeURIComponent(t)),this.$fhcApi.get(r)},getRepeaterGrades(e,t){let r="api/frontend/v1/stv/grades/getRepeaterGrades/"+encodeURIComponent(e);return t&&(r=r+"/"+encodeURIComponent(t)),this.$fhcApi.get(r)},updateCertificate({lehrveranstaltung_id:e,student_uid:t,studiensemester_kurzbz:r,note:n,lehrveranstaltung_bezeichnung:i}){return this.$fhcApi.post("api/frontend/v1/stv/grades/updateCertificate",{lehrveranstaltung_id:e,student_uid:t,studiensemester_kurzbz:r,note:n},{errorHeader:i})},deleteCertificate({lehrveranstaltung_id:e,student_uid:t,studiensemester_kurzbz:r,lehrveranstaltung_bezeichnung:n}){return this.$fhcApi.post("api/frontend/v1/stv/grades/deleteCertificate",{lehrveranstaltung_id:e,student_uid:t,studiensemester_kurzbz:r},{errorHeader:n})},copyTeacherProposalToCertificate({lehrveranstaltung_id:e,student_uid:t,studiensemester_kurzbz:r,lehrveranstaltung_bezeichnung:n}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyTeacherProposalToCertificate",{lehrveranstaltung_id:e,student_uid:t,studiensemester_kurzbz:r},{errorHeader:n})},copyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id:e,lv_bezeichnung:t}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate",{studierendenantrag_lehrveranstaltung_id:e},{errorHeader:t})},getGradeFromPoints(e,t,r,n){const i=n?{errorHandling:!1}:{};return this.$fhcApi.post("api/frontend/v1/stv/grades/getGradeFromPoints",{points:e,lehrveranstaltung_id:t,studiensemester_kurzbz:r},i)}},mobility:{getMobilitaeten(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getMobilitaeten/"+r.id)},getProgramsMobility(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getProgramsMobility/")},addNewMobility(e,t){return this.$fhcApi.post(e,"api/frontend/v1/stv/mobility/insertMobility/",t)},loadMobility(e){return this.$fhcApi.get("api/frontend/v1/stv/mobility/loadMobility/"+e)},updateMobility(e,t){return this.$fhcApi.post(e,"api/frontend/v1/stv/mobility/updateMobility/",t)},deleteMobility(e){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobility/"+e)},getLVList(e){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLVList/"+e)},getAllLehreinheiten(e){return this.$fhcApi.post("api/frontend/v1/stv/mobility/getAllLehreinheiten/",e)},getLvsandLesByStudent(e){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLvsandLesByStudent/"+e)},getPurposes(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getPurposes/"+r.id)},getSupports(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getSupports/"+r.id)},getListPurposes(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListPurposes/")},getListSupports(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListSupports/")},deleteMobilityPurpose(e){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilityPurpose/"+e.bisio_id,e)},addMobilityPurpose(e){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilityPurpose/"+e.bisio_id,e)},deleteMobilitySupport(e){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilitySupport/"+e.bisio_id,e)},addMobilitySupport(e){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilitySupport/"+e.bisio_id,e)}},archiv:{tabulatorConfig(e,t){return e.ajaxURL="api/frontend/v1/stv/archiv/get",e.ajaxParams=()=>({person_id:t.modelValue.person_id||t.modelValue.map(e=>e.person_id)}),e.ajaxRequestFunc=(e,t,r)=>this.$fhcApi.post(e,r,t),e.ajaxResponse=(e,t,r)=>r.data,e},getArchivVorlagen(){return this.$fhcApi.post("api/frontend/v1/stv/archiv/getArchivVorlagen")},archive(e){return this.$fhcApi.post("api/frontend/v1/documents/archive",e)},archiveSigned(e){return this.$fhcApi.post("api/frontend/v1/documents/archiveSigned",e)},update(e){return this.$fhcApi.post("api/frontend/v1/stv/archiv/update",e)},delete({akte_id:e,studiengang_kz:t}){return this.$fhcApi.post("api/frontend/v1/stv/archiv/delete",{akte_id:e,studiengang_kz:t})}},documents:{getDocumentsUnaccepted(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/"+r.id+"/"+r.studiengang_kz)},getDocumentsAccepted(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsAccepted/"+r.id+"/"+r.studiengang_kz)},deleteZuordnung(e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteZuordnung/"+e.prestudent_id+"/"+e.dokument_kurzbz)},createZuordnung(e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/createZuordnung/"+e.prestudent_id+"/"+e.dokument_kurzbz)},loadAkte(e){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/loadAkte/"+e)},getDoktypen(){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDoktypen/")},updateFile(e,t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/updateAkte/"+e,t)},deleteFile(e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteAkte/"+e)},uploadFile(e,t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/uploadDokument/"+e,t)}},exemptions:{getAnrechnungen(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getAnrechnungen/"+r.id)},getLehrveranstaltungen(e){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/"+e)},getBegruendungen(){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getBegruendungen/")},getLvsKompatibel(e){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLvsKompatibel/"+e)},getLektoren(e){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLektoren/"+e)},addNewAnrechnung(e,t){return this.$fhcApi.post(e,"api/frontend/v1/stv/anrechnungen/insertAnrechnung/",t)},loadAnrechnung(e){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/loadAnrechnung/"+e)},editAnrechnung(e,t){return this.$fhcApi.post(e,"api/frontend/v1/stv/anrechnungen/updateAnrechnung/",t)},deleteAnrechnung(e){return this.$fhcApi.post("api/frontend/v1/stv/anrechnungen/deleteAnrechnung/"+e)}},jointstudies:{getStudies(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudien/"+r.id)},getTypenMobility(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/")},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/")},getStudyprograms(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/")},getListPartner(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/")},getStatiPrestudent(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/")},loadStudy(e){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/loadStudie/"+e)},insertStudy(e,t){return this.$fhcApi.post(e,"api/frontend/v1/stv/GemeinsameStudien/insertStudie/",t)},updateStudy(e,t){return this.$fhcApi.post(e,"api/frontend/v1/stv/GemeinsameStudien/updateStudie/",t)},deleteStudy(e){return this.$fhcApi.post("api/frontend/v1/stv/GemeinsameStudien/deleteStudie/"+e)}},courselist:{getCourselist(e,t,r){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStundenplan/"+r.student_uid+"/"+r.start_date+"/"+r.end_date+"/"+r.group_consecutiveHours+"/"+r.dbStundenplanTable)},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStudiensemester/")}},configStudent(){return this.$fhcApi.get("api/frontend/v1/stv/config/student")},configStudents(){return this.$fhcApi.get("api/frontend/v1/stv/config/students")}},g={person:{getNotizen(e,t,r){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getNotizen/"+r.id+"/"+r.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getUid/")},addNewNotiz(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/notiz/notizPerson/addNewNotiz/"+t,r)},loadNotiz(e){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadNotiz/",{notiz_id:e})},loadDokumente(e){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadDokumente/",{notiz_id:e})},deleteNotiz(e,t,r){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/deleteNotiz/",{notiz_id:e,type_id:t,id:r})},updateNotiz(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/notiz/notizPerson/updateNotiz/"+t,r)},getMitarbeiter(e){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getMitarbeiter/"+e)},isBerechtigt(e,t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/isBerechtigt/")}}},c={person:{getAllBetriebsmittel(e,t,r){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/"+r.type+"/"+r.id)},addNewBetriebsmittel(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/"+t,r)},loadBetriebsmittel(e){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/"+e)},updateBetriebsmittel(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/"+t,r)},deleteBetriebsmittel(e){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/"+e)},getTypenBetriebsmittel(){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/")},loadInventarliste(e){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/"+e)}}},h={updatePersonUnrulyStatus(e,t){try{const r={person_id:e,unruly:t},n="/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus";return this.$fhcApi.post(n,r,null)}catch(e){throw e}},filterPerson(e,t=""){try{const r=t+"/api/frontend/v1/checkperson/CheckPerson/filterPerson";return axios.post(r,e)}catch(e){throw e}}},v={getContentID(e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/ContentID",{ort_kurzbz:e})},getRooms(e,t,r,n,i=0){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getRooms",{datum:e,von:t,bis:r,typ:n,personenanzahl:i})},getRoomTypes(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getTypes")}},A={content(e,t=null,r=null,n=null){return this.$fhcApi.get("/api/frontend/v1/Cms/content",{content_id:e,...t?{version:t}:{},...r?{sprache:r}:{},...n?{sichtbar:n}:{}})},getNews(e=1,t=10,r){return this.$fhcApi.get("/api/frontend/v1/Cms/getNews",{page:e,page_size:t,sprache:r})},news(e){return this.$fhcApi.get("/api/frontend/v1/Cms/news",{limit:e})},getNewsRowCount:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getNewsRowCount",{})},getNewsExtra:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getStudiengangInfoForNews",{})}},m={getStudentenMail(e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Lehre/lvStudentenMail",{lehreinheit_id:e})},getLvInfo(e,t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/LV/${e}/${t}`,{})},getStudentPruefungen(e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/Pruefungen/${e}`,{})},getStudentProjektarbeiten(e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/getStudentProjektarbeiten/${e}`,{})},getStudentProjektabgaben(e){return this.$fhcApi.get("/api/frontend/v1/Lehre/getStudentProjektabgaben",{projektarbeit_id:e.projektarbeit_id,student_uid:e.student_uid})},postStudentProjektarbeitEndupload(e){return this.$fhcApi.post("/api/frontend/v1/Lehre/postStudentProjektarbeitEndupload",e,{Headers:{"Content-Type":"multipart/form-data"}})},postStudentProjektarbeitZwischenabgabe(e){return this.$fhcApi.post("/api/frontend/v1/Lehre/postStudentProjektarbeitZwischenabgabe",e,{Headers:{"Content-Type":"multipart/form-data"}})},getStudentProjektarbeitAbgabeFile(e,t){const r=`/Cis/Abgabetool/getStudentProjektarbeitAbgabeFile?paabgabe_id=${e}&student_uid=${t}`;window.location=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+r},getMitarbeiterProjektarbeiten(e,t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/getMitarbeiterProjektarbeiten?showall=${t}`,{})},postProjektarbeitAbgabe(e){const t={paabgabe_id:e.paabgabe_id,paabgabetyp_kurzbz:e.bezeichnung.paabgabetyp_kurzbz,datum:e.datum,fixtermin:e.fixtermin,insertvon:e.insertvon,kurzbz:e.kurzbz,projektarbeit_id:e.projektarbeit_id};return this.$fhcApi.post("/api/frontend/v1/Lehre/postProjektarbeitAbgabe",t,null)},deleteProjektarbeitAbgabe(e){const t={paabgabe_id:e};return this.$fhcApi.post("/api/frontend/v1/Lehre/deleteProjektarbeitAbgabe",t,null)},postSerientermin(e,t,r,n,i){const s={datum:e,paabgabetyp_kurzbz:t,bezeichnung:r,kurzbz:n,projektarbeit_ids:i};return this.$fhcApi.post("/api/frontend/v1/Lehre/postSerientermin",s,null)},fetchDeadlines(e){const t={person_id:e};return this.$fhcApi.post("/api/frontend/v1/Lehre/fetchDeadlines",t,null)}},_={getLvMenu(e,t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/LvMenu/getLvMenu/${e}/${t}`,{})}},b={person:{getMessages(e,t,r){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessages/"+r.id+"/"+r.type+"/"+r.size+"/"+r.page)},getVorlagen(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getVorlagen/")},getMsgVarsLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/")},getMessageVarsPerson(e){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessageVarsPerson/"+e.id+"/"+e.type_id)},getMsgVarsPrestudent(e){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsPrestudent/"+e.id+"/"+e.type_id)},getPersonId(e){return this.$fhcApi.get("api/frontend/v1/messages/messages/getPersonId/"+e.id+"/"+e.type_id)},getUid(e){return this.$fhcApi.get("api/frontend/v1/messages/messages/getUid/"+e.id+"/"+e.type_id)},getDataVorlage(e){return this.$fhcApi.get("api/frontend/v1/messages/messages/getDataVorlage/"+e)},getNameOfDefaultRecipient(e){return this.$fhcApi.get("api/frontend/v1/messages/messages/getNameOfDefaultRecipient/"+e.id+"/"+e.type_id)},getPreviewText(e,t){return this.$fhcApi.post("api/frontend/v1/messages/messages/getPreviewText/"+e.id+"/"+e.type_id,t)},getReplyData(e){return this.$fhcApi.get("api/frontend/v1/messages/messages/getReplyData/"+e)},sendMessageFromModalContext(e,t,r){return this.$fhcApi.post(e,"api/frontend/v1/messages/messages/sendMessage/"+t,r)},sendMessage(e,t){return this.$fhcApi.post("api/frontend/v1/messages/messages/sendMessage/"+e,t)},deleteMessage(e){return this.$fhcApi.post("api/frontend/v1/messages/messages/deleteMessage/"+e)}}},$={getVorlagen(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagen/")},getVorlagenByLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/")}},y={getStudiensemester:function(){return this.$fhcApi.get("/components/Cis/Mylv/Studiensemester",{})},getAllStudienSemester:function(e=void 0,t=void 0,r=void 0,n=void 0){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienAllSemester",{studiensemester:e,studiengang:t,semester:r,studienplan:n})},getStudiengaengeForStudienSemester:function(e){return this.$fhcApi.get(`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${e}`,{})},getStudienplaeneBySemester:function(e,t){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienplaeneBySemester",{studiengang:e,studiensemester:t})},getLvPlanForStudiensemester:function(e,t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${e}/${t}`,{})},getLvEvaluierungInfo:function(e,t){return this.$fhcApi.get(`/api/frontend/v1/Studium/getLvEvaluierungInfo/${e}/${t}`,{})}},S={search:i,phrasen:s,navigation:a,dashboard:{async getViewData(){return this.$fhcApi.get("/api/frontend/v1/Cis4FhcApi/getViewData",null,null)}},filter:o,studstatus:p,profil:u,profilUpdate:d,lvPlan:l,bookmark:{getBookmarks:function(){return this.$fhcApi.get("/api/frontend/v1/Bookmark/getBookmarks",{})},delete:function(e){return this.$fhcApi.get(`/api/frontend/v1/Bookmark/delete/${e}`,{})},update:function({bookmark_id:e,url:t,title:r,tag:n=null}){return this.$fhcApi.post(`/api/frontend/v1/Bookmark/update/${e}`,{url:t,title:r})},insert:function({url:e,title:t,tag:r}){return this.$fhcApi.post("/api/frontend/v1/Bookmark/insert",{url:e,title:t,tag:r})}},stv:f,notiz:g,betriebsmittel:c,checkperson:h,ampeln:{open:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/open",{})},all:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/all",{})},confirm:function(e){return this.$fhcApi.get(`/api/frontend/v1/Ampeln/confirm/${e}`,{})}},ort:v,cms:A,lehre:m,addons:_,messages:b,vorlagen:$,addons:_,studiengang:{studiengangInformation:function(){return this.$fhcApi.get("/api/frontend/v1/Studgang/getStudiengangInfo",{})},getStudiengangByKz:function(e){return this.$fhcApi.get("/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz",{studiengang_kz:e})}},menu:{getMenu:function(){return this.$fhcApi.get("/api/frontend/v1/CisMenu/getMenu",{})}},authinfo:{getAuthUID(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthUID",{})},getAuthInfo(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthInfo",{})}},studium:y,language:{getAll(){return this.$fhcApi.get("/api/frontend/v1/language/get")}}},E={install:(e,t)=>{if(e.config.globalProperties.$fhcApi)return void(t?.factory&&(console.warn("$fhcApi is DEPRECATED!"),e.config.globalProperties.$fhcApi.factory.addEndpoints(t.factory)));function r(e,t,r,n){if("string"==typeof e&&void 0===n)[t,r,n]=[e,t,r],e=void 0;else if(e){if("object"!=typeof e)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===t&&void 0===r&&void 0===n&&(n=e,e=void 0)}if(e){if(!e.clearValidation||!e.setFeedback)throw new TypeError("'form' is not a Form Component");e={clearValidation:e.clearValidation,setFeedback:e.setFeedback},n?n.form=e:n={form:e}}return[t,r,n]}function n(e){const t=e.data;return delete e.data,t.meta?t.meta.response=e:t.meta={response:e},t}FHC_JS_DATA_STORAGE_OBJECT.app_root,FHC_JS_DATA_STORAGE_OBJECT.ci_router;const i=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});i.interceptors.request.use(e=>{if("post"!=e.method||!e.data)return e;if(e.data instanceof FormData)return e;if(!Object.values(e.data).every(e=>!(e instanceof FileList)&&(!Array.isArray(e)||e.every(e=>!(e instanceof File))))){const t=Object.entries(e.data).reduce((e,[t,r])=>{if(r instanceof FileList)for(const n of r)e.FormData.append(t+(r.length>1?"[]":""),n);else Array.isArray(r)?r.every(e=>!(e instanceof File))?e.jsondata[t]=r:r.forEach(n=>e.FormData.append(t+(r.length>1?"[]":""),n)):e.jsondata[t]=r;return e},{FormData:new FormData,jsondata:{}});t.FormData.append("_jsondata",JSON.stringify(t.jsondata)),e.data=t.FormData}return e}),i.interceptors.response.use(t=>("off"==t.config?.errorHandling||!1===t.config?.errorHandling||"fail"==t.config?.errorHandling||t.data.errors&&(t.data.errors=t.data.errors.filter(r=>(t.config[r.type+"ErrorHandler"]||e.config.globalProperties.$fhcApi._defaultErrorHandlers[r.type])(r,t.config))),n(t)),t=>"ERR_CANCELED"==t.code?Promise.reject({handled:!0,...t}):"off"==t.config?.errorHandling||!1===t.config?.errorHandling||"success"==t.config?.errorHandling?Promise.reject(t):t.response?404==t.response.status?(e.config.globalProperties.$fhcAlert.alertDefault("error",t.message,t.request.responseURL,!0),Promise.reject({handled:!0,...t})):(t.response.data.errors=t.response.data.errors.filter(r=>(t.config[r.type+"ErrorHandler"]||e.config.globalProperties.$fhcApi._defaultErrorHandlers[r.type])(r,t.config)),t.response.data.errors.length?Promise.reject(t):Promise.reject({handled:!0,...t})):t.request?(e.config.globalProperties.$fhcAlert.alertDefault("error",t.message,t.request.responseURL),Promise.reject({handled:!0,...t})):(e.config.globalProperties.$fhcAlert.alertError(t.message),Promise.reject({handled:!0,...t}))),e.config.globalProperties.$fhcApi={getUri:e=>(console.warn("$fhcApi.getUri is DEPRECATED! Use $api.getUri instead."),i.getUri({url:e})),get:(e,t,n,s)=>(console.warn("$fhcApi.get is DEPRECATED! Use $api.get instead."),[t,n,s]=r(e,t,n,s),n&&(s?s.params=n:s={params:n}),i.get(t,s)),post:(e,t,n,s)=>(console.warn("$fhcApi.post is DEPRECATED! Use $api.post instead."),[t,n,s]=r(e,t,n,s),i.post(t,n,s)),_defaultErrorHandlers:{validation(t,r){const n=e.config.globalProperties.$fhcAlert;return r?.form?(r.form.clearValidation(),r.form.setFeedback(!1,t.messages),!1):Array.isArray(t.messages)?(t.messages.forEach(n.alertError),!1):"object"!=typeof t.messages||(r?.errorHeader?Object.values(t.messages).forEach(t=>n.alertDefault("error",Array.isArray(r.errorHeader)?e.config.globalProperties.$p.t.apply(null,r.errorHeader):r.errorHeader,t,!0)):Object.entries(t.messages).forEach(([e,t])=>n.alertDefault("error",e,t,!0)),!1)},general(t,r){const n=e.config.globalProperties.$fhcAlert;r?.form?r.form.setFeedback(!1,t.message):r?.errorHeader?n.alertDefault("error",Array.isArray(r.errorHeader)?e.config.globalProperties.$p.t.apply(null,r.errorHeader):r.errorHeader,t.message,!0):n.alertError(t.message)},php(t){const r=e.config.globalProperties.$fhcAlert;var n="";switch(n+="Message: "+t.message+"\n\n",n+="Filename: "+t.filename+"\n",n+="Line Number: "+t.line+"\n",t.backtrace&&t.backtrace.length&&(n+="\nBacktrace: ",t.backtrace.forEach(e=>{n+="\n\tFile: "+e.file+"\n",n+="\tLine: "+e.line+"\n",n+="\tFunction: "+e.function+"\n"})),t.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":r.alertDefault("warn","PHP "+t.severity,n,!0);break;case"Notice":case"User Notice":case"Runtime Notice":r.alertDefault("info","PHP "+t.severity,n,!0);break;default:n="Type: PHP "+t.severity+"\n\n"+n,r.alertSystemError(n)}},exception(t){const r=e.config.globalProperties.$fhcAlert;var n="";n+="Type: "+t.class+"\n\n",n+="Message: "+t.message+"\n\n",n+="Filename: "+t.filename+"\n",n+="Line Number: "+t.line+"\n",t.backtrace&&t.backtrace.length&&(n+="\nBacktrace: ",t.backtrace.forEach(e=>{n+="\n\tFile: "+e.file+"\n",n+="\tLine: "+e.line+"\n",n+="\tFunction: "+e.function+"\n"})),r.alertSystemError(n)},db(t){const r=e.config.globalProperties.$fhcAlert;var n="";void 0!==t.heading&&(n+=t.heading+"\n\n"),void 0!==t.code&&(n+="Code: "+t.code+"\n\n"),void 0!==t.sql&&(n+="SQL: "+t.sql+"\n\n"),void 0!==t.message?n+="Message: "+t.message+"\n\n":void 0!==t.messages&&(n+="Messages: "+t.messages.join("\n\t")+"\n\n"),void 0!==t.filename&&(n+="Filename: "+t.filename+"\n"),void 0!==t.line&&(n+="Line Number: "+t.line+"\n"),r.alertSystemError(n)},auth(t,r){const n=e.config.globalProperties.$fhcAlert;var i="";i+="Controller name: "+t.controller+"\n",i+="Method name: "+t.method+"\n",i+="Required permissions: "+t.required_permissions,r?.errorHeader?n.alertDefault("error",Array.isArray(r.errorHeader)?e.config.globalProperties.$p.t.apply(null,r.errorHeader):r.errorHeader,t.message,!0):n.alertDefault("error",t.message,i)}}};class s{constructor(t,r){void 0===r?(this.$fhcApi={getUri:t=>(console.warn("$fhcApi.factory is DEPRECATED!"),e.config.globalProperties.$fhcApi.getUri(t)),get:(t,r,n,i)=>(console.warn("$fhcApi.factory is DEPRECATED!"),e.config.globalProperties.$fhcApi.get(t,r,n,i)),post:(t,r,n,i)=>(console.warn("$fhcApi.factory is DEPRECATED!"),e.config.globalProperties.$fhcApi.post(t,r,n,i))},Object.defineProperty(this.$fhcApi,"factory",{get:()=>(console.warn("$fhcApi.factory is DEPRECATED!"),e.config.globalProperties.$fhcApi.factory)}),e.config.globalProperties.$fhcApi.factory=this):Object.defineProperty(this,"$fhcApi",{get(){return(r||this).$fhcApi}}),this.addEndpoints(t,!0)}addEndpoints(e,t){Object.keys(e).forEach(t=>{Object.defineProperty(this,t,{get(){return"function"==typeof e[t]?e[t].bind(this):new s(e[t],this.$fhcApi.factory)}})}),t||console.warn("$fhcApi.factory.addEndpoints() is DEPRECATED!")}}const a=new s(S);t?.factory&&(console.warn("$fhcApi is DEPRECATED!"),a.addEndpoints(t.factory)),e.config.globalProperties.$fhcApi.factory=a,e.provide("$fhcApi",e.config.globalProperties.$fhcApi)}};const P="error",T="retval",C={get:function(e,t,r=null){return C._axiosCall(e,t,"get",r)},post:function(e,t,r=null){return C._axiosCall(e,t,"post",r)},isSuccess:function(e){return!("object"!=typeof e||!e.hasOwnProperty(P)||!e.hasOwnProperty(T)||0!=e.error)},isError:function(e){return!C.isSuccess(e)},hasData:function(e){return!(!C.isSuccess(e)||!("object"==typeof e[T]&&Object.keys(e[T]).length>0||"array"==typeof e[T]&&e[T].length>0||"string"==typeof e[T]&&""!=e[T].trim()||"number"==typeof e[T]))},getData:function(e){return C.hasData(e)?e[T]:null},getError:function(e){return"object"==typeof e&&Object.keys(e).length>0&&e.hasOwnProperty(T)?e[T]:"Generic error"},getErrorCode:function(e){return"object"==typeof e&&e.hasOwnProperty(P)?e[P]:1},_generateRouterURI:function(e){var t=null;return"undefined"!=typeof FHC_JS_DATA_STORAGE_OBJECT&&(t=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"+e),t},_printDebug:function(e,t,r){},_axiosCall:function(e,t,r,n){let i={method:r,url:C._generateRouterURI(e),timeout:5e3};if("get"==r?i.params=t:i.data=t,"object"==typeof n)for(var s in n)i[s]=n[s];return axios(i)}},k=document.createElement("div"),F=Vue.createApp({name:"FhcAlertApp",components:{PvToast:t,PvConfirm:r},methods:{mailToUrl:e=>"mailto:"+FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto+"?subject=Meldung%20Systemfehler&body="+("\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method+"%0D%0A\n\t\t\t\tFehler Meldung: "+e.message.detail+"%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!"),openMessagecard(e){bootstrap.Collapse.getOrCreateInstance(e.target.getAttribute("href")).toggle()}},unmounted(){k.parentElement.removeChild(k)},computed:{showmaillink:function(){return""!==FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto}},template:'\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t'});F.use(e),F.use(n);const O=F.mount(k);document.body.appendChild(k);var D={install:(e,t)=>{e.config.globalProperties.$p||e.use(z);const r={alertSuccess(e){if(Array.isArray(e))return e.forEach(this.alertSuccess);O.$refs.toast.add({severity:"success",summary:"Info",detail:e,life:1e3})},alertInfo(e){if(Array.isArray(e))return e.forEach(this.alertInfo);O.$refs.toast.add({severity:"info",summary:"Info",detail:e,life:3e3})},alertWarning(e){if(Array.isArray(e))return e.forEach(this.alertWarning);O.$refs.toast.add({severity:"warn",summary:"Achtung",detail:e})},alertError(e){if(Array.isArray(e))return e.forEach(this.alertError);O.$refs.toast.add({severity:"error",summary:"Achtung",detail:e})},alertSystemError(t){if(Array.isArray(t))return t.forEach(this.alertSystemError);O.$refs.alert.add({severity:"error",summary:Vue.computed(()=>e.config.globalProperties.$p.t("alert/systemerror")),detail:t})},confirmDelete:()=>new Promise((t,r)=>{O.$confirm.require({group:"fhcAlertConfirm",header:Vue.computed(()=>e.config.globalProperties.$p.t("alert/attention")),message:Vue.computed(()=>e.config.globalProperties.$p.t("alert/confirm_delete")),acceptLabel:Vue.computed(()=>e.config.globalProperties.$p.t("ui/loeschen")),acceptClass:"p-button-danger",rejectLabel:Vue.computed(()=>e.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:"p-button-secondary",accept(){t(!0)},reject(){t(!1)}})}),confirm:t=>new Promise((r,n)=>{O.$confirm.require({group:t?.group??"fhcAlertConfirm",header:t?.header??Vue.computed(()=>e.config.globalProperties.$p.t("alert/attention")),message:t?.message??"",acceptLabel:t?.acceptLabel??"Ok",acceptClass:t?.acceptClass??"btn btn-primary",rejectLabel:t?.rejectLabel??Vue.computed(()=>e.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:t?.rejectClass??"btn btn-outline-secondary",accept(){r(!0)},reject(){r(!1)}})}),alertDefault(e,t,r,n=!1,i=!1){let s={severity:e,summary:t,detail:r,html:i};n||(s.life=3e3),O.$refs.toast.add(s)},alertMultiple(e,t="info",r="Info",n=!1,i=!1){return!!e.every(e=>"string"==typeof e)&&(e.forEach(e=>this.alertDefault(t,r,e,n,i)),!0)},handleSystemError(e){if(!e.hasOwnProperty("name")||e.name.toLowerCase()!=="AbortError".toLowerCase()){if("string"==typeof e)return r.alertSystemError(e);if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return e.every(r.alertSystemError);if(!e.hasOwnProperty("handled")||!e.handled){if("object"==typeof e&&null!==e){let t="";return e.hasOwnProperty("response")&&e.response?.data?.retval?t+="Error Message: "+(e.response.data.retval.message||e.response.data.retval)+"\r\n":e.hasOwnProperty("message")&&(t+="Error Message: "+e.message.toUpperCase()+"\r\n"),e.hasOwnProperty("config")&&e.config.hasOwnProperty("url")&&(t+="Error ConfigURL: "+e.config.url+"\r\n"),e.hasOwnProperty("stack")&&(t+="Error Stack: "+e.stack+"\r\n"),""==t&&(t="Error Message: "+JSON.stringify(e)+"\r\n"),t+="Error Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,r.alertSystemError(t)}r.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method)}}},handleSystemMessage(e){if("string"==typeof e)return r.alertWarning(e);if(Array.isArray(e)){if(e.every(e=>"string"==typeof e))return e.every(r.alertWarning);if(e.every(e=>"object"==typeof e)&&null!==msg)return e.every(e=>{e.hasOwnProperty("data")&&e.data.hasOwnProperty("retval")?r.alertWarning(JSON.stringify(e.data.retval)):r.alertSystemError(JSON.stringify(e))})}"object"!=typeof e||null===e?r.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method):e.hasOwnProperty("data")&&e.data.hasOwnProperty("retval")?r.alertWarning(JSON.stringify(e.data.retval)):r.alertSystemError(JSON.stringify(e))},resetFormValidation(e){const t=new Event("fhc-form-reset");e.querySelectorAll(["[data-fhc-form-validate],[data-fhc-form-error]"]).forEach(e=>e.dispatchEvent(t))},handleFormValidation(e,t){if(void 0===t){if(e&&e.nodeType===Node.ELEMENT_NODE)return t=>r.handleFormValidation(t,e)}else if(400==e?.response?.status){let n=C.getError(e.response.data);"object"!=typeof n&&(n=e.response.data),r.resetFormValidation(t);const i=Object.entries(n).filter(([e,r])=>{const n=t.querySelector('[data-fhc-form-validate="'+e+'"]');return!n||(n.dispatchEvent(new CustomEvent("fhc-form-invalidate",{detail:r})),!1)}).map(e=>e[1]),s=t.querySelector("[data-fhc-form-error]");return void(s&&i.length?s.dispatchEvent(new CustomEvent("fhc-form-error",{detail:i})):i.forEach(r.alertError))}if(400==e?.response?.status){let t=C.getError(e.response.data);r.alertError("object"==typeof t?Object.values(t):t)}else r.handleSystemError(e)}};e.config.globalProperties.$fhcAlert=r,e.provide("$fhcAlert",e.config.globalProperties.$fhcAlert)}},R={install:(e,t)=>{if(e.config.globalProperties.$api)return;function r(e,t){Array.isArray(e)?e.forEach(t):Object.entries(e).forEach(([e,r])=>r.forEach(r=>t(r,e)))}e.config.globalProperties.$fhcAlert||e.use(D);let n={success:!0,fail:!0,combine:{form:["validation","general"],toast:["validation","general","not_found","site_failed"]},handler:{form(e,t){e.clearValidation(),t.forEach(t=>e.setFeedback(!1,t.messages||t.message))},async toast(t){const r=e.config.globalProperties.$p;if(!r)return Promise.reject("Phrasen plugin not loaded!");async function n(e){e=e.reduce((e,t)=>{switch(t.type){case"not_found":case"site_failed":t.message?e[t.message]=[t.url]:e._default=[t.url];break;case"general":e._default||(e._default=[]),e._default.push(t.message);break;case"validation":Object.entries(t.messages).forEach(([t,r])=>{e[t]||(e[t]=[]),Array.isArray(r)?e[t].push(...r):e[t].push(r)})}return e},{});let t=0;const n=await Promise.all(Object.entries(e).sort((e,t)=>["_default"].indexOf(t[0])-["_default"].indexOf(e[0])).map(async([e,n])=>{if("_default"==e){await r.loadCategory("dashboard");e='
'+r.t("dashboard/general")+"
"}else e="
"+e+"
";return t+=n.length,e+"
"+n.join("
")+"
"}));return{counter:t,msgs:n}}let i,s;Array.isArray(t)?({counter:i,msgs:s}=await n(t)):({counter:i,msgs:s}=await Object.entries(t).reduce(async(e,[t,r])=>{const i=await e,{counter:s,msgs:a}=await n(r);return i.counter+=s,i.msgs.push("
"+t+"
"+a.join("")+"
"),i},Promise.resolve({counter:0,msgs:[]}))),await r.loadCategory("ui");const a=r.t("ui/n_errors",{n:i});e.config.globalProperties.$fhcAlert.alertDefault("error",a,"
"+s.join("")+"
",!0,!0)},php(t){r(t,(t,r)=>{var n="";switch(n+="Message: "+t.message+"\n\n",n+="Filename: "+t.filename+"\n",n+="Line Number: "+t.line+"\n",t.backtrace&&t.backtrace.length&&(n+="\nBacktrace: ",t.backtrace.forEach(e=>{n+="\n\tFile: "+e.file+"\n",n+="\tLine: "+e.line+"\n",n+="\tFunction: "+e.function+"\n"})),t.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":r?r+=": PHP "+t.severity:r="PHP "+t.severity,e.config.globalProperties.$fhcAlert.alertDefault("warn",r,n,!0);break;case"Notice":case"User Notice":case"Runtime Notice":r?r+=": PHP "+t.severity:r="PHP "+t.severity,e.config.globalProperties.$fhcAlert.alertDefault("info",r,n,!0);break;default:n="Type: PHP "+t.severity+"\n\n"+n,r&&(n=r+"\n\n"+n),e.config.globalProperties.$fhcAlert.alertSystemError(n)}})},exception(t){r(t,(t,r)=>{var n="";r&&(n+=r+"\n\n"),n+="Type: "+t.class+"\n\n",n+="Message: "+t.message+"\n\n",n+="Filename: "+t.filename+"\n",n+="Line Number: "+t.line+"\n",t.backtrace&&t.backtrace.length&&(n+="\nBacktrace: ",t.backtrace.forEach(e=>{n+="\n\tFile: "+e.file+"\n",n+="\tLine: "+e.line+"\n",n+="\tFunction: "+e.function+"\n"})),e.config.globalProperties.$fhcAlert.alertSystemError(n)})},db(t){r(t,(t,r)=>{var n="";r&&(n+=r+"\n\n"),void 0!==t.heading&&(n+=t.heading+"\n\n"),void 0!==t.code&&(n+="Code: "+t.code+"\n\n"),void 0!==t.sql&&(n+="SQL: "+t.sql+"\n\n"),void 0!==t.message?n+="Message: "+t.message+"\n\n":void 0!==t.messages&&(n+="Messages: "+t.messages.join("\n\t")+"\n\n"),void 0!==t.filename&&(n+="Filename: "+t.filename+"\n"),void 0!==t.line&&(n+="Line Number: "+t.line+"\n"),e.config.globalProperties.$fhcAlert.alertSystemError(n)})},auth(t){r(t,(t,r)=>{r?r+=": "+t.message:r=t.message;var n="";n+="Controller name: "+t.controller+"\n",n+="Method name: "+t.method+"\n",n+="Required permissions: "+t.required_permissions,e.config.globalProperties.$fhcAlert.alertDefault("error",r,n,!0)})}}};function i(e,t,r,n){if("string"==typeof e&&void 0===n)[t,r,n]=[e,t,r],e=void 0;else if(e){if("object"!=typeof e)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===t&&void 0===r&&void 0===n&&(n=e,e=void 0)}if(e){if(!e.clearValidation||!e.setFeedback)throw new TypeError("'form' is not a Form Component");e={clearValidation:e.clearValidation,setFeedback:e.setFeedback},n?n.form=e:n={form:e}}return[t,r,n]}function s(e){if("string"==typeof e.data||e.data instanceof String)return s({data:e});const t=e.data;return delete e.data,t?(t.meta?t.meta.response=e:t.meta={response:e},t):{meta:{response:e},data:null}}function a(e){if(!1===e||"off"===e)return{...n,success:!1,fail:!1};if(!e||!0===e)return{...n};if("success"===e)return{...n,fail:!1};if("fail"===e)return{...n,success:!1};const{success:t,fail:r,handler:i,combine:s}=e;return e={...n},Object.entries({fail:r,success:t}).forEach(([t,r])=>{void 0!==r&&(e[t]=r)}),Object.entries({handler:i,combine:s}).forEach(([t,r])=>{void 0!==r&&(e[t]={...e[t],...r})}),e}function o(e){const t=a(e?.errorHandling);if(e?.form){const r=t.handler.form;t.handler={...t.handler,form:t=>r(e.form,t)}}else t.combine={...t.combine,form:[]};return t}function p(e){return e.response?404==e.response.status?[{type:"not_found",message:e.message,url:e.request.responseURL}]:null==e.response.data.errors?[]:e.response.data.errors:e.request?[{type:"site_failed",message:e.message,url:e.request.responseURL}]:[{type:"script",message:e.message}]}function u(e,t){const r={},n=[];if(null==t)return{};for(;t.length;)n.push(t.pop());for(var i of n){let n=i.type,a=null;for(var s in e.combine){let t=e.combine[s].includes(n),r=e.handler[s];if(t&&r&&(a=s,"form"==a))break}a&&(n=a);e.handler[n]?(r[n]||(r[n]=[]),Array.isArray(i)?r[n].push(...i):r[n].push(i)):t.push(i)}return r}void 0!==t?.errorHandling&&(n=a(t.errorHandling));const d=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});d.interceptors.request.use(e=>{if("post"!=e.method||!e.data)return e;if(e.data instanceof FormData)return e;if(!Object.values(e.data).every(e=>!(e instanceof FileList)&&(!Array.isArray(e)||e.every(e=>!(e instanceof File))))){const t=Object.entries(e.data).reduce((e,[t,r])=>{if(r instanceof FileList)for(const n of r)e.FormData.append(t+(r.length>1?"[]":""),n);else Array.isArray(r)?r.every(e=>!(e instanceof File))?e.jsondata[t]=r:r.forEach(n=>e.FormData.append(t+(r.length>1?"[]":""),n)):e.jsondata[t]=r;return e},{FormData:new FormData,jsondata:{}});t.FormData.append("_jsondata",JSON.stringify(t.jsondata)),e.data=t.FormData}return e}),d.interceptors.response.use(t=>("off"==t.config?.errorHandling||!1===t.config?.errorHandling||"fail"==t.config?.errorHandling||t.data.errors&&(t.data.errors=t.data.errors.filter(r=>(t.config[r.type+"ErrorHandler"]||e.config.globalProperties.$api._defaultErrorHandlers[r.type])(r,t.config))),s(t)),e=>{if("ERR_CANCELED"==e.code)return Promise.reject({handled:!0,...e});const t=o(e.config);if(!t.fail)return Promise.reject(e);const r=p(e),n=u(t,r);for(var i in n)t.handler[i](n[i]);return r.length?Promise.reject(e):Promise.reject({handled:!0,...e})}),e.config.globalProperties.$api={getUri:e=>d.getUri({url:e}),get:(e,t,r,n)=>([t,r,n]=i(e,t,r,n),r&&(n?n.params=r:n={params:r}),d.get(t,n)),post:(e,t,r,n)=>([t,r,n]=i(e,t,r,n),d.post(t,r,n)),call(t,r,n){if(Array.isArray(t)){const s=e.config.globalProperties.$api;return Promise.allSettled(t.map((e,t)=>(Array.isArray(e)||(e=["#"+t,e]),s.call(e[1],{errorHeader:e[0],errorHandling:!1})))).then(e=>{const[,,t]=i(n,void 0,void 0,r||{}),s=o(t);if(!s.success&&!s.fail)return e;const a={};for(var d of e){const[e,t]="fulfilled"===d.status?[s.success,d.value]:[s.fail,d.reason];if(!e)return;const r=u(s,p(t));for(var l in r)a[l]?a[l][t.config.errorHeader]=r[l]:a[l]={[t.config.errorHeader]:r[l]}}for(var f in a)s.handler[f](a[f]);return e})}let{method:s,url:a,params:d,config:l}=t;return void 0!==r&&(l=r),s||(s="get"),s.toLowerCase&&(s=s.toLowerCase()),"get"==s?this.get(n,a,d,l):"post"==s?this.post(n,a,d,l):void console.error("FhcApi: method not allowed:",s)},getErrorHandler:e=>o(e)},e.provide("$api",e.config.globalProperties.$api)}},B={loadCategory:e=>({method:"get",url:"/api/frontend/v1/phrasen/loadModule/"+e}),setLanguage:(e,t)=>({method:"post",url:"/api/frontend/v1/phrasen/setLanguage",params:{categories:e,language:t}}),getLanguage:()=>({method:"get",url:"/api/frontend/v1/phrasen/getLanguage"}),getActiveDbLanguages:()=>({method:"get",url:"/api/frontend/v1/phrasen/getAllLanguages"})};const H=Vue.reactive({}),J={};let L=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language),j=Vue.computed(()=>L.value?FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(e=>e.sprache==L.value).LC_Time:null);const w={user_language:L,user_locale:j,setLanguage(e){const t=Object.keys(H);return this.config.globalProperties.$api.call(B.setLanguage(t,e)).then(t=>(t.data.forEach(e=>{H[e.category][e.phrase]=e.text}),L.value=e,t))},loadCategory(e){return Array.isArray(e)?Promise.all(e.map(this.config.globalProperties.$p.loadCategory)):(J[e]||(J[e]=this.config.globalProperties.$api.call(B.loadCategory(e)).then(t=>t?.data?function(e,t){return e.filter(e=>e.category==t).reduce((e,t)=>(e[t.phrase]||(e[t.phrase]=t.text),e),{})}(t.data,e):{}).then(t=>{H[e]=t})),J[e])},t_ref(e,t,r){return console.warn("deprecated"),Vue.computed(()=>this.t(e,t,r))},t(e,t,r){if(void 0===r&&(Array.isArray(e)&&2==e.length||e.split&&2==e.split("/").length)&&(r=t,[e,t]=e.split?e.split("/"):e),void 0===t)return console.error("invalid input",e,t,r),"";let n=Vue.computed(()=>H[e]?function(e,t,r){let n=H[e][t];return n?(r&&(n=n.replace(/\{([^}]*)\}/g,(e,t)=>void 0===r[t]?e:r[t])),n):"<< PHRASE "+t+">>"}(e,t,r):"");return H[e]||this.loadCategory(e),n.value}};var z={install(e,t){e.config.globalProperties.$fhcApi||e.use(E),e.config.globalProperties.$api||e.use(R),e.config.globalProperties.$p={t:w.t,loadCategory:t=>w.loadCategory.call(e,t),setLanguage:t=>w.setLanguage.call(e,t),user_language:L,user_locale:j,t_ref:w.t_ref},e.provide("$p",e.config.globalProperties.$p)}};const G=Vue.createApp({name:"DocumentsApp",data:()=>({inscriptiontable:null,inscriptiontableFilters:{},studienerfolgsbestaetigungtable:null,studienerfolgsbestaetigungtableFilters:{},abschlussdokumentetable:null}),computed:{inscriptiontableFilter(){const e=[];for(var t in this.inscriptiontableFilters)this.inscriptiontableFilters[t]&&e.push({field:t,type:"=",value:this.inscriptiontableFilters[t]});return e},inscriptiontableEmpty(){return this.inscriptiontableFilters.Stsem?this.$p.t("tools","studienbeitragFuerSSNochNichtBezahlt",{stsem:this.inscriptiontableFilters.Stsem}):this.inscriptiontableFilters.Stg?this.$p.t("tools","studienbeitragFuerStgNochNichtBezahlt",{stsem:this.inscriptiontableFilters.Stg}):this.$p.t("tools","studienbeitragNochNichtBezahlt")},studienerfolgsbestaetigungtableFilter(){const e=[];for(var t in this.studienerfolgsbestaetigungtableFilters)this.studienerfolgsbestaetigungtableFilters[t]&&e.push({field:t,type:"=",value:this.studienerfolgsbestaetigungtableFilters[t]});return e}},methods:{changeFilter(e,t,r){this[e+"Filters"][t]=r.target.value,this[e].clearFilter(),this[e+"Filter"].length&&this[e].setFilter(this[e+"Filter"])}},mounted(){this.inscriptiontable=new Tabulator(this.$refs.inscriptiontable,{layout:"fitDataStretch",placeholder:this.$p.t("tools","studienbeitragNochNichtBezahlt")}),this.studienerfolgsbestaetigungtable=new Tabulator(this.$refs.studienerfolgsbestaetigungtable,{layout:"fitDataStretch"}),this.abschlussdokumentetable=new Tabulator(this.$refs.abschlussdokumentetable,{layout:"fitDataStretch",placeholder:this.$p.t("tools","nochKeineAbschlussdokumenteVorhanden")});const e=Vue.h("div",{class:"position-absolute top-0 left-0 w-100 h-100 d-flex justify-content-center align-items-center fw-bold text-muted"},[this.inscriptiontableEmpty]);this.inscriptiontable.on("dataSorted",(t,r)=>{r.length?Vue.render(null,this.inscriptiontable.element.querySelector(".tabulator-tableholder")):(e.children=[this.inscriptiontableEmpty],Vue.render(e,this.inscriptiontable.element.querySelector(".tabulator-tableholder")))})}});!function(){const e=/Chrome/.test(navigator.userAgent),t=/Firefox/.test(navigator.userAgent);if(e){const e=function(){const e=document.createElement("div");e.style.position="absolute",e.style.top="-9999px",e.style.width="100px",e.style.height="100px",e.style.overflow="scroll",document.body.appendChild(e);const t=e.offsetWidth-e.clientWidth;return document.body.removeChild(e),t}()+"px";document.body.style.setProperty("--scrollbar-width",e)}else t&&document.body.style.setProperty("--scrollbar-width","0px")}(),G.use(z),G.mount("#content"); //# sourceMappingURL=Documents.js.map diff --git a/public/dist/js/apps/Cis/Documents.js.map b/public/dist/js/apps/Cis/Documents.js.map index ae91dd391..d9a2b3dee 100644 --- a/public/dist/js/apps/Cis/Documents.js.map +++ b/public/dist/js/apps/Cis/Documents.js.map @@ -1 +1 @@ -{"version":3,"file":"Documents.js","sources":["../../../../js/api/search.js","../../../../js/api/phrasen.js","../../../../js/api/navigation.js","../../../../js/api/filter.js","../../../../js/api/studstatus.js","../../../../js/api/profil.js","../../../../js/api/profilUpdate.js","../../../../js/api/lvPlan.js","../../../../js/api/stv.js","../../../../js/api/stv/verband.js","../../../../js/api/stv/students.js","../../../../js/api/stv/filter.js","../../../../js/api/stv/konto.js","../../../../js/api/stv/group.js","../../../../js/api/stv/kontakt.js","../../../../js/api/stv/prestudent.js","../../../../js/api/stv/status.js","../../../../js/api/stv/details.js","../../../../js/api/stv/exam.js","../../../../js/api/stv/abschlusspruefung.js","../../../../js/api/stv/grades.js","../../../../js/api/stv/mobility.js","../../../../js/api/stv/archiv.js","../../../../js/api/stv/documents.js","../../../../js/api/stv/exemptions.js","../../../../js/api/stv/jointstudies.js","../../../../js/api/stv/courselist.js","../../../../js/api/notiz.js","../../../../js/api/notiz/person.js","../../../../js/api/betriebsmittel.js","../../../../js/api/betriebsmittel/person.js","../../../../js/api/checkperson.js","../../../../js/api/ort.js","../../../../js/api/cms.js","../../../../js/api/lehre.js","../../../../js/api/addons.js","../../../../js/api/messages.js","../../../../js/api/messages/person.js","../../../../js/api/vorlagen.js","../../../../js/api/studium.js","../../../../js/api/fhcapifactory.js","../../../../js/api/dashboard.js","../../../../js/api/bookmark.js","../../../../js/api/ampeln.js","../../../../js/api/studiengang.js","../../../../js/api/menu.js","../../../../js/api/authinfo.js","../../../../js/api/language.js","../../../../js/plugin/OldFhcApi.js","../../../../js/RESTClient.js","../../../../js/plugins/FhcAlert.js","../../../../js/plugins/Api.js","../../../../js/api/factory/phrasen.js","../../../../js/plugins/Phrasen.js","../../../../js/apps/Cis/Documents.js","../../../../js/helpers/CssVarCalcHelpers.js"],"sourcesContent":["/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsearch(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/search';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchAdvanced(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/searchAdvanced';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchdummy(searchsettings) {\n\t\tconst url = 'public/js/apps/api/dummyapi.php/Search';\n\t\treturn this.$fhcApi.post(url, searchsettings);\n\t}\n};\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/loadModule/' + category);\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst payload = {categories, language}\n\t\treturn this.$fhcApi.post('/api/frontend/v1/phrasen/setLanguage', payload);\n\t},\n\tgetLanguage() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getLanguage', {});\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getAllLanguages', {});\n\t}\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetHeader(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/header',\n\t\t\t{ navigation_page }\n\t\t);\n\t},\n\tgetMenu: function(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/menu',\n\t\t\t{ navigation_page }\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/saveCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t);\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/applyFilterFields',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t);\n\t},\n\taddFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/addFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tgetFilter(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tabmeldung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/abmeldung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(stdsem, prestudent_id, grund) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/abmeldung/createAntrag', {\n\t\t\t\tstudiensemester: stdsem,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\tif (!Array.isArray(antrag_id))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t\t{ antrag_id }\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag_id.map(antrag => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t{ antrag_id: antrag.studierendenantrag_id },\n\t\t\t\t{ errorHeader: '#' + antrag.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t},\n\tunterbrechung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/unterbrechung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(studiensemester, prestudent_id, grund, datum_wiedereinstieg, attachment) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/createAntrag', {\n\t\t\t\tstudiensemester,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund,\n\t\t\t\tdatum_wiedereinstieg,\n\t\t\t\tattachment\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/cancelAntrag', {\n\t\t\t\tantrag_id\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t}\n\t},\n\twiederholung: {\n\t\tgetDetails(prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/' + prestudent_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tgetLvs(antrag_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getLvs/' + antrag_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tcreate(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/createAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/cancelAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tsaveLvs(forbiddenLvs, mandatoryLvs) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/saveLvs', {\n\t\t\t\tforbiddenLvs,\n\t\t\t\tmandatoryLvs\n\t\t\t});\n\t\t}\n\t},\n\tleitung: {\n\t\tgetStgs() {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getActiveStgs');\n\t\t},\n\t\tgetAntraege(url, config, params) {\n\t\t\treturn this.$fhcApi\n\t\t\t\t.get('/api/frontend/v1/studstatus/leitung/getAntraege/' + url)\n\t\t\t\t.then(res => res.data); // Return data for tabulator\n\t\t},\n\t\tgetHistory(antrag_id) {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getHistory/' + antrag_id)\n\t\t},\n\t\tgetPrestudents(query, signal) {\n\t\t\treturn this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/getPrestudents',\n\t\t\t\t{ query },\n\t\t\t\t{\n signal: signal,\n timeout: 30000\n }\n\t\t\t);\n\t\t},\n\t\tapprove(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treopen(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tunpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tobject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tapproveObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tdenyObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t}\n};","export default {\n\n getView: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getView/${uid}`,{}\n );\n },\n\n fotoSperre: function (value) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/fotoSperre/${value}`,\n {}\n );\n \n },\n\n isStudent: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isStudent`,\n {\n uid:uid,\n }\n );\n },\n\n isMitarbeiter: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isMitarbeiter/${uid}`,\n {}\n );\n },\n\n getZustellAdresse: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellAdresse`,{}\n );\n },\n\n getZustellKontakt: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellKontakt`,{}\n );\n },\n\n getGemeinden: function(nation,zip){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getGemeinden/${nation}/${zip}`,\n {}\n );\n \n },\n getAllNationen:function(){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Profil/getAllNationen\",{}\n );\n },\n}","export default {\n //! API calls for profil update requests\n \n getStatus: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getStatus`,{});\n },\n \n getTopic: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getTopic`,{});\n },\n \n acceptProfilRequest: function ({profil_update_id, uid, status_message, topic, requested_change}) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/acceptProfilRequest\",{profil_update_id, uid, status_message, topic, requested_change});\n },\n \n denyProfilRequest: function ({profil_update_id, uid, topic, status_message}) {\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/denyProfilRequest\",{profil_update_id,uid,topic,status_message});\n },\n \n insertFile: function (dms, replace = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n dms);\n\n },\n \n getProfilRequestFiles: function (requestID) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`,{});\n },\n \n selectProfilRequest: function (uid = null, id = null) {\n\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/selectProfilRequest`,\n {...(uid?{uid}:{}),\n ...(id?{id}:{})\n });\n },\n \n insertProfilRequest: function (topic, payload, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/insertProfilRequest\",\n {\n topic,\n payload,\n ...(fileID ? { fileID } : {}),\n });\n },\n \n updateProfilRequest: function (topic, payload, ID, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/updateProfilRequest`,\n {\n topic,\n payload,\n ID,\n ...(fileID ? { fileID: fileID } : {}),\n });\n },\n \n deleteProfilRequest: function (requestID) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/deleteProfilRequest`,\n {\n requestID,\n });\n },\n };\n ","\nexport default {\n\tgetRoomInfo(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getRoomplan',\n\t\t\t{ ort_kurzbz, start_date, end_date}\n\t\t);\n\t},\n\tgetStunden() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/Stunden',\n\t\t\t{}\n\t\t);\n\t},\n\tgetOrtReservierungen(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/LvPlan/getReservierungen/${ort_kurzbz}`,\n\t\t\t{ start_date, end_date}\n\t\t);\n\t},\n\tgetLvPlanReservierungen(start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getReservierungen',\n\t\t\t{ start_date, end_date }\n\t\t);\n\t},\n\tgetLehreinheitStudiensemester(lehreinheit_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${lehreinheit_id}`,\n\t\t\t{}\n\t\t);\n\t},\n\tstudiensemesterDateInterval(date) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${date}`,\n\t\t\t{}\n\t\t);\n\t},\n\tLvPlanEvents(start_date, end_date, lv_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/LvPlanEvents',\n\t\t\t{ start_date, end_date, lv_id }\n\t\t);\n\t},\n\t\n\t\n};","import verband from './stv/verband.js';\nimport students from './stv/students.js';\nimport filter from './stv/filter.js';\nimport konto from './stv/konto.js';\nimport group from './stv/group.js';\nimport kontakt from './stv/kontakt.js';\nimport prestudent from './stv/prestudent.js';\nimport status from './stv/status.js';\nimport details from './stv/details.js';\nimport exam from './stv/exam.js';\nimport abschlusspruefung from './stv/abschlusspruefung.js';\nimport grades from './stv/grades.js';\nimport mobility from './stv/mobility.js';\nimport archiv from './stv/archiv.js';\nimport documents from './stv/documents.js';\nimport exemptions from './stv/exemptions.js';\nimport jointstudies from \"./stv/jointstudies.js\";\nimport courselist from './stv/courselist.js';\n\nexport default {\n\tverband,\n\tstudents,\n\tfilter,\n\tkonto,\n\tgroup,\n\tkontakt,\n\tprestudent,\n\tstatus,\n\tdetails,\n\texam,\n\tabschlusspruefung,\n\tgrades,\n\tmobility,\n\tarchiv,\n\tdocuments,\n\texemptions,\n\tjointstudies,\n\tcourselist,\n\tconfigStudent() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/student');\n\t},\n\tconfigStudents() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/students');\n\t}\n};\n","export default {\n\tget() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/verband');\n\t},\n\tfavorites: {\n\t\tget() {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/stv/favorites');\n\t\t},\n\t\tset(favorites) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/stv/favorites/set', {\n\t\t\t\tfavorites\n\t\t\t});\n\t\t}\n\t}\n}","export default {\n\tuid(uid, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/uid/'\n\t\t\t+ encodeURIComponent(uid);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tprestudent(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/prestudent/'\n\t\t\t+ encodeURIComponent(prestudent_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tperson(person_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/person/'\n\t\t\t+ encodeURIComponent(person_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tverband(relative_path) {\n\t\treturn this.$fhcApi.getUri('api/frontend/v1/stv/students/' + relative_path);\n\t}\n}","export default {\n\tgetStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/filter/getStg');\n\t},\n\tsetStg(studiengang_kz) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/filter/setStg', {\n\t\t\tstudiengang_kz\n\t\t});\n\t}\n};","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/konto/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id),\n\t\t\t\tonly_open: self.filter,\n\t\t\t\tstudiengang_kz: self.studiengang_kz_intern ? self.stg_kz : ''\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tcheckDoubles(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/checkDoubles', data, {\n\t\t\tconfirmErrorHandler: error => true\n\t\t});\n\t},\n\tinsert(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/insert', data);\n\t},\n\tcounter(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/counter', data);\n\t},\n\tedit(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/update', data);\n\t},\n\tdelete(buchungsnr) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/delete', {buchungsnr});\n\t},\n\tgetBuchungstypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/konto/getBuchungstypen');\n\t}\n};","export default {\n\tgetGruppen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/Gruppen/getGruppen/' + params.id);\n\t},\n\tdeleteGroup(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/Gruppen/deleteGruppe/', params);\n\t}\n}","export default {\n\t//------------- address.js-----------\n\tgetAdressen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressen/' + params.id);\n\t},\n\taddNewAddress(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewAddress/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadAddress(address_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadAddress/', {address_id});\n\t},\n\tupdateAddress(form, address_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateAddress/' + address_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteAddress(address_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteAddress/', {address_id});\n\t},\n\tgetPlaces(plz) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getPlaces/' + plz);\n\t},\n\tgetFirmen(searchString) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getFirmen/' + searchString);\n\t},\n\tgetNations() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getNations/');\n\t},\n\tgetAdressentypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressentypen/');\n\t},\n\n\t//------------- bankverbindung.js-----------\n\tgetBankverbindung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getBankverbindung/' + params.id);\n\t},\n\taddNewBankverbindung(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewBankverbindung/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadBankverbindung(bankverbindung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadBankverbindung/', {bankverbindung_id});\n\t},\n\tupdateBankverbindung(form, bankverbindung_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateBankverbindung/' + bankverbindung_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteBankverbindung(bankverbindung_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteBankverbindung/', {bankverbindung_id});\n\t},\n\n\t//------------- contact.js-----------\n\tgetKontakte (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakte/' + params.id);\n\t},\n\taddNewContact(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewContact/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadContact(kontakt_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadContact/', {kontakt_id});\n\t},\n\tupdateContact(form, kontakt_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateContact/' + kontakt_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteContact(kontakt_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteContact/', {kontakt_id});\n\t},\n\tgetStandorteByFirma(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getStandorteByFirma/' + searchString);\n\t},\n\tgetKontakttypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakttypen/');\n\t}\n};","export default {\n\n//------------- Prestudent.js------------------------------------------------------\n\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\treturn \tthis.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/prestudent/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t);\n\t},\n\tupdatePrestudent(form, prestudent_id, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/prestudent/updatePrestudent/' + prestudent_id,\n\t\t\tdata\n\t\t);\n\t},\n\tgetBezeichnungZGV() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungZGV/');\n\t},\n\tgetBezeichnungMZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungMZgv/');\n\t},\n\tgetBezeichnungDZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungDZgv/');\n\t},\n\tgetStgs() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStgs/');\n\t},\n\tgetAusbildung() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAusbildung/');\n\t},\n\tgetAufmerksamdurch() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAufmerksamdurch/');\n\t},\n\tgetBerufstaetigkeit() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBerufstaetigkeit/');\n\t},\n\tgetTypenStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getTypenStg/');\n\t},\n\tgetBisstandort() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBisstandort/');\n\t},\n\n//------------- MultiStatus.js------------------------------------------------------\n\tgetHistoryPrestudent (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getHistoryPrestudent/' + params.id);\n\t},\n\tgetMaxSem(studiengang_kzs) {\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/status/getMaxSemester/', {studiengang_kzs});\n\t},\n\tadvanceStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/advanceStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tconfirmStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/confirmStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tisLastStatus(id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/isLastStatus/' + id);\n\t},\n\tdeleteStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/deleteStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tgetLastBismeldestichtag() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getLastBismeldestichtag/');\n\t},\n\n//------------- History.js------------------------------------------------------\n\tgetHistoryPrestudents (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getHistoryPrestudents/' + params.id);\n\t},\n\n}","export default {\n\n//------------- Modal.js------------------------------------------------------\n\n\tinsertStatus(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/status/insertStatus/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/status/loadStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tupdateStatus(form, {prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}, data) {\n\t\treturn this.$fhcApi.post(\n\t\t\tform,\n\t\t\t'api/frontend/v1/stv/status/updateStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester,\n\t\t\tdata\n\t\t);\n\t},\n\tgetStudienplaene(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudienplaene/' + prestudent_id);\n\t},\n\tgetStudiengang(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudiengang/' + prestudent_id);\n\t},\n\tgetStatusgruende() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusgruende/');\n\t},\n\tgetStati() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStati/');\n\t},\n\n//------------- Dropdown.js------------------------------------------------------\n\n\taddStudent(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/addStudent/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tchangeStatus(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/changeStatus/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tgetStatusarray() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusarray/');\n\t}\n}","export default {\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/student/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(url);\n\t},\n\tsave(form, prestudent_id, studiensemester_kurzbz, data) {\n\t\tlet url = 'api/frontend/v1/stv/student/save/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(form, url, data);\n\t},\n}\n","export default {\n\tgetPruefungen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getPruefungen/' + params.id);\n\t},\n\tloadPruefung(pruefung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/loadPruefung/' + pruefung_id);\n\t},\n\tgetTypenPruefungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getTypenPruefungen');\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/getAllLehreinheiten/', data)\n\t},\n\tgetLvsByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsByStudent/' + uid)\n\t},\n\tgetLvsandLesByStudent(uid, semester){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsandLesByStudent/' + uid + '/' + semester);\n\t},\n\tgetLvsAndMas(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsAndMas/' + uid)\n\t},\n\tgetMitarbeiterLv(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getMitarbeiterLv/' + id)\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getNoten');\n\t},\n\tcheckZeugnisnoteLv(data){\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/', data)\n\t},\n\taddPruefung(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/insertPruefung/', data);\n\t},\n\tupdatePruefung(form, id, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/updatePruefung/' + id, data);\n\t},\n\tdeletePruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/deletePruefung/' + id)\n\t}\n}","export default {\n\n\tgetAbschlusspruefung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/' + params.id);\n\t},\n\taddNewAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/', data\n\t\t);\n\t},\n\tloadAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/', {id});\n\t},\n\tupdateAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/', data\n\t\t);\n\t},\n\tdeleteAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/', {id});\n\t},\n\tgetTypenAbschlusspruefung(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/');\n\t},\n\tgetTypenAntritte(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/');\n\t},\n\tgetBeurteilungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/');\n\t},\n\tgetAkadGrade(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getAkadGrade/', {studiengang_kz});\n\t},\n\tgetTypStudiengang(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/', {studiengang_kz});\n\t},\n\tgetMitarbeiter(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/' + searchString);\n\t},\n\tgetPruefer(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getPruefer/' + searchString);\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getNoten/');\n\t},\n\tcheckForExistingExams(uids) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/', {uids}\n\t\t);\n\t}\n}","export default {\n\tlist() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/grades/list');\n\t},\n\tgetCertificate(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getCertificate/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetTeacherProposal(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getTeacherProposal/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetRepeaterGrades(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getRepeaterGrades/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tupdateCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, note, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/updateCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz,\n\t\t\t\tnote\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tdeleteCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/deleteCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyTeacherProposalToCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyTeacherProposalToCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id, lv_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate',\n\t\t\t{\n\t\t\t\tstudierendenantrag_lehrveranstaltung_id\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lv_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tgetGradeFromPoints(points, lehrveranstaltung_id, studiensemester_kurzbz, manualErrorHandling) {\n\t\tconst config = manualErrorHandling ? {errorHandling: false} : {};\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/grades/getGradeFromPoints',\n\t\t\t{\n\t\t\t\t\"points\": points,\n\t\t\t\t\"lehrveranstaltung_id\": lehrveranstaltung_id,\n\t\t\t\t\"studiensemester_kurzbz\": studiensemester_kurzbz\n\t\t\t},\n\t\t\tconfig\n\t\t\t);\n\t}\n}","export default {\n\tgetMobilitaeten (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getMobilitaeten/' + params.id);\n\t},\n\tgetProgramsMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getProgramsMobility/');\n\t},\n\taddNewMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/insertMobility/', data);\n\t},\n\tloadMobility(bisio_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/loadMobility/' + bisio_id);\n\t},\n\tupdateMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/updateMobility/', data);\n\t},\n\tdeleteMobility(bisio_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobility/' + bisio_id);\n\t},\n\tgetLVList(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLVList/' + studiengang_kz);\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/getAllLehreinheiten/', data)\n\t},\n\tgetLvsandLesByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLvsandLesByStudent/' + uid);\n\t},\n\tgetPurposes(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getPurposes/' + params.id);\n\t},\n\tgetSupports(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getSupports/' + params.id);\n\t},\n\tgetListPurposes() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListPurposes/');\n\t},\n\tgetListSupports() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListSupports/');\n\t},\n\tdeleteMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilityPurpose/' + params.bisio_id, params);\n\t},\n\taddMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilityPurpose/' + params.bisio_id, params);\n\t},\n\tdeleteMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilitySupport/' + params.bisio_id, params);\n\t},\n\taddMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilitySupport/' + params.bisio_id, params);\n\t},\n\n}","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/archiv/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id)\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tgetArchivVorlagen() {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/getArchivVorlagen');\n\t},\n\tarchive(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archive',\n\t\t\tdata\n\t\t);\n\t},\n\tarchiveSigned(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archiveSigned',\n\t\t\tdata\n\t\t);\n\t},\n\tupdate(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/update', data);\n\t},\n\tdelete({akte_id, studiengang_kz}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/delete', {akte_id, studiengang_kz});\n\t}\n};\n","export default {\n\tgetDocumentsUnaccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tgetDocumentsAccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsAccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tdeleteZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteZuordnung/' + params.prestudent_id + '/' + params.dokument_kurzbz);\n\t},\n\tcreateZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/createZuordnung/'\n\t\t\t+ params.prestudent_id + '/'\n\t\t\t+ params.dokument_kurzbz);\n\t},\n\tloadAkte(akte_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/loadAkte/' + akte_id);\n\t},\n\tgetDoktypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDoktypen/');\n\t},\n\tupdateFile(akte_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/updateAkte/' + akte_id,\n\t\t\tdata);\n\t},\n\tdeleteFile(akte_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteAkte/' + akte_id);\n\t},\n\tuploadFile(prestudent_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/uploadDokument/' + prestudent_id,\n\t\t\tdata);\n\t},\n}","export default {\n\tgetAnrechnungen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getAnrechnungen/' + params.id);\n\t},\n\tgetLehrveranstaltungen(prestudent_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/' + prestudent_id);\n\t},\n\tgetBegruendungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getBegruendungen/');\n\t},\n\tgetLvsKompatibel(lv_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLvsKompatibel/' + lv_id);\n\t},\n\tgetLektoren(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLektoren/' + studiengang_kz);\n\t},\n\taddNewAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/insertAnrechnung/', data);\n\t},\n\tloadAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/loadAnrechnung/' + anrechnung_id);\n\t},\n\teditAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/updateAnrechnung/', data);\n\t},\n\tdeleteAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/anrechnungen/deleteAnrechnung/' + anrechnung_id);\n\t},\n}","export default {\n\tgetStudies(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudien/' + params.id);\n\t},\n\tgetTypenMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/');\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/');\n\t},\n\tgetStudyprograms(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/');\n\t},\n\tgetListPartner(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/');\n\t},\n\tgetStatiPrestudent(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/');\n\t},\n\tloadStudy(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/loadStudie/' + id);\n\t},\n\tinsertStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/insertStudie/', data);\n\t},\n\tupdateStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/updateStudie/', data);\n\t},\n\tdeleteStudy(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/GemeinsameStudien/deleteStudie/' + id);\n\t},\n\n}","export default {\n\tgetCourselist(url, config, params) {\n\t\t//corresponding logic controller Stundenplan.php\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStundenplan/'\n\t\t\t+ params.student_uid + '/'\n\t\t\t+ params.start_date + '/'\n\t\t\t+ params.end_date + '/'\n\t\t\t+ params.group_consecutiveHours + '/'\n\t\t\t+ params.dbStundenplanTable\n\t\t);\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStudiensemester/');\n\t},\n}","import person from \"./notiz/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetNotizen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getUid/');\n\t},\n\taddNewNotiz(form, id, formData) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(form, notiz_id, formData){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getMitarbeiter/' + event);\n\t},\n\tisBerechtigt(id, type_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/isBerechtigt/');\n\t}\n}","import person from \"./betriebsmittel/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetAllBetriebsmittel(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/' + params.type + '/' + params.id);\n\t},\n\taddNewBetriebsmittel(form, person_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/' +\n\t\t\tperson_id, formData\n\t\t);\n\t},\n\tloadBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/' + betriebsmittelperson_id);\n\t},\n\tupdateBetriebsmittel(form, betriebsmittelperson_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/' + betriebsmittelperson_id,\n\t\t\tformData);\n\t},\n\tdeleteBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/' +\tbetriebsmittelperson_id);\n\t},\n\tgetTypenBetriebsmittel(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/');\n\t},\n\tloadInventarliste(query){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/' +\tquery);\n\t}\n}","export default {\n\tupdatePersonUnrulyStatus(person_id, unrulyParam) {\n\n\t\ttry {\n\t\t\tconst payload = {person_id, unruly: unrulyParam}\n\t\t\tconst url = '/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus';\n\t\t\treturn this.$fhcApi.post(url, payload, null);\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t},\n\tfilterPerson(payload, base = ''){\n\n\t\ttry {\n\t\t\tconst url = base + '/api/frontend/v1/checkperson/CheckPerson/filterPerson';\n\t\t\treturn axios.post(url, payload)\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t}\n}","export default {\n getContentID(ort_kurbz) {\n\t\treturn this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Ort/ContentID\",\n\t\t\t{ ort_kurzbz: ort_kurbz }\n\t\t);\n\t},\n\tgetRooms(datum, von, bis, typ, personenanzahl = 0) {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getRooms\",\n\t\t\t{ datum, von, bis, typ, personenanzahl }\n\t\t);\n\t},\n\tgetRoomTypes() {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getTypes\"\n\t\t);\n\t}\n}","export default {\n content(content_id, version=null, sprache=null, sichtbar=null) {\n return this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/content\",\n\t\t\t{ \n\t\t\t\tcontent_id: content_id,\n\t\t\t\t...(version?{version}:{}),\n\t\t\t\t...(sprache?{sprache}:{}),\n\t\t\t\t...(sichtbar?{sichtbar}:{}),\n }\n );\n },\n\t//api function used for the news View that renders the html\n\tgetNews(page = 1, page_size = 10, sprache) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNews\",\n\t\t\t{\n\t\t\t\tpage,\n\t\t\t\tpage_size,\n\t\t\t\tsprache,\n\t\t\t},\n\t\t);\n\t},\n\t//api function used for the widget component\n\tnews(limit) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/news\",\n\t\t\t{\n\t\t\t\tlimit: limit\n\t\t\t}\n\t\t);\n\t},\n\tgetNewsRowCount: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNewsRowCount\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetNewsExtra: function(){\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getStudiengangInfoForNews\",\n\t\t\t{}\n\t\t);\n\t}\n }","export default {\n getStudentenMail(lehreinheit_id) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Lehre/lvStudentenMail\",\n { lehreinheit_id: lehreinheit_id }\n );\n },\n\tgetLvInfo(studiensemester_kurzbz, lehrveranstaltung_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/LV/${studiensemester_kurzbz}/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentPruefungen(lehrveranstaltung_id){\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentProjektarbeiten(uid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getStudentProjektarbeiten/${uid}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentProjektabgaben(detail) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getStudentProjektabgaben`\n\t\t\t, {\n\t\t\t\tprojektarbeit_id: detail.projektarbeit_id,\n\t\t\t\tstudent_uid: detail.student_uid\n\t\t\t}\n\t\t);\n\t},\n\tpostStudentProjektarbeitEndupload(formData) {\n\t\tconst url = '/api/frontend/v1/Lehre/postStudentProjektarbeitEndupload';\n\t\tconst headers = {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\treturn this.$fhcApi.post(url, formData, headers)\n\t},\n\tpostStudentProjektarbeitZwischenabgabe(formData) {\n\t\tconst url = '/api/frontend/v1/Lehre/postStudentProjektarbeitZwischenabgabe';\n\t\tconst headers = {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\treturn this.$fhcApi.post(url, formData, headers)\n\t},\n\tgetStudentProjektarbeitAbgabeFile(paabgabe_id, student_uid) {\n\t\tconst url = `/Cis/Abgabetool/getStudentProjektarbeitAbgabeFile?paabgabe_id=${paabgabe_id}&student_uid=${student_uid}`;\n\n\t\twindow.location = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + url\n\t},\n\tgetMitarbeiterProjektarbeiten(uid, all) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getMitarbeiterProjektarbeiten?showall=${all}`\n\t\t\t, {}\n\t\t);\n\t},\n\tpostProjektarbeitAbgabe(termin) {\n\t\tconst payload = {\n\t\t\tpaabgabe_id: termin.paabgabe_id,\n\t\t\tpaabgabetyp_kurzbz: termin.bezeichnung.paabgabetyp_kurzbz,\n\t\t\tdatum: termin.datum,\n\t\t\tfixtermin: termin.fixtermin,\n\t\t\tinsertvon: termin.insertvon,\n\t\t\tkurzbz: termin.kurzbz,\n\t\t\tprojektarbeit_id: termin.projektarbeit_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/postProjektarbeitAbgabe';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t\t\n\t},\n\tdeleteProjektarbeitAbgabe(paabgabe_id) {\n\t\tconst payload = {\n\t\t\tpaabgabe_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/deleteProjektarbeitAbgabe';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t},\n\tpostSerientermin(datum, paabgabetyp_kurzbz, bezeichnung, kurzbz, projektarbeit_ids) {\n\t\tconst payload = {\n\t\t\tdatum, paabgabetyp_kurzbz, bezeichnung, kurzbz, projektarbeit_ids\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/postSerientermin';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t},\n\tfetchDeadlines(person_id) {\n\t\tconst payload = {\n\t\t\tperson_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/fetchDeadlines';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t}\n }","export default {\n getLvMenu(lvid, studiensemester_kurzbz) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/LvMenu/getLvMenu/${lvid}/${studiensemester_kurzbz}`,\n {}\n );\n },\n\n \n }","import person from \"./messages/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\t\tgetMessages(url, config, params) {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessages/' + params.id + '/' + params.type + '/' + params.size + '/' + params.page);\n\t\t},\n\t\tgetVorlagen(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagen/');\n\t\t},\n\t\tgetMsgVarsLoggedInUser(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/');\n\t\t},\n\t\tgetMessageVarsPerson(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessageVarsPerson/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetMsgVarsPrestudent(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsPrestudent/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPersonId(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getPersonId/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetUid(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getUid/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetVorlagentext(vorlage_kurzbz){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagentext/' + vorlage_kurzbz);\n\t\t},\n\t\tgetNameOfDefaultRecipient(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getNameOfDefaultRecipient/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPreviewText(params, data){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/getPreviewText/' + params.id + '/' + params.type_id,\n\t\t\t\tdata);\n\t\t},\n\t\tgetReplyData(messageId){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getReplyData/' + messageId);\n\t\t},\n\t\tsendMessageFromModalContext(form, id, data) {\n\t\t\treturn this.$fhcApi.post(form,'api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tsendMessage(id, data) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tdeleteMessage(messageId){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/deleteMessage/' + messageId);\n\t\t}\n}","export default {\n\tgetVorlagen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagen/');\n\t},\n\tgetVorlagenByLoggedInUser() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/');\n\t}\n}","export default {\n\n\tgetStudiensemester: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/components/Cis/Mylv/Studiensemester',\n\t\t\t{}\n\t\t);\n\t},\n\n\tgetAllStudienSemester: function (studiensemester=undefined, studiengang=undefined, semester=undefined, studienplan=undefined) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/Studium/getStudienAllSemester',\n\t\t\t{studiensemester, studiengang, semester, studienplan}\n\t\t);\n\t},\n\n\tgetStudiengaengeForStudienSemester: function (studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${studiensemester}`,\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudienplaeneBySemester: function (studiengang, studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudienplaeneBySemester`,\n\t\t\t{\n\t\t\t\tstudiengang,\n\t\t\t\tstudiensemester,\n\t\t\t}\n\t\t);\n\t},\n\tgetLvPlanForStudiensemester: function (studiensemester, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${studiensemester}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\tgetLvEvaluierungInfo: function (studiensemester_kurzbz, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getLvEvaluierungInfo/${studiensemester_kurzbz}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\t\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport search from \"./search.js\";\nimport phrasen from \"./phrasen.js\";\nimport navigation from \"./navigation.js\";\nimport filter from \"./filter.js\";\nimport studstatus from \"./studstatus.js\";\nimport profil from \"./profil.js\";\nimport profilUpdate from \"./profilUpdate.js\";\nimport lvPlan from \"./lvPlan.js\";\nimport bookmark from \"./bookmark.js\";\nimport stv from \"./stv.js\";\nimport notiz from \"./notiz.js\";\nimport betriebsmittel from \"./betriebsmittel.js\";\nimport checkperson from \"./checkperson.js\";\nimport ampeln from \"./ampeln.js\";\nimport ort from \"./ort.js\";\nimport cms from \"./cms.js\";\nimport lehre from \"./lehre.js\";\nimport addons from \"./addons.js\";\nimport messages from \"./messages.js\";\nimport vorlagen from \"./vorlagen.js\";\nimport studiengang from \"./studiengang.js\";\nimport menu from \"./menu.js\";\nimport dashboard from \"./dashboard.js\";\nimport authinfo from \"./authinfo.js\";\nimport studium from \"./studium.js\";\nimport language from \"./language.js\";\n\nexport default {\n search,\n phrasen,\n navigation,\n dashboard,\n filter,\n studstatus,\n profil,\n profilUpdate,\n lvPlan,\n bookmark,\n stv,\n notiz,\n betriebsmittel,\n checkperson,\n ampeln,\n ort,\n cms,\n lehre,\n addons,\n messages,\n vorlagen,\n addons,\n\tstudiengang,\n\tmenu,\n\tauthinfo,\n\tstudium,\n language\n};\n","export default {\n\tasync getViewData() {\n\t\tconst url = `/api/frontend/v1/Cis4FhcApi/getViewData`;\n\t\treturn this.$fhcApi.get(url, null, null)\n\t},\n}","export default {\n\n getBookmarks: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/getBookmarks`\n ,{}\n );\n },\n \n delete: function (bookmark_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/delete/${bookmark_id}`\n ,{}\n ); \n },\n\n\tupdate: function ({ bookmark_id, url, title, tag=null}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/Bookmark/update/${bookmark_id}`\n\t\t\t, {\n\t\t\t\turl: url,\n\t\t\t\ttitle: title\n\t\t\t}\n\t\t);\n\t},\n\n insert: function ({url, title, tag}) {\n return this.$fhcApi.post(\n `/api/frontend/v1/Bookmark/insert`\n ,{\n url: url,\n title: title,\n tag: tag\n }\n ); \n },\n}","export default {\n \n open: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/open`,{});\n },\n\n all: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/all`,{});\n },\n\n confirm: function (ampel_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/confirm/${ampel_id}`,{});\n },\n\n}","export default {\n\tstudiengangInformation: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Studgang/getStudiengangInfo\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudiengangByKz: function (studiengang_kz) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz\",\n\t\t\t{\n\t\t\t\t\"studiengang_kz\": studiengang_kz\n\t\t\t}\n\t\t);\n\t}\n}","export default {\n\tgetMenu: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/CisMenu/getMenu\",\n\t\t\t{}\n\t\t);\n\t}\n\n}","\nexport default {\n\tgetAuthUID() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthUID',\n\t\t\t{ }\n\t\t);\n\t},\n\tgetAuthInfo() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthInfo',\n\t\t\t{}\n\t\t);\n\t},\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAll() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/language/get');\n\t}\n};","/** TODO(chris):\n * when deleting this file be sure to\n * remove line 1 & 90 from ../plugins/Phrasen.js\n */\nimport FhcApiFactory from '../api/fhcapifactory.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$fhcApi) {\n\t\t\t/* Deprecated Code start */\n\t\t\tif (options?.factory) {\n\t\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\t\tapp.config.globalProperties.$fhcApi.factory.addEndpoints(options.factory);\n\t\t\t}\n\t\t\t/* Deprecated Code end */\n\t\t\treturn;\n\t\t}\n\n\t\tfunction _get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\n\t\tfunction _clean_return_value(response) {\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = {response};\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tconst baseURL = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\";\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(response => {\n\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\treturn _clean_return_value(response);\n\n\t\t\t// NOTE(chris): loop through errors\n\t\t\tif (response.data.errors)\n\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t);\n\n\t\t\treturn _clean_return_value(response);\n\t\t}, error => {\n\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\n\t\t\tif (error.config?.errorHandling == 'off'\n\t\t\t\t|| error.config?.errorHandling === false\n\t\t\t\t|| error.config?.errorHandling == 'success')\n\t\t\t\treturn Promise.reject(error);\n\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL, true);\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t\t}\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\terror.response.data.errors = error.response.data.errors.filter(\n\t\t\t\t\terr => (error.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, error.config)\n\t\t\t\t);\n\t\t\t\tif (!error.response.data.errors.length)\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else if (error.request) {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertError(error.message);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t}\n\n\t\t\treturn Promise.reject(error);\n\t\t});\n\n\t\tapp.config.globalProperties.$fhcApi = {\n\t\t\tgetUri(url) {\n\t\t\t\tconsole.warn('$fhcApi.getUri is DEPRECATED! Use $api.getUri instead.');\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\tconsole.warn('$fhcApi.get is DEPRECATED! Use $api.get instead.');\n\t\t\t\t[uri, params, config] = _get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\tconsole.warn('$fhcApi.post is DEPRECATED! Use $api.post instead.');\n\t\t\t\t[uri, data, config] = _get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\t_defaultErrorHandlers: {\n\t\t\t\tvalidation(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form) {\n\t\t\t\t\t\tconfig.form.clearValidation();\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.messages);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(error.messages)) {\n\t\t\t\t\t\terror.messages.forEach($fhcAlert.alertError);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (typeof error.messages == 'object') {\n\t\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t\tObject.values(error.messages).forEach(\n\t\t\t\t\t\t\t\tvalue => $fhcAlert.alertDefault(\n\t\t\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tObject.entries(error.messages).forEach(\n\t\t\t\t\t\t\t\t([key, value]) => $fhcAlert.alertDefault('error', key, value, true)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tgeneral(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form)\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.message);\n\t\t\t\t\telse if (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertError(error.message);\n\t\t\t\t},\n\t\t\t\tphp(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('warn', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('info', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\texception(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tdb(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tauth(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertDefault('error', error.message, message);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/* Deprecated Code start */\n\t\tclass FhcApiFactoryWrapper {\n\t\t\tconstructor(factorypart, root) {\n\t\t\t\tif (root === undefined) {\n\t\t\t\t\tthis.$fhcApi = {\n\t\t\t\t\t\tgetUri(url) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.getUri(url);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget(form, uri, params, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.get(form, uri, params, config);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpost(form, uri, data, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.post(form, uri, data, config);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tObject.defineProperty(this.$fhcApi, 'factory', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.factory;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tapp.config.globalProperties.$fhcApi.factory = this;\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty(this, '$fhcApi', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\treturn (root || this).$fhcApi;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.addEndpoints(factorypart, true)\n\t\t\t}\n\n\t\t\taddEndpoints(factorypart, noWarn) {\n\t\t\t\tObject.keys(factorypart).forEach(key => {\n\t\t\t\t\tObject.defineProperty(this, key, {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tif (typeof factorypart[key] == 'function')\n\t\t\t\t\t\t\t\treturn factorypart[key].bind(this);\n\t\t\t\t\t\t\treturn new FhcApiFactoryWrapper(factorypart[key], this.$fhcApi.factory);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tif (!noWarn) console.warn('$fhcApi.factory.addEndpoints() is DEPRECATED!');\n\t\t\t}\n\t\t}\n\n\t\tconst factory = new FhcApiFactoryWrapper(FhcApiFactory);\n\t\tif (options?.factory) {\n\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\tfactory.addEndpoints(options.factory);\n\t\t}\n\n\t\tapp.config.globalProperties.$fhcApi.factory = factory;\n\t\t/* Deprecated Code end */\n\t\t\n\t\tapp.provide('$fhcApi', app.config.globalProperties.$fhcApi);\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n//--------------------------------------------------------------------------------------------------------------------\n// Configs\n\n// To see debug messages into the browser console set this parameter as true\nconst CORE_REST_CLIENT_DEBUG = false;\n\n// Default timeout (milliseconds)\nconst CORE_REST_CLIENT_TIMEOUT = 5000;\n\n//--------------------------------------------------------------------------------------------------------------------\n// Constants\n\n// Success\nconst CORE_REST_CLIENT_SUCCESS = 0;\n\n// Properties present in a response\nconst CORE_REST_CLIENT_ERROR = \"error\";\nconst CORE_REST_CLIENT_RETVAL = \"retval\";\n\n// HTTP method parameters\nconst CRC_HTTP_GET_METHOD = \"get\";\nconst CRC_HTTP_POST_METHOD = \"post\";\n\n/**\n * Definition and initialization of the object CoreRESTClient\n */\nexport const CoreRESTClient = {\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Public methods\n\n\t/**\n\t * Performs a call using the HTTP GET method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tget: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_GET_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Performs a call using the HTTP POST method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tpost: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_POST_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Checks if the response is a success\n\t */\n\tisSuccess: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR)\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL) && response.error == CORE_REST_CLIENT_SUCCESS)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Checks if the response is an error\n\t */\n\tisError: function(response) {\n\t\treturn !CoreRESTClient.isSuccess(response);\n\t},\n\n\t/**\n\t * Checks if the response has data\n\t */\n\thasData: function(response) {\n\n\t\tif (CoreRESTClient.isSuccess(response))\n\t\t{\n\t\t\tif ((typeof response[CORE_REST_CLIENT_RETVAL] === \"object\" && Object.keys(response[CORE_REST_CLIENT_RETVAL]).length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"array\" && response[CORE_REST_CLIENT_RETVAL].length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"string\" && response[CORE_REST_CLIENT_RETVAL].trim() != \"\")\n\t\t\t\t|| typeof response[CORE_REST_CLIENT_RETVAL] === \"number\")\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Retrives data from response object\n\t */\n\tgetData: function(response) {\n\n\t\tif (CoreRESTClient.hasData(response))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Retrives error message from response object\n\t */\n\tgetError: function(response) {\n\n\t\tif (typeof response === \"object\"\n\t\t\t&& Object.keys(response).length > 0\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn \"Generic error\";\n\t},\n\n\t/**\n\t * Retrives code from response object\n\t */\n\tgetErrorCode: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_ERROR];\n\t\t}\n\n\t\treturn 1; // Generic error\n\t},\n\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Private methods\n\n\t/**\n\t * Generate the router URI using the connection parameters\n\t */\n\t_generateRouterURI: function(wsURL) {\n\t\tvar uri = null;\n\n\t\t// Checks if global JS object FHC_JS_DATA_STORAGE_OBJECT exists\n\t\tif (typeof FHC_JS_DATA_STORAGE_OBJECT !== \"undefined\")\n\t\t{\n\t\t\turi = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\" + wsURL;\n\t\t}\n\n\t\treturn uri;\n\t},\n\n\t/**\n\t * Method to print debug info after a controller has been called\n\t */\n\t_printDebug: function(parameters, response, errorThrown) {\n\n\t\tif (CORE_REST_CLIENT_DEBUG === true) // If global const CORE_REST_CLIENT_DEBUG is true, but really true!\n\t\t{\n\t\t\t// Print info about called controller\n\t\t\tconsole.log(\"Called controller: \" + parameters.remoteController);\n\t\t\tconsole.log(\"Call parameters:\"); // parameters given to this call\n\t\t\tconsole.log(parameters);\n\n\t\t\tif (response != null) // if there is a response...\n\t\t\t{\n\t\t\t\tconsole.log(\"Controller Response:\");\n\t\t\t\tconsole.log(response); // ...print it\n\t\t\t}\n\t\t\tif (errorThrown != null) // if there is a jQuery error...\n\t\t\t{\n\t\t\t\tconsole.log(\"jQuery error:\");\n\t\t\t\tconsole.log(errorThrown); // ...print it\n\t\t\t}\n\t\t\tconsole.log(\"--------------------------------------------------------------------------------------------\");\n\t\t}\n\t},\n\n\t/**\n\t * Performs a call to the server were the CI PHP layer is running\n\t * - wsURL: alias of the core controller to call\n\t * - wsParameters: parameters to give to the called controller\n\t * - type: POST or GET HTTP method\n\t * - axiosParameters: an object to configure the axios call\n\t */\n\t_axiosCall: function(wsURL, wsParameters, type, axiosParameters) {\n\n\t\t// Axios config object\n\t\tlet axiosCallObj = {\n\t\t\tmethod: type,\n\t\t\turl: CoreRESTClient._generateRouterURI(wsURL),\n\t\t\ttimeout: CORE_REST_CLIENT_TIMEOUT // default time out\n\t\t};\n\n\t\t// The ajax call is HTTP GET\n\t\tif (type == CRC_HTTP_GET_METHOD)\n\t\t{\n\t\t\taxiosCallObj.params = wsParameters;\n\t\t}\n\t\t// The ajax call is HTTP POST\n\t\telse\n\t\t{\n\t\t\taxiosCallObj.data = wsParameters;\n\t\t}\n\n\t\t// Check if axiosParameters is an object\n\t\tif (typeof axiosParameters === \"object\")\n\t\t{\n\t\t\t// And then copies the its properties into axiosCallObj\n\t\t\tfor (var prop in axiosParameters) axiosCallObj[prop] = axiosParameters[prop];\n\t\t}\n\n\t\t// Perform the ajax call via axios\n\t\treturn axios(axiosCallObj);\n\t}\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n * \n * @usage:\n * Preperations:\n * Be sure to have PrimeVue loaded with the toast and confirmdialog\n * components as primevue variable\n * Install:\n * Import this Plugin and install it with the app.use() function.\n * Use:\n * In your component you can call now the global property $fhcAlert\n * which has the following functions:\n * \n * alertSuccess\n * ------------\n * Displays a success message\n * @param string\tmessage\n * @return void\n * \n * alertInfo\n * ---------\n * Displays an info message\n * @param string\tmessage\n * @return void\n * \n * alertWarning\n * ------------\n * Displays a warning\n * @param string\tmessage\n * @return void\n * \n * alertError\n * ----------\n * Displays an error\n * @param string\tmessage\n * @return void\n * \n * alertSystemError\n * ----------------\n * Displays an alert with the error details and a button to mail\n * the error to the Support Team\n * @param string\tmessage\n * @return void\n * \n * confirmDelete\n * -------------\n * Displays a confirmation dialog and returns a Promise which resolves\n * with true or false depending und the pressed button.\n * @return Promise\n * \n * alertDefault\n * ------------\n * Displays an alert\n * @param string\tseverity\t\tcan be 'success', 'info', 'warning', 'error'\n * @param string\ttitle\n * @param string\tmessage\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * alertMultiple\n * -------------\n * Displays multiple alerts\n * @param array\t\tmessageArray\n * @param string\tseverity\t\t(optional) defaults to 'info'\n * @param string\ttitle\t\t\t(optional) defaults to 'Info'\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * handleSystemError\n * -----------------\n * Automatiticly determine how to display an system error and display it.\n * This would be used in a catch block of an ajax call.\n * @param mixed\t\terror\n * @return void\n * \n * handleSystemMessage\n * -------------------\n * Automatiticly determine how to display a message and display it.\n * @param mixed\t\tmessage\n * @return void\n */\nimport PvConfig from \"../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js\";\nimport PvToast from \"../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js\";\nimport PvConfirm from \"../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js\";\nimport PvConfirmationService from \"../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js\";\nimport FhcPhrasen from \"./Phrasen.js\";\n\nimport {CoreRESTClient} from '../RESTClient.js';\n\nconst helperAppContainer = document.createElement('div');\n\nconst helperApp = Vue.createApp({\n\tname: \"FhcAlertApp\",\n\tcomponents: {\n\t\tPvToast,\n\t\tPvConfirm\n\t},\n\tmethods: {\n\t\tmailToUrl(slotProps) {\n\t\t\tlet mailTo = FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto;\n\t\t\tlet subject = 'Meldung%20Systemfehler';\n\t\t\tlet body = `\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: ` + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method + `%0D%0A\n\t\t\t\tFehler Meldung: ` + slotProps.message.detail + `%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!`\n\n\t\t\treturn \"mailto:\" + mailTo + \"?subject=\" + subject + \"&body=\" + body;\n\t\t},\n\t\topenMessagecard(e) {\n\t\t\tbootstrap.Collapse.getOrCreateInstance(e.target.getAttribute('href')).toggle();\n\t\t}\n\t},\n\tunmounted() {\n\t\thelperAppContainer.parentElement.removeChild(helperAppContainer);\n\t},\n\tcomputed: {\n\t\tshowmaillink: function() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto !== '';\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t`\n});\n\nhelperApp.use(PvConfig);\nhelperApp.use(PvConfirmationService);\n//helperApp.use(FhcPhrasen);\n\nconst helperAppInstance = helperApp.mount(helperAppContainer);\n\ndocument.body.appendChild(helperAppContainer);\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (!app.config.globalProperties.$p)\n\t\t\tapp.use(FhcPhrasen);\n\n\t\tconst $fhcAlert = {\n\t\t\talertSuccess(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSuccess);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'success', summary: 'Info', detail: message, life: 1000});\n\t\t\t},\n\t\t\talertInfo(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertInfo);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'info', summary: 'Info', detail: message, life: 3000 });\n\t\t\t},\n\t\t\talertWarning(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertWarning);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'warn', summary: 'Achtung', detail: message});\n\t\t\t},\n\t\t\talertError(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertError);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'error', summary: 'Achtung', detail: message });\n\t\t\t},\n\t\t\talertSystemError(message) {\n\t\t\t\t//TODO(Manu) for translation of content of template: restructure in data\n\t\t\t\t//and update definitions with translations\n\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSystemError);\n\t\t\t\thelperAppInstance.$refs.alert.add({\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t\tsummary: Vue.computed(() => app.config.globalProperties.$p.t('alert/systemerror')),\n\t\t\t\t\tdetail: message});\n\t\t\t},\n\t\t\tconfirmDelete() {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: 'fhcAlertConfirm',\n\t\t\t\t\t\theader: Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: Vue.computed(() => app.config.globalProperties.$p.t('alert/confirm_delete')),\n\t\t\t\t\t\tacceptLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/loeschen')),\n\t\t\t\t\t\tacceptClass: 'p-button-danger',\n\t\t\t\t\t\trejectLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: 'p-button-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tconfirm(options) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: options?.group ?? 'fhcAlertConfirm',\n\t\t\t\t\t\theader: options?.header ?? Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: options?.message ?? '',\n\t\t\t\t\t\tacceptLabel: options?.acceptLabel ?? 'Ok',\n\t\t\t\t\t\tacceptClass: options?.acceptClass ?? 'btn btn-primary',\n\t\t\t\t\t\trejectLabel: options?.rejectLabel ?? Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: options?.rejectClass ?? 'btn btn-outline-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\talertDefault(severity, title, message, sticky = false, html = false) {\n\t\t\t\tlet options = { severity: severity, summary: title, detail: message, html };\n\t\t\t\t\n\t\t\t\tif (!sticky)\n\t\t\t\t\toptions.life = 3000;\n\n\t\t\t\thelperAppInstance.$refs.toast.add(options);\n\t\t\t},\n\t\t\talertMultiple(messageArray, severity = 'info', title = 'Info', sticky = false, html = false){\n\t\t\t\t// Check, if array has only string values\n\t\t\t\tif (messageArray.every(message => typeof message === 'string')) {\n\t\t\t\t\tmessageArray.forEach(message => this.alertDefault(severity, title, message, sticky, html));\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\thandleSystemError(error) {\n\t\t\t\t// don't show an error message to the user if the error was an aborted request\n\t\t\t\tif(error.hasOwnProperty('name') && error.name.toLowerCase() === \"AbortError\".toLowerCase())\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is string\n\t\t\t\tif (typeof error === 'string')\n\t\t\t\t\treturn $fhcAlert.alertSystemError(error);\n\n\t\t\t\t// Error is array of strings\n\t\t\t\tif (Array.isArray(error) && error.every(err => typeof err === 'string'))\n\t\t\t\t\treturn error.every($fhcAlert.alertSystemError);\n\n\t\t\t\t// Error has been handled already\n\t\t\t\tif (error.hasOwnProperty('handled') && error.handled)\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is object\n\t\t\t\tif (typeof error === 'object' && error !== null) {\n\t\t\t\t\tlet errMsg = '';\n\n\n\t\t\t\t\tif (error.hasOwnProperty('response') && error.response?.data?.retval)\n\t\t\t\t\t\terrMsg += 'Error Message: ' + (error.response.data.retval.message || error.response.data.retval) + '\\r\\n';\n\t\t\t\t\telse if (error.hasOwnProperty('message'))\n\t\t\t\t\t\terrMsg += 'Error Message: ' + error.message.toUpperCase() + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('config') && error.config.hasOwnProperty('url'))\n\t\t\t\t\t\terrMsg += 'Error ConfigURL: ' + error.config.url + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('stack'))\n\t\t\t\t\t\terrMsg += 'Error Stack: ' + error.stack + '\\r\\n';\n\t\t\t\t\t\n\t\t\t\t\t// Fallback object error message\n\t\t\t\t\tif (errMsg == '')\n\t\t\t\t\t\terrMsg = 'Error Message: ' + JSON.stringify(error) + '\\r\\n';\n\n\t\t\t\t\terrMsg += 'Error Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\n\t\t\t\t\treturn $fhcAlert.alertSystemError(errMsg);\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\thandleSystemMessage(message) {\n\t\t\t\t// Message is string\n\t\t\t\tif (typeof message === 'string')\n\t\t\t\t\treturn $fhcAlert.alertWarning(message);\n\n\t\t\t\t// Message is array of strings\n\t\t\t\tif (Array.isArray(message)) {\n\t\t\t\t\t// If Array has only Strings\n\t\t\t\t\tif (message.every(msg => typeof msg === 'string'))\n\t\t\t\t\t\treturn message.every($fhcAlert.alertWarning);\n\n\t\t\t\t\t// If Array has only Objects\n\t\t\t\t\tif (message.every(msg => typeof msg === 'object') && msg !== null) {\n\t\t\t\t\t\treturn message.every(msg => {\n\t\t\t\t\t\t\tif (msg.hasOwnProperty('data') && msg.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(msg.data.retval));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(msg));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Message is Object with data property\n\t\t\t\tif (typeof message === 'object' && message !== null){\n\t\t\t\t\tif (message.hasOwnProperty('data') && message.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t// NOTE(chris): changed: alertSystemError => alertWarning\n\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(message.data.retval));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(message));\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\tresetFormValidation(form) {\n\t\t\t\tconst event = new Event('fhc-form-reset');\n\t\t\t\tform.querySelectorAll(['[data-fhc-form-validate],[data-fhc-form-error]']).forEach(el => el.dispatchEvent(event));\n\t\t\t\t/*const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\tif (alert) {\n\t\t\t\t\talert.innerHTML = '';\n\t\t\t\t\talert.classList.add('d-none');\n\t\t\t\t}\n\t\t\t\tform.querySelectorAll('.invalid-feedback').forEach(n => n.remove());\n\t\t\t\tform.querySelectorAll('.is-invalid').forEach(n => n.classList.remove('is-invalid'));\n\t\t\t\tform.querySelectorAll('.is-valid').forEach(n => n.classList.remove('is-valid'));*/\n\t\t\t},\n\t\t\thandleFormValidation(error, form) {\n\t\t\t\tif (form === undefined) {\n\t\t\t\t\tif (error && error.nodeType === Node.ELEMENT_NODE)\n\t\t\t\t\t\treturn err => $fhcAlert.handleFormValidation(err, error);\n\t\t\t\t} else {\n\t\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t\tif (typeof errors !== \"object\")\n\t\t\t\t\t\t\terrors = error.response.data;\n\n\t\t\t\t\t\t// NOTE(chris): reset form validation\n\t\t\t\t\t\t$fhcAlert.resetFormValidation(form);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// NOTE(chris): set form input validation\n\t\t\t\t\t\tconst notFound = Object.entries(errors).filter(([key, detail]) => {\n\t\t\t\t\t\t\tconst input = form.querySelector('[data-fhc-form-validate=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\tinput.dispatchEvent(new CustomEvent('fhc-form-invalidate', {detail}));\n\n\t\t\t\t\t\t\t/*const input = form.querySelector('[name=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\tinput.classList.add('is-invalid');\n\t\t\t\t\t\t\tconst feedback = document.createElement('div');\n\t\t\t\t\t\t\tfeedback.classList.add('invalid-feedback');\n\t\t\t\t\t\t\tfeedback.innerHTML = detail;\n\t\t\t\t\t\t\tinput.after(feedback);*/\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}).map(arr => arr[1]);\n\n\n\t\t\t\t\t\t//const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\t\t\tconst alert = form.querySelector('[data-fhc-form-error]');\n\t\t\t\t\t\tif (alert && notFound.length) {\n\t\t\t\t\t\t\talert.dispatchEvent(new CustomEvent('fhc-form-error', {detail: notFound}));\n\t\t\t\t\t\t\t/*notFound.forEach(txt => {\n\t\t\t\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\t\t\t\tp.innerHTML = txt;\n\t\t\t\t\t\t\t\talert.append(p);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (notFound.length) {\n\t\t\t\t\t\t\t\talert.lastChild.classList.add('mb-0');\n\t\t\t\t\t\t\t\talert.classList.remove('d-none');\n\t\t\t\t\t\t\t}*/\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnotFound.forEach($fhcAlert.alertError);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t$fhcAlert.alertError((typeof errors === 'object') ? Object.values(errors) : errors);\n\t\t\t\t} else {\n\t\t\t\t\t$fhcAlert.handleSystemError(error);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tapp.config.globalProperties.$fhcAlert = $fhcAlert;\n\t\tapp.provide('$fhcAlert', app.config.globalProperties.$fhcAlert);\n\t}\n}","import FhcAlert from './FhcAlert.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$api) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!app.config.globalProperties.$fhcAlert)\n\t\t\tapp.use(FhcAlert);\n\n\t\tfunction _send_array_or_object(errors, func) {\n\t\t\tif (Array.isArray(errors))\n\t\t\t\terrors.forEach(func);\n\t\t\telse\n\t\t\t\tObject.entries(errors).forEach(\n\t\t\t\t\t([title, errs]) => errs.forEach(\n\t\t\t\t\t\terror => func(error, title)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t}\n\t\tlet DEFAULT_ERROR_CONFIG = {\n\t\t\tsuccess: true,\n\t\t\tfail: true,\n\t\t\tcombine: {\n\t\t\t\tform: ['validation', 'general'],\n\t\t\t\ttoast: ['validation', 'general', 'not_found', 'site_failed']\n\t\t\t},\n\t\t\thandler: {\n\t\t\t\tform(form, errors) {\n\t\t\t\t\tform.clearValidation();\n\t\t\t\t\terrors.forEach(err => form.setFeedback(\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\terr.messages || err.message\n\t\t\t\t\t));\n\t\t\t\t},\n\t\t\t\tasync toast(errors) {\n\t\t\t\t\tconst $p = app.config.globalProperties.$p;\n\t\t\t\t\tif (!$p)\n\t\t\t\t\t\treturn Promise.reject('Phrasen plugin not loaded!');\n\t\t\t\t\n\t\t\t\t\tasync function _format_toast(errors) {\n\t\t\t\t\t\terrors = errors.reduce((result, err) => {\n\t\t\t\t\t\t\tswitch (err.type) {\n\t\t\t\t\t\t\tcase 'not_found':\n\t\t\t\t\t\t\tcase 'site_failed':\n\t\t\t\t\t\t\t\tif (err.message)\n\t\t\t\t\t\t\t\t\tresult[err.message] = [err.url];\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tresult._default = [err.url];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'general':\n\t\t\t\t\t\t\t\tif (!result._default)\n\t\t\t\t\t\t\t\t\tresult._default = [];\n\t\t\t\t\t\t\t\tresult._default.push(err.message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'validation':\n\t\t\t\t\t\t\t\tObject.entries(err.messages)\n\t\t\t\t\t\t\t\t\t.forEach(([field, msg]) => {\n\t\t\t\t\t\t\t\t\t\tif (!result[field])\n\t\t\t\t\t\t\t\t\t\t\tresult[field] = [];\n\t\t\t\t\t\t\t\t\t\tif (Array.isArray(msg))\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(...msg);\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(msg);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}, {});\n\t\t\t\t\t\tlet counter = 0;\n\t\t\t\t\t\tconst msgs = await Promise.all(Object.entries(errors)\n\t\t\t\t\t\t\t.sort((a, b) => ['_default'].indexOf(b[0]) - ['_default'].indexOf(a[0])) // sort _default first\n\t\t\t\t\t\t\t.map(async ([field, msgs]) => {\n\t\t\t\t\t\t\t\tif (field == '_default') {\n\t\t\t\t\t\t\t\t\tawait $p.loadCategory('dashboard');\n\t\t\t\t\t\t\t\t\tconst general = $p.t('dashboard/general');\n\t\t\t\t\t\t\t\t\tfield = '
' + general + '
';\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfield = '
' + field + '
';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcounter += msgs.length;\n\t\t\t\t\t\t\t\treturn field\n\t\t\t\t\t\t\t\t\t+ '
'\n\t\t\t\t\t\t\t\t\t+ msgs.join('
')\n\t\t\t\t\t\t\t\t\t+ '
';\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcounter,\n\t\t\t\t\t\t\tmsgs\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet counter, msgs;\n\t\t\t\t\tif (Array.isArray(errors)) {\n\t\t\t\t\t\t({ counter, msgs } = await _format_toast(errors));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t({ counter, msgs } = await Object.entries(errors)\n\t\t\t\t\t\t\t.reduce(async (res, [title, errs]) => {\n\t\t\t\t\t\t\t\tconst result = await res;\n\t\t\t\t\t\t\t\tconst { counter, msgs } = await _format_toast(errs);\n\t\t\t\t\t\t\t\tresult.counter += counter;\n\t\t\t\t\t\t\t\tresult.msgs.push('
'\n\t\t\t\t\t\t\t\t\t+ title\n\t\t\t\t\t\t\t\t\t+ '
'\n\t\t\t\t\t\t\t\t\t+ msgs.join('')\n\t\t\t\t\t\t\t\t\t+ '
');\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}, Promise.resolve({ counter: 0, msgs: []})));\n\t\t\t\t\t}\n\n\t\t\t\t\tawait $p.loadCategory('ui');\n\t\t\t\t\tconst n_errors = $p.t('ui/n_errors', { n: counter });\n\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\tn_errors,\n\t\t\t\t\t\t'
' + msgs.join('') + '
',\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tphp(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('warn', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('info', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\tmessage = title + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\texception(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tdb(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tauth(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\ttitle += ': ' + error.message;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ttitle = error.message;\n\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (options?.errorHandling !== undefined)\n\t\t\tDEFAULT_ERROR_CONFIG = _merge_error_config(options.errorHandling);\n\t\t\n\t\tfunction get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\t\tfunction clean_return_value(response) {\n\t\t\tif (typeof response.data === 'string' || response.data instanceof String)\n\t\t\t\treturn clean_return_value({ data: response });\n\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result)\n\t\t\t\treturn {meta: {response}, data: null};\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = { response };\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tfunction _merge_error_config(config) {\n\t\t\tif (config === false || config === 'off')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false, fail: false };\n\t\t\t\n\t\t\tif (!config || config === true)\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tif (config === 'success')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, fail: false };\n\t\t\t\n\t\t\tif (config === 'fail')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false };\n\t\t\t\n\t\t\tconst { success, fail, handler, combine } = config;\n\t\t\t\n\t\t\tconfig = { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tObject.entries({ fail, success }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = value;\n\t\t\t});\n\t\t\tObject.entries({ handler, combine }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = { ...config[key], ...value };\n\t\t\t});\n\n\t\t\treturn config;\n\t\t}\n\t\tfunction get_error_handler(config) {\n\t\t\tconst result = _merge_error_config(config?.errorHandling);\n\n\t\t\tif (!config?.form) {\n\t\t\t\tresult.combine = { ...result.combine, form: [] };\n\t\t\t} else {\n\t\t\t\tconst formHandler = result.handler.form;\n\t\t\t\tresult.handler = { ...result.handler, form: errors => formHandler(config.form, errors) };\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t\tfunction get_error_list(error) {\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\treturn [{\n\t\t\t\t\t\ttype: 'not_found',\n\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t\t}];\n\t\t\t\t} else {\n\t\t\t\t\tif (error.response.data.errors == undefined) return [];\n\t\t\t\t\treturn error.response.data.errors;\n\t\t\t\t}\n\t\t\t} else if (error.request) {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'site_failed',\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t}];\n\t\t\t} else {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'script',\n\t\t\t\t\tmessage: error.message\n\t\t\t\t}];\n\t\t\t}\n\t\t}\n\t\tfunction popHandleableErrors(errorHandling, errors) {\n\t\t\tconst result = {};\n\t\t\tconst copy = [];\n\n\t\t\tif (errors == undefined) return {};\n\n\t\t\twhile (errors.length)\n\t\t\t\tcopy.push(errors.pop());\n\t\t\tfor (var error of copy) {\n\t\t\t\tlet type = error.type;\n\t\t\t\tlet newType = null;\n\t\t\t\tfor (var t in errorHandling.combine) {\n\t\t\t\t\tlet newTypeCombinesType = errorHandling\n\t\t\t\t\t\t.combine[t]\n\t\t\t\t\t\t.includes(type);\n\t\t\t\t\tlet newTypeHasHandler = errorHandling.handler[t];\n\t\t\t\t\tif (newTypeCombinesType && newTypeHasHandler) {\n\t\t\t\t\t\tnewType = t;\n\t\t\t\t\t\tif (newType == 'form')\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (newType)\n\t\t\t\t\ttype = newType;\n\t\t\t\tconst handler = errorHandling.handler[type];\n\t\t\t\tif (handler) {\n\t\t\t\t\tif (!result[type])\n\t\t\t\t\t\tresult[type] = [];\n\t\t\t\t\tif (Array.isArray(error))\n\t\t\t\t\t\tresult[type].push(...error);\n\t\t\t\t\telse\n\t\t\t\t\t\tresult[type].push(error);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\terrors.push(error);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t+ FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(\n\t\t\tresponse => {\n\t\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\t\treturn clean_return_value(response);\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\tif (response.data.errors)\n\t\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$api._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t\t);\n\n\t\t\t\treturn clean_return_value(response);\n\t\t\t},\n\t\t\terror => {\n\t\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\n\t\t\t\tconst errorConfig = get_error_handler(error.config);\n\n\t\t\t\tif (!errorConfig.fail)\n\t\t\t\t\treturn Promise.reject(error);\n\n\t\t\t\tconst remaining = get_error_list(error);\n\n\t\t\t\tconst errors = popHandleableErrors(errorConfig, remaining);\n\n\t\t\t\tfor (var type in errors) {\n\t\t\t\t\terrorConfig.handler[type](errors[type]);\n\t\t\t\t}\n\n\t\t\t\tif (remaining.length)\n\t\t\t\t\treturn Promise.reject(error);\n\t\t\t\t\n\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\t\t\t}\n\t\t);\n\n\t\tapp.config.globalProperties.$api = {\n\t\t\tgetUri(url) {\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\t[uri, params, config] = get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\t[uri, data, config] = get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\tcall(factory, configoverwrite, form) {\n\t\t\t\tif (Array.isArray(factory)) {\n\t\t\t\t\tconst $api = app.config.globalProperties.$api;\n\n\t\t\t\t\treturn Promise\n\t\t\t\t\t\t.allSettled(factory.map((config, index) => {\n\t\t\t\t\t\t\tif (!Array.isArray(config))\n\t\t\t\t\t\t\t\tconfig = ['#' + index, config];\n\t\t\t\t\t\t\treturn $api.call(config[1], {\n\t\t\t\t\t\t\t\terrorHeader: config[0],\n\t\t\t\t\t\t\t\terrorHandling: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}))\n\t\t\t\t\t\t.then(result => {\n\t\t\t\t\t\t\tconst [ , , config ] = get_config(form, undefined, undefined, configoverwrite || {});\n\t\t\t\t\t\t\tconst errorConfig = get_error_handler(config);\n\n\t\t\t\t\t\t\tif (!errorConfig.success && !errorConfig.fail) {\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst typedErrors = {};\n\t\t\t\t\t\t\tfor (var res of result) {\n\t\t\t\t\t\t\t\tconst [ allowed, item ] = res.status === 'fulfilled'\n\t\t\t\t\t\t\t\t\t? [ errorConfig.success, res.value ]\n\t\t\t\t\t\t\t\t\t: [ errorConfig.fail, res.reason ];\n\t\t\t\t\t\t\t\tif (!allowed)\n\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\tconst errors = popHandleableErrors(errorConfig, get_error_list(item));\n\n\t\t\t\t\t\t\t\tfor (var type in errors) {\n\t\t\t\t\t\t\t\t\tif (!typedErrors[type])\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type] = {\n\t\t\t\t\t\t\t\t\t\t\t[item.config.errorHeader]: errors[type]\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type][item.config.errorHeader] = errors[type];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfor (var errType in typedErrors) {\n\t\t\t\t\t\t\t\terrorConfig.handler[errType](typedErrors[errType]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tlet { method, url, params, config } = factory;\n\t\t\t\tif (configoverwrite !== undefined) {\n\t\t\t\t\tconfig = configoverwrite;\n\t\t\t\t}\n\t\t\t\tif (!method) {\n\t\t\t\t\tmethod = 'get';\n\t\t\t\t}\n\t\t\t\tif (method.toLowerCase)\n\t\t\t\t\tmethod = method.toLowerCase();\n\t\t\t\tif (method == 'get') {\n\t\t\t\t\treturn this.get(form, url, params, config);\n\t\t\t\t} else if (method == 'post') {\n\t\t\t\t\treturn this.post(form, url, params, config);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"FhcApi: method not allowed:\", method);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tapp.provide('$api', app.config.globalProperties.$api);\n\t}\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/loadModule/' + category\n\t\t};\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst params = {categories, language}\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/phrasen/setLanguage',\n\t\t\tparams\n\t\t};\n\t},\n\tgetLanguage() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getLanguage'\n\t\t};\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getAllLanguages'\n\t\t};\n\t}\n};","import OldFhcApi from '../plugin/OldFhcApi.js'; // TODO(chris): remove at some point\nimport PluginsApi from './Api.js';\nimport ApiPhrasen from '../api/factory/phrasen.js';\n\nconst categories = Vue.reactive({});\nconst loadingModules = {};\nlet user_language = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language);\nexport let user_locale = Vue.computed(()=>{\n\tif(!user_language.value) return null;\n\treturn FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(language => language.sprache == user_language.value).LC_Time;\n});\n\nfunction extractCategory(obj, category) {\n\treturn obj.filter(e => e.category == category).reduce((res, elem) => {\n\t\tif (!res[elem.phrase])\n\t\t\tres[elem.phrase] = elem.text;\n\t\treturn res;\n\t}, {});\n}\nfunction getValueForLoadedPhrase(category, phrase, params) {\n\tlet result = categories[category][phrase];\n\tif (!result)\n\t\treturn '<< PHRASE ' + phrase + '>>';\n\tif (params)\n\t\tresult = result.replace(/\\{([^}]*)\\}/g, (match, p1) => params[p1] === undefined ? match : params[p1]);\n\treturn result;\n}\n\nconst phrasen = {\n\tuser_language,\n\tuser_locale,\n\tsetLanguage(language) {\n\t\tconst catArray = Object.keys(categories)\n\t\treturn this.config.globalProperties.$api\n\t\t\t.call(ApiPhrasen.setLanguage(catArray, language))\n\t\t\t.then(res => {\n\t\t\t\tres.data.forEach(row => {\n\t\t\t\t\tcategories[row.category][row.phrase] = row.text\n\t\t\t\t})\n\n\t\t\t\t// update the reactive data that holds the current active user_language\n\t\t\t\tuser_language.value = language;\n\n\t\t\t\treturn res\n\t\t\t})\n\t},\n\tloadCategory(category) {\n\t\tif (Array.isArray(category))\n\t\t\treturn Promise.all(category.map(this.config.globalProperties\n\t\t\t\t.$p.loadCategory));\n\n\t\tif (!loadingModules[category])\n\t\t\tloadingModules[category] = this.config.globalProperties.$api\n\t\t\t\t.call(ApiPhrasen.loadCategory(category))\n\t\t\t\t.then(res => res?.data ? extractCategory(res.data, category) : {})\n\t\t\t\t.then(res => {\n\t\t\t\t\tcategories[category] = res;\n\t\t\t\t});\n\t\treturn loadingModules[category];\n\t},\n\tt_ref(category, phrase, params) {\n\t\tconsole.warn('deprecated');\n\t\treturn Vue.computed(() => this.t(category, phrase, params));\n\t},\n\tt(category, phrase, params) {\n\t\tif (params === undefined && (\n\t\t\t(Array.isArray(category) && category.length == 2) ||\n\t\t\t(category.split && category.split('/').length == 2))\n\t\t\t) {\n\t\t\tparams = phrase;\n\t\t\t[category, phrase] = category.split ? category.split('/') : category;\n\t\t}\n\t\tif (phrase === undefined) {\n\t\t\tconsole.error('invalid input', category, phrase, params);\n\t\t\treturn '';\n\t\t}\n\t\tlet val = Vue.computed(() => {\n\t\t\tif (!categories[category])\n\t\t\t\treturn '';\n\t\t\treturn getValueForLoadedPhrase(category, phrase, params);\n\t\t});\n\t\tif (!categories[category])\n\t\t\tthis.loadCategory(category);\n\t\treturn val.value;\n\t}\n};\n\nexport default {\n\tinstall(app, options) {\n\t\tif (!app.config.globalProperties.$fhcApi)\n\t\t\tapp.use(OldFhcApi); // TODO(chris): remove at some point\n\t\tif (!app.config.globalProperties.$api)\n\t\t\tapp.use(PluginsApi);\n\t\tapp.config.globalProperties.$p = {\n\t\t\tt: phrasen.t,\n\t\t\tloadCategory: cat => phrasen.loadCategory.call(app, cat),\n\t\t\tsetLanguage: lang => phrasen.setLanguage.call(app, lang),\n\t\t\tuser_language: user_language,\n\t\t\tuser_locale,\n\t\t\tt_ref: phrasen.t_ref\n\t\t};\n\t\tapp.provide('$p', app.config.globalProperties.$p);\n\t}\n}","import PluginsPhrasen from '../../plugins/Phrasen.js';\nimport {setScrollbarWidth} from \"../../helpers/CssVarCalcHelpers.js\";\n\nconst app = Vue.createApp({\n\tname: 'DocumentsApp',\n\tdata() {\n\t\treturn {\n\t\t\tinscriptiontable: null,\n\t\t\tinscriptiontableFilters: {},\n\t\t\tstudienerfolgsbestaetigungtable: null,\n\t\t\tstudienerfolgsbestaetigungtableFilters: {},\n\t\t\tabschlussdokumentetable: null\n\t\t};\n\t},\n\tcomputed: {\n\t\tinscriptiontableFilter() {\n\t\t\tconst filter = [];\n\t\t\tfor (var k in this.inscriptiontableFilters)\n\t\t\t\tif (this.inscriptiontableFilters[k])\n\t\t\t\t\tfilter.push({\n\t\t\t\t\t\tfield: k,\n\t\t\t\t\t\ttype: '=',\n\t\t\t\t\t\tvalue: this.inscriptiontableFilters[k]\n\t\t\t\t});\n\t\t\treturn filter;\n\t\t},\n\t\tinscriptiontableEmpty() {\n\t\t\t// NOTE(chris): empty result on filter\n\t\t\tif (this.inscriptiontableFilters.Stsem)\n\t\t\t\treturn this.$p.t('tools', 'studienbeitragFuerSSNochNichtBezahlt', {stsem: this.inscriptiontableFilters.Stsem});\n\t\t\tif (this.inscriptiontableFilters.Stg)\n\t\t\t\treturn this.$p.t('tools', 'studienbeitragFuerStgNochNichtBezahlt', {stsem: this.inscriptiontableFilters.Stg});\n\t\t\t\n\t\t\treturn this.$p.t('tools', 'studienbeitragNochNichtBezahlt');\n\t\t},\n\t\tstudienerfolgsbestaetigungtableFilter() {\n\t\t\tconst filter = [];\n\t\t\tfor (var k in this.studienerfolgsbestaetigungtableFilters)\n\t\t\t\tif (this.studienerfolgsbestaetigungtableFilters[k])\n\t\t\t\t\tfilter.push({\n\t\t\t\t\t\tfield: k,\n\t\t\t\t\t\ttype: '=',\n\t\t\t\t\t\tvalue: this.studienerfolgsbestaetigungtableFilters[k]\n\t\t\t\t});\n\t\t\treturn filter;\n\t\t}\n\t},\n\tmethods: {\n\t\tchangeFilter(table, field, evt) {\n\t\t\tthis[table + 'Filters'][field] = evt.target.value;\n\t\t\tthis[table].clearFilter();\n\t\t\tif (this[table + 'Filter'].length)\n\t\t\t\tthis[table].setFilter(this[table + 'Filter']);\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.inscriptiontable = new Tabulator(this.$refs.inscriptiontable, {\n\t\t\tlayout: 'fitDataStretch',\n\t\t\tplaceholder: this.$p.t('tools', 'studienbeitragNochNichtBezahlt')\n\t\t});\n\t\tthis.studienerfolgsbestaetigungtable = new Tabulator(this.$refs.studienerfolgsbestaetigungtable, {\n\t\t\tlayout: 'fitDataStretch'\n\t\t});\n\t\tthis.abschlussdokumentetable = new Tabulator(this.$refs.abschlussdokumentetable, {\n\t\t\tlayout: 'fitDataStretch',\n\t\t\tplaceholder: this.$p.t('tools', 'nochKeineAbschlussdokumenteVorhanden')\n\t\t});\n\n\t\t// NOTE(chris): empty result on filter\n\t\tconst div = Vue.h(\n\t\t\t'div',\n\t\t\t{\n\t\t\t\tclass: 'position-absolute top-0 left-0 w-100 h-100 d-flex justify-content-center align-items-center fw-bold text-muted'\n\t\t\t},\n\t\t\t[\n\t\t\t\tthis.inscriptiontableEmpty\n\t\t\t]\n\t\t);\n\t\tthis.inscriptiontable.on('dataSorted', (sorters, rows) => {\n\t\t\tif (!rows.length) {\n\t\t\t\tdiv.children = [this.inscriptiontableEmpty];\n\t\t\t\tVue.render(div, this.inscriptiontable.element.querySelector('.tabulator-tableholder'));\n\t\t\t} else {\n\t\t\t\tVue.render(null, this.inscriptiontable.element.querySelector('.tabulator-tableholder'));\n\t\t\t}\n\t\t});\n\t}\n});\n\nsetScrollbarWidth();\n\napp.use(PluginsPhrasen);\napp.mount('#content');\n","// Create a temporary div element, set styles to ensure it's scrollable and off-screen, get scrollbar width from that\nfunction getScrollbarWidth() {\n\tconst div = document.createElement('div');\n\n\tdiv.style.position = 'absolute';\n\tdiv.style.top = '-9999px';\n\tdiv.style.width = '100px';\n\tdiv.style.height = '100px';\n\tdiv.style.overflow = 'scroll';\n\n\tdocument.body.appendChild(div);\n\tconst scrollbarWidth = div.offsetWidth - div.clientWidth;\n\tdocument.body.removeChild(div);\n\n\treturn scrollbarWidth;\n}\n\n// Detect the browser and set a CSS variable for the scrollbar width since chrome scrollbars mess with 100vw/vh css\nexport function setScrollbarWidth() {\n\tconst isChromium = /Chrome/.test(navigator.userAgent);\n\tconst isFirefox = /Firefox/.test(navigator.userAgent);\n\n\tif (isChromium) {\n\t\tconst width = getScrollbarWidth() + 'px';\n\t\tdocument.body.style.setProperty('--scrollbar-width', width); // Set the value for Chrome\n\t} else if (isFirefox) {\n\t\tdocument.body.style.setProperty('--scrollbar-width', '0px'); // Set the value for Firefox or adjust as needed\n\t}\n}"],"names":["search","searchsettings","config","this","$fhcApi","post","searchAdvanced","searchdummy","phrasen$1","loadCategory","category","get","setLanguage","categories","language","payload","getLanguage","getActiveDbLanguages","navigation","getHeader","navigation_page","getMenu","filter$1","saveCustomFilter","wsParams","filterUniqueId","filterType","customFilterName","removeCustomFilter","filterId","applyFilterFields","filterFields","addFilterField","filterField","removeFilterField","getFilterById","getFilter","studstatus","abmeldung","getDetails","antrag_id","prestudent_id","url","undefined","create","stdsem","grund","studiensemester","errorHandling","cancel","Array","isArray","Promise","allSettled","map","antrag","studierendenantrag_id","errorHeader","unterbrechung","datum_wiedereinstieg","attachment","wiederholung","getLvs","saveLvs","forbiddenLvs","mandatoryLvs","leitung","getStgs","getAntraege","params","then","res","data","getHistory","getPrestudents","query","signal","timeout","approve","a","reject","reopen","pause","unpause","object","approveObjection","denyObjection","profil","getView","uid","FHC_JS_DATA_STORAGE_OBJECT","app_root","ci_router","fotoSperre","value","isStudent","isMitarbeiter","getZustellAdresse","getZustellKontakt","getGemeinden","nation","zip","getAllNationen","profilUpdate","getStatus","getTopic","acceptProfilRequest","profil_update_id","status_message","topic","requested_change","denyProfilRequest","insertFile","dms","replace","getProfilRequestFiles","requestID","selectProfilRequest","id","insertProfilRequest","fileID","updateProfilRequest","ID","deleteProfilRequest","lvPlan","getRoomInfo","ort_kurzbz","start_date","end_date","getStunden","getOrtReservierungen","getLvPlanReservierungen","getLehreinheitStudiensemester","lehreinheit_id","studiensemesterDateInterval","date","LvPlanEvents","lv_id","stv","verband","favorites","set","students","studiensemester_kurzbz","encodeURIComponent","getUri","prestudent","person","person_id","relative_path","filter","getStg","setStg","studiengang_kz","konto","tabulatorConfig","self","ajaxURL","ajaxParams","modelValue","e","only_open","studiengang_kz_intern","stg_kz","ajaxRequestFunc","ajaxResponse","response","checkDoubles","form","confirmErrorHandler","error","insert","counter","edit","delete","buchungsnr","getBuchungstypen","group","getGruppen","deleteGroup","kontakt","getAdressen","addNewAddress","loadAddress","address_id","updateAddress","deleteAddress","getPlaces","plz","getFirmen","searchString","getNations","getAdressentypen","getBankverbindung","addNewBankverbindung","loadBankverbindung","bankverbindung_id","updateBankverbindung","deleteBankverbindung","getKontakte","addNewContact","loadContact","kontakt_id","updateContact","deleteContact","getStandorteByFirma","getKontakttypen","updatePrestudent","getBezeichnungZGV","getBezeichnungMZgv","getBezeichnungDZgv","getAusbildung","getAufmerksamdurch","getBerufstaetigkeit","getTypenStg","getBisstandort","getHistoryPrestudent","getMaxSem","studiengang_kzs","advanceStatus","status_kurzbz","ausbildungssemester","confirmStatus","isLastStatus","deleteStatus","getLastBismeldestichtag","getHistoryPrestudents","status","insertStatus","loadStatus","updateStatus","getStudienplaene","getStudiengang","getStatusgruende","getStati","addStudent","changeStatus","getStatusarray","details","save","exam","getPruefungen","loadPruefung","pruefung_id","getTypenPruefungen","getAllLehreinheiten","getLvsByStudent","getLvsandLesByStudent","semester","getLvsAndMas","getMitarbeiterLv","getNoten","checkZeugnisnoteLv","addPruefung","updatePruefung","deletePruefung","abschlusspruefung","getAbschlusspruefung","addNewAbschlusspruefung","loadAbschlusspruefung","updateAbschlusspruefung","deleteAbschlusspruefung","getTypenAbschlusspruefung","getTypenAntritte","getBeurteilungen","getAkadGrade","getTypStudiengang","getMitarbeiter","getPruefer","checkForExistingExams","uids","grades","list","getCertificate","getTeacherProposal","getRepeaterGrades","updateCertificate","lehrveranstaltung_id","student_uid","note","lehrveranstaltung_bezeichnung","deleteCertificate","copyTeacherProposalToCertificate","copyRepeaterGradeToCertificate","studierendenantrag_lehrveranstaltung_id","lv_bezeichnung","getGradeFromPoints","points","manualErrorHandling","mobility","getMobilitaeten","getProgramsMobility","addNewMobility","loadMobility","bisio_id","updateMobility","deleteMobility","getLVList","getPurposes","getSupports","getListPurposes","getListSupports","deleteMobilityPurpose","addMobilityPurpose","deleteMobilitySupport","addMobilitySupport","archiv","getArchivVorlagen","archive","archiveSigned","update","akte_id","documents","getDocumentsUnaccepted","getDocumentsAccepted","deleteZuordnung","dokument_kurzbz","createZuordnung","loadAkte","getDoktypen","updateFile","deleteFile","uploadFile","exemptions","getAnrechnungen","getLehrveranstaltungen","getBegruendungen","getLvsKompatibel","getLektoren","addNewAnrechnung","loadAnrechnung","anrechnung_id","editAnrechnung","deleteAnrechnung","jointstudies","getStudies","getTypenMobility","getStudiensemester","getStudyprograms","getListPartner","getStatiPrestudent","loadStudy","insertStudy","updateStudy","deleteStudy","courselist","getCourselist","group_consecutiveHours","dbStundenplanTable","configStudent","configStudents","notiz","getNotizen","type","getUid","addNewNotiz","formData","loadNotiz","notiz_id","loadDokumente","deleteNotiz","type_id","updateNotiz","event","isBerechtigt","betriebsmittel","getAllBetriebsmittel","addNewBetriebsmittel","loadBetriebsmittel","betriebsmittelperson_id","updateBetriebsmittel","deleteBetriebsmittel","getTypenBetriebsmittel","loadInventarliste","checkperson","updatePersonUnrulyStatus","unrulyParam","unruly","filterPerson","base","axios","ort","getContentID","ort_kurbz","getRooms","datum","von","bis","typ","personenanzahl","getRoomTypes","cms","content","content_id","version","sprache","sichtbar","getNews","page","page_size","news","limit","getNewsRowCount","getNewsExtra","lehre","getStudentenMail","getLvInfo","getStudentPruefungen","getStudentProjektarbeiten","getStudentProjektabgaben","detail","projektarbeit_id","postStudentProjektarbeitEndupload","Headers","postStudentProjektarbeitZwischenabgabe","getStudentProjektarbeitAbgabeFile","paabgabe_id","window","location","getMitarbeiterProjektarbeiten","all","postProjektarbeitAbgabe","termin","paabgabetyp_kurzbz","bezeichnung","fixtermin","insertvon","kurzbz","deleteProjektarbeitAbgabe","postSerientermin","projektarbeit_ids","fetchDeadlines","addons","getLvMenu","lvid","messages","getMessages","size","getVorlagen","getMsgVarsLoggedInUser","getMessageVarsPerson","getMsgVarsPrestudent","getPersonId","getVorlagentext","vorlage_kurzbz","getNameOfDefaultRecipient","getPreviewText","getReplyData","messageId","sendMessageFromModalContext","sendMessage","deleteMessage","vorlagen","getVorlagenByLoggedInUser","studium","getAllStudienSemester","studiengang","studienplan","getStudiengaengeForStudienSemester","getStudienplaeneBySemester","getLvPlanForStudiensemester","getLvEvaluierungInfo","FhcApiFactory","phrasen","dashboard","getViewData","bookmark","getBookmarks","bookmark_id","title","tag","ampeln","open","confirm","ampel_id","studiengangInformation","getStudiengangByKz","menu","authinfo","getAuthUID","getAuthInfo","getAll","OldFhcApi","install","app","options","globalProperties","factory","console","warn","addEndpoints","_get_config","uri","TypeError","clearValidation","setFeedback","_clean_return_value","result","meta","fhcApiAxios","baseURL","interceptors","request","use","method","FormData","Object","values","every","item","FileList","i","File","newData","entries","reduce","nd","key","file","append","length","jsondata","forEach","JSON","stringify","errors","err","_defaultErrorHandlers","code","handled","$fhcAlert","alertDefault","message","responseURL","alertError","validation","$p","t","apply","general","php","filename","line","backtrace","function","severity","alertSystemError","exception","class","db","heading","sql","join","auth","controller","required_permissions","FhcApiFactoryWrapper","constructor","factorypart","root","defineProperty","noWarn","keys","bind","provide","CORE_REST_CLIENT_ERROR","CORE_REST_CLIENT_RETVAL","CoreRESTClient","wsURL","wsParameters","axiosParameters","_axiosCall","isSuccess","hasOwnProperty","isError","hasData","trim","getData","getError","getErrorCode","_generateRouterURI","_printDebug","parameters","errorThrown","axiosCallObj","prop","helperAppContainer","document","createElement","helperApp","Vue","createApp","name","components","PvToast","PvConfirm","methods","mailToUrl","slotProps","systemerror_mailto","called_path","called_method","openMessagecard","bootstrap","Collapse","getOrCreateInstance","target","getAttribute","toggle","unmounted","parentElement","removeChild","computed","showmaillink","template","PvConfig","PvConfirmationService","helperAppInstance","mount","body","appendChild","FhcAlert","FhcPhrasen","alertSuccess","$refs","toast","add","summary","life","alertInfo","alertWarning","alert","confirmDelete","resolve","$confirm","require","header","acceptLabel","acceptClass","rejectLabel","rejectClass","accept","sticky","html","alertMultiple","messageArray","handleSystemError","toLowerCase","errMsg","retval","toUpperCase","stack","handleSystemMessage","msg","resetFormValidation","Event","querySelectorAll","el","dispatchEvent","handleFormValidation","nodeType","Node","ELEMENT_NODE","notFound","input","querySelector","CustomEvent","arr","PluginsApi","$api","_send_array_or_object","func","errs","DEFAULT_ERROR_CONFIG","success","fail","combine","handler","async","_format_toast","_default","push","field","msgs","sort","b","indexOf","n_errors","n","get_config","clean_return_value","String","_merge_error_config","get_error_handler","formHandler","get_error_list","popHandleableErrors","copy","pop","newType","newTypeCombinesType","includes","newTypeHasHandler","errorConfig","remaining","call","configoverwrite","index","typedErrors","allowed","reason","errType","ApiPhrasen","reactive","loadingModules","user_language","ref","user_locale","server_languages","find","LC_Time","catArray","row","phrase","text","obj","elem","extractCategory","t_ref","split","val","match","p1","getValueForLoadedPhrase","PluginsPhrasen","cat","lang","inscriptiontable","inscriptiontableFilters","studienerfolgsbestaetigungtable","studienerfolgsbestaetigungtableFilters","abschlussdokumentetable","inscriptiontableFilter","k","inscriptiontableEmpty","Stsem","stsem","Stg","studienerfolgsbestaetigungtableFilter","changeFilter","table","evt","clearFilter","setFilter","mounted","Tabulator","layout","placeholder","div","h","on","sorters","rows","render","element","children","isChromium","test","navigator","userAgent","isFirefox","width","style","position","top","height","overflow","scrollbarWidth","offsetWidth","clientWidth","getScrollbarWidth","setProperty","setScrollbarWidth"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Documents.js","sources":["../../../../js/api/search.js","../../../../js/api/phrasen.js","../../../../js/api/navigation.js","../../../../js/api/filter.js","../../../../js/api/studstatus.js","../../../../js/api/profil.js","../../../../js/api/profilUpdate.js","../../../../js/api/lvPlan.js","../../../../js/api/stv.js","../../../../js/api/stv/verband.js","../../../../js/api/stv/students.js","../../../../js/api/stv/filter.js","../../../../js/api/stv/konto.js","../../../../js/api/stv/group.js","../../../../js/api/stv/kontakt.js","../../../../js/api/stv/prestudent.js","../../../../js/api/stv/status.js","../../../../js/api/stv/details.js","../../../../js/api/stv/exam.js","../../../../js/api/stv/abschlusspruefung.js","../../../../js/api/stv/grades.js","../../../../js/api/stv/mobility.js","../../../../js/api/stv/archiv.js","../../../../js/api/stv/documents.js","../../../../js/api/stv/exemptions.js","../../../../js/api/stv/jointstudies.js","../../../../js/api/stv/courselist.js","../../../../js/api/notiz.js","../../../../js/api/notiz/person.js","../../../../js/api/betriebsmittel.js","../../../../js/api/betriebsmittel/person.js","../../../../js/api/checkperson.js","../../../../js/api/ort.js","../../../../js/api/cms.js","../../../../js/api/lehre.js","../../../../js/api/addons.js","../../../../js/api/messages.js","../../../../js/api/messages/person.js","../../../../js/api/vorlagen.js","../../../../js/api/studium.js","../../../../js/api/fhcapifactory.js","../../../../js/api/dashboard.js","../../../../js/api/bookmark.js","../../../../js/api/ampeln.js","../../../../js/api/studiengang.js","../../../../js/api/menu.js","../../../../js/api/authinfo.js","../../../../js/api/language.js","../../../../js/plugin/OldFhcApi.js","../../../../js/RESTClient.js","../../../../js/plugins/FhcAlert.js","../../../../js/plugins/Api.js","../../../../js/api/factory/phrasen.js","../../../../js/plugins/Phrasen.js","../../../../js/apps/Cis/Documents.js","../../../../js/helpers/CssVarCalcHelpers.js"],"sourcesContent":["/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsearch(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/search';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchAdvanced(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/searchAdvanced';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchdummy(searchsettings) {\n\t\tconst url = 'public/js/apps/api/dummyapi.php/Search';\n\t\treturn this.$fhcApi.post(url, searchsettings);\n\t}\n};\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/loadModule/' + category);\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst payload = {categories, language}\n\t\treturn this.$fhcApi.post('/api/frontend/v1/phrasen/setLanguage', payload);\n\t},\n\tgetLanguage() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getLanguage', {});\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getAllLanguages', {});\n\t}\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetHeader(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/header',\n\t\t\t{ navigation_page }\n\t\t);\n\t},\n\tgetMenu: function(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/menu',\n\t\t\t{ navigation_page }\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/saveCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t);\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/applyFilterFields',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t);\n\t},\n\taddFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/addFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tgetFilter(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tabmeldung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/abmeldung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(stdsem, prestudent_id, grund) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/abmeldung/createAntrag', {\n\t\t\t\tstudiensemester: stdsem,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\tif (!Array.isArray(antrag_id))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t\t{ antrag_id }\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag_id.map(antrag => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t{ antrag_id: antrag.studierendenantrag_id },\n\t\t\t\t{ errorHeader: '#' + antrag.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t},\n\tunterbrechung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/unterbrechung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(studiensemester, prestudent_id, grund, datum_wiedereinstieg, attachment) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/createAntrag', {\n\t\t\t\tstudiensemester,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund,\n\t\t\t\tdatum_wiedereinstieg,\n\t\t\t\tattachment\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/cancelAntrag', {\n\t\t\t\tantrag_id\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t}\n\t},\n\twiederholung: {\n\t\tgetDetails(prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/' + prestudent_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tgetLvs(antrag_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getLvs/' + antrag_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tcreate(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/createAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/cancelAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tsaveLvs(forbiddenLvs, mandatoryLvs) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/saveLvs', {\n\t\t\t\tforbiddenLvs,\n\t\t\t\tmandatoryLvs\n\t\t\t});\n\t\t}\n\t},\n\tleitung: {\n\t\tgetStgs() {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getActiveStgs');\n\t\t},\n\t\tgetAntraege(url, config, params) {\n\t\t\treturn this.$fhcApi\n\t\t\t\t.get('/api/frontend/v1/studstatus/leitung/getAntraege/' + url)\n\t\t\t\t.then(res => res.data); // Return data for tabulator\n\t\t},\n\t\tgetHistory(antrag_id) {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getHistory/' + antrag_id)\n\t\t},\n\t\tgetPrestudents(query, signal) {\n\t\t\treturn this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/getPrestudents',\n\t\t\t\t{ query },\n\t\t\t\t{\n signal: signal,\n timeout: 30000\n }\n\t\t\t);\n\t\t},\n\t\tapprove(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treopen(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tunpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tobject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tapproveObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tdenyObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t}\n};","export default {\n\n getView: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getView/${uid}`,{}\n );\n },\n\n fotoSperre: function (value) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/fotoSperre/${value}`,\n {}\n );\n \n },\n\n isStudent: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isStudent`,\n {\n uid:uid,\n }\n );\n },\n\n isMitarbeiter: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isMitarbeiter/${uid}`,\n {}\n );\n },\n\n getZustellAdresse: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellAdresse`,{}\n );\n },\n\n getZustellKontakt: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellKontakt`,{}\n );\n },\n\n getGemeinden: function(nation,zip){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getGemeinden/${nation}/${zip}`,\n {}\n );\n \n },\n getAllNationen:function(){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Profil/getAllNationen\",{}\n );\n },\n}","export default {\n //! API calls for profil update requests\n \n getStatus: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getStatus`,{});\n },\n \n getTopic: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getTopic`,{});\n },\n \n acceptProfilRequest: function ({profil_update_id, uid, status_message, topic, requested_change}) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/acceptProfilRequest\",{profil_update_id, uid, status_message, topic, requested_change});\n },\n \n denyProfilRequest: function ({profil_update_id, uid, topic, status_message}) {\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/denyProfilRequest\",{profil_update_id,uid,topic,status_message});\n },\n \n insertFile: function (dms, replace = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n dms);\n\n },\n \n getProfilRequestFiles: function (requestID) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`,{});\n },\n \n selectProfilRequest: function (uid = null, id = null) {\n\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/selectProfilRequest`,\n {...(uid?{uid}:{}),\n ...(id?{id}:{})\n });\n },\n \n insertProfilRequest: function (topic, payload, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/insertProfilRequest\",\n {\n topic,\n payload,\n ...(fileID ? { fileID } : {}),\n });\n },\n \n updateProfilRequest: function (topic, payload, ID, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/updateProfilRequest`,\n {\n topic,\n payload,\n ID,\n ...(fileID ? { fileID: fileID } : {}),\n });\n },\n \n deleteProfilRequest: function (requestID) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/deleteProfilRequest`,\n {\n requestID,\n });\n },\n };\n ","\nexport default {\n\tgetRoomInfo(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getRoomplan',\n\t\t\t{ ort_kurzbz, start_date, end_date}\n\t\t);\n\t},\n\tgetStunden() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/Stunden',\n\t\t\t{}\n\t\t);\n\t},\n\tgetOrtReservierungen(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/LvPlan/getReservierungen/${ort_kurzbz}`,\n\t\t\t{ start_date, end_date}\n\t\t);\n\t},\n\tgetLvPlanReservierungen(start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getReservierungen',\n\t\t\t{ start_date, end_date }\n\t\t);\n\t},\n\tgetLehreinheitStudiensemester(lehreinheit_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${lehreinheit_id}`,\n\t\t\t{}\n\t\t);\n\t},\n\tstudiensemesterDateInterval(date) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${date}`,\n\t\t\t{}\n\t\t);\n\t},\n\tLvPlanEvents(start_date, end_date, lv_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/LvPlanEvents',\n\t\t\t{ start_date, end_date, lv_id }\n\t\t);\n\t},\n\t\n\t\n};","import verband from './stv/verband.js';\nimport students from './stv/students.js';\nimport filter from './stv/filter.js';\nimport konto from './stv/konto.js';\nimport group from './stv/group.js';\nimport kontakt from './stv/kontakt.js';\nimport prestudent from './stv/prestudent.js';\nimport status from './stv/status.js';\nimport details from './stv/details.js';\nimport exam from './stv/exam.js';\nimport abschlusspruefung from './stv/abschlusspruefung.js';\nimport grades from './stv/grades.js';\nimport mobility from './stv/mobility.js';\nimport archiv from './stv/archiv.js';\nimport documents from './stv/documents.js';\nimport exemptions from './stv/exemptions.js';\nimport jointstudies from \"./stv/jointstudies.js\";\nimport courselist from './stv/courselist.js';\n\nexport default {\n\tverband,\n\tstudents,\n\tfilter,\n\tkonto,\n\tgroup,\n\tkontakt,\n\tprestudent,\n\tstatus,\n\tdetails,\n\texam,\n\tabschlusspruefung,\n\tgrades,\n\tmobility,\n\tarchiv,\n\tdocuments,\n\texemptions,\n\tjointstudies,\n\tcourselist,\n\tconfigStudent() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/student');\n\t},\n\tconfigStudents() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/students');\n\t}\n};\n","export default {\n\tget() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/verband');\n\t},\n\tfavorites: {\n\t\tget() {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/stv/favorites');\n\t\t},\n\t\tset(favorites) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/stv/favorites/set', {\n\t\t\t\tfavorites\n\t\t\t});\n\t\t}\n\t}\n}","export default {\n\tuid(uid, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/uid/'\n\t\t\t+ encodeURIComponent(uid);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tprestudent(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/prestudent/'\n\t\t\t+ encodeURIComponent(prestudent_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tperson(person_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/person/'\n\t\t\t+ encodeURIComponent(person_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tverband(relative_path) {\n\t\treturn this.$fhcApi.getUri('api/frontend/v1/stv/students/' + relative_path);\n\t}\n}","export default {\n\tgetStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/filter/getStg');\n\t},\n\tsetStg(studiengang_kz) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/filter/setStg', {\n\t\t\tstudiengang_kz\n\t\t});\n\t}\n};","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/konto/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id),\n\t\t\t\tonly_open: self.filter,\n\t\t\t\tstudiengang_kz: self.studiengang_kz_intern ? self.stg_kz : ''\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tcheckDoubles(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/checkDoubles', data, {\n\t\t\tconfirmErrorHandler: error => true\n\t\t});\n\t},\n\tinsert(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/insert', data);\n\t},\n\tcounter(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/counter', data);\n\t},\n\tedit(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/update', data);\n\t},\n\tdelete(buchungsnr) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/delete', {buchungsnr});\n\t},\n\tgetBuchungstypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/konto/getBuchungstypen');\n\t}\n};","export default {\n\tgetGruppen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/Gruppen/getGruppen/' + params.id);\n\t},\n\tdeleteGroup(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/Gruppen/deleteGruppe/', params);\n\t}\n}","export default {\n\t//------------- address.js-----------\n\tgetAdressen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressen/' + params.id);\n\t},\n\taddNewAddress(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewAddress/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadAddress(address_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadAddress/', {address_id});\n\t},\n\tupdateAddress(form, address_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateAddress/' + address_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteAddress(address_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteAddress/', {address_id});\n\t},\n\tgetPlaces(plz) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getPlaces/' + plz);\n\t},\n\tgetFirmen(searchString) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getFirmen/' + searchString);\n\t},\n\tgetNations() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getNations/');\n\t},\n\tgetAdressentypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressentypen/');\n\t},\n\n\t//------------- bankverbindung.js-----------\n\tgetBankverbindung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getBankverbindung/' + params.id);\n\t},\n\taddNewBankverbindung(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewBankverbindung/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadBankverbindung(bankverbindung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadBankverbindung/', {bankverbindung_id});\n\t},\n\tupdateBankverbindung(form, bankverbindung_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateBankverbindung/' + bankverbindung_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteBankverbindung(bankverbindung_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteBankverbindung/', {bankverbindung_id});\n\t},\n\n\t//------------- contact.js-----------\n\tgetKontakte (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakte/' + params.id);\n\t},\n\taddNewContact(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewContact/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadContact(kontakt_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadContact/', {kontakt_id});\n\t},\n\tupdateContact(form, kontakt_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateContact/' + kontakt_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteContact(kontakt_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteContact/', {kontakt_id});\n\t},\n\tgetStandorteByFirma(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getStandorteByFirma/' + searchString);\n\t},\n\tgetKontakttypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakttypen/');\n\t}\n};","export default {\n\n//------------- Prestudent.js------------------------------------------------------\n\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\treturn \tthis.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/prestudent/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t);\n\t},\n\tupdatePrestudent(form, prestudent_id, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/prestudent/updatePrestudent/' + prestudent_id,\n\t\t\tdata\n\t\t);\n\t},\n\tgetBezeichnungZGV() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungZGV/');\n\t},\n\tgetBezeichnungMZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungMZgv/');\n\t},\n\tgetBezeichnungDZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungDZgv/');\n\t},\n\tgetStgs() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStgs/');\n\t},\n\tgetAusbildung() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAusbildung/');\n\t},\n\tgetAufmerksamdurch() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAufmerksamdurch/');\n\t},\n\tgetBerufstaetigkeit() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBerufstaetigkeit/');\n\t},\n\tgetTypenStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getTypenStg/');\n\t},\n\tgetBisstandort() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBisstandort/');\n\t},\n\n//------------- MultiStatus.js------------------------------------------------------\n\tgetHistoryPrestudent (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getHistoryPrestudent/' + params.id);\n\t},\n\tgetMaxSem(studiengang_kzs) {\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/status/getMaxSemester/', {studiengang_kzs});\n\t},\n\tadvanceStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/advanceStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tconfirmStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/confirmStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tisLastStatus(id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/isLastStatus/' + id);\n\t},\n\tdeleteStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/deleteStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tgetLastBismeldestichtag() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getLastBismeldestichtag/');\n\t},\n\n//------------- History.js------------------------------------------------------\n\tgetHistoryPrestudents (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getHistoryPrestudents/' + params.id);\n\t},\n\n}","export default {\n\n//------------- Modal.js------------------------------------------------------\n\n\tinsertStatus(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/status/insertStatus/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/status/loadStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tupdateStatus(form, {prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}, data) {\n\t\treturn this.$fhcApi.post(\n\t\t\tform,\n\t\t\t'api/frontend/v1/stv/status/updateStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester,\n\t\t\tdata\n\t\t);\n\t},\n\tgetStudienplaene(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudienplaene/' + prestudent_id);\n\t},\n\tgetStudiengang(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudiengang/' + prestudent_id);\n\t},\n\tgetStatusgruende() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusgruende/');\n\t},\n\tgetStati() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStati/');\n\t},\n\n//------------- Dropdown.js------------------------------------------------------\n\n\taddStudent(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/addStudent/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tchangeStatus(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/changeStatus/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tgetStatusarray() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusarray/');\n\t}\n}","export default {\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/student/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(url);\n\t},\n\tsave(form, prestudent_id, studiensemester_kurzbz, data) {\n\t\tlet url = 'api/frontend/v1/stv/student/save/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(form, url, data);\n\t},\n}\n","export default {\n\tgetPruefungen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getPruefungen/' + params.id);\n\t},\n\tloadPruefung(pruefung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/loadPruefung/' + pruefung_id);\n\t},\n\tgetTypenPruefungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getTypenPruefungen');\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/getAllLehreinheiten/', data)\n\t},\n\tgetLvsByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsByStudent/' + uid)\n\t},\n\tgetLvsandLesByStudent(uid, semester){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsandLesByStudent/' + uid + '/' + semester);\n\t},\n\tgetLvsAndMas(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsAndMas/' + uid)\n\t},\n\tgetMitarbeiterLv(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getMitarbeiterLv/' + id)\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getNoten');\n\t},\n\tcheckZeugnisnoteLv(data){\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/', data)\n\t},\n\taddPruefung(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/insertPruefung/', data);\n\t},\n\tupdatePruefung(form, id, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/updatePruefung/' + id, data);\n\t},\n\tdeletePruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/deletePruefung/' + id)\n\t}\n}","export default {\n\n\tgetAbschlusspruefung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/' + params.id);\n\t},\n\taddNewAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/', data\n\t\t);\n\t},\n\tloadAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/', {id});\n\t},\n\tupdateAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/', data\n\t\t);\n\t},\n\tdeleteAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/', {id});\n\t},\n\tgetTypenAbschlusspruefung(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/');\n\t},\n\tgetTypenAntritte(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/');\n\t},\n\tgetBeurteilungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/');\n\t},\n\tgetAkadGrade(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getAkadGrade/', {studiengang_kz});\n\t},\n\tgetTypStudiengang(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/', {studiengang_kz});\n\t},\n\tgetMitarbeiter(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/' + searchString);\n\t},\n\tgetPruefer(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getPruefer/' + searchString);\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getNoten/');\n\t},\n\tcheckForExistingExams(uids) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/', {uids}\n\t\t);\n\t}\n}","export default {\n\tlist() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/grades/list');\n\t},\n\tgetCertificate(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getCertificate/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetTeacherProposal(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getTeacherProposal/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetRepeaterGrades(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getRepeaterGrades/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tupdateCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, note, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/updateCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz,\n\t\t\t\tnote\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tdeleteCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/deleteCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyTeacherProposalToCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyTeacherProposalToCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id, lv_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate',\n\t\t\t{\n\t\t\t\tstudierendenantrag_lehrveranstaltung_id\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lv_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tgetGradeFromPoints(points, lehrveranstaltung_id, studiensemester_kurzbz, manualErrorHandling) {\n\t\tconst config = manualErrorHandling ? {errorHandling: false} : {};\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/grades/getGradeFromPoints',\n\t\t\t{\n\t\t\t\t\"points\": points,\n\t\t\t\t\"lehrveranstaltung_id\": lehrveranstaltung_id,\n\t\t\t\t\"studiensemester_kurzbz\": studiensemester_kurzbz\n\t\t\t},\n\t\t\tconfig\n\t\t\t);\n\t}\n}","export default {\n\tgetMobilitaeten (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getMobilitaeten/' + params.id);\n\t},\n\tgetProgramsMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getProgramsMobility/');\n\t},\n\taddNewMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/insertMobility/', data);\n\t},\n\tloadMobility(bisio_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/loadMobility/' + bisio_id);\n\t},\n\tupdateMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/updateMobility/', data);\n\t},\n\tdeleteMobility(bisio_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobility/' + bisio_id);\n\t},\n\tgetLVList(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLVList/' + studiengang_kz);\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/getAllLehreinheiten/', data)\n\t},\n\tgetLvsandLesByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLvsandLesByStudent/' + uid);\n\t},\n\tgetPurposes(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getPurposes/' + params.id);\n\t},\n\tgetSupports(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getSupports/' + params.id);\n\t},\n\tgetListPurposes() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListPurposes/');\n\t},\n\tgetListSupports() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListSupports/');\n\t},\n\tdeleteMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilityPurpose/' + params.bisio_id, params);\n\t},\n\taddMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilityPurpose/' + params.bisio_id, params);\n\t},\n\tdeleteMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilitySupport/' + params.bisio_id, params);\n\t},\n\taddMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilitySupport/' + params.bisio_id, params);\n\t},\n\n}","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/archiv/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id)\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tgetArchivVorlagen() {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/getArchivVorlagen');\n\t},\n\tarchive(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archive',\n\t\t\tdata\n\t\t);\n\t},\n\tarchiveSigned(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archiveSigned',\n\t\t\tdata\n\t\t);\n\t},\n\tupdate(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/update', data);\n\t},\n\tdelete({akte_id, studiengang_kz}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/delete', {akte_id, studiengang_kz});\n\t}\n};\n","export default {\n\tgetDocumentsUnaccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tgetDocumentsAccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsAccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tdeleteZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteZuordnung/' + params.prestudent_id + '/' + params.dokument_kurzbz);\n\t},\n\tcreateZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/createZuordnung/'\n\t\t\t+ params.prestudent_id + '/'\n\t\t\t+ params.dokument_kurzbz);\n\t},\n\tloadAkte(akte_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/loadAkte/' + akte_id);\n\t},\n\tgetDoktypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDoktypen/');\n\t},\n\tupdateFile(akte_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/updateAkte/' + akte_id,\n\t\t\tdata);\n\t},\n\tdeleteFile(akte_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteAkte/' + akte_id);\n\t},\n\tuploadFile(prestudent_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/uploadDokument/' + prestudent_id,\n\t\t\tdata);\n\t},\n}","export default {\n\tgetAnrechnungen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getAnrechnungen/' + params.id);\n\t},\n\tgetLehrveranstaltungen(prestudent_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/' + prestudent_id);\n\t},\n\tgetBegruendungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getBegruendungen/');\n\t},\n\tgetLvsKompatibel(lv_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLvsKompatibel/' + lv_id);\n\t},\n\tgetLektoren(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLektoren/' + studiengang_kz);\n\t},\n\taddNewAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/insertAnrechnung/', data);\n\t},\n\tloadAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/loadAnrechnung/' + anrechnung_id);\n\t},\n\teditAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/updateAnrechnung/', data);\n\t},\n\tdeleteAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/anrechnungen/deleteAnrechnung/' + anrechnung_id);\n\t},\n}","export default {\n\tgetStudies(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudien/' + params.id);\n\t},\n\tgetTypenMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/');\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/');\n\t},\n\tgetStudyprograms(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/');\n\t},\n\tgetListPartner(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/');\n\t},\n\tgetStatiPrestudent(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/');\n\t},\n\tloadStudy(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/loadStudie/' + id);\n\t},\n\tinsertStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/insertStudie/', data);\n\t},\n\tupdateStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/updateStudie/', data);\n\t},\n\tdeleteStudy(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/GemeinsameStudien/deleteStudie/' + id);\n\t},\n\n}","export default {\n\tgetCourselist(url, config, params) {\n\t\t//corresponding logic controller Stundenplan.php\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStundenplan/'\n\t\t\t+ params.student_uid + '/'\n\t\t\t+ params.start_date + '/'\n\t\t\t+ params.end_date + '/'\n\t\t\t+ params.group_consecutiveHours + '/'\n\t\t\t+ params.dbStundenplanTable\n\t\t);\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStudiensemester/');\n\t},\n}","import person from \"./notiz/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetNotizen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getUid/');\n\t},\n\taddNewNotiz(form, id, formData) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(form, notiz_id, formData){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getMitarbeiter/' + event);\n\t},\n\tisBerechtigt(id, type_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/isBerechtigt/');\n\t}\n}","import person from \"./betriebsmittel/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetAllBetriebsmittel(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/' + params.type + '/' + params.id);\n\t},\n\taddNewBetriebsmittel(form, person_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/' +\n\t\t\tperson_id, formData\n\t\t);\n\t},\n\tloadBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/' + betriebsmittelperson_id);\n\t},\n\tupdateBetriebsmittel(form, betriebsmittelperson_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/' + betriebsmittelperson_id,\n\t\t\tformData);\n\t},\n\tdeleteBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/' +\tbetriebsmittelperson_id);\n\t},\n\tgetTypenBetriebsmittel(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/');\n\t},\n\tloadInventarliste(query){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/' +\tquery);\n\t}\n}","export default {\n\tupdatePersonUnrulyStatus(person_id, unrulyParam) {\n\n\t\ttry {\n\t\t\tconst payload = {person_id, unruly: unrulyParam}\n\t\t\tconst url = '/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus';\n\t\t\treturn this.$fhcApi.post(url, payload, null);\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t},\n\tfilterPerson(payload, base = ''){\n\n\t\ttry {\n\t\t\tconst url = base + '/api/frontend/v1/checkperson/CheckPerson/filterPerson';\n\t\t\treturn axios.post(url, payload)\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t}\n}","export default {\n getContentID(ort_kurbz) {\n\t\treturn this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Ort/ContentID\",\n\t\t\t{ ort_kurzbz: ort_kurbz }\n\t\t);\n\t},\n\tgetRooms(datum, von, bis, typ, personenanzahl = 0) {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getRooms\",\n\t\t\t{ datum, von, bis, typ, personenanzahl }\n\t\t);\n\t},\n\tgetRoomTypes() {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getTypes\"\n\t\t);\n\t}\n}","export default {\n content(content_id, version=null, sprache=null, sichtbar=null) {\n return this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/content\",\n\t\t\t{ \n\t\t\t\tcontent_id: content_id,\n\t\t\t\t...(version?{version}:{}),\n\t\t\t\t...(sprache?{sprache}:{}),\n\t\t\t\t...(sichtbar?{sichtbar}:{}),\n }\n );\n },\n\t//api function used for the news View that renders the html\n\tgetNews(page = 1, page_size = 10, sprache) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNews\",\n\t\t\t{\n\t\t\t\tpage,\n\t\t\t\tpage_size,\n\t\t\t\tsprache,\n\t\t\t},\n\t\t);\n\t},\n\t//api function used for the widget component\n\tnews(limit) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/news\",\n\t\t\t{\n\t\t\t\tlimit: limit\n\t\t\t}\n\t\t);\n\t},\n\tgetNewsRowCount: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNewsRowCount\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetNewsExtra: function(){\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getStudiengangInfoForNews\",\n\t\t\t{}\n\t\t);\n\t}\n }","export default {\n getStudentenMail(lehreinheit_id) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Lehre/lvStudentenMail\",\n { lehreinheit_id: lehreinheit_id }\n );\n },\n\tgetLvInfo(studiensemester_kurzbz, lehrveranstaltung_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/LV/${studiensemester_kurzbz}/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentPruefungen(lehrveranstaltung_id){\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentProjektarbeiten(uid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getStudentProjektarbeiten/${uid}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentProjektabgaben(detail) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getStudentProjektabgaben`\n\t\t\t, {\n\t\t\t\tprojektarbeit_id: detail.projektarbeit_id,\n\t\t\t\tstudent_uid: detail.student_uid\n\t\t\t}\n\t\t);\n\t},\n\tpostStudentProjektarbeitEndupload(formData) {\n\t\tconst url = '/api/frontend/v1/Lehre/postStudentProjektarbeitEndupload';\n\t\tconst headers = {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\treturn this.$fhcApi.post(url, formData, headers)\n\t},\n\tpostStudentProjektarbeitZwischenabgabe(formData) {\n\t\tconst url = '/api/frontend/v1/Lehre/postStudentProjektarbeitZwischenabgabe';\n\t\tconst headers = {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\treturn this.$fhcApi.post(url, formData, headers)\n\t},\n\tgetStudentProjektarbeitAbgabeFile(paabgabe_id, student_uid) {\n\t\tconst url = `/Cis/Abgabetool/getStudentProjektarbeitAbgabeFile?paabgabe_id=${paabgabe_id}&student_uid=${student_uid}`;\n\n\t\twindow.location = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + url\n\t},\n\tgetMitarbeiterProjektarbeiten(uid, all) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getMitarbeiterProjektarbeiten?showall=${all}`\n\t\t\t, {}\n\t\t);\n\t},\n\tpostProjektarbeitAbgabe(termin) {\n\t\tconst payload = {\n\t\t\tpaabgabe_id: termin.paabgabe_id,\n\t\t\tpaabgabetyp_kurzbz: termin.bezeichnung.paabgabetyp_kurzbz,\n\t\t\tdatum: termin.datum,\n\t\t\tfixtermin: termin.fixtermin,\n\t\t\tinsertvon: termin.insertvon,\n\t\t\tkurzbz: termin.kurzbz,\n\t\t\tprojektarbeit_id: termin.projektarbeit_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/postProjektarbeitAbgabe';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t\t\n\t},\n\tdeleteProjektarbeitAbgabe(paabgabe_id) {\n\t\tconst payload = {\n\t\t\tpaabgabe_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/deleteProjektarbeitAbgabe';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t},\n\tpostSerientermin(datum, paabgabetyp_kurzbz, bezeichnung, kurzbz, projektarbeit_ids) {\n\t\tconst payload = {\n\t\t\tdatum, paabgabetyp_kurzbz, bezeichnung, kurzbz, projektarbeit_ids\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/postSerientermin';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t},\n\tfetchDeadlines(person_id) {\n\t\tconst payload = {\n\t\t\tperson_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/fetchDeadlines';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t}\n }","export default {\n getLvMenu(lvid, studiensemester_kurzbz) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/LvMenu/getLvMenu/${lvid}/${studiensemester_kurzbz}`,\n {}\n );\n },\n\n \n }","import person from \"./messages/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\t\tgetMessages(url, config, params) {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessages/' + params.id + '/' + params.type + '/' + params.size + '/' + params.page);\n\t\t},\n\t\tgetVorlagen(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagen/');\n\t\t},\n\t\tgetMsgVarsLoggedInUser(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/');\n\t\t},\n\t\tgetMessageVarsPerson(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessageVarsPerson/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetMsgVarsPrestudent(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsPrestudent/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPersonId(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getPersonId/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetUid(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getUid/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetDataVorlage(vorlage_kurzbz){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getDataVorlage/' + vorlage_kurzbz);\n\t\t},\n\t\tgetNameOfDefaultRecipient(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getNameOfDefaultRecipient/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPreviewText(params, data){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/getPreviewText/' + params.id + '/' + params.type_id,\n\t\t\t\tdata);\n\t\t},\n\t\tgetReplyData(messageId){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getReplyData/' + messageId);\n\t\t},\n\t\tsendMessageFromModalContext(form, id, data) {\n\t\t\treturn this.$fhcApi.post(form,'api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tsendMessage(id, data) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tdeleteMessage(messageId){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/deleteMessage/' + messageId);\n\t\t}\n}","export default {\n\tgetVorlagen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagen/');\n\t},\n\tgetVorlagenByLoggedInUser() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/');\n\t}\n}","export default {\n\n\tgetStudiensemester: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/components/Cis/Mylv/Studiensemester',\n\t\t\t{}\n\t\t);\n\t},\n\n\tgetAllStudienSemester: function (studiensemester=undefined, studiengang=undefined, semester=undefined, studienplan=undefined) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/Studium/getStudienAllSemester',\n\t\t\t{studiensemester, studiengang, semester, studienplan}\n\t\t);\n\t},\n\n\tgetStudiengaengeForStudienSemester: function (studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${studiensemester}`,\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudienplaeneBySemester: function (studiengang, studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudienplaeneBySemester`,\n\t\t\t{\n\t\t\t\tstudiengang,\n\t\t\t\tstudiensemester,\n\t\t\t}\n\t\t);\n\t},\n\tgetLvPlanForStudiensemester: function (studiensemester, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${studiensemester}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\tgetLvEvaluierungInfo: function (studiensemester_kurzbz, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getLvEvaluierungInfo/${studiensemester_kurzbz}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\t\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport search from \"./search.js\";\nimport phrasen from \"./phrasen.js\";\nimport navigation from \"./navigation.js\";\nimport filter from \"./filter.js\";\nimport studstatus from \"./studstatus.js\";\nimport profil from \"./profil.js\";\nimport profilUpdate from \"./profilUpdate.js\";\nimport lvPlan from \"./lvPlan.js\";\nimport bookmark from \"./bookmark.js\";\nimport stv from \"./stv.js\";\nimport notiz from \"./notiz.js\";\nimport betriebsmittel from \"./betriebsmittel.js\";\nimport checkperson from \"./checkperson.js\";\nimport ampeln from \"./ampeln.js\";\nimport ort from \"./ort.js\";\nimport cms from \"./cms.js\";\nimport lehre from \"./lehre.js\";\nimport addons from \"./addons.js\";\nimport messages from \"./messages.js\";\nimport vorlagen from \"./vorlagen.js\";\nimport studiengang from \"./studiengang.js\";\nimport menu from \"./menu.js\";\nimport dashboard from \"./dashboard.js\";\nimport authinfo from \"./authinfo.js\";\nimport studium from \"./studium.js\";\nimport language from \"./language.js\";\n\nexport default {\n search,\n phrasen,\n navigation,\n dashboard,\n filter,\n studstatus,\n profil,\n profilUpdate,\n lvPlan,\n bookmark,\n stv,\n notiz,\n betriebsmittel,\n checkperson,\n ampeln,\n ort,\n cms,\n lehre,\n addons,\n messages,\n vorlagen,\n addons,\n\tstudiengang,\n\tmenu,\n\tauthinfo,\n\tstudium,\n language\n};\n","export default {\n\tasync getViewData() {\n\t\tconst url = `/api/frontend/v1/Cis4FhcApi/getViewData`;\n\t\treturn this.$fhcApi.get(url, null, null)\n\t},\n}","export default {\n\n getBookmarks: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/getBookmarks`\n ,{}\n );\n },\n \n delete: function (bookmark_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/delete/${bookmark_id}`\n ,{}\n ); \n },\n\n\tupdate: function ({ bookmark_id, url, title, tag=null}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/Bookmark/update/${bookmark_id}`\n\t\t\t, {\n\t\t\t\turl: url,\n\t\t\t\ttitle: title\n\t\t\t}\n\t\t);\n\t},\n\n insert: function ({url, title, tag}) {\n return this.$fhcApi.post(\n `/api/frontend/v1/Bookmark/insert`\n ,{\n url: url,\n title: title,\n tag: tag\n }\n ); \n },\n}","export default {\n \n open: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/open`,{});\n },\n\n all: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/all`,{});\n },\n\n confirm: function (ampel_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/confirm/${ampel_id}`,{});\n },\n\n}","export default {\n\tstudiengangInformation: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Studgang/getStudiengangInfo\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudiengangByKz: function (studiengang_kz) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz\",\n\t\t\t{\n\t\t\t\t\"studiengang_kz\": studiengang_kz\n\t\t\t}\n\t\t);\n\t}\n}","export default {\n\tgetMenu: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/CisMenu/getMenu\",\n\t\t\t{}\n\t\t);\n\t}\n\n}","\nexport default {\n\tgetAuthUID() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthUID',\n\t\t\t{ }\n\t\t);\n\t},\n\tgetAuthInfo() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthInfo',\n\t\t\t{}\n\t\t);\n\t},\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAll() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/language/get');\n\t}\n};","/** TODO(chris):\n * when deleting this file be sure to\n * remove line 1 & 90 from ../plugins/Phrasen.js\n */\nimport FhcApiFactory from '../api/fhcapifactory.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$fhcApi) {\n\t\t\t/* Deprecated Code start */\n\t\t\tif (options?.factory) {\n\t\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\t\tapp.config.globalProperties.$fhcApi.factory.addEndpoints(options.factory);\n\t\t\t}\n\t\t\t/* Deprecated Code end */\n\t\t\treturn;\n\t\t}\n\n\t\tfunction _get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\n\t\tfunction _clean_return_value(response) {\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = {response};\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tconst baseURL = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\";\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(response => {\n\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\treturn _clean_return_value(response);\n\n\t\t\t// NOTE(chris): loop through errors\n\t\t\tif (response.data.errors)\n\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t);\n\n\t\t\treturn _clean_return_value(response);\n\t\t}, error => {\n\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\n\t\t\tif (error.config?.errorHandling == 'off'\n\t\t\t\t|| error.config?.errorHandling === false\n\t\t\t\t|| error.config?.errorHandling == 'success')\n\t\t\t\treturn Promise.reject(error);\n\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL, true);\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t\t}\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\terror.response.data.errors = error.response.data.errors.filter(\n\t\t\t\t\terr => (error.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, error.config)\n\t\t\t\t);\n\t\t\t\tif (!error.response.data.errors.length)\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else if (error.request) {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertError(error.message);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t}\n\n\t\t\treturn Promise.reject(error);\n\t\t});\n\n\t\tapp.config.globalProperties.$fhcApi = {\n\t\t\tgetUri(url) {\n\t\t\t\tconsole.warn('$fhcApi.getUri is DEPRECATED! Use $api.getUri instead.');\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\tconsole.warn('$fhcApi.get is DEPRECATED! Use $api.get instead.');\n\t\t\t\t[uri, params, config] = _get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\tconsole.warn('$fhcApi.post is DEPRECATED! Use $api.post instead.');\n\t\t\t\t[uri, data, config] = _get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\t_defaultErrorHandlers: {\n\t\t\t\tvalidation(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form) {\n\t\t\t\t\t\tconfig.form.clearValidation();\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.messages);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(error.messages)) {\n\t\t\t\t\t\terror.messages.forEach($fhcAlert.alertError);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (typeof error.messages == 'object') {\n\t\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t\tObject.values(error.messages).forEach(\n\t\t\t\t\t\t\t\tvalue => $fhcAlert.alertDefault(\n\t\t\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tObject.entries(error.messages).forEach(\n\t\t\t\t\t\t\t\t([key, value]) => $fhcAlert.alertDefault('error', key, value, true)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tgeneral(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form)\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.message);\n\t\t\t\t\telse if (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertError(error.message);\n\t\t\t\t},\n\t\t\t\tphp(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('warn', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('info', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\texception(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tdb(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tauth(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertDefault('error', error.message, message);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/* Deprecated Code start */\n\t\tclass FhcApiFactoryWrapper {\n\t\t\tconstructor(factorypart, root) {\n\t\t\t\tif (root === undefined) {\n\t\t\t\t\tthis.$fhcApi = {\n\t\t\t\t\t\tgetUri(url) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.getUri(url);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget(form, uri, params, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.get(form, uri, params, config);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpost(form, uri, data, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.post(form, uri, data, config);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tObject.defineProperty(this.$fhcApi, 'factory', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.factory;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tapp.config.globalProperties.$fhcApi.factory = this;\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty(this, '$fhcApi', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\treturn (root || this).$fhcApi;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.addEndpoints(factorypart, true)\n\t\t\t}\n\n\t\t\taddEndpoints(factorypart, noWarn) {\n\t\t\t\tObject.keys(factorypart).forEach(key => {\n\t\t\t\t\tObject.defineProperty(this, key, {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tif (typeof factorypart[key] == 'function')\n\t\t\t\t\t\t\t\treturn factorypart[key].bind(this);\n\t\t\t\t\t\t\treturn new FhcApiFactoryWrapper(factorypart[key], this.$fhcApi.factory);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tif (!noWarn) console.warn('$fhcApi.factory.addEndpoints() is DEPRECATED!');\n\t\t\t}\n\t\t}\n\n\t\tconst factory = new FhcApiFactoryWrapper(FhcApiFactory);\n\t\tif (options?.factory) {\n\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\tfactory.addEndpoints(options.factory);\n\t\t}\n\n\t\tapp.config.globalProperties.$fhcApi.factory = factory;\n\t\t/* Deprecated Code end */\n\t\t\n\t\tapp.provide('$fhcApi', app.config.globalProperties.$fhcApi);\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n//--------------------------------------------------------------------------------------------------------------------\n// Configs\n\n// To see debug messages into the browser console set this parameter as true\nconst CORE_REST_CLIENT_DEBUG = false;\n\n// Default timeout (milliseconds)\nconst CORE_REST_CLIENT_TIMEOUT = 5000;\n\n//--------------------------------------------------------------------------------------------------------------------\n// Constants\n\n// Success\nconst CORE_REST_CLIENT_SUCCESS = 0;\n\n// Properties present in a response\nconst CORE_REST_CLIENT_ERROR = \"error\";\nconst CORE_REST_CLIENT_RETVAL = \"retval\";\n\n// HTTP method parameters\nconst CRC_HTTP_GET_METHOD = \"get\";\nconst CRC_HTTP_POST_METHOD = \"post\";\n\n/**\n * Definition and initialization of the object CoreRESTClient\n */\nexport const CoreRESTClient = {\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Public methods\n\n\t/**\n\t * Performs a call using the HTTP GET method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tget: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_GET_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Performs a call using the HTTP POST method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tpost: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_POST_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Checks if the response is a success\n\t */\n\tisSuccess: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR)\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL) && response.error == CORE_REST_CLIENT_SUCCESS)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Checks if the response is an error\n\t */\n\tisError: function(response) {\n\t\treturn !CoreRESTClient.isSuccess(response);\n\t},\n\n\t/**\n\t * Checks if the response has data\n\t */\n\thasData: function(response) {\n\n\t\tif (CoreRESTClient.isSuccess(response))\n\t\t{\n\t\t\tif ((typeof response[CORE_REST_CLIENT_RETVAL] === \"object\" && Object.keys(response[CORE_REST_CLIENT_RETVAL]).length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"array\" && response[CORE_REST_CLIENT_RETVAL].length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"string\" && response[CORE_REST_CLIENT_RETVAL].trim() != \"\")\n\t\t\t\t|| typeof response[CORE_REST_CLIENT_RETVAL] === \"number\")\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Retrives data from response object\n\t */\n\tgetData: function(response) {\n\n\t\tif (CoreRESTClient.hasData(response))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Retrives error message from response object\n\t */\n\tgetError: function(response) {\n\n\t\tif (typeof response === \"object\"\n\t\t\t&& Object.keys(response).length > 0\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn \"Generic error\";\n\t},\n\n\t/**\n\t * Retrives code from response object\n\t */\n\tgetErrorCode: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_ERROR];\n\t\t}\n\n\t\treturn 1; // Generic error\n\t},\n\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Private methods\n\n\t/**\n\t * Generate the router URI using the connection parameters\n\t */\n\t_generateRouterURI: function(wsURL) {\n\t\tvar uri = null;\n\n\t\t// Checks if global JS object FHC_JS_DATA_STORAGE_OBJECT exists\n\t\tif (typeof FHC_JS_DATA_STORAGE_OBJECT !== \"undefined\")\n\t\t{\n\t\t\turi = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\" + wsURL;\n\t\t}\n\n\t\treturn uri;\n\t},\n\n\t/**\n\t * Method to print debug info after a controller has been called\n\t */\n\t_printDebug: function(parameters, response, errorThrown) {\n\n\t\tif (CORE_REST_CLIENT_DEBUG === true) // If global const CORE_REST_CLIENT_DEBUG is true, but really true!\n\t\t{\n\t\t\t// Print info about called controller\n\t\t\tconsole.log(\"Called controller: \" + parameters.remoteController);\n\t\t\tconsole.log(\"Call parameters:\"); // parameters given to this call\n\t\t\tconsole.log(parameters);\n\n\t\t\tif (response != null) // if there is a response...\n\t\t\t{\n\t\t\t\tconsole.log(\"Controller Response:\");\n\t\t\t\tconsole.log(response); // ...print it\n\t\t\t}\n\t\t\tif (errorThrown != null) // if there is a jQuery error...\n\t\t\t{\n\t\t\t\tconsole.log(\"jQuery error:\");\n\t\t\t\tconsole.log(errorThrown); // ...print it\n\t\t\t}\n\t\t\tconsole.log(\"--------------------------------------------------------------------------------------------\");\n\t\t}\n\t},\n\n\t/**\n\t * Performs a call to the server were the CI PHP layer is running\n\t * - wsURL: alias of the core controller to call\n\t * - wsParameters: parameters to give to the called controller\n\t * - type: POST or GET HTTP method\n\t * - axiosParameters: an object to configure the axios call\n\t */\n\t_axiosCall: function(wsURL, wsParameters, type, axiosParameters) {\n\n\t\t// Axios config object\n\t\tlet axiosCallObj = {\n\t\t\tmethod: type,\n\t\t\turl: CoreRESTClient._generateRouterURI(wsURL),\n\t\t\ttimeout: CORE_REST_CLIENT_TIMEOUT // default time out\n\t\t};\n\n\t\t// The ajax call is HTTP GET\n\t\tif (type == CRC_HTTP_GET_METHOD)\n\t\t{\n\t\t\taxiosCallObj.params = wsParameters;\n\t\t}\n\t\t// The ajax call is HTTP POST\n\t\telse\n\t\t{\n\t\t\taxiosCallObj.data = wsParameters;\n\t\t}\n\n\t\t// Check if axiosParameters is an object\n\t\tif (typeof axiosParameters === \"object\")\n\t\t{\n\t\t\t// And then copies the its properties into axiosCallObj\n\t\t\tfor (var prop in axiosParameters) axiosCallObj[prop] = axiosParameters[prop];\n\t\t}\n\n\t\t// Perform the ajax call via axios\n\t\treturn axios(axiosCallObj);\n\t}\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n * \n * @usage:\n * Preperations:\n * Be sure to have PrimeVue loaded with the toast and confirmdialog\n * components as primevue variable\n * Install:\n * Import this Plugin and install it with the app.use() function.\n * Use:\n * In your component you can call now the global property $fhcAlert\n * which has the following functions:\n * \n * alertSuccess\n * ------------\n * Displays a success message\n * @param string\tmessage\n * @return void\n * \n * alertInfo\n * ---------\n * Displays an info message\n * @param string\tmessage\n * @return void\n * \n * alertWarning\n * ------------\n * Displays a warning\n * @param string\tmessage\n * @return void\n * \n * alertError\n * ----------\n * Displays an error\n * @param string\tmessage\n * @return void\n * \n * alertSystemError\n * ----------------\n * Displays an alert with the error details and a button to mail\n * the error to the Support Team\n * @param string\tmessage\n * @return void\n * \n * confirmDelete\n * -------------\n * Displays a confirmation dialog and returns a Promise which resolves\n * with true or false depending und the pressed button.\n * @return Promise\n * \n * alertDefault\n * ------------\n * Displays an alert\n * @param string\tseverity\t\tcan be 'success', 'info', 'warning', 'error'\n * @param string\ttitle\n * @param string\tmessage\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * alertMultiple\n * -------------\n * Displays multiple alerts\n * @param array\t\tmessageArray\n * @param string\tseverity\t\t(optional) defaults to 'info'\n * @param string\ttitle\t\t\t(optional) defaults to 'Info'\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * handleSystemError\n * -----------------\n * Automatiticly determine how to display an system error and display it.\n * This would be used in a catch block of an ajax call.\n * @param mixed\t\terror\n * @return void\n * \n * handleSystemMessage\n * -------------------\n * Automatiticly determine how to display a message and display it.\n * @param mixed\t\tmessage\n * @return void\n */\nimport PvConfig from \"../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js\";\nimport PvToast from \"../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js\";\nimport PvConfirm from \"../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js\";\nimport PvConfirmationService from \"../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js\";\nimport FhcPhrasen from \"./Phrasen.js\";\n\nimport {CoreRESTClient} from '../RESTClient.js';\n\nconst helperAppContainer = document.createElement('div');\n\nconst helperApp = Vue.createApp({\n\tname: \"FhcAlertApp\",\n\tcomponents: {\n\t\tPvToast,\n\t\tPvConfirm\n\t},\n\tmethods: {\n\t\tmailToUrl(slotProps) {\n\t\t\tlet mailTo = FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto;\n\t\t\tlet subject = 'Meldung%20Systemfehler';\n\t\t\tlet body = `\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: ` + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method + `%0D%0A\n\t\t\t\tFehler Meldung: ` + slotProps.message.detail + `%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!`\n\n\t\t\treturn \"mailto:\" + mailTo + \"?subject=\" + subject + \"&body=\" + body;\n\t\t},\n\t\topenMessagecard(e) {\n\t\t\tbootstrap.Collapse.getOrCreateInstance(e.target.getAttribute('href')).toggle();\n\t\t}\n\t},\n\tunmounted() {\n\t\thelperAppContainer.parentElement.removeChild(helperAppContainer);\n\t},\n\tcomputed: {\n\t\tshowmaillink: function() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto !== '';\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t`\n});\n\nhelperApp.use(PvConfig);\nhelperApp.use(PvConfirmationService);\n//helperApp.use(FhcPhrasen);\n\nconst helperAppInstance = helperApp.mount(helperAppContainer);\n\ndocument.body.appendChild(helperAppContainer);\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (!app.config.globalProperties.$p)\n\t\t\tapp.use(FhcPhrasen);\n\n\t\tconst $fhcAlert = {\n\t\t\talertSuccess(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSuccess);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'success', summary: 'Info', detail: message, life: 1000});\n\t\t\t},\n\t\t\talertInfo(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertInfo);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'info', summary: 'Info', detail: message, life: 3000 });\n\t\t\t},\n\t\t\talertWarning(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertWarning);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'warn', summary: 'Achtung', detail: message});\n\t\t\t},\n\t\t\talertError(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertError);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'error', summary: 'Achtung', detail: message });\n\t\t\t},\n\t\t\talertSystemError(message) {\n\t\t\t\t//TODO(Manu) for translation of content of template: restructure in data\n\t\t\t\t//and update definitions with translations\n\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSystemError);\n\t\t\t\thelperAppInstance.$refs.alert.add({\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t\tsummary: Vue.computed(() => app.config.globalProperties.$p.t('alert/systemerror')),\n\t\t\t\t\tdetail: message});\n\t\t\t},\n\t\t\tconfirmDelete() {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: 'fhcAlertConfirm',\n\t\t\t\t\t\theader: Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: Vue.computed(() => app.config.globalProperties.$p.t('alert/confirm_delete')),\n\t\t\t\t\t\tacceptLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/loeschen')),\n\t\t\t\t\t\tacceptClass: 'p-button-danger',\n\t\t\t\t\t\trejectLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: 'p-button-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tconfirm(options) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: options?.group ?? 'fhcAlertConfirm',\n\t\t\t\t\t\theader: options?.header ?? Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: options?.message ?? '',\n\t\t\t\t\t\tacceptLabel: options?.acceptLabel ?? 'Ok',\n\t\t\t\t\t\tacceptClass: options?.acceptClass ?? 'btn btn-primary',\n\t\t\t\t\t\trejectLabel: options?.rejectLabel ?? Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: options?.rejectClass ?? 'btn btn-outline-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\talertDefault(severity, title, message, sticky = false, html = false) {\n\t\t\t\tlet options = { severity: severity, summary: title, detail: message, html };\n\t\t\t\t\n\t\t\t\tif (!sticky)\n\t\t\t\t\toptions.life = 3000;\n\n\t\t\t\thelperAppInstance.$refs.toast.add(options);\n\t\t\t},\n\t\t\talertMultiple(messageArray, severity = 'info', title = 'Info', sticky = false, html = false){\n\t\t\t\t// Check, if array has only string values\n\t\t\t\tif (messageArray.every(message => typeof message === 'string')) {\n\t\t\t\t\tmessageArray.forEach(message => this.alertDefault(severity, title, message, sticky, html));\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\thandleSystemError(error) {\n\t\t\t\t// don't show an error message to the user if the error was an aborted request\n\t\t\t\tif(error.hasOwnProperty('name') && error.name.toLowerCase() === \"AbortError\".toLowerCase())\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is string\n\t\t\t\tif (typeof error === 'string')\n\t\t\t\t\treturn $fhcAlert.alertSystemError(error);\n\n\t\t\t\t// Error is array of strings\n\t\t\t\tif (Array.isArray(error) && error.every(err => typeof err === 'string'))\n\t\t\t\t\treturn error.every($fhcAlert.alertSystemError);\n\n\t\t\t\t// Error has been handled already\n\t\t\t\tif (error.hasOwnProperty('handled') && error.handled)\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is object\n\t\t\t\tif (typeof error === 'object' && error !== null) {\n\t\t\t\t\tlet errMsg = '';\n\n\n\t\t\t\t\tif (error.hasOwnProperty('response') && error.response?.data?.retval)\n\t\t\t\t\t\terrMsg += 'Error Message: ' + (error.response.data.retval.message || error.response.data.retval) + '\\r\\n';\n\t\t\t\t\telse if (error.hasOwnProperty('message'))\n\t\t\t\t\t\terrMsg += 'Error Message: ' + error.message.toUpperCase() + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('config') && error.config.hasOwnProperty('url'))\n\t\t\t\t\t\terrMsg += 'Error ConfigURL: ' + error.config.url + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('stack'))\n\t\t\t\t\t\terrMsg += 'Error Stack: ' + error.stack + '\\r\\n';\n\t\t\t\t\t\n\t\t\t\t\t// Fallback object error message\n\t\t\t\t\tif (errMsg == '')\n\t\t\t\t\t\terrMsg = 'Error Message: ' + JSON.stringify(error) + '\\r\\n';\n\n\t\t\t\t\terrMsg += 'Error Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\n\t\t\t\t\treturn $fhcAlert.alertSystemError(errMsg);\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\thandleSystemMessage(message) {\n\t\t\t\t// Message is string\n\t\t\t\tif (typeof message === 'string')\n\t\t\t\t\treturn $fhcAlert.alertWarning(message);\n\n\t\t\t\t// Message is array of strings\n\t\t\t\tif (Array.isArray(message)) {\n\t\t\t\t\t// If Array has only Strings\n\t\t\t\t\tif (message.every(msg => typeof msg === 'string'))\n\t\t\t\t\t\treturn message.every($fhcAlert.alertWarning);\n\n\t\t\t\t\t// If Array has only Objects\n\t\t\t\t\tif (message.every(msg => typeof msg === 'object') && msg !== null) {\n\t\t\t\t\t\treturn message.every(msg => {\n\t\t\t\t\t\t\tif (msg.hasOwnProperty('data') && msg.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(msg.data.retval));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(msg));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Message is Object with data property\n\t\t\t\tif (typeof message === 'object' && message !== null){\n\t\t\t\t\tif (message.hasOwnProperty('data') && message.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t// NOTE(chris): changed: alertSystemError => alertWarning\n\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(message.data.retval));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(message));\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\tresetFormValidation(form) {\n\t\t\t\tconst event = new Event('fhc-form-reset');\n\t\t\t\tform.querySelectorAll(['[data-fhc-form-validate],[data-fhc-form-error]']).forEach(el => el.dispatchEvent(event));\n\t\t\t\t/*const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\tif (alert) {\n\t\t\t\t\talert.innerHTML = '';\n\t\t\t\t\talert.classList.add('d-none');\n\t\t\t\t}\n\t\t\t\tform.querySelectorAll('.invalid-feedback').forEach(n => n.remove());\n\t\t\t\tform.querySelectorAll('.is-invalid').forEach(n => n.classList.remove('is-invalid'));\n\t\t\t\tform.querySelectorAll('.is-valid').forEach(n => n.classList.remove('is-valid'));*/\n\t\t\t},\n\t\t\thandleFormValidation(error, form) {\n\t\t\t\tif (form === undefined) {\n\t\t\t\t\tif (error && error.nodeType === Node.ELEMENT_NODE)\n\t\t\t\t\t\treturn err => $fhcAlert.handleFormValidation(err, error);\n\t\t\t\t} else {\n\t\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t\tif (typeof errors !== \"object\")\n\t\t\t\t\t\t\terrors = error.response.data;\n\n\t\t\t\t\t\t// NOTE(chris): reset form validation\n\t\t\t\t\t\t$fhcAlert.resetFormValidation(form);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// NOTE(chris): set form input validation\n\t\t\t\t\t\tconst notFound = Object.entries(errors).filter(([key, detail]) => {\n\t\t\t\t\t\t\tconst input = form.querySelector('[data-fhc-form-validate=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\tinput.dispatchEvent(new CustomEvent('fhc-form-invalidate', {detail}));\n\n\t\t\t\t\t\t\t/*const input = form.querySelector('[name=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\tinput.classList.add('is-invalid');\n\t\t\t\t\t\t\tconst feedback = document.createElement('div');\n\t\t\t\t\t\t\tfeedback.classList.add('invalid-feedback');\n\t\t\t\t\t\t\tfeedback.innerHTML = detail;\n\t\t\t\t\t\t\tinput.after(feedback);*/\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}).map(arr => arr[1]);\n\n\n\t\t\t\t\t\t//const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\t\t\tconst alert = form.querySelector('[data-fhc-form-error]');\n\t\t\t\t\t\tif (alert && notFound.length) {\n\t\t\t\t\t\t\talert.dispatchEvent(new CustomEvent('fhc-form-error', {detail: notFound}));\n\t\t\t\t\t\t\t/*notFound.forEach(txt => {\n\t\t\t\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\t\t\t\tp.innerHTML = txt;\n\t\t\t\t\t\t\t\talert.append(p);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (notFound.length) {\n\t\t\t\t\t\t\t\talert.lastChild.classList.add('mb-0');\n\t\t\t\t\t\t\t\talert.classList.remove('d-none');\n\t\t\t\t\t\t\t}*/\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnotFound.forEach($fhcAlert.alertError);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t$fhcAlert.alertError((typeof errors === 'object') ? Object.values(errors) : errors);\n\t\t\t\t} else {\n\t\t\t\t\t$fhcAlert.handleSystemError(error);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tapp.config.globalProperties.$fhcAlert = $fhcAlert;\n\t\tapp.provide('$fhcAlert', app.config.globalProperties.$fhcAlert);\n\t}\n}","import FhcAlert from './FhcAlert.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$api) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!app.config.globalProperties.$fhcAlert)\n\t\t\tapp.use(FhcAlert);\n\n\t\tfunction _send_array_or_object(errors, func) {\n\t\t\tif (Array.isArray(errors))\n\t\t\t\terrors.forEach(func);\n\t\t\telse\n\t\t\t\tObject.entries(errors).forEach(\n\t\t\t\t\t([title, errs]) => errs.forEach(\n\t\t\t\t\t\terror => func(error, title)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t}\n\t\tlet DEFAULT_ERROR_CONFIG = {\n\t\t\tsuccess: true,\n\t\t\tfail: true,\n\t\t\tcombine: {\n\t\t\t\tform: ['validation', 'general'],\n\t\t\t\ttoast: ['validation', 'general', 'not_found', 'site_failed']\n\t\t\t},\n\t\t\thandler: {\n\t\t\t\tform(form, errors) {\n\t\t\t\t\tform.clearValidation();\n\t\t\t\t\terrors.forEach(err => form.setFeedback(\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\terr.messages || err.message\n\t\t\t\t\t));\n\t\t\t\t},\n\t\t\t\tasync toast(errors) {\n\t\t\t\t\tconst $p = app.config.globalProperties.$p;\n\t\t\t\t\tif (!$p)\n\t\t\t\t\t\treturn Promise.reject('Phrasen plugin not loaded!');\n\t\t\t\t\n\t\t\t\t\tasync function _format_toast(errors) {\n\t\t\t\t\t\terrors = errors.reduce((result, err) => {\n\t\t\t\t\t\t\tswitch (err.type) {\n\t\t\t\t\t\t\tcase 'not_found':\n\t\t\t\t\t\t\tcase 'site_failed':\n\t\t\t\t\t\t\t\tif (err.message)\n\t\t\t\t\t\t\t\t\tresult[err.message] = [err.url];\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tresult._default = [err.url];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'general':\n\t\t\t\t\t\t\t\tif (!result._default)\n\t\t\t\t\t\t\t\t\tresult._default = [];\n\t\t\t\t\t\t\t\tresult._default.push(err.message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'validation':\n\t\t\t\t\t\t\t\tObject.entries(err.messages)\n\t\t\t\t\t\t\t\t\t.forEach(([field, msg]) => {\n\t\t\t\t\t\t\t\t\t\tif (!result[field])\n\t\t\t\t\t\t\t\t\t\t\tresult[field] = [];\n\t\t\t\t\t\t\t\t\t\tif (Array.isArray(msg))\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(...msg);\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(msg);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}, {});\n\t\t\t\t\t\tlet counter = 0;\n\t\t\t\t\t\tconst msgs = await Promise.all(Object.entries(errors)\n\t\t\t\t\t\t\t.sort((a, b) => ['_default'].indexOf(b[0]) - ['_default'].indexOf(a[0])) // sort _default first\n\t\t\t\t\t\t\t.map(async ([field, msgs]) => {\n\t\t\t\t\t\t\t\tif (field == '_default') {\n\t\t\t\t\t\t\t\t\tawait $p.loadCategory('dashboard');\n\t\t\t\t\t\t\t\t\tconst general = $p.t('dashboard/general');\n\t\t\t\t\t\t\t\t\tfield = '
' + general + '
';\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfield = '
' + field + '
';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcounter += msgs.length;\n\t\t\t\t\t\t\t\treturn field\n\t\t\t\t\t\t\t\t\t+ '
'\n\t\t\t\t\t\t\t\t\t+ msgs.join('
')\n\t\t\t\t\t\t\t\t\t+ '
';\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcounter,\n\t\t\t\t\t\t\tmsgs\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet counter, msgs;\n\t\t\t\t\tif (Array.isArray(errors)) {\n\t\t\t\t\t\t({ counter, msgs } = await _format_toast(errors));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t({ counter, msgs } = await Object.entries(errors)\n\t\t\t\t\t\t\t.reduce(async (res, [title, errs]) => {\n\t\t\t\t\t\t\t\tconst result = await res;\n\t\t\t\t\t\t\t\tconst { counter, msgs } = await _format_toast(errs);\n\t\t\t\t\t\t\t\tresult.counter += counter;\n\t\t\t\t\t\t\t\tresult.msgs.push('
'\n\t\t\t\t\t\t\t\t\t+ title\n\t\t\t\t\t\t\t\t\t+ '
'\n\t\t\t\t\t\t\t\t\t+ msgs.join('')\n\t\t\t\t\t\t\t\t\t+ '
');\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}, Promise.resolve({ counter: 0, msgs: []})));\n\t\t\t\t\t}\n\n\t\t\t\t\tawait $p.loadCategory('ui');\n\t\t\t\t\tconst n_errors = $p.t('ui/n_errors', { n: counter });\n\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\tn_errors,\n\t\t\t\t\t\t'
' + msgs.join('') + '
',\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tphp(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('warn', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('info', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\tmessage = title + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\texception(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tdb(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tauth(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\ttitle += ': ' + error.message;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ttitle = error.message;\n\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (options?.errorHandling !== undefined)\n\t\t\tDEFAULT_ERROR_CONFIG = _merge_error_config(options.errorHandling);\n\t\t\n\t\tfunction get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\t\tfunction clean_return_value(response) {\n\t\t\tif (typeof response.data === 'string' || response.data instanceof String)\n\t\t\t\treturn clean_return_value({ data: response });\n\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result)\n\t\t\t\treturn {meta: {response}, data: null};\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = { response };\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tfunction _merge_error_config(config) {\n\t\t\tif (config === false || config === 'off')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false, fail: false };\n\t\t\t\n\t\t\tif (!config || config === true)\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tif (config === 'success')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, fail: false };\n\t\t\t\n\t\t\tif (config === 'fail')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false };\n\t\t\t\n\t\t\tconst { success, fail, handler, combine } = config;\n\t\t\t\n\t\t\tconfig = { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tObject.entries({ fail, success }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = value;\n\t\t\t});\n\t\t\tObject.entries({ handler, combine }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = { ...config[key], ...value };\n\t\t\t});\n\n\t\t\treturn config;\n\t\t}\n\t\tfunction get_error_handler(config) {\n\t\t\tconst result = _merge_error_config(config?.errorHandling);\n\n\t\t\tif (!config?.form) {\n\t\t\t\tresult.combine = { ...result.combine, form: [] };\n\t\t\t} else {\n\t\t\t\tconst formHandler = result.handler.form;\n\t\t\t\tresult.handler = { ...result.handler, form: errors => formHandler(config.form, errors) };\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t\tfunction get_error_list(error) {\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\treturn [{\n\t\t\t\t\t\ttype: 'not_found',\n\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t\t}];\n\t\t\t\t} else {\n\t\t\t\t\tif (error.response.data.errors == undefined) return [];\n\t\t\t\t\treturn error.response.data.errors;\n\t\t\t\t}\n\t\t\t} else if (error.request) {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'site_failed',\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t}];\n\t\t\t} else {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'script',\n\t\t\t\t\tmessage: error.message\n\t\t\t\t}];\n\t\t\t}\n\t\t}\n\t\tfunction popHandleableErrors(errorHandling, errors) {\n\t\t\tconst result = {};\n\t\t\tconst copy = [];\n\n\t\t\tif (errors == undefined) return {};\n\n\t\t\twhile (errors.length)\n\t\t\t\tcopy.push(errors.pop());\n\t\t\tfor (var error of copy) {\n\t\t\t\tlet type = error.type;\n\t\t\t\tlet newType = null;\n\t\t\t\tfor (var t in errorHandling.combine) {\n\t\t\t\t\tlet newTypeCombinesType = errorHandling\n\t\t\t\t\t\t.combine[t]\n\t\t\t\t\t\t.includes(type);\n\t\t\t\t\tlet newTypeHasHandler = errorHandling.handler[t];\n\t\t\t\t\tif (newTypeCombinesType && newTypeHasHandler) {\n\t\t\t\t\t\tnewType = t;\n\t\t\t\t\t\tif (newType == 'form')\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (newType)\n\t\t\t\t\ttype = newType;\n\t\t\t\tconst handler = errorHandling.handler[type];\n\t\t\t\tif (handler) {\n\t\t\t\t\tif (!result[type])\n\t\t\t\t\t\tresult[type] = [];\n\t\t\t\t\tif (Array.isArray(error))\n\t\t\t\t\t\tresult[type].push(...error);\n\t\t\t\t\telse\n\t\t\t\t\t\tresult[type].push(error);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\terrors.push(error);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t+ FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(\n\t\t\tresponse => {\n\t\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\t\treturn clean_return_value(response);\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\tif (response.data.errors)\n\t\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$api._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t\t);\n\n\t\t\t\treturn clean_return_value(response);\n\t\t\t},\n\t\t\terror => {\n\t\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\n\t\t\t\tconst errorConfig = get_error_handler(error.config);\n\n\t\t\t\tif (!errorConfig.fail)\n\t\t\t\t\treturn Promise.reject(error);\n\n\t\t\t\tconst remaining = get_error_list(error);\n\n\t\t\t\tconst errors = popHandleableErrors(errorConfig, remaining);\n\n\t\t\t\tfor (var type in errors) {\n\t\t\t\t\terrorConfig.handler[type](errors[type]);\n\t\t\t\t}\n\n\t\t\t\tif (remaining.length)\n\t\t\t\t\treturn Promise.reject(error);\n\t\t\t\t\n\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\t\t\t}\n\t\t);\n\n\t\tapp.config.globalProperties.$api = {\n\t\t\tgetUri(url) {\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\t[uri, params, config] = get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\t[uri, data, config] = get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\tcall(factory, configoverwrite, form) {\n\t\t\t\tif (Array.isArray(factory)) {\n\t\t\t\t\tconst $api = app.config.globalProperties.$api;\n\n\t\t\t\t\treturn Promise\n\t\t\t\t\t\t.allSettled(factory.map((config, index) => {\n\t\t\t\t\t\t\tif (!Array.isArray(config))\n\t\t\t\t\t\t\t\tconfig = ['#' + index, config];\n\t\t\t\t\t\t\treturn $api.call(config[1], {\n\t\t\t\t\t\t\t\terrorHeader: config[0],\n\t\t\t\t\t\t\t\terrorHandling: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}))\n\t\t\t\t\t\t.then(result => {\n\t\t\t\t\t\t\tconst [ , , config ] = get_config(form, undefined, undefined, configoverwrite || {});\n\t\t\t\t\t\t\tconst errorConfig = get_error_handler(config);\n\n\t\t\t\t\t\t\tif (!errorConfig.success && !errorConfig.fail) {\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst typedErrors = {};\n\t\t\t\t\t\t\tfor (var res of result) {\n\t\t\t\t\t\t\t\tconst [ allowed, item ] = res.status === 'fulfilled'\n\t\t\t\t\t\t\t\t\t? [ errorConfig.success, res.value ]\n\t\t\t\t\t\t\t\t\t: [ errorConfig.fail, res.reason ];\n\t\t\t\t\t\t\t\tif (!allowed)\n\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\tconst errors = popHandleableErrors(errorConfig, get_error_list(item));\n\n\t\t\t\t\t\t\t\tfor (var type in errors) {\n\t\t\t\t\t\t\t\t\tif (!typedErrors[type])\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type] = {\n\t\t\t\t\t\t\t\t\t\t\t[item.config.errorHeader]: errors[type]\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type][item.config.errorHeader] = errors[type];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfor (var errType in typedErrors) {\n\t\t\t\t\t\t\t\terrorConfig.handler[errType](typedErrors[errType]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tlet { method, url, params, config } = factory;\n\t\t\t\tif (configoverwrite !== undefined) {\n\t\t\t\t\tconfig = configoverwrite;\n\t\t\t\t}\n\t\t\t\tif (!method) {\n\t\t\t\t\tmethod = 'get';\n\t\t\t\t}\n\t\t\t\tif (method.toLowerCase)\n\t\t\t\t\tmethod = method.toLowerCase();\n\t\t\t\tif (method == 'get') {\n\t\t\t\t\treturn this.get(form, url, params, config);\n\t\t\t\t} else if (method == 'post') {\n\t\t\t\t\treturn this.post(form, url, params, config);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"FhcApi: method not allowed:\", method);\n\t\t\t\t}\n\t\t\t},\n\t\t\tgetErrorHandler(config) {\n\t\t\t\treturn get_error_handler(config);\n\t\t\t}\n\t\t};\n\n\t\tapp.provide('$api', app.config.globalProperties.$api);\n\t}\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/loadModule/' + category\n\t\t};\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst params = {categories, language}\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/phrasen/setLanguage',\n\t\t\tparams\n\t\t};\n\t},\n\tgetLanguage() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getLanguage'\n\t\t};\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getAllLanguages'\n\t\t};\n\t}\n};","import OldFhcApi from '../plugin/OldFhcApi.js'; // TODO(chris): remove at some point\nimport PluginsApi from './Api.js';\nimport ApiPhrasen from '../api/factory/phrasen.js';\n\nconst categories = Vue.reactive({});\nconst loadingModules = {};\nlet user_language = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language);\nexport let user_locale = Vue.computed(()=>{\n\tif(!user_language.value) return null;\n\treturn FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(language => language.sprache == user_language.value).LC_Time;\n});\n\nfunction extractCategory(obj, category) {\n\treturn obj.filter(e => e.category == category).reduce((res, elem) => {\n\t\tif (!res[elem.phrase])\n\t\t\tres[elem.phrase] = elem.text;\n\t\treturn res;\n\t}, {});\n}\nfunction getValueForLoadedPhrase(category, phrase, params) {\n\tlet result = categories[category][phrase];\n\tif (!result)\n\t\treturn '<< PHRASE ' + phrase + '>>';\n\tif (params)\n\t\tresult = result.replace(/\\{([^}]*)\\}/g, (match, p1) => params[p1] === undefined ? match : params[p1]);\n\treturn result;\n}\n\nconst phrasen = {\n\tuser_language,\n\tuser_locale,\n\tsetLanguage(language) {\n\t\tconst catArray = Object.keys(categories)\n\t\treturn this.config.globalProperties.$api\n\t\t\t.call(ApiPhrasen.setLanguage(catArray, language))\n\t\t\t.then(res => {\n\t\t\t\tres.data.forEach(row => {\n\t\t\t\t\tcategories[row.category][row.phrase] = row.text\n\t\t\t\t})\n\n\t\t\t\t// update the reactive data that holds the current active user_language\n\t\t\t\tuser_language.value = language;\n\n\t\t\t\treturn res\n\t\t\t})\n\t},\n\tloadCategory(category) {\n\t\tif (Array.isArray(category))\n\t\t\treturn Promise.all(category.map(this.config.globalProperties\n\t\t\t\t.$p.loadCategory));\n\n\t\tif (!loadingModules[category])\n\t\t\tloadingModules[category] = this.config.globalProperties.$api\n\t\t\t\t.call(ApiPhrasen.loadCategory(category))\n\t\t\t\t.then(res => res?.data ? extractCategory(res.data, category) : {})\n\t\t\t\t.then(res => {\n\t\t\t\t\tcategories[category] = res;\n\t\t\t\t});\n\t\treturn loadingModules[category];\n\t},\n\tt_ref(category, phrase, params) {\n\t\tconsole.warn('deprecated');\n\t\treturn Vue.computed(() => this.t(category, phrase, params));\n\t},\n\tt(category, phrase, params) {\n\t\tif (params === undefined && (\n\t\t\t(Array.isArray(category) && category.length == 2) ||\n\t\t\t(category.split && category.split('/').length == 2))\n\t\t\t) {\n\t\t\tparams = phrase;\n\t\t\t[category, phrase] = category.split ? category.split('/') : category;\n\t\t}\n\t\tif (phrase === undefined) {\n\t\t\tconsole.error('invalid input', category, phrase, params);\n\t\t\treturn '';\n\t\t}\n\t\tlet val = Vue.computed(() => {\n\t\t\tif (!categories[category])\n\t\t\t\treturn '';\n\t\t\treturn getValueForLoadedPhrase(category, phrase, params);\n\t\t});\n\t\tif (!categories[category])\n\t\t\tthis.loadCategory(category);\n\t\treturn val.value;\n\t}\n};\n\nexport default {\n\tinstall(app, options) {\n\t\tif (!app.config.globalProperties.$fhcApi)\n\t\t\tapp.use(OldFhcApi); // TODO(chris): remove at some point\n\t\tif (!app.config.globalProperties.$api)\n\t\t\tapp.use(PluginsApi);\n\t\tapp.config.globalProperties.$p = {\n\t\t\tt: phrasen.t,\n\t\t\tloadCategory: cat => phrasen.loadCategory.call(app, cat),\n\t\t\tsetLanguage: lang => phrasen.setLanguage.call(app, lang),\n\t\t\tuser_language: user_language,\n\t\t\tuser_locale,\n\t\t\tt_ref: phrasen.t_ref\n\t\t};\n\t\tapp.provide('$p', app.config.globalProperties.$p);\n\t}\n}","import PluginsPhrasen from '../../plugins/Phrasen.js';\nimport {setScrollbarWidth} from \"../../helpers/CssVarCalcHelpers.js\";\n\nconst app = Vue.createApp({\n\tname: 'DocumentsApp',\n\tdata() {\n\t\treturn {\n\t\t\tinscriptiontable: null,\n\t\t\tinscriptiontableFilters: {},\n\t\t\tstudienerfolgsbestaetigungtable: null,\n\t\t\tstudienerfolgsbestaetigungtableFilters: {},\n\t\t\tabschlussdokumentetable: null\n\t\t};\n\t},\n\tcomputed: {\n\t\tinscriptiontableFilter() {\n\t\t\tconst filter = [];\n\t\t\tfor (var k in this.inscriptiontableFilters)\n\t\t\t\tif (this.inscriptiontableFilters[k])\n\t\t\t\t\tfilter.push({\n\t\t\t\t\t\tfield: k,\n\t\t\t\t\t\ttype: '=',\n\t\t\t\t\t\tvalue: this.inscriptiontableFilters[k]\n\t\t\t\t});\n\t\t\treturn filter;\n\t\t},\n\t\tinscriptiontableEmpty() {\n\t\t\t// NOTE(chris): empty result on filter\n\t\t\tif (this.inscriptiontableFilters.Stsem)\n\t\t\t\treturn this.$p.t('tools', 'studienbeitragFuerSSNochNichtBezahlt', {stsem: this.inscriptiontableFilters.Stsem});\n\t\t\tif (this.inscriptiontableFilters.Stg)\n\t\t\t\treturn this.$p.t('tools', 'studienbeitragFuerStgNochNichtBezahlt', {stsem: this.inscriptiontableFilters.Stg});\n\t\t\t\n\t\t\treturn this.$p.t('tools', 'studienbeitragNochNichtBezahlt');\n\t\t},\n\t\tstudienerfolgsbestaetigungtableFilter() {\n\t\t\tconst filter = [];\n\t\t\tfor (var k in this.studienerfolgsbestaetigungtableFilters)\n\t\t\t\tif (this.studienerfolgsbestaetigungtableFilters[k])\n\t\t\t\t\tfilter.push({\n\t\t\t\t\t\tfield: k,\n\t\t\t\t\t\ttype: '=',\n\t\t\t\t\t\tvalue: this.studienerfolgsbestaetigungtableFilters[k]\n\t\t\t\t});\n\t\t\treturn filter;\n\t\t}\n\t},\n\tmethods: {\n\t\tchangeFilter(table, field, evt) {\n\t\t\tthis[table + 'Filters'][field] = evt.target.value;\n\t\t\tthis[table].clearFilter();\n\t\t\tif (this[table + 'Filter'].length)\n\t\t\t\tthis[table].setFilter(this[table + 'Filter']);\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.inscriptiontable = new Tabulator(this.$refs.inscriptiontable, {\n\t\t\tlayout: 'fitDataStretch',\n\t\t\tplaceholder: this.$p.t('tools', 'studienbeitragNochNichtBezahlt')\n\t\t});\n\t\tthis.studienerfolgsbestaetigungtable = new Tabulator(this.$refs.studienerfolgsbestaetigungtable, {\n\t\t\tlayout: 'fitDataStretch'\n\t\t});\n\t\tthis.abschlussdokumentetable = new Tabulator(this.$refs.abschlussdokumentetable, {\n\t\t\tlayout: 'fitDataStretch',\n\t\t\tplaceholder: this.$p.t('tools', 'nochKeineAbschlussdokumenteVorhanden')\n\t\t});\n\n\t\t// NOTE(chris): empty result on filter\n\t\tconst div = Vue.h(\n\t\t\t'div',\n\t\t\t{\n\t\t\t\tclass: 'position-absolute top-0 left-0 w-100 h-100 d-flex justify-content-center align-items-center fw-bold text-muted'\n\t\t\t},\n\t\t\t[\n\t\t\t\tthis.inscriptiontableEmpty\n\t\t\t]\n\t\t);\n\t\tthis.inscriptiontable.on('dataSorted', (sorters, rows) => {\n\t\t\tif (!rows.length) {\n\t\t\t\tdiv.children = [this.inscriptiontableEmpty];\n\t\t\t\tVue.render(div, this.inscriptiontable.element.querySelector('.tabulator-tableholder'));\n\t\t\t} else {\n\t\t\t\tVue.render(null, this.inscriptiontable.element.querySelector('.tabulator-tableholder'));\n\t\t\t}\n\t\t});\n\t}\n});\n\nsetScrollbarWidth();\n\napp.use(PluginsPhrasen);\napp.mount('#content');\n","// Create a temporary div element, set styles to ensure it's scrollable and off-screen, get scrollbar width from that\nfunction getScrollbarWidth() {\n\tconst div = document.createElement('div');\n\n\tdiv.style.position = 'absolute';\n\tdiv.style.top = '-9999px';\n\tdiv.style.width = '100px';\n\tdiv.style.height = '100px';\n\tdiv.style.overflow = 'scroll';\n\n\tdocument.body.appendChild(div);\n\tconst scrollbarWidth = div.offsetWidth - div.clientWidth;\n\tdocument.body.removeChild(div);\n\n\treturn scrollbarWidth;\n}\n\n// Detect the browser and set a CSS variable for the scrollbar width since chrome scrollbars mess with 100vw/vh css\nexport function setScrollbarWidth() {\n\tconst isChromium = /Chrome/.test(navigator.userAgent);\n\tconst isFirefox = /Firefox/.test(navigator.userAgent);\n\n\tif (isChromium) {\n\t\tconst width = getScrollbarWidth() + 'px';\n\t\tdocument.body.style.setProperty('--scrollbar-width', width); // Set the value for Chrome\n\t} else if (isFirefox) {\n\t\tdocument.body.style.setProperty('--scrollbar-width', '0px'); // Set the value for Firefox or adjust as needed\n\t}\n}"],"names":["search","searchsettings","config","this","$fhcApi","post","searchAdvanced","searchdummy","phrasen$1","loadCategory","category","get","setLanguage","categories","language","payload","getLanguage","getActiveDbLanguages","navigation","getHeader","navigation_page","getMenu","filter$1","saveCustomFilter","wsParams","filterUniqueId","filterType","customFilterName","removeCustomFilter","filterId","applyFilterFields","filterFields","addFilterField","filterField","removeFilterField","getFilterById","getFilter","studstatus","abmeldung","getDetails","antrag_id","prestudent_id","url","undefined","create","stdsem","grund","studiensemester","errorHandling","cancel","Array","isArray","Promise","allSettled","map","antrag","studierendenantrag_id","errorHeader","unterbrechung","datum_wiedereinstieg","attachment","wiederholung","getLvs","saveLvs","forbiddenLvs","mandatoryLvs","leitung","getStgs","getAntraege","params","then","res","data","getHistory","getPrestudents","query","signal","timeout","approve","a","reject","reopen","pause","unpause","object","approveObjection","denyObjection","profil","getView","uid","FHC_JS_DATA_STORAGE_OBJECT","app_root","ci_router","fotoSperre","value","isStudent","isMitarbeiter","getZustellAdresse","getZustellKontakt","getGemeinden","nation","zip","getAllNationen","profilUpdate","getStatus","getTopic","acceptProfilRequest","profil_update_id","status_message","topic","requested_change","denyProfilRequest","insertFile","dms","replace","getProfilRequestFiles","requestID","selectProfilRequest","id","insertProfilRequest","fileID","updateProfilRequest","ID","deleteProfilRequest","lvPlan","getRoomInfo","ort_kurzbz","start_date","end_date","getStunden","getOrtReservierungen","getLvPlanReservierungen","getLehreinheitStudiensemester","lehreinheit_id","studiensemesterDateInterval","date","LvPlanEvents","lv_id","stv","verband","favorites","set","students","studiensemester_kurzbz","encodeURIComponent","getUri","prestudent","person","person_id","relative_path","filter","getStg","setStg","studiengang_kz","konto","tabulatorConfig","self","ajaxURL","ajaxParams","modelValue","e","only_open","studiengang_kz_intern","stg_kz","ajaxRequestFunc","ajaxResponse","response","checkDoubles","form","confirmErrorHandler","error","insert","counter","edit","delete","buchungsnr","getBuchungstypen","group","getGruppen","deleteGroup","kontakt","getAdressen","addNewAddress","loadAddress","address_id","updateAddress","deleteAddress","getPlaces","plz","getFirmen","searchString","getNations","getAdressentypen","getBankverbindung","addNewBankverbindung","loadBankverbindung","bankverbindung_id","updateBankverbindung","deleteBankverbindung","getKontakte","addNewContact","loadContact","kontakt_id","updateContact","deleteContact","getStandorteByFirma","getKontakttypen","updatePrestudent","getBezeichnungZGV","getBezeichnungMZgv","getBezeichnungDZgv","getAusbildung","getAufmerksamdurch","getBerufstaetigkeit","getTypenStg","getBisstandort","getHistoryPrestudent","getMaxSem","studiengang_kzs","advanceStatus","status_kurzbz","ausbildungssemester","confirmStatus","isLastStatus","deleteStatus","getLastBismeldestichtag","getHistoryPrestudents","status","insertStatus","loadStatus","updateStatus","getStudienplaene","getStudiengang","getStatusgruende","getStati","addStudent","changeStatus","getStatusarray","details","save","exam","getPruefungen","loadPruefung","pruefung_id","getTypenPruefungen","getAllLehreinheiten","getLvsByStudent","getLvsandLesByStudent","semester","getLvsAndMas","getMitarbeiterLv","getNoten","checkZeugnisnoteLv","addPruefung","updatePruefung","deletePruefung","abschlusspruefung","getAbschlusspruefung","addNewAbschlusspruefung","loadAbschlusspruefung","updateAbschlusspruefung","deleteAbschlusspruefung","getTypenAbschlusspruefung","getTypenAntritte","getBeurteilungen","getAkadGrade","getTypStudiengang","getMitarbeiter","getPruefer","checkForExistingExams","uids","grades","list","getCertificate","getTeacherProposal","getRepeaterGrades","updateCertificate","lehrveranstaltung_id","student_uid","note","lehrveranstaltung_bezeichnung","deleteCertificate","copyTeacherProposalToCertificate","copyRepeaterGradeToCertificate","studierendenantrag_lehrveranstaltung_id","lv_bezeichnung","getGradeFromPoints","points","manualErrorHandling","mobility","getMobilitaeten","getProgramsMobility","addNewMobility","loadMobility","bisio_id","updateMobility","deleteMobility","getLVList","getPurposes","getSupports","getListPurposes","getListSupports","deleteMobilityPurpose","addMobilityPurpose","deleteMobilitySupport","addMobilitySupport","archiv","getArchivVorlagen","archive","archiveSigned","update","akte_id","documents","getDocumentsUnaccepted","getDocumentsAccepted","deleteZuordnung","dokument_kurzbz","createZuordnung","loadAkte","getDoktypen","updateFile","deleteFile","uploadFile","exemptions","getAnrechnungen","getLehrveranstaltungen","getBegruendungen","getLvsKompatibel","getLektoren","addNewAnrechnung","loadAnrechnung","anrechnung_id","editAnrechnung","deleteAnrechnung","jointstudies","getStudies","getTypenMobility","getStudiensemester","getStudyprograms","getListPartner","getStatiPrestudent","loadStudy","insertStudy","updateStudy","deleteStudy","courselist","getCourselist","group_consecutiveHours","dbStundenplanTable","configStudent","configStudents","notiz","getNotizen","type","getUid","addNewNotiz","formData","loadNotiz","notiz_id","loadDokumente","deleteNotiz","type_id","updateNotiz","event","isBerechtigt","betriebsmittel","getAllBetriebsmittel","addNewBetriebsmittel","loadBetriebsmittel","betriebsmittelperson_id","updateBetriebsmittel","deleteBetriebsmittel","getTypenBetriebsmittel","loadInventarliste","checkperson","updatePersonUnrulyStatus","unrulyParam","unruly","filterPerson","base","axios","ort","getContentID","ort_kurbz","getRooms","datum","von","bis","typ","personenanzahl","getRoomTypes","cms","content","content_id","version","sprache","sichtbar","getNews","page","page_size","news","limit","getNewsRowCount","getNewsExtra","lehre","getStudentenMail","getLvInfo","getStudentPruefungen","getStudentProjektarbeiten","getStudentProjektabgaben","detail","projektarbeit_id","postStudentProjektarbeitEndupload","Headers","postStudentProjektarbeitZwischenabgabe","getStudentProjektarbeitAbgabeFile","paabgabe_id","window","location","getMitarbeiterProjektarbeiten","all","postProjektarbeitAbgabe","termin","paabgabetyp_kurzbz","bezeichnung","fixtermin","insertvon","kurzbz","deleteProjektarbeitAbgabe","postSerientermin","projektarbeit_ids","fetchDeadlines","addons","getLvMenu","lvid","messages","getMessages","size","getVorlagen","getMsgVarsLoggedInUser","getMessageVarsPerson","getMsgVarsPrestudent","getPersonId","getDataVorlage","vorlage_kurzbz","getNameOfDefaultRecipient","getPreviewText","getReplyData","messageId","sendMessageFromModalContext","sendMessage","deleteMessage","vorlagen","getVorlagenByLoggedInUser","studium","getAllStudienSemester","studiengang","studienplan","getStudiengaengeForStudienSemester","getStudienplaeneBySemester","getLvPlanForStudiensemester","getLvEvaluierungInfo","FhcApiFactory","phrasen","dashboard","getViewData","bookmark","getBookmarks","bookmark_id","title","tag","ampeln","open","confirm","ampel_id","studiengangInformation","getStudiengangByKz","menu","authinfo","getAuthUID","getAuthInfo","getAll","OldFhcApi","install","app","options","globalProperties","factory","console","warn","addEndpoints","_get_config","uri","TypeError","clearValidation","setFeedback","_clean_return_value","result","meta","fhcApiAxios","baseURL","interceptors","request","use","method","FormData","Object","values","every","item","FileList","i","File","newData","entries","reduce","nd","key","file","append","length","jsondata","forEach","JSON","stringify","errors","err","_defaultErrorHandlers","code","handled","$fhcAlert","alertDefault","message","responseURL","alertError","validation","$p","t","apply","general","php","filename","line","backtrace","function","severity","alertSystemError","exception","class","db","heading","sql","join","auth","controller","required_permissions","FhcApiFactoryWrapper","constructor","factorypart","root","defineProperty","noWarn","keys","bind","provide","CORE_REST_CLIENT_ERROR","CORE_REST_CLIENT_RETVAL","CoreRESTClient","wsURL","wsParameters","axiosParameters","_axiosCall","isSuccess","hasOwnProperty","isError","hasData","trim","getData","getError","getErrorCode","_generateRouterURI","_printDebug","parameters","errorThrown","axiosCallObj","prop","helperAppContainer","document","createElement","helperApp","Vue","createApp","name","components","PvToast","PvConfirm","methods","mailToUrl","slotProps","systemerror_mailto","called_path","called_method","openMessagecard","bootstrap","Collapse","getOrCreateInstance","target","getAttribute","toggle","unmounted","parentElement","removeChild","computed","showmaillink","template","PvConfig","PvConfirmationService","helperAppInstance","mount","body","appendChild","FhcAlert","FhcPhrasen","alertSuccess","$refs","toast","add","summary","life","alertInfo","alertWarning","alert","confirmDelete","resolve","$confirm","require","header","acceptLabel","acceptClass","rejectLabel","rejectClass","accept","sticky","html","alertMultiple","messageArray","handleSystemError","toLowerCase","errMsg","retval","toUpperCase","stack","handleSystemMessage","msg","resetFormValidation","Event","querySelectorAll","el","dispatchEvent","handleFormValidation","nodeType","Node","ELEMENT_NODE","notFound","input","querySelector","CustomEvent","arr","PluginsApi","$api","_send_array_or_object","func","errs","DEFAULT_ERROR_CONFIG","success","fail","combine","handler","async","_format_toast","_default","push","field","msgs","sort","b","indexOf","n_errors","n","get_config","clean_return_value","String","_merge_error_config","get_error_handler","formHandler","get_error_list","popHandleableErrors","copy","pop","newType","newTypeCombinesType","includes","newTypeHasHandler","errorConfig","remaining","call","configoverwrite","index","typedErrors","allowed","reason","errType","getErrorHandler","ApiPhrasen","reactive","loadingModules","user_language","ref","user_locale","server_languages","find","LC_Time","catArray","row","phrase","text","obj","elem","extractCategory","t_ref","split","val","match","p1","getValueForLoadedPhrase","PluginsPhrasen","cat","lang","inscriptiontable","inscriptiontableFilters","studienerfolgsbestaetigungtable","studienerfolgsbestaetigungtableFilters","abschlussdokumentetable","inscriptiontableFilter","k","inscriptiontableEmpty","Stsem","stsem","Stg","studienerfolgsbestaetigungtableFilter","changeFilter","table","evt","clearFilter","setFilter","mounted","Tabulator","layout","placeholder","div","h","on","sorters","rows","render","element","children","isChromium","test","navigator","userAgent","isFirefox","width","style","position","top","height","overflow","scrollbarWidth","offsetWidth","clientWidth","getScrollbarWidth","setProperty","setScrollbarWidth"],"mappings":"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"} \ No newline at end of file diff --git a/public/dist/js/apps/Cis/ProfilUpdateRequests.js b/public/dist/js/apps/Cis/ProfilUpdateRequests.js index 49fb57ecc..3f70b835a 100644 --- a/public/dist/js/apps/Cis/ProfilUpdateRequests.js +++ b/public/dist/js/apps/Cis/ProfilUpdateRequests.js @@ -1,6 +1,6 @@ -import t from"../../../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js?2025102901";import e from"../../../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js?2025102901";import n from"../../../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js?2025102901";import r from"../../../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js?2025102901";const i={emits:["dataFetched"],props:{refresh:{type:Boolean},apiFunction:{required:!0,type:Function},apiFunctionParameters:{}},watch:{refresh:function(t,e){this.fetchData()}},data:function(){return{loading:!1,error:!1,errorMessage:null}},created:function(){this.fetchData()},methods:{fetchData:function(){if(this.loading=!0,this.error=!1,this.errorMessage=null,"function"==typeof this.apiFunction){let t=this.apiFunction(this.apiFunctionParameters);t instanceof Promise?t.then(this.successHandler).catch(this.errorHandler).finally(this.finallyHandler):this.setError("The called apiFunction does not return a Promise")}else this.setError("Property apiFunction is not a function")},setError:function(t){this.loading=!1,this.error=!0,this.errorMessage=t},successHandler:function(t){this.$emit("dataFetched",t?t.data:void 0)},errorHandler:function(t){t.response?.data?.retval?this.setError(t.response.data.retval):t.data?.message?this.setError(t.data.message):this.setError(t.message)},finallyHandler:function(){this.loading=!1}},template:'\n\t\t\n\t\t\t
Loading...
\n\t\t
\n\t\t\n\t\t\t
{{ errorMessage }}
\n\t\t
\n\t\t\n\t'},s="Filter Component New Filter";var a={props:{filters:{type:Array,default:[]},columns:{type:Array,default:[]},fields:{type:Array,default:[]}},emits:{switchFilter:["filterId"],applyFilterConfig:["filterFields"],saveCustomFilter:["customFilterName"]},data:function(){return{currentFields:[]}},computed:{types(){return this.columns.reduce((t,e)=>{let n=e.type.toLowerCase();return n.indexOf("int")>=0?t[e.name]="Numeric":n.indexOf("varchar")>=0||n.indexOf("text")>=0||n.indexOf("bpchar")>=0?t[e.name]="Text":n.indexOf("timestamp")>=0||n.indexOf("date")>=0?t[e.name]="Date":t[e.name]="",t},{})}},watch:{fields(t){this.currentFields=t}},methods:{switchFilter(t){this.$emit("switchFilter",t.currentTarget.value)},applyFilterConfig(){const t=this.currentFields.filter(t=>t.name!=s);t.filter(t=>""==t.condition).length?alert("Please fill all the filter options"):this.$emit("applyFilterConfig",t)},addField(t){this.currentFields.push({name:s})},removeField(t){this.currentFields.splice(t,1)}},template:'\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tFilter {{ index + 1 }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\x3c!-- Numeric --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\x3c!-- Text --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\x3c!-- Timestamp and date --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t\x3c!-- Filter save options --\x3e\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
\n\t'},o={props:{fields:Array,selected:{type:Array,default:[]},names:{type:Object,default:{}}},emits:{hide:["fieldName"],show:["fieldName"]},data:function(){return{selectedFields:[]}},watch:{selected(t){this.selectedFields=t}},methods:{toggle(t){-1!=this.selectedFields.indexOf(t)?(this.selectedFields.splice(this.selectedFields.indexOf(t),1),this.$emit("hide",t)):(this.selectedFields.push(t),this.$emit("show",t))}},template:'\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{{ names[fieldToDisplay] || fieldToDisplay }}\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
\n\t'};const l={jsonLines:"fa-file-lines",xlsx:"fa-file-excel",pdf:"fa-file-pdf",html:"fa-file-code",json:"fa-file",csv:"fa-file-csv"},d={jsonLines:"Download as JSONLINES",xlsx:"Download as XLSX",pdf:"Download as PDF",html:"Download as HTML",json:"Download as JSON",csv:"Download as CSV "};var p={props:{tabulator:Object,config:{type:[Boolean,String,Function,Array,Object],default:!1},iconClass:[String,Array,Object]},computed:{currentConfig(){if(!this.config)return!1;let t=this.config;if(t instanceof Function)return[t];if(null===t)return[];if(!0===this.config&&(t=["csv"]),"[object String]"===Object.prototype.toString.call(t)&&(t=t.split(",")),"object"==typeof t&&!Array.isArray(t)){let i=[];for(var e in t){var n,r=t[e];r&&("[object String]"===Object.prototype.toString.call(r)?null!==(n=this.stringToFileFormatter(r))?i.push({icon:"fa-solid "+l[n],label:r===e?d[n]:e,formatter:n}):null!==(n=this.stringToFileFormatter(e))?i.push({icon:"fa-solid "+l[n],label:r,formatter:n}):alert("neither "+e+" nor "+r+" are supported download file types"):"object"!=typeof r||Array.isArray(r)?null!==(n=this.stringToFileFormatter(e))?i.push({icon:"fa-solid "+l[n],label:d[n],formatter:n}):alert(e+" is not a supported download file type"):null!==(n=this.stringToFileFormatter(e))?(void 0===r.formatter&&(r.formatter=n),void 0===r.label&&(r.label=d[n]),void 0===r.icon&&(r.icon=l[n]),i.push(r)):(void 0===r.label&&(r.label=e),i.push(r)))}t=i}if(Array.isArray(t)){if(t=t.map(t=>{if("[object String]"===Object.prototype.toString.call(t)){let e=this.stringToFileFormatter(t);return null===e?null:{icon:"fa-solid "+l[e],label:d[e],formatter:e}}if(t instanceof Function)return{formatter:t};if("object"==typeof t&&!Array.isArray(t)&&null!==t){if(t.formatter instanceof Function)return t;if(this.validateFileFormatter(t.formatter))return t}return null}).filter(t=>null!==t),t.length<2)return t;if(t.filter(t=>t.label||t.icon).length==t.length)return t;alert("Config not valid")}return[]}},methods:{stringToFileFormatter(t){let e=t.toLowerCase();return"jsonlines"==e?"jsonLines":["xlsx","pdf","html","json","csv"].includes(e)?e:null},validateFileFormatter(t){let e=this.stringToFileFormatter(t);if(!e)return alert(t+" is not a supported file formatter"),!1;if("xlsx"==e&&!window.XLSX)return alert("XLSX Library not loaded"),!1;if("pdf"==e){if(!window.jspdf)return alert("jsPDF Library not loaded"),!1;if(!new jspdf.jsPDF({}).autoTable)return alert("jsPDF-AutoTable Plugin not loaded"),!1}return!0},download(t){this.tabulator.download(t.formatter,t.file,t.options)}},template:'\n\t\n\t'};const u=new WeakMap;var c={mounted(t,e){let n=!1;u.set(t,e=>{if(!n)return;if(t.contains(e.target))return;const r=bootstrap.Collapse.getInstance(t);r&&r.hide()}),t.addEventListener("shown.bs.collapse",()=>{n=!0}),t.addEventListener("hide.bs.collapse",()=>{n=!1}),document.addEventListener("click",u.get(t),!0)},beforeUnmount(t,e){document.removeEventListener("click",u.get(t)),delete t.collapsibleAutoHideFunc}};window.Tabulator?.extendModule("layout","modes",{fitDataStretchFrozen(t,e){var n=0,r=this.table.rowManager.element.clientWidth,i=0,s=!1;t.forEach((t,e)=>{t.widthFixed||t.reinitializeWidth(),(this.table.options.responsiveLayout?t.modules.responsive.visible:t.visible&&!t.definition.frozen)&&(s=t),t.visible&&(n+=t.getWidth())}),s?(i=r-n+s.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(s.setWidth(0),this.table.modules.responsiveLayout.update()),i>0?s.setWidth(i):s.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()}});var f={saveCustomFilter:t=>({method:"post",url:"/api/frontend/v1/filter/saveCustomFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,customFilterName:t.customFilterName}}),removeCustomFilter:t=>({method:"post",url:"/api/frontend/v1/filter/removeCustomFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId}}),applyFilterFields:t=>({method:"post",url:"/api/frontend/v1/filter/applyFilterFields",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterFields:t.filterFields}}),addFilterField:t=>({method:"post",url:"/api/frontend/v1/filter/addFilterField",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField}}),removeFilterField:t=>({method:"post",url:"/api/frontend/v1/filter/removeFilterField",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField}}),getFilterById:t=>({method:"get",url:"/api/frontend/v1/filter/getFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId}}),getFilter:t=>({method:"get",url:"/api/frontend/v1/filter/getFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType}})},h=0;const g={components:{CoreFetchCmpt:i,FilterConfig:a,FilterColumns:o,TableDownload:p},directives:{collapseAutoClose:c},emits:["nwNewEntry","click:new","tableBuilt","uuidDefined"],props:{onNwNewEntry:Function,title:String,description:String,sideMenu:{type:Boolean,default:!0},filterType:{type:String},tabulatorOptions:Object,tabulatorEvents:Array,tableOnly:Boolean,noColumnFilter:Boolean,reload:Boolean,reloadBtnInfotext:String,download:{type:[Boolean,String,Function,Array,Object],default:!1},newBtnShow:Boolean,newBtnClass:[String,Array,Object],newBtnDisabled:Boolean,newBtnLabel:String,uniqueId:String,idField:String,parentIdField:String,countOnly:Boolean,useSelectionSpan:{type:Boolean,default:!0}},data:function(){return{uuid:0,filterName:null,filterActive:!1,fields:null,dataset:null,datasetMetadata:null,selectedFields:null,filterFields:null,availableFilters:null,selectedFilter:null,fetchCmptRefresh:!1,fetchCmptApiFunction:null,fetchCmptApiFunctionParams:null,fetchCmptDataFetched:null,fetchResult:null,tabulator:null,tableBuilt:!1,tabulatorHasSelector:!1,selectedData:[],persistence:{sort:!0,columns:!0,filter:!1,headerFilter:!1,group:!1,page:!1}}},computed:{notSelectedFields(){return this.fields&&this.selectedFields?this.fields.filter(t=>-1===this.selectedFields.indexOf(t)):null},filteredData(){return this.dataset?JSON.parse(JSON.stringify(this.dataset)):[]},filteredColumns(){let t=JSON.parse(JSON.stringify(this.fields))||[],e=JSON.parse(JSON.stringify(this.selectedFields))||[],n=null;if(this.tabulatorOptions&&this.tabulatorOptions.hasOwnProperty("columns")&&(n=this.tabulatorOptions.columns),!Array.isArray(n)||Array.isArray(n)&&n.length=0,n.push(t)}}else for(let r of n)r.visible=e.indexOf(r.field)>=0||-1==t.indexOf(r.field),r.hasOwnProperty("resizable")&&(r.resizable=r.visible);return n},fieldIdsForVisibilty(){return this.tableBuilt?this.tabulator.getColumns().filter(t=>{let e=t.getDefinition();return!e.frozen&&e.title&&"responsiveCollapse"!=e.formatter}).map(t=>t.getField()):[]},fieldNames(){return this.tableBuilt?this.tabulator.getColumns().reduce((t,e)=>(t[e.getField()]=e.getDefinition().title,t),{}):{}},idExtra(){return this.uuid?"-"+this.uuid:""},columnsForFilter(){if(!this.filteredColumns||!this.datasetMetadata)return[];const t=this.filteredColumns.reduce((t,e)=>(t[e.field]=e.title,t),{});return this.datasetMetadata.map(e=>({...e,title:t[e.name]}))}},methods:{reloadTable(){this.tableOnly?this.tabulator.setData():this.getFilter()},async initTabulator(){let t="< Phrasen Plugin not loaded! >";this.$p&&(await this.$p.loadCategory("ui"),t=this.$p.t("ui/keineDatenVorhanden")),this.tableOnly||await new Promise(t=>{const e=window.location.hash?window.location.hash.slice(1):null,n=e=>{this.setRenderData(e),t()};null===e?this.startFetchCmpt(t=>this.$api.call(f.getFilter(t)),null,n):this.startFetchCmpt(t=>this.$api.call(f.getFilterById(t)),{filterId:e},n)});let e={layout:"fitDataStretchFrozen",movableColumns:!0,columnDefaults:{tooltip:!0},placeholder:t,persistence:this.persistence,...this.tabulatorOptions||{}};if(void 0===e.height&&void 0===e.minHeight&&void 0===e.maxHeight&&(e.height=500),this.tableOnly?e.columns.forEach(t=>{void 0===t.visible&&(t.visible=!0)}):(e.data=this.filteredData,e.columns=this.filteredColumns),(e.selectable||e.columns&&e.columns.filter(t=>"rowSelection"==t.formatter).length)&&(this.tabulatorHasSelector=!0),this.idField&&(this.parentIdField&&(e.dataTree=!0),e.index=this.idField),this.tabulator=new Tabulator(this.$refs.table,e),Array.isArray(this.tabulatorEvents)&&this.tabulatorEvents.length>0)for(let t of this.tabulatorEvents)this.tabulator.on(t.event,t.handler);this.tabulator.on("tableBuilt",()=>{this.tableBuilt=!0,this.$emit("tableBuilt")}),this.tabulator.on("rowSelectionChanged",t=>{this.selectedData=t}),this.parentIdField&&this.idField&&this.tabulator.on("dataLoading",t=>{let e=[];for(let n=0;n{const t=this.tabulator.getColumns();this.fields=t.map(t=>t.getField()),this.selectedFields=t.filter(t=>t.isVisible()).map(t=>t.getField()),this.tabulator.options.persistence.headerFilter&&this._setHeaderFilter()}),this.tabulator.on("dataFiltered",t=>{this.filterActive=t.length>0})},updateTabulator(){this.tabulator&&(this.tableBuilt?this._updateTabulator():this.tabulator.on("tableBuilt",this._updateTabulator))},_updateTabulator(){this.tabulatorHasSelector=this.tabulatorOptions.selectable||this.filteredColumns.filter(t=>"rowSelection"==t.formatter).length,this.tabulator.setColumns(this.filteredColumns),this.tabulator.setData(this.filteredData),this._setHeaderFilter()},clearFilters(){this.tabulator.getHeaderFilters().forEach(t=>{this.tabulator.setHeaderFilterValue(t.field,"")}),this.tabulator.clearFilter(),this.filterActive=!1},_setHeaderFilter(){this.tabulator.getHeaderFilters().forEach(t=>{this.tabulator.setHeaderFilterValue(t.field,t.value)})},getFilter(){null===this.selectedFilter?this.startFetchCmpt(t=>this.$api.call(f.getFilter(t)),null,this.render):this.startFetchCmpt(t=>this.$api.call(f.getFilterById(t)),{filterId:this.selectedFilter},this.render)},setRenderData(t){this.fetchResult=t,this.filterName=t.filterName,this.dataset=t.dataset,this.datasetMetadata=t.datasetMetadata,this.fields=t.fields,this.selectedFields=t.selectedFields,this.filterFields=[];for(let e=0;ethis.$api.call(f.saveCustomFilter(t)),{customFilterName:t},this.getFilter)},handlerRemoveCustomFilter(t){let e=t.currentTarget.getAttribute("href").substring(1);e===this.selectedFilter&&(this.selectedFilter=null),this.startFetchCmpt(t=>this.$api.call(f.removeCustomFilter(t)),{filterId:e},this.getFilter)},handlerGetFilterById:function(t){let e=null,n=t.currentTarget.getAttribute("href");e=null==n?t.currentTarget.value:n.substring(1),this.switchFilter(e)},switchFilter(t){this.selectedFilter=t,this.getFilter()},applyFilterConfig(t){this.selectedFilter=null,this.startFetchCmpt(t=>this.$api.call(f.applyFilterFields(t)),{filterFields:t},this.getFilter)},appendChild(t,e){let n=e[this.parentIdField];for(let r=0;r{this.tableOnly||(this.selectedFilter=window.location.hash?window.location.hash.slice(1):null,this.render(this.fetchResult))})},template:'\n\t\t\x3c!-- Load filter data --\x3e\n\t\t\n\t\t\n\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t\t
\n\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{{ selectedData.length }} ausgewählt\n\t\t\t\t\t\t Mit {{ selectedData.length }} ausgewählten:\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t[ {{ filterName }} ]\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t
\n\n\t\t\x3c!-- Tabulator --\x3e\n\t\t
\n\t'};var m={name:"BootstrapModal",data:()=>({modal:null,fullscreen:!1}),props:{backdrop:{type:[Boolean,String],default:!0,validator:t=>["static",!0,!1].includes(t)},focus:{type:Boolean,default:!0},keyboard:{type:Boolean,default:!0},noCloseBtn:Boolean,dialogClass:[String,Array,Object],headerClass:{type:[String,Array,Object],default:""},bodyClass:{type:[String,Array,Object],default:"px-4 py-5"},footerClass:{type:[String,Array,Object],default:""},allowFullscreenExpand:{type:Boolean,default:!1}},emits:["hideBsModal","hiddenBsModal","hidePreventedBsModal","showBsModal","shownBsModal"],methods:{dispose(){return this.modal.dispose()},handleUpdate(){return this.modal.handleUpdate()},hide(){return this.modal.hide()},show(t){return this.modal.show(t)},toggle(){return this.modal.toggle()},toggleFullscreen(){this.fullscreen=!this.fullscreen}},mounted(){this.$refs.modal&&(this.modal=new bootstrap.Modal(this.$refs.modal,{backdrop:this.backdrop,focus:this.focus,keyboard:this.keyboard}))},popup(t,e,n,r){const i=this,s={};void 0!==t&&(s.default=()=>t),void 0!==n&&(s.title=()=>n),void 0!==r&&(s.footer=()=>r);let a=!1;return"undefined"!=typeof primevue&&(a=!0),new Promise((t,n)=>{const r=Vue.createApp({name:"ModalTmpApp",setup:()=>()=>Vue.h(i,{class:"fade",...e,ref:"modal","onHidden.bs.modal":r.unmount},s),mounted(){this.$refs.modal.show()},beforeUnmount(){this.$refs.modal&&(!1!==this.$refs.modal.result?t(this.$refs.modal.result):n())},unmounted(){o.parentElement.removeChild(o)}}),o=document.createElement("div");a&&r.use(primevue.config.default,{zIndex:{overlay:9999}}),Promise.resolve().then(function(){return at}).then(t=>{r.use(t.default),r.mount(o),document.body.appendChild(o)})})},template:''},v={props:{view:String,data:Object},data:()=>({}),created(){},template:'\n\t\n'},A={props:{data:Object,view:String,withZustelladresse:{type:Boolean,default:!0}},data:()=>({}),created(){},template:'\n \n
\n \n \x3c!-- column 1 in the address row --\x3e\n
\n \n
\n \n
\n
\n
{{$p.t(\'person\',\'strasse\')}}
\n {{data.strasse}} \n
\n
\n \n \x3c!-- column 2 in the address row --\x3e\n
\n
\n
{{$p.t(\'global\',\'typ\')}}
\n {{data.typ}} \n
\n
\n \n
\n
\n
{{$p.t(\'person\',\'ort\')}}
\n {{data.ort}} \n
\n
\n
\n
\n
{{$p.t(\'person\',\'plz\')}}
\n {{data.plz}} \n
\n
\n\n
\n
\n
{{$p.t(\'person\',\'zustelladresse\')}}
\n
\n \n
\n
\n
\n
\n'},b={ +import t from"../../../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js?2025111701";import e from"../../../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js?2025111701";import n from"../../../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js?2025111701";import r from"../../../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js?2025111701";const i={emits:["dataFetched"],props:{refresh:{type:Boolean},apiFunction:{required:!0,type:Function},apiFunctionParameters:{}},watch:{refresh:function(t,e){this.fetchData()}},data:function(){return{loading:!1,error:!1,errorMessage:null}},created:function(){this.fetchData()},methods:{fetchData:function(){if(this.loading=!0,this.error=!1,this.errorMessage=null,"function"==typeof this.apiFunction){let t=this.apiFunction(this.apiFunctionParameters);t instanceof Promise?t.then(this.successHandler).catch(this.errorHandler).finally(this.finallyHandler):this.setError("The called apiFunction does not return a Promise")}else this.setError("Property apiFunction is not a function")},setError:function(t){this.loading=!1,this.error=!0,this.errorMessage=t},successHandler:function(t){this.$emit("dataFetched",t?t.data:void 0)},errorHandler:function(t){t.response?.data?.retval?this.setError(t.response.data.retval):t.data?.message?this.setError(t.data.message):this.setError(t.message)},finallyHandler:function(){this.loading=!1}},template:'\n\t\t\n\t\t\t
Loading...
\n\t\t
\n\t\t\n\t\t\t
{{ errorMessage }}
\n\t\t
\n\t\t\n\t'},s="Filter Component New Filter";var a={props:{filters:{type:Array,default:[]},columns:{type:Array,default:[]},fields:{type:Array,default:[]}},emits:{switchFilter:["filterId"],applyFilterConfig:["filterFields"],saveCustomFilter:["customFilterName"]},data:function(){return{currentFields:[]}},computed:{types(){return this.columns.reduce((t,e)=>{let n=e.type.toLowerCase();return n.indexOf("int")>=0?t[e.name]="Numeric":n.indexOf("varchar")>=0||n.indexOf("text")>=0||n.indexOf("bpchar")>=0?t[e.name]="Text":n.indexOf("timestamp")>=0||n.indexOf("date")>=0?t[e.name]="Date":t[e.name]="",t},{})}},watch:{fields(t){this.currentFields=t}},methods:{switchFilter(t){this.$emit("switchFilter",t.currentTarget.value)},applyFilterConfig(){const t=this.currentFields.filter(t=>t.name!=s);t.filter(t=>""==t.condition).length?alert("Please fill all the filter options"):this.$emit("applyFilterConfig",t)},addField(t){this.currentFields.push({name:s})},removeField(t){this.currentFields.splice(t,1)}},template:'\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tFilter {{ index + 1 }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\x3c!-- Numeric --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\x3c!-- Text --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\x3c!-- Timestamp and date --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t\x3c!-- Filter save options --\x3e\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
\n\t'},o={props:{fields:Array,selected:{type:Array,default:[]},names:{type:Object,default:{}}},emits:{hide:["fieldName"],show:["fieldName"]},data:function(){return{selectedFields:[]}},watch:{selected(t){this.selectedFields=t}},methods:{toggle(t){-1!=this.selectedFields.indexOf(t)?(this.selectedFields.splice(this.selectedFields.indexOf(t),1),this.$emit("hide",t)):(this.selectedFields.push(t),this.$emit("show",t))}},template:'\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{{ names[fieldToDisplay] || fieldToDisplay }}\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
\n\t'};const l={jsonLines:"fa-file-lines",xlsx:"fa-file-excel",pdf:"fa-file-pdf",html:"fa-file-code",json:"fa-file",csv:"fa-file-csv"},d={jsonLines:"Download as JSONLINES",xlsx:"Download as XLSX",pdf:"Download as PDF",html:"Download as HTML",json:"Download as JSON",csv:"Download as CSV "};var p={props:{tabulator:Object,config:{type:[Boolean,String,Function,Array,Object],default:!1},iconClass:[String,Array,Object]},computed:{currentConfig(){if(!this.config)return!1;let t=this.config;if(t instanceof Function)return[t];if(null===t)return[];if(!0===this.config&&(t=["csv"]),"[object String]"===Object.prototype.toString.call(t)&&(t=t.split(",")),"object"==typeof t&&!Array.isArray(t)){let i=[];for(var e in t){var n,r=t[e];r&&("[object String]"===Object.prototype.toString.call(r)?null!==(n=this.stringToFileFormatter(r))?i.push({icon:"fa-solid "+l[n],label:r===e?d[n]:e,formatter:n}):null!==(n=this.stringToFileFormatter(e))?i.push({icon:"fa-solid "+l[n],label:r,formatter:n}):alert("neither "+e+" nor "+r+" are supported download file types"):"object"!=typeof r||Array.isArray(r)?null!==(n=this.stringToFileFormatter(e))?i.push({icon:"fa-solid "+l[n],label:d[n],formatter:n}):alert(e+" is not a supported download file type"):null!==(n=this.stringToFileFormatter(e))?(void 0===r.formatter&&(r.formatter=n),void 0===r.label&&(r.label=d[n]),void 0===r.icon&&(r.icon=l[n]),i.push(r)):(void 0===r.label&&(r.label=e),i.push(r)))}t=i}if(Array.isArray(t)){if(t=t.map(t=>{if("[object String]"===Object.prototype.toString.call(t)){let e=this.stringToFileFormatter(t);return null===e?null:{icon:"fa-solid "+l[e],label:d[e],formatter:e}}if(t instanceof Function)return{formatter:t};if("object"==typeof t&&!Array.isArray(t)&&null!==t){if(t.formatter instanceof Function)return t;if(this.validateFileFormatter(t.formatter))return t}return null}).filter(t=>null!==t),t.length<2)return t;if(t.filter(t=>t.label||t.icon).length==t.length)return t;alert("Config not valid")}return[]}},methods:{stringToFileFormatter(t){let e=t.toLowerCase();return"jsonlines"==e?"jsonLines":["xlsx","pdf","html","json","csv"].includes(e)?e:null},validateFileFormatter(t){let e=this.stringToFileFormatter(t);if(!e)return alert(t+" is not a supported file formatter"),!1;if("xlsx"==e&&!window.XLSX)return alert("XLSX Library not loaded"),!1;if("pdf"==e){if(!window.jspdf)return alert("jsPDF Library not loaded"),!1;if(!new jspdf.jsPDF({}).autoTable)return alert("jsPDF-AutoTable Plugin not loaded"),!1}return!0},download(t){this.tabulator.download(t.formatter,t.file,t.options)}},template:'\n\t\n\t'};const u=new WeakMap;var c={mounted(t,e){let n=!1;u.set(t,e=>{if(!n)return;if(t.contains(e.target))return;const r=bootstrap.Collapse.getInstance(t);r&&r.hide()}),t.addEventListener("shown.bs.collapse",()=>{n=!0}),t.addEventListener("hide.bs.collapse",()=>{n=!1}),document.addEventListener("click",u.get(t),!0)},beforeUnmount(t,e){document.removeEventListener("click",u.get(t)),delete t.collapsibleAutoHideFunc}};window.Tabulator?.extendModule("layout","modes",{fitDataStretchFrozen(t,e){var n=0,r=this.table.rowManager.element.clientWidth,i=0,s=!1;t.forEach((t,e)=>{t.widthFixed||t.reinitializeWidth(),(this.table.options.responsiveLayout?t.modules.responsive.visible:t.visible&&!t.definition.frozen)&&(s=t),t.visible&&(n+=t.getWidth())}),s?(i=r-n+s.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(s.setWidth(0),this.table.modules.responsiveLayout.update()),i>0?s.setWidth(i):s.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()}});var f={saveCustomFilter:t=>({method:"post",url:"/api/frontend/v1/filter/saveCustomFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,customFilterName:t.customFilterName}}),removeCustomFilter:t=>({method:"post",url:"/api/frontend/v1/filter/removeCustomFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId}}),applyFilterFields:t=>({method:"post",url:"/api/frontend/v1/filter/applyFilterFields",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterFields:t.filterFields}}),addFilterField:t=>({method:"post",url:"/api/frontend/v1/filter/addFilterField",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField}}),removeFilterField:t=>({method:"post",url:"/api/frontend/v1/filter/removeFilterField",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField}}),getFilterById:t=>({method:"get",url:"/api/frontend/v1/filter/getFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId}}),getFilter:t=>({method:"get",url:"/api/frontend/v1/filter/getFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType}})},h=0;const g={components:{CoreFetchCmpt:i,FilterConfig:a,FilterColumns:o,TableDownload:p},directives:{collapseAutoClose:c},emits:["nwNewEntry","click:new","tableBuilt","uuidDefined"],props:{onNwNewEntry:Function,title:String,description:String,sideMenu:{type:Boolean,default:!0},filterType:{type:String},tabulatorOptions:Object,tabulatorEvents:Array,tableOnly:Boolean,noColumnFilter:Boolean,reload:Boolean,reloadBtnInfotext:String,download:{type:[Boolean,String,Function,Array,Object],default:!1},newBtnShow:Boolean,newBtnClass:[String,Array,Object],newBtnDisabled:Boolean,newBtnLabel:String,uniqueId:String,idField:String,parentIdField:String,countOnly:Boolean,useSelectionSpan:{type:Boolean,default:!0}},data:function(){return{uuid:0,filterName:null,filterActive:!1,fields:null,dataset:null,datasetMetadata:null,selectedFields:null,filterFields:null,availableFilters:null,selectedFilter:null,fetchCmptRefresh:!1,fetchCmptApiFunction:null,fetchCmptApiFunctionParams:null,fetchCmptDataFetched:null,fetchResult:null,tabulator:null,tableBuilt:!1,tabulatorHasSelector:!1,selectedData:[],persistence:{sort:!0,columns:!0,filter:!1,headerFilter:!1,group:!1,page:!1}}},computed:{notSelectedFields(){return this.fields&&this.selectedFields?this.fields.filter(t=>-1===this.selectedFields.indexOf(t)):null},filteredData(){return this.dataset?JSON.parse(JSON.stringify(this.dataset)):[]},filteredColumns(){let t=JSON.parse(JSON.stringify(this.fields))||[],e=JSON.parse(JSON.stringify(this.selectedFields))||[],n=null;if(this.tabulatorOptions&&this.tabulatorOptions.hasOwnProperty("columns")&&(n=this.tabulatorOptions.columns),!Array.isArray(n)||Array.isArray(n)&&n.length=0,n.push(t)}}else for(let r of n)r.visible=e.indexOf(r.field)>=0||-1==t.indexOf(r.field),r.hasOwnProperty("resizable")&&(r.resizable=r.visible);return n},fieldIdsForVisibilty(){return this.tableBuilt?this.tabulator.getColumns().filter(t=>{let e=t.getDefinition();return!e.frozen&&e.title&&"responsiveCollapse"!=e.formatter}).map(t=>t.getField()):[]},fieldNames(){return this.tableBuilt?this.tabulator.getColumns().reduce((t,e)=>(t[e.getField()]=e.getDefinition().title,t),{}):{}},idExtra(){return this.uuid?"-"+this.uuid:""},columnsForFilter(){if(!this.filteredColumns||!this.datasetMetadata)return[];const t=this.filteredColumns.reduce((t,e)=>(t[e.field]=e.title,t),{});return this.datasetMetadata.map(e=>({...e,title:t[e.name]}))}},methods:{reloadTable(){this.tableOnly?this.tabulator.setData():this.getFilter()},async initTabulator(){let t="< Phrasen Plugin not loaded! >";this.$p&&(await this.$p.loadCategory("ui"),t=this.$p.t("ui/keineDatenVorhanden")),this.tableOnly||await new Promise(t=>{const e=window.location.hash?window.location.hash.slice(1):null,n=e=>{this.setRenderData(e),t()};null===e?this.startFetchCmpt(t=>this.$api.call(f.getFilter(t)),null,n):this.startFetchCmpt(t=>this.$api.call(f.getFilterById(t)),{filterId:e},n)});let e={layout:"fitDataStretchFrozen",movableColumns:!0,columnDefaults:{tooltip:!0},placeholder:t,persistence:this.persistence,...this.tabulatorOptions||{}};if(void 0===e.height&&void 0===e.minHeight&&void 0===e.maxHeight&&(e.height=500),this.tableOnly?e.columns.forEach(t=>{void 0===t.visible&&(t.visible=!0)}):(e.data=this.filteredData,e.columns=this.filteredColumns),(e.selectable||e.columns&&e.columns.filter(t=>"rowSelection"==t.formatter).length)&&(this.tabulatorHasSelector=!0),this.idField&&(this.parentIdField&&(e.dataTree=!0),e.index=this.idField),this.tabulator=new Tabulator(this.$refs.table,e),Array.isArray(this.tabulatorEvents)&&this.tabulatorEvents.length>0)for(let t of this.tabulatorEvents)this.tabulator.on(t.event,t.handler);this.tabulator.on("tableBuilt",()=>{this.tableBuilt=!0,this.$emit("tableBuilt")}),this.tabulator.on("rowSelectionChanged",t=>{this.selectedData=t}),this.parentIdField&&this.idField&&this.tabulator.on("dataLoading",t=>{let e=[];for(let n=0;n{const t=this.tabulator.getColumns();this.fields=t.map(t=>t.getField()),this.selectedFields=t.filter(t=>t.isVisible()).map(t=>t.getField()),this.tabulator.options.persistence.headerFilter&&this._setHeaderFilter()}),this.tabulator.on("dataFiltered",t=>{this.filterActive=t.length>0})},updateTabulator(){this.tabulator&&(this.tableBuilt?this._updateTabulator():this.tabulator.on("tableBuilt",this._updateTabulator))},_updateTabulator(){this.tabulatorHasSelector=this.tabulatorOptions.selectable||this.filteredColumns.filter(t=>"rowSelection"==t.formatter).length,this.tabulator.setColumns(this.filteredColumns),this.tabulator.setData(this.filteredData),this._setHeaderFilter()},clearFilters(){this.tabulator.getHeaderFilters().forEach(t=>{this.tabulator.setHeaderFilterValue(t.field,"")}),this.tabulator.clearFilter(),this.filterActive=!1},_setHeaderFilter(){this.tabulator.getHeaderFilters().forEach(t=>{this.tabulator.setHeaderFilterValue(t.field,t.value)})},getFilter(){null===this.selectedFilter?this.startFetchCmpt(t=>this.$api.call(f.getFilter(t)),null,this.render):this.startFetchCmpt(t=>this.$api.call(f.getFilterById(t)),{filterId:this.selectedFilter},this.render)},setRenderData(t){this.fetchResult=t,this.filterName=t.filterName,this.dataset=t.dataset,this.datasetMetadata=t.datasetMetadata,this.fields=t.fields,this.selectedFields=t.selectedFields,this.filterFields=[];for(let e=0;ethis.$api.call(f.saveCustomFilter(t)),{customFilterName:t},this.getFilter)},handlerRemoveCustomFilter(t){let e=t.currentTarget.getAttribute("href").substring(1);e===this.selectedFilter&&(this.selectedFilter=null),this.startFetchCmpt(t=>this.$api.call(f.removeCustomFilter(t)),{filterId:e},this.getFilter)},handlerGetFilterById:function(t){let e=null,n=t.currentTarget.getAttribute("href");e=null==n?t.currentTarget.value:n.substring(1),this.switchFilter(e)},switchFilter(t){this.selectedFilter=t,this.getFilter()},applyFilterConfig(t){this.selectedFilter=null,this.startFetchCmpt(t=>this.$api.call(f.applyFilterFields(t)),{filterFields:t},this.getFilter)},appendChild(t,e){let n=e[this.parentIdField];for(let r=0;r{this.tableOnly||(this.selectedFilter=window.location.hash?window.location.hash.slice(1):null,this.render(this.fetchResult))})},template:'\n\t\t\x3c!-- Load filter data --\x3e\n\t\t\n\t\t\n\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t\t
\n\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{{ selectedData.length }} ausgewählt\n\t\t\t\t\t\t Mit {{ selectedData.length }} ausgewählten:\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t[ {{ filterName }} ]\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t
\n\n\t\t\x3c!-- Tabulator --\x3e\n\t\t
\n\t'};var m={name:"BootstrapModal",data:()=>({modal:null,fullscreen:!1}),props:{backdrop:{type:[Boolean,String],default:!0,validator:t=>["static",!0,!1].includes(t)},focus:{type:Boolean,default:!0},keyboard:{type:Boolean,default:!0},noCloseBtn:Boolean,dialogClass:[String,Array,Object],headerClass:{type:[String,Array,Object],default:""},bodyClass:{type:[String,Array,Object],default:"px-4 py-5"},footerClass:{type:[String,Array,Object],default:""},allowFullscreenExpand:{type:Boolean,default:!1}},emits:["hideBsModal","hiddenBsModal","hidePreventedBsModal","showBsModal","shownBsModal"],methods:{dispose(){return this.modal.dispose()},handleUpdate(){return this.modal.handleUpdate()},hide(){return this.modal.hide()},show(t){return this.modal.show(t)},toggle(){return this.modal.toggle()},toggleFullscreen(){this.fullscreen=!this.fullscreen}},mounted(){this.$refs.modal&&(this.modal=new bootstrap.Modal(this.$refs.modal,{backdrop:this.backdrop,focus:this.focus,keyboard:this.keyboard}))},popup(t,e,n,r){const i=this,s={};void 0!==t&&(s.default=()=>t),void 0!==n&&(s.title=()=>n),void 0!==r&&(s.footer=()=>r);let a=!1;return"undefined"!=typeof primevue&&(a=!0),new Promise((t,n)=>{const r=Vue.createApp({name:"ModalTmpApp",setup:()=>()=>Vue.h(i,{class:"fade",...e,ref:"modal","onHidden.bs.modal":r.unmount},s),mounted(){this.$refs.modal.show()},beforeUnmount(){this.$refs.modal&&(!1!==this.$refs.modal.result?t(this.$refs.modal.result):n())},unmounted(){o.parentElement.removeChild(o)}}),o=document.createElement("div");a&&r.use(primevue.config.default,{zIndex:{overlay:9999}}),Promise.resolve().then(function(){return at}).then(t=>{r.use(t.default),r.mount(o),document.body.appendChild(o)})})},template:''},v={props:{view:String,data:Object},data:()=>({}),created(){},template:'\n\t\n'},A={props:{data:Object,view:String,withZustelladresse:{type:Boolean,default:!0}},data:()=>({}),created(){},template:'\n \n
\n \n \x3c!-- column 1 in the address row --\x3e\n
\n \n
\n \n
\n
\n
{{$p.t(\'person\',\'strasse\')}}
\n {{data.strasse}} \n
\n
\n \n \x3c!-- column 2 in the address row --\x3e\n
\n
\n
{{$p.t(\'global\',\'typ\')}}
\n {{data.typ}} \n
\n
\n \n
\n
\n
{{$p.t(\'person\',\'ort\')}}
\n {{data.ort}} \n
\n
\n
\n
\n
{{$p.t(\'person\',\'plz\')}}
\n {{data.plz}} \n
\n
\n\n
\n
\n
{{$p.t(\'person\',\'zustelladresse\')}}
\n
\n \n
\n
\n
\n
\n'},b={ //! API calls for profil update requests getStatus:()=>({method:"get",url:"/api/frontend/v1/ProfilUpdate/getStatus"}),getTopic:()=>({method:"get",url:"/api/frontend/v1/ProfilUpdate/getTopic"}),acceptProfilRequest:({profil_update_id:t,uid:e,status_message:n,topic:r,requested_change:i})=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/acceptProfilRequest",params:{profil_update_id:t,uid:e,status_message:n,topic:r,requested_change:i}}),denyProfilRequest:({profil_update_id:t,uid:e,topic:n,status_message:r})=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/denyProfilRequest",params:{profil_update_id:t,uid:e,topic:n,status_message:r}}),insertFile:(t,e=null)=>({method:"post",url:`/api/frontend/v1/ProfilUpdate/insertFile/${e}`,params:t}),updateProfilbild:t=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/updateProfilbild",params:t}),getProfilUpdateWithPermission:t=>({method:"get",url:"/api/frontend/v1/ProfilUpdate/getProfilUpdateWithPermission"+(""!==t?"/"+encodeURIComponent(t):"")}),getProfilRequestFiles:t=>({method:"get",url:`/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${t}`}),selectProfilRequest:(t=null,e=null)=>({method:"get",url:"/api/frontend/v1/ProfilUpdate/selectProfilRequest",params:{...t?{uid:t}:{},...e?{id:e}:{}}}),insertProfilRequest:(t,e,n=null)=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/insertProfilRequest",params:{topic:t,payload:e,...n?{fileID:n}:{}}}),updateProfilRequest:(t,e,n,r=null)=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/updateProfilRequest",params:{topic:t,payload:e,ID:n,...r?{fileID:r}:{}}}),deleteProfilRequest:t=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/deleteProfilRequest",params:{requestID:t}})},y={components:{BsModal:m,Kontakt:v,Adresse:A},inject:["profilUpdateStates"],mixins:[m],props:{title:{type:String},value:{type:Object},setLoading:{type:Function},onHideBsModal:Function,onHiddenBsModal:Function,onHidePreventedBsModal:Function,onShowBsModal:Function,onShownBsModal:Function},data(){return{data:this.value,loading:!1,result:!1,info:null,files:null}},methods:{getProfilStatus:async function(){return FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/Cis/ProfilUpdate/show/${dms_id}`},getDocumentLink:function(t){return FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/Cis/ProfilUpdate/show/${t}`},handleRequest:function(t){this.loading=!0,this.setLoading(!0),this.$api.call(b["accept"==t.toLowerCase()?"acceptProfilRequest":"denyProfilRequest"](this.data)).then(t=>{this.result=!0}).catch(t=>this.$fhcAlert.handleSystemError).finally(()=>{this.setLoading(!1),this.loading=!1,this.hide()})}},computed:{getComponentView:function(){return this.data.topic.toLowerCase().includes("kontakt")?"kontakt":this.data.topic.toLowerCase().includes("adresse")?"adresse":"text_input"}},created(){this.value.attachment_id&&this.$api.call(b.getProfilRequestFiles(this.data.profil_update_id)).then(t=>{this.files=t.data})},mounted(){this.modal=this.$refs.modalContainer.modal},popup(t){return m.popup.bind(this)(null,t)},template:'\n\n \n \n \n\n\n \n \n\n \n \n '},_={components:{BsModal:m},props:{timeout:{type:Number,default:300}},data:()=>({t:null,state:0}),methods:{show(){switch(this.state){case 0:return this.timeout?(this.state=1,void(this.t=window.setTimeout(()=>this.$refs.modal.show(),this.timeout))):this.$refs.modal.show();case 4:return window.setTimeout(()=>this.show(),1)}},hide(){switch(this.state){case 1:return window.clearTimeout(this.t);case 2:return window.setTimeout(()=>this.hide(),1);case 3:this.$refs.modal.hide()}}},mounted(){this.$refs.modal.$refs.modal.addEventListener("show.bs.modal",()=>{this.state=2}),this.$refs.modal.$refs.modal.addEventListener("shown.bs.modal",()=>{this.state=3}),this.$refs.modal.$refs.modal.addEventListener("hide.bs.modal",()=>{this.state=4}),this.$refs.modal.$refs.modal.addEventListener("hidden.bs.modal",()=>{this.state=0})},template:'\n\t\n\t\tLoading...\n\t'};function $(t,e,n){let r=document.createElement("div"),i=null,s=t.getValue();if(Array.isArray(s)){const t=s[0]?new Date(s[0]):null,e=s[1]?new Date(s[1]):null;i=[t,e]}return Vue.createApp({components:{PrimevueCalendar:primevue.calendar},data:()=>({val:i}),watch:{val(t){n(t)}},template:'\n\t\t\t\t '}).use(primevue.config.default).mount(r),r}primevue||console.error("PrimeVue not loaded!"),Tabulator.extendModule("filter","filters",{dates:(t,e)=>{if(!t)return!0;let n=new Date(e);if(Array.isArray(t)){let e=new Date(t[0]);if(t[1]){let r=new Date(t[1]);return r.setHours(23,59,59,999),n>=e&&n<=r}return n.toDateString()===e.toDateString()}let r=new Date(t);return n.toDateString()===r.toDateString()}});var F={components:{CoreFilterCmpt:g,Loading:_,AcceptDenyUpdate:y},inject:["profilUpdateStates"],props:{id:{type:String}},data(){return{categoryLoaded:!1,showModal:!1,modalData:null,loading:!1,filter:"Pending",profil_update_id:Number(this.id)}},computed:{profilUpdateEvents:function(){return[{event:"dataProcessed",handler:this.handleDataProcessed}]},profilUpdateOptions:function(){return{ajaxURL:"dummy",ajaxRequestFunc:(t,e,n)=>this.$api.call(b.getProfilUpdateWithPermission(n.filter)),ajaxParams:()=>{let t="";switch(this.filter){case this.profilUpdateStates.Pending:t=this.profilUpdateStates.Pending;break;case this.profilUpdateStates.Accepted:t=this.profilUpdateStates.Accepted;break;case this.profilUpdateStates.Rejected:t=this.profilUpdateStates.Rejected;break;default:t=""}return{filter:t}},ajaxResponse:(t,e,n)=>(n?.data&&n.data.sort((t,e)=>((t,e,n)=>{let r=0;return r=t.status===n.profilUpdateStates.Pending||t.status===n.profilUpdateStates.Accepted&&e.status===n.profilUpdateStates.Rejected?-1:1,t.status===e.status&&(r=new Date(e.insertamum.split(".").reverse().join("-"))-new Date(t.insertamum.split(".").reverse().join("-"))),r})(t,e,this)),n.data),columnDefaults:{tooltip:(t,e,n)=>{let r=e.getData().status_message,i=e.getData().status_timestamp,s=e.getData().status;if(!r)return null;let a=document.createElement("div");a.classList.add("border","border-dark");let o=document.createElement("span");o.classList.add("d-block","mb-1"),o.innerHTML="Request was "+s+" on "+i;let l=document.createElement("span");return l.innerHTML="Status message: "+r,a.appendChild(o),a.appendChild(l),a}},rowContextMenu:(t,e)=>{let n=[];return e.getData().status===this.profilUpdateStates.Pending?n.push({label:` ${this.$p.t("profilUpdate","acceptUpdate")}`,action:(t,e)=>{this.$api.call(b.acceptProfilRequest(e.getData())).then(t=>{this.$refs.UpdatesTable.tabulator.setData()}).catch(t=>this.$fhcAlert.handleSystemError)}},{separator:!0},{label:` ${this.$p.t("profilUpdate","denyUpdate")}`,action:(t,e)=>{this.$api.call(b.denyProfilRequest(e.getData())).then(t=>{this.$refs.UpdatesTable.tabulator.setData()}).catch(t=>this.$fhcAlert.handleSystemError)}},{separator:!0},{label:` ${this.$p.t("profilUpdate","showRequest")}`,action:(t,e)=>{this.showAcceptDenyModal(e.getData())}}):n.push({label:` ${this.$p.t("profilUpdate","showRequest")}`,action:(t,e)=>{this.showAcceptDenyModal(e.getData())}}),n},height:600,layout:"fitDataStretchFrozen",columns:[{title:this.$p.t("profilUpdate","UID"),field:"uid",minWidth:100,resizable:!0,headerFilter:!0},{title:this.$p.t("profilUpdate","Name"),field:"name",minWidth:200,resizable:!0,headerFilter:!0},{title:this.$p.t("lehre","studiengang")+" ("+this.$p.t("profil","studentIn")+")",field:"studiengang",minWidth:50,resizable:!0,headerFilter:"list",headerFilterParams:{valuesLookup:!0,listOnEmpty:!0,autocomplete:!0,sort:"asc"}},{title:this.$p.t("lehre","organisationsform")+" ("+this.$p.t("profil","studentIn")+")",field:"orgform",minWidth:50,resizable:!0,headerFilter:"list",headerFilterParams:{valuesLookup:!0,listOnEmpty:!0,autocomplete:!0,sort:"asc"}},{title:this.$p.t("lehre","organisationseinheit")+" ("+this.$p.t("profil","mitarbeiterIn")+")",field:"oezuordnung",minWidth:200,resizable:!0,headerFilter:"list",headerFilterParams:{valuesLookup:!0,listOnEmpty:!0,autocomplete:!0,sort:"asc"}},{title:this.$p.t("profilUpdate","Topic"),field:"topic",resizable:!0,minWidth:200,headerFilter:"list",headerFilterParams:{valuesLookup:!0,listOnEmpty:!0,autocomplete:!0,sort:"asc"}},{title:this.$p.t("profilUpdate","insertamum"),field:"insertamum_iso",resizable:!0,headerFilterFunc:"dates",headerFilter:$,minWidth:200,formatter:"datetime",formatterParams:this.datetimeFormatterParams()},{title:this.$p.t("profilUpdate","Status"),field:"status_translated",hozAlign:"center",headerFilter:"list",headerFilterParams:{valuesLookup:!0,listOnEmpty:!0,autocomplete:!0,sort:"asc"},formatter:(t,e)=>{let n="";switch(t.getRow().getData().status){case this.profilUpdateStates.Pending:n+="fa fa-lg fa-circle-info text-info ";break;case this.profilUpdateStates.Accepted:n+="fa fa-lg fa-circle-check text-success ";break;case this.profilUpdateStates.Rejected:n+="fa fa-lg fa-circle-xmark text-danger "}return`
${t.getValue()}
`},resizable:!0,minWidth:200},{title:this.$p.t("profilUpdate","actions"),headerSort:!1,frozen:!0,formatter:(t,e)=>{let n=`
\n \n
`;const r=(new DOMParser).parseFromString(n,"text/html").body.firstChild;return r.querySelector("#showButton").addEventListener("click",()=>{this.showAcceptDenyModal(t.getRow().getData())}),r},minWidth:200,resizable:!0,hozAlign:"center"}]}}},methods:{denyProfilUpdate:function(t){this.$api.call(b.denyProfilRequest(t)).then(t=>{}).catch(t=>this.$fhcAlert.handleSystemError).finally(()=>{this.$refs.UpdatesTable.tabulator.setData()})},acceptProfilUpdate:function(t){this.$api.call(b.acceptProfilRequest(t)).then(t=>{}).catch(t=>this.$fhcAlert.handleSystemError).finally(()=>{this.$refs.UpdatesTable.tabulator.setData()})},setLoading:function(t){this.loading=t},hideAcceptDenyModal:function(){this.$refs.AcceptDenyModal.result&&this.$refs.UpdatesTable.tabulator.setData(),this.showModal=!1,this.modalData=null},showAcceptDenyModal(t){this.modalData=t,this.modalData&&(this.showModal=!0,Vue.nextTick(()=>{this.$refs.AcceptDenyModal.show()}))},updateData:function(t){this.$refs.UpdatesTable.tabulator.setData(),sessionStorage.setItem("filter",t.target.value)},handleDataProcessed:function(){if(this.profil_update_id){const t=this.$refs.UpdatesTable.tabulator.getData().filter(t=>t.profil_update_id===this.profil_update_id);t.length&&this.showAcceptDenyModal(t[0])}},datetimeFormatterParams:function(){return{inputFormat:"yyyy-MM-dd",outputFormat:"dd.MM.yyyy",invalidPlaceholder:"(invalid date)",timezone:FHC_JS_DATA_STORAGE_OBJECT.timezone}}},watch:{loading:function(t,e){t?this.$refs.loadingModalRef.show():this.$refs.loadingModalRef.hide()}},created(){this.$p.loadCategory(["profilUpdate","lehre","profil","global"]).then(()=>{this.categoryLoaded=!0})},mounted(){sessionStorage.getItem("filter")&&(this.filter=sessionStorage.getItem("filter"))},template:'\n
\n \n \n
\n
{{$p.t(\'ui\',\'anzeigen\')}}
\n \n \n \n
\n \n \n \n\n
'},S={search(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/search",t,e)},searchAdvanced(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/searchAdvanced",t,e)},searchdummy(t){return this.$fhcApi.post("public/js/apps/api/dummyapi.php/Search",t)}},C={loadCategory(t){return this.$fhcApi.get("/api/frontend/v1/phrasen/loadModule/"+t)},setLanguage(t,e){const n={categories:t,language:e};return this.$fhcApi.post("/api/frontend/v1/phrasen/setLanguage",n)},getLanguage(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getLanguage",{})},getActiveDbLanguages(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getAllLanguages",{})}},P={getHeader(t){return this.$fhcApi.get("/api/frontend/v1/navigation/header",{navigation_page:t})},getMenu:function(t){return this.$fhcApi.get("/api/frontend/v1/navigation/menu",{navigation_page:t})}},T={saveCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/saveCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,customFilterName:t.customFilterName})},removeCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},applyFilterFields(t){return this.$fhcApi.post("/api/frontend/v1/filter/applyFilterFields",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterFields:t.filterFields})},addFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/addFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},removeFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},getFilterById(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},getFilter(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType})}},E={abmeldung:{getDetails(t,e){const n="/api/frontend/v1/studstatus/abmeldung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(n)},create(t,e,n){return this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/createAntrag",{studiensemester:t,prestudent_id:e,grund:n},{errorHandling:"strict"})},cancel(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t.studierendenantrag_id},{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t})}},unterbrechung:{getDetails(t,e){const n="/api/frontend/v1/studstatus/unterbrechung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(n)},create(t,e,n,r,i){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/createAntrag",{studiensemester:t,prestudent_id:e,grund:n,datum_wiedereinstieg:r,attachment:i},{errorHandling:"strict"})},cancel(t){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/cancelAntrag",{antrag_id:t},{errorHandling:"strict"})}},wiederholung:{getDetails(t){const e="/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/"+t;return this.$fhcApi.get(e)},getLvs(t){const e="/api/frontend/v1/studstatus/wiederholung/getLvs/"+t;return this.$fhcApi.get(e)},create(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/createAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},cancel(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/cancelAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},saveLvs(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/saveLvs",{forbiddenLvs:t,mandatoryLvs:e})}},leitung:{getStgs(){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getActiveStgs")},getAntraege(t,e,n){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getAntraege/"+t).then(t=>t.data)},getHistory(t){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getHistory/"+t)},getPrestudents(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/getPrestudents",{query:t},{signal:e,timeout:3e4})},approve(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t)},reject(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t)},reopen(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t)},pause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t)},unpause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t)},object(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t)},approveObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t)},denyObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t)}}},k={getView:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getView/${t}`,{})},fotoSperre:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/fotoSperre/${t}`,{})},isStudent:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/isStudent",{uid:t})},isMitarbeiter:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/isMitarbeiter/${t}`,{})},getZustellAdresse:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellAdresse",{})},getZustellKontakt:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellKontakt",{})},getGemeinden:function(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getGemeinden/${t}/${e}`,{})},getAllNationen:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getAllNationen",{})}},w={ //! API calls for profil update requests -getStatus:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getStatus",{})},getTopic:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getTopic",{})},acceptProfilRequest:function({profil_update_id:t,uid:e,status_message:n,topic:r,requested_change:i}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/acceptProfilRequest",{profil_update_id:t,uid:e,status_message:n,topic:r,requested_change:i})},denyProfilRequest:function({profil_update_id:t,uid:e,topic:n,status_message:r}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/denyProfilRequest",{profil_update_id:t,uid:e,topic:n,status_message:r})},insertFile:function(t,e=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/insertFile/${e}`,t)},getProfilRequestFiles:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${t}`,{})},selectProfilRequest:function(t=null,e=null){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/selectProfilRequest",{...t?{uid:t}:{},...e?{id:e}:{}})},insertProfilRequest:function(t,e,n=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/insertProfilRequest",{topic:t,payload:e,...n?{fileID:n}:{}})},updateProfilRequest:function(t,e,n,r=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/updateProfilRequest",{topic:t,payload:e,ID:n,...r?{fileID:r}:{}})},deleteProfilRequest:function(t){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/deleteProfilRequest",{requestID:t})}},D={getRoomInfo(t,e,n){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getRoomplan",{ort_kurzbz:t,start_date:e,end_date:n})},getStunden(){return this.$fhcApi.get("/api/frontend/v1/LvPlan/Stunden",{})},getOrtReservierungen(t,e,n){return this.$fhcApi.post(`/api/frontend/v1/LvPlan/getReservierungen/${t}`,{start_date:e,end_date:n})},getLvPlanReservierungen(t,e){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getReservierungen",{start_date:t,end_date:e})},getLehreinheitStudiensemester(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${t}`,{})},studiensemesterDateInterval(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${t}`,{})},LvPlanEvents(t,e,n){return this.$fhcApi.get("/api/frontend/v1/LvPlan/LvPlanEvents",{start_date:t,end_date:e,lv_id:n})}},O={verband:{get(){return this.$fhcApi.get("api/frontend/v1/stv/verband")},favorites:{get(){return this.$fhcApi.get("api/frontend/v1/stv/favorites")},set(t){return this.$fhcApi.post("api/frontend/v1/stv/favorites/set",{favorites:t})}}},students:{uid(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/uid/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},prestudent(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/prestudent/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},person(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/person/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},verband(t){return this.$fhcApi.getUri("api/frontend/v1/stv/students/"+t)}},filter:{getStg(){return this.$fhcApi.get("api/frontend/v1/stv/filter/getStg")},setStg(t){return this.$fhcApi.post("api/frontend/v1/stv/filter/setStg",{studiengang_kz:t})}},konto:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/konto/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id),only_open:e.filter,studiengang_kz:e.studiengang_kz_intern?e.stg_kz:""}),t.ajaxRequestFunc=(t,e,n)=>this.$fhcApi.post(t,n,e),t.ajaxResponse=(t,e,n)=>n.data,t},checkDoubles(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/checkDoubles",e,{confirmErrorHandler:t=>!0})},insert(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/insert",e)},counter(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/counter",t)},edit(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/update",e)},delete(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/delete",{buchungsnr:t})},getBuchungstypen(){return this.$fhcApi.get("api/frontend/v1/stv/konto/getBuchungstypen")}},group:{getGruppen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/Gruppen/getGruppen/"+n.id)},deleteGroup(t){return this.$fhcApi.post("api/frontend/v1/stv/Gruppen/deleteGruppe/",t)}},kontakt:{getAdressen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressen/"+n.id)},addNewAddress(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewAddress/"+e,n)},loadAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadAddress/",{address_id:t})},updateAddress(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateAddress/"+e,n)},deleteAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteAddress/",{address_id:t})},getPlaces(t){return this.$fhcApi.get("api/frontend/v1/stv/address/getPlaces/"+t)},getFirmen(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getFirmen/"+t)},getNations(){return this.$fhcApi.get("api/frontend/v1/stv/address/getNations/")},getAdressentypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressentypen/")},getBankverbindung(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getBankverbindung/"+n.id)},addNewBankverbindung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewBankverbindung/"+e,n)},loadBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadBankverbindung/",{bankverbindung_id:t})},updateBankverbindung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateBankverbindung/"+e,n)},deleteBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteBankverbindung/",{bankverbindung_id:t})},getKontakte(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakte/"+n.id)},addNewContact(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewContact/"+e,n)},loadContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadContact/",{kontakt_id:t})},updateContact(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateContact/"+e,n)},deleteContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteContact/",{kontakt_id:t})},getStandorteByFirma(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getStandorteByFirma/"+t)},getKontakttypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakttypen/")}},prestudent:{get(t,e){return this.$fhcApi.post("api/frontend/v1/stv/prestudent/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e))},updatePrestudent(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/prestudent/updatePrestudent/"+e,n)},getBezeichnungZGV(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungZGV/")},getBezeichnungMZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungMZgv/")},getBezeichnungDZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungDZgv/")},getStgs(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStgs/")},getAusbildung(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAusbildung/")},getAufmerksamdurch(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAufmerksamdurch/")},getBerufstaetigkeit(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBerufstaetigkeit/")},getTypenStg(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getTypenStg/")},getBisstandort(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBisstandort/")},getHistoryPrestudent(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/status/getHistoryPrestudent/"+n.id)},getMaxSem(t){return this.$fhcApi.post("api/frontend/v1/stv/status/getMaxSemester/",{studiengang_kzs:t})},advanceStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/advanceStatus/"+t+"/"+e+"/"+n+"/"+r)},confirmStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/confirmStatus/"+t+"/"+e+"/"+n+"/"+r)},isLastStatus(t){return this.$fhcApi.get("api/frontend/v1/stv/status/isLastStatus/"+t)},deleteStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/deleteStatus/"+t+"/"+e+"/"+n+"/"+r)},getLastBismeldestichtag(){return this.$fhcApi.get("api/frontend/v1/stv/status/getLastBismeldestichtag/")},getHistoryPrestudents(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getHistoryPrestudents/"+n.id)}},status:{insertStatus(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/insertStatus/"+e,n)},loadStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/loadStatus/"+t+"/"+e+"/"+n+"/"+r)},updateStatus(t,{prestudent_id:e,status_kurzbz:n,studiensemester_kurzbz:r,ausbildungssemester:i},s){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/updateStatus/"+e+"/"+n+"/"+r+"/"+i,s)},getStudienplaene(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudienplaene/"+t)},getStudiengang(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudiengang/"+t)},getStatusgruende(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusgruende/")},getStati(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStati/")},addStudent(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/addStudent/"+t,e,{errorHeader:t})},changeStatus(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/changeStatus/"+t,e,{errorHeader:t})},getStatusarray(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusarray/")}},details:{get(t,e){let n="api/frontend/v1/stv/student/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e);return this.$fhcApi.post(n)},save(t,e,n,r){let i="api/frontend/v1/stv/student/save/"+encodeURIComponent(e)+"/"+encodeURIComponent(n);return this.$fhcApi.post(t,i,r)}},exam:{getPruefungen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getPruefungen/"+n.id)},loadPruefung(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/loadPruefung/"+t)},getTypenPruefungen(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getTypenPruefungen")},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/getAllLehreinheiten/",t)},getLvsByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsByStudent/"+t)},getLvsandLesByStudent(t,e){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsandLesByStudent/"+t+"/"+e)},getLvsAndMas(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsAndMas/"+t)},getMitarbeiterLv(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getMitarbeiterLv/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getNoten")},checkZeugnisnoteLv(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/",t)},addPruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/insertPruefung/",e)},updatePruefung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/updatePruefung/"+e,n)},deletePruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/deletePruefung/"+t)}},abschlusspruefung:{getAbschlusspruefung(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/"+n.id)},addNewAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/",e)},loadAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/",{id:t})},updateAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/",e)},deleteAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/",{id:t})},getTypenAbschlusspruefung(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/")},getTypenAntritte(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/")},getBeurteilungen(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/")},getAkadGrade(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getAkadGrade/",{studiengang_kz:t})},getTypStudiengang(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/",{studiengang_kz:t})},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/"+t)},getPruefer(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getPruefer/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getNoten/")},checkForExistingExams(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/",{uids:t})}},grades:{list(){return this.$fhcApi.get("api/frontend/v1/stv/grades/list")},getCertificate(t,e){let n="api/frontend/v1/stv/grades/getCertificate/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},getTeacherProposal(t,e){let n="api/frontend/v1/stv/grades/getTeacherProposal/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},getRepeaterGrades(t,e){let n="api/frontend/v1/stv/grades/getRepeaterGrades/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},updateCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,note:r,lehrveranstaltung_bezeichnung:i}){return this.$fhcApi.post("api/frontend/v1/stv/grades/updateCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,note:r},{errorHeader:i})},deleteCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,lehrveranstaltung_bezeichnung:r}){return this.$fhcApi.post("api/frontend/v1/stv/grades/deleteCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n},{errorHeader:r})},copyTeacherProposalToCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,lehrveranstaltung_bezeichnung:r}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyTeacherProposalToCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n},{errorHeader:r})},copyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id:t,lv_bezeichnung:e}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate",{studierendenantrag_lehrveranstaltung_id:t},{errorHeader:e})},getGradeFromPoints(t,e,n,r){const i=r?{errorHandling:!1}:{};return this.$fhcApi.post("api/frontend/v1/stv/grades/getGradeFromPoints",{points:t,lehrveranstaltung_id:e,studiensemester_kurzbz:n},i)}},mobility:{getMobilitaeten(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getMobilitaeten/"+n.id)},getProgramsMobility(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getProgramsMobility/")},addNewMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/insertMobility/",e)},loadMobility(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/loadMobility/"+t)},updateMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/updateMobility/",e)},deleteMobility(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobility/"+t)},getLVList(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLVList/"+t)},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/getAllLehreinheiten/",t)},getLvsandLesByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLvsandLesByStudent/"+t)},getPurposes(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getPurposes/"+n.id)},getSupports(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getSupports/"+n.id)},getListPurposes(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListPurposes/")},getListSupports(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListSupports/")},deleteMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilityPurpose/"+t.bisio_id,t)},addMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilityPurpose/"+t.bisio_id,t)},deleteMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilitySupport/"+t.bisio_id,t)},addMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilitySupport/"+t.bisio_id,t)}},archiv:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/archiv/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id)}),t.ajaxRequestFunc=(t,e,n)=>this.$fhcApi.post(t,n,e),t.ajaxResponse=(t,e,n)=>n.data,t},getArchivVorlagen(){return this.$fhcApi.post("api/frontend/v1/stv/archiv/getArchivVorlagen")},archive(t){return this.$fhcApi.post("api/frontend/v1/documents/archive",t)},archiveSigned(t){return this.$fhcApi.post("api/frontend/v1/documents/archiveSigned",t)},update(t){return this.$fhcApi.post("api/frontend/v1/stv/archiv/update",t)},delete({akte_id:t,studiengang_kz:e}){return this.$fhcApi.post("api/frontend/v1/stv/archiv/delete",{akte_id:t,studiengang_kz:e})}},documents:{getDocumentsUnaccepted(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/"+n.id+"/"+n.studiengang_kz)},getDocumentsAccepted(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsAccepted/"+n.id+"/"+n.studiengang_kz)},deleteZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},createZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/createZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},loadAkte(t){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/loadAkte/"+t)},getDoktypen(){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDoktypen/")},updateFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/updateAkte/"+t,e)},deleteFile(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteAkte/"+t)},uploadFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/uploadDokument/"+t,e)}},exemptions:{getAnrechnungen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getAnrechnungen/"+n.id)},getLehrveranstaltungen(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/"+t)},getBegruendungen(){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getBegruendungen/")},getLvsKompatibel(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLvsKompatibel/"+t)},getLektoren(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLektoren/"+t)},addNewAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/insertAnrechnung/",e)},loadAnrechnung(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/loadAnrechnung/"+t)},editAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/updateAnrechnung/",e)},deleteAnrechnung(t){return this.$fhcApi.post("api/frontend/v1/stv/anrechnungen/deleteAnrechnung/"+t)}},jointstudies:{getStudies(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudien/"+n.id)},getTypenMobility(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/")},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/")},getStudyprograms(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/")},getListPartner(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/")},getStatiPrestudent(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/")},loadStudy(t){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/loadStudie/"+t)},insertStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/insertStudie/",e)},updateStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/updateStudie/",e)},deleteStudy(t){return this.$fhcApi.post("api/frontend/v1/stv/GemeinsameStudien/deleteStudie/"+t)}},courselist:{getCourselist(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStundenplan/"+n.student_uid+"/"+n.start_date+"/"+n.end_date+"/"+n.group_consecutiveHours+"/"+n.dbStundenplanTable)},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStudiensemester/")}},configStudent(){return this.$fhcApi.get("api/frontend/v1/stv/config/student")},configStudents(){return this.$fhcApi.get("api/frontend/v1/stv/config/students")}},x={person:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getUid/")},addNewNotiz(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/addNewNotiz/"+e,n)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/updateNotiz/"+e,n)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getMitarbeiter/"+t)},isBerechtigt(t,e){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/isBerechtigt/")}}},R={person:{getAllBetriebsmittel(t,e,n){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/"+n.type+"/"+n.id)},addNewBetriebsmittel(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/"+e,n)},loadBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/"+t)},updateBetriebsmittel(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/"+e,n)},deleteBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/"+t)},getTypenBetriebsmittel(){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/")},loadInventarliste(t){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/"+t)}}},B={updatePersonUnrulyStatus(t,e){try{const n={person_id:t,unruly:e},r="/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus";return this.$fhcApi.post(r,n,null)}catch(t){throw t}},filterPerson(t,e=""){try{const n=e+"/api/frontend/v1/checkperson/CheckPerson/filterPerson";return axios.post(n,t)}catch(t){throw t}}},L={getContentID(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/ContentID",{ort_kurzbz:t})},getRooms(t,e,n,r,i=0){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getRooms",{datum:t,von:e,bis:n,typ:r,personenanzahl:i})},getRoomTypes(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getTypes")}},U={content(t,e=null,n=null,r=null){return this.$fhcApi.get("/api/frontend/v1/Cms/content",{content_id:t,...e?{version:e}:{},...n?{sprache:n}:{},...r?{sichtbar:r}:{}})},getNews(t=1,e=10,n){return this.$fhcApi.get("/api/frontend/v1/Cms/getNews",{page:t,page_size:e,sprache:n})},news(t){return this.$fhcApi.get("/api/frontend/v1/Cms/news",{limit:t})},getNewsRowCount:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getNewsRowCount",{})},getNewsExtra:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getStudiengangInfoForNews",{})}},j={getStudentenMail(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Lehre/lvStudentenMail",{lehreinheit_id:t})},getLvInfo(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/LV/${t}/${e}`,{})},getStudentPruefungen(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/Pruefungen/${t}`,{})},getStudentProjektarbeiten(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/getStudentProjektarbeiten/${t}`,{})},getStudentProjektabgaben(t){return this.$fhcApi.get("/api/frontend/v1/Lehre/getStudentProjektabgaben",{projektarbeit_id:t.projektarbeit_id,student_uid:t.student_uid})},postStudentProjektarbeitEndupload(t){return this.$fhcApi.post("/api/frontend/v1/Lehre/postStudentProjektarbeitEndupload",t,{Headers:{"Content-Type":"multipart/form-data"}})},postStudentProjektarbeitZwischenabgabe(t){return this.$fhcApi.post("/api/frontend/v1/Lehre/postStudentProjektarbeitZwischenabgabe",t,{Headers:{"Content-Type":"multipart/form-data"}})},getStudentProjektarbeitAbgabeFile(t,e){const n=`/Cis/Abgabetool/getStudentProjektarbeitAbgabeFile?paabgabe_id=${t}&student_uid=${e}`;window.location=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+n},getMitarbeiterProjektarbeiten(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/getMitarbeiterProjektarbeiten?showall=${e}`,{})},postProjektarbeitAbgabe(t){const e={paabgabe_id:t.paabgabe_id,paabgabetyp_kurzbz:t.bezeichnung.paabgabetyp_kurzbz,datum:t.datum,fixtermin:t.fixtermin,insertvon:t.insertvon,kurzbz:t.kurzbz,projektarbeit_id:t.projektarbeit_id};return this.$fhcApi.post("/api/frontend/v1/Lehre/postProjektarbeitAbgabe",e,null)},deleteProjektarbeitAbgabe(t){const e={paabgabe_id:t};return this.$fhcApi.post("/api/frontend/v1/Lehre/deleteProjektarbeitAbgabe",e,null)},postSerientermin(t,e,n,r,i){const s={datum:t,paabgabetyp_kurzbz:e,bezeichnung:n,kurzbz:r,projektarbeit_ids:i};return this.$fhcApi.post("/api/frontend/v1/Lehre/postSerientermin",s,null)},fetchDeadlines(t){const e={person_id:t};return this.$fhcApi.post("/api/frontend/v1/Lehre/fetchDeadlines",e,null)}},H={getLvMenu(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/LvMenu/getLvMenu/${t}/${e}`,{})}},M={person:{getMessages(t,e,n){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessages/"+n.id+"/"+n.type+"/"+n.size+"/"+n.page)},getVorlagen(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getVorlagen/")},getMsgVarsLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/")},getMessageVarsPerson(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessageVarsPerson/"+t.id+"/"+t.type_id)},getMsgVarsPrestudent(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsPrestudent/"+t.id+"/"+t.type_id)},getPersonId(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getPersonId/"+t.id+"/"+t.type_id)},getUid(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getUid/"+t.id+"/"+t.type_id)},getVorlagentext(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getVorlagentext/"+t)},getNameOfDefaultRecipient(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getNameOfDefaultRecipient/"+t.id+"/"+t.type_id)},getPreviewText(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/getPreviewText/"+t.id+"/"+t.type_id,e)},getReplyData(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getReplyData/"+t)},sendMessageFromModalContext(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/messages/messages/sendMessage/"+e,n)},sendMessage(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/sendMessage/"+t,e)},deleteMessage(t){return this.$fhcApi.post("api/frontend/v1/messages/messages/deleteMessage/"+t)}}},J={getVorlagen(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagen/")},getVorlagenByLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/")}},z={getStudiensemester:function(){return this.$fhcApi.get("/components/Cis/Mylv/Studiensemester",{})},getAllStudienSemester:function(t=void 0,e=void 0,n=void 0,r=void 0){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienAllSemester",{studiensemester:t,studiengang:e,semester:n,studienplan:r})},getStudiengaengeForStudienSemester:function(t){return this.$fhcApi.get(`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${t}`,{})},getStudienplaeneBySemester:function(t,e){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienplaeneBySemester",{studiengang:t,studiensemester:e})},getLvPlanForStudiensemester:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${t}/${e}`,{})},getLvEvaluierungInfo:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/Studium/getLvEvaluierungInfo/${t}/${e}`,{})}},I={search:S,phrasen:C,navigation:P,dashboard:{async getViewData(){return this.$fhcApi.get("/api/frontend/v1/Cis4FhcApi/getViewData",null,null)}},filter:T,studstatus:E,profil:k,profilUpdate:w,lvPlan:D,bookmark:{getBookmarks:function(){return this.$fhcApi.get("/api/frontend/v1/Bookmark/getBookmarks",{})},delete:function(t){return this.$fhcApi.get(`/api/frontend/v1/Bookmark/delete/${t}`,{})},update:function({bookmark_id:t,url:e,title:n,tag:r=null}){return this.$fhcApi.post(`/api/frontend/v1/Bookmark/update/${t}`,{url:e,title:n})},insert:function({url:t,title:e,tag:n}){return this.$fhcApi.post("/api/frontend/v1/Bookmark/insert",{url:t,title:e,tag:n})}},stv:O,notiz:x,betriebsmittel:R,checkperson:B,ampeln:{open:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/open",{})},all:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/all",{})},confirm:function(t){return this.$fhcApi.get(`/api/frontend/v1/Ampeln/confirm/${t}`,{})}},ort:L,cms:U,lehre:j,addons:H,messages:M,vorlagen:J,addons:H,studiengang:{studiengangInformation:function(){return this.$fhcApi.get("/api/frontend/v1/Studgang/getStudiengangInfo",{})},getStudiengangByKz:function(t){return this.$fhcApi.get("/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz",{studiengang_kz:t})}},menu:{getMenu:function(){return this.$fhcApi.get("/api/frontend/v1/CisMenu/getMenu",{})}},authinfo:{getAuthUID(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthUID",{})},getAuthInfo(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthInfo",{})}},studium:z,language:{getAll(){return this.$fhcApi.get("/api/frontend/v1/language/get")}}},q={install:(t,e)=>{if(t.config.globalProperties.$fhcApi)return void(e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory.addEndpoints(e.factory)));function n(t,e,n,r){if("string"==typeof t&&void 0===r)[e,n,r]=[t,e,n],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===n&&void 0===r&&(r=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},r?r.form=t:r={form:t}}return[e,n,r]}function r(t){const e=t.data;return delete t.data,e.meta?e.meta.response=t:e.meta={response:t},e}FHC_JS_DATA_STORAGE_OBJECT.app_root,FHC_JS_DATA_STORAGE_OBJECT.ci_router;const i=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});i.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,n])=>{if(n instanceof FileList)for(const r of n)t.FormData.append(e+(n.length>1?"[]":""),r);else Array.isArray(n)?n.every(t=>!(t instanceof File))?t.jsondata[e]=n:n.forEach(r=>t.FormData.append(e+(n.length>1?"[]":""),r)):t.jsondata[e]=n;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),i.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[n.type])(n,e.config))),r(e)),e=>"ERR_CANCELED"==e.code?Promise.reject({handled:!0,...e}):"off"==e.config?.errorHandling||!1===e.config?.errorHandling||"success"==e.config?.errorHandling?Promise.reject(e):e.response?404==e.response.status?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL,!0),Promise.reject({handled:!0,...e})):(e.response.data.errors=e.response.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[n.type])(n,e.config)),e.response.data.errors.length?Promise.reject(e):Promise.reject({handled:!0,...e})):e.request?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL),Promise.reject({handled:!0,...e})):(t.config.globalProperties.$fhcAlert.alertError(e.message),Promise.reject({handled:!0,...e}))),t.config.globalProperties.$fhcApi={getUri:t=>(console.warn("$fhcApi.getUri is DEPRECATED! Use $api.getUri instead."),i.getUri({url:t})),get:(t,e,r,s)=>(console.warn("$fhcApi.get is DEPRECATED! Use $api.get instead."),[e,r,s]=n(t,e,r,s),r&&(s?s.params=r:s={params:r}),i.get(e,s)),post:(t,e,r,s)=>(console.warn("$fhcApi.post is DEPRECATED! Use $api.post instead."),[e,r,s]=n(t,e,r,s),i.post(e,r,s)),_defaultErrorHandlers:{validation(e,n){const r=t.config.globalProperties.$fhcAlert;return n?.form?(n.form.clearValidation(),n.form.setFeedback(!1,e.messages),!1):Array.isArray(e.messages)?(e.messages.forEach(r.alertError),!1):"object"!=typeof e.messages||(n?.errorHeader?Object.values(e.messages).forEach(e=>r.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e,!0)):Object.entries(e.messages).forEach(([t,e])=>r.alertDefault("error",t,e,!0)),!1)},general(e,n){const r=t.config.globalProperties.$fhcAlert;n?.form?n.form.setFeedback(!1,e.message):n?.errorHeader?r.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e.message,!0):r.alertError(e.message)},php(e){const n=t.config.globalProperties.$fhcAlert;var r="";switch(r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":n.alertDefault("warn","PHP "+e.severity,r,!0);break;case"Notice":case"User Notice":case"Runtime Notice":n.alertDefault("info","PHP "+e.severity,r,!0);break;default:r="Type: PHP "+e.severity+"\n\n"+r,n.alertSystemError(r)}},exception(e){const n=t.config.globalProperties.$fhcAlert;var r="";r+="Type: "+e.class+"\n\n",r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),n.alertSystemError(r)},db(e){const n=t.config.globalProperties.$fhcAlert;var r="";void 0!==e.heading&&(r+=e.heading+"\n\n"),void 0!==e.code&&(r+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(r+="SQL: "+e.sql+"\n\n"),void 0!==e.message?r+="Message: "+e.message+"\n\n":void 0!==e.messages&&(r+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(r+="Filename: "+e.filename+"\n"),void 0!==e.line&&(r+="Line Number: "+e.line+"\n"),n.alertSystemError(r)},auth(e,n){const r=t.config.globalProperties.$fhcAlert;var i="";i+="Controller name: "+e.controller+"\n",i+="Method name: "+e.method+"\n",i+="Required permissions: "+e.required_permissions,n?.errorHeader?r.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e.message,!0):r.alertDefault("error",e.message,i)}}};class s{constructor(e,n){void 0===n?(this.$fhcApi={getUri:e=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.getUri(e)),get:(e,n,r,i)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.get(e,n,r,i)),post:(e,n,r,i)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.post(e,n,r,i))},Object.defineProperty(this.$fhcApi,"factory",{get:()=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory)}),t.config.globalProperties.$fhcApi.factory=this):Object.defineProperty(this,"$fhcApi",{get(){return(n||this).$fhcApi}}),this.addEndpoints(e,!0)}addEndpoints(t,e){Object.keys(t).forEach(e=>{Object.defineProperty(this,e,{get(){return"function"==typeof t[e]?t[e].bind(this):new s(t[e],this.$fhcApi.factory)}})}),e||console.warn("$fhcApi.factory.addEndpoints() is DEPRECATED!")}}const a=new s(I);e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),a.addEndpoints(e.factory)),t.config.globalProperties.$fhcApi.factory=a,t.provide("$fhcApi",t.config.globalProperties.$fhcApi)}};const N="error",G="retval",V={get:function(t,e,n=null){return V._axiosCall(t,e,"get",n)},post:function(t,e,n=null){return V._axiosCall(t,e,"post",n)},isSuccess:function(t){return!("object"!=typeof t||!t.hasOwnProperty(N)||!t.hasOwnProperty(G)||0!=t.error)},isError:function(t){return!V.isSuccess(t)},hasData:function(t){return!(!V.isSuccess(t)||!("object"==typeof t[G]&&Object.keys(t[G]).length>0||"array"==typeof t[G]&&t[G].length>0||"string"==typeof t[G]&&""!=t[G].trim()||"number"==typeof t[G]))},getData:function(t){return V.hasData(t)?t[G]:null},getError:function(t){return"object"==typeof t&&Object.keys(t).length>0&&t.hasOwnProperty(G)?t[G]:"Generic error"},getErrorCode:function(t){return"object"==typeof t&&t.hasOwnProperty(N)?t[N]:1},_generateRouterURI:function(t){var e=null;return"undefined"!=typeof FHC_JS_DATA_STORAGE_OBJECT&&(e=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"+t),e},_printDebug:function(t,e,n){},_axiosCall:function(t,e,n,r){let i={method:n,url:V._generateRouterURI(t),timeout:5e3};if("get"==n?i.params=e:i.data=e,"object"==typeof r)for(var s in r)i[s]=r[s];return axios(i)}},W=document.createElement("div"),Z=Vue.createApp({name:"FhcAlertApp",components:{PvToast:e,PvConfirm:n},methods:{mailToUrl:t=>"mailto:"+FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto+"?subject=Meldung%20Systemfehler&body="+("\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method+"%0D%0A\n\t\t\t\tFehler Meldung: "+t.message.detail+"%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!"),openMessagecard(t){bootstrap.Collapse.getOrCreateInstance(t.target.getAttribute("href")).toggle()}},unmounted(){W.parentElement.removeChild(W)},computed:{showmaillink:function(){return""!==FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto}},template:'\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t'});Z.use(t),Z.use(r);const K=Z.mount(W);document.body.appendChild(W);var X={install:(t,e)=>{t.config.globalProperties.$p||t.use(st);const n={alertSuccess(t){if(Array.isArray(t))return t.forEach(this.alertSuccess);K.$refs.toast.add({severity:"success",summary:"Info",detail:t,life:1e3})},alertInfo(t){if(Array.isArray(t))return t.forEach(this.alertInfo);K.$refs.toast.add({severity:"info",summary:"Info",detail:t,life:3e3})},alertWarning(t){if(Array.isArray(t))return t.forEach(this.alertWarning);K.$refs.toast.add({severity:"warn",summary:"Achtung",detail:t})},alertError(t){if(Array.isArray(t))return t.forEach(this.alertError);K.$refs.toast.add({severity:"error",summary:"Achtung",detail:t})},alertSystemError(e){if(Array.isArray(e))return e.forEach(this.alertSystemError);K.$refs.alert.add({severity:"error",summary:Vue.computed(()=>t.config.globalProperties.$p.t("alert/systemerror")),detail:e})},confirmDelete:()=>new Promise((e,n)=>{K.$confirm.require({group:"fhcAlertConfirm",header:Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:Vue.computed(()=>t.config.globalProperties.$p.t("alert/confirm_delete")),acceptLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/loeschen")),acceptClass:"p-button-danger",rejectLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:"p-button-secondary",accept(){e(!0)},reject(){e(!1)}})}),confirm:e=>new Promise((n,r)=>{K.$confirm.require({group:e?.group??"fhcAlertConfirm",header:e?.header??Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:e?.message??"",acceptLabel:e?.acceptLabel??"Ok",acceptClass:e?.acceptClass??"btn btn-primary",rejectLabel:e?.rejectLabel??Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:e?.rejectClass??"btn btn-outline-secondary",accept(){n(!0)},reject(){n(!1)}})}),alertDefault(t,e,n,r=!1,i=!1){let s={severity:t,summary:e,detail:n,html:i};r||(s.life=3e3),K.$refs.toast.add(s)},alertMultiple(t,e="info",n="Info",r=!1,i=!1){return!!t.every(t=>"string"==typeof t)&&(t.forEach(t=>this.alertDefault(e,n,t,r,i)),!0)},handleSystemError(t){if(!t.hasOwnProperty("name")||t.name.toLowerCase()!=="AbortError".toLowerCase()){if("string"==typeof t)return n.alertSystemError(t);if(Array.isArray(t)&&t.every(t=>"string"==typeof t))return t.every(n.alertSystemError);if(!t.hasOwnProperty("handled")||!t.handled){if("object"==typeof t&&null!==t){let e="";return t.hasOwnProperty("response")&&t.response?.data?.retval?e+="Error Message: "+(t.response.data.retval.message||t.response.data.retval)+"\r\n":t.hasOwnProperty("message")&&(e+="Error Message: "+t.message.toUpperCase()+"\r\n"),t.hasOwnProperty("config")&&t.config.hasOwnProperty("url")&&(e+="Error ConfigURL: "+t.config.url+"\r\n"),t.hasOwnProperty("stack")&&(e+="Error Stack: "+t.stack+"\r\n"),""==e&&(e="Error Message: "+JSON.stringify(t)+"\r\n"),e+="Error Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,n.alertSystemError(e)}n.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method)}}},handleSystemMessage(t){if("string"==typeof t)return n.alertWarning(t);if(Array.isArray(t)){if(t.every(t=>"string"==typeof t))return t.every(n.alertWarning);if(t.every(t=>"object"==typeof t)&&null!==msg)return t.every(t=>{t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?n.alertWarning(JSON.stringify(t.data.retval)):n.alertSystemError(JSON.stringify(t))})}"object"!=typeof t||null===t?n.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method):t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?n.alertWarning(JSON.stringify(t.data.retval)):n.alertSystemError(JSON.stringify(t))},resetFormValidation(t){const e=new Event("fhc-form-reset");t.querySelectorAll(["[data-fhc-form-validate],[data-fhc-form-error]"]).forEach(t=>t.dispatchEvent(e))},handleFormValidation(t,e){if(void 0===e){if(t&&t.nodeType===Node.ELEMENT_NODE)return e=>n.handleFormValidation(e,t)}else if(400==t?.response?.status){let r=V.getError(t.response.data);"object"!=typeof r&&(r=t.response.data),n.resetFormValidation(e);const i=Object.entries(r).filter(([t,n])=>{const r=e.querySelector('[data-fhc-form-validate="'+t+'"]');return!r||(r.dispatchEvent(new CustomEvent("fhc-form-invalidate",{detail:n})),!1)}).map(t=>t[1]),s=e.querySelector("[data-fhc-form-error]");return void(s&&i.length?s.dispatchEvent(new CustomEvent("fhc-form-error",{detail:i})):i.forEach(n.alertError))}if(400==t?.response?.status){let e=V.getError(t.response.data);n.alertError("object"==typeof e?Object.values(e):e)}else n.handleSystemError(t)}};t.config.globalProperties.$fhcAlert=n,t.provide("$fhcAlert",t.config.globalProperties.$fhcAlert)}},Q={install:(t,e)=>{if(t.config.globalProperties.$api)return;function n(t,e){Array.isArray(t)?t.forEach(e):Object.entries(t).forEach(([t,n])=>n.forEach(n=>e(n,t)))}t.config.globalProperties.$fhcAlert||t.use(X);let r={success:!0,fail:!0,combine:{form:["validation","general"],toast:["validation","general","not_found","site_failed"]},handler:{form(t,e){t.clearValidation(),e.forEach(e=>t.setFeedback(!1,e.messages||e.message))},async toast(e){const n=t.config.globalProperties.$p;if(!n)return Promise.reject("Phrasen plugin not loaded!");async function r(t){t=t.reduce((t,e)=>{switch(e.type){case"not_found":case"site_failed":e.message?t[e.message]=[e.url]:t._default=[e.url];break;case"general":t._default||(t._default=[]),t._default.push(e.message);break;case"validation":Object.entries(e.messages).forEach(([e,n])=>{t[e]||(t[e]=[]),Array.isArray(n)?t[e].push(...n):t[e].push(n)})}return t},{});let e=0;const r=await Promise.all(Object.entries(t).sort((t,e)=>["_default"].indexOf(e[0])-["_default"].indexOf(t[0])).map(async([t,r])=>{if("_default"==t){await n.loadCategory("dashboard");t='
'+n.t("dashboard/general")+"
"}else t="
"+t+"
";return e+=r.length,t+"
"+r.join("
")+"
"}));return{counter:e,msgs:r}}let i,s;Array.isArray(e)?({counter:i,msgs:s}=await r(e)):({counter:i,msgs:s}=await Object.entries(e).reduce(async(t,[e,n])=>{const i=await t,{counter:s,msgs:a}=await r(n);return i.counter+=s,i.msgs.push("
"+e+"
"+a.join("")+"
"),i},Promise.resolve({counter:0,msgs:[]}))),await n.loadCategory("ui");const a=n.t("ui/n_errors",{n:i});t.config.globalProperties.$fhcAlert.alertDefault("error",a,"
"+s.join("")+"
",!0,!0)},php(e){n(e,(e,n)=>{var r="";switch(r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":n?n+=": PHP "+e.severity:n="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("warn",n,r,!0);break;case"Notice":case"User Notice":case"Runtime Notice":n?n+=": PHP "+e.severity:n="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("info",n,r,!0);break;default:r="Type: PHP "+e.severity+"\n\n"+r,n&&(r=n+"\n\n"+r),t.config.globalProperties.$fhcAlert.alertSystemError(r)}})},exception(e){n(e,(e,n)=>{var r="";n&&(r+=n+"\n\n"),r+="Type: "+e.class+"\n\n",r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),t.config.globalProperties.$fhcAlert.alertSystemError(r)})},db(e){n(e,(e,n)=>{var r="";n&&(r+=n+"\n\n"),void 0!==e.heading&&(r+=e.heading+"\n\n"),void 0!==e.code&&(r+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(r+="SQL: "+e.sql+"\n\n"),void 0!==e.message?r+="Message: "+e.message+"\n\n":void 0!==e.messages&&(r+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(r+="Filename: "+e.filename+"\n"),void 0!==e.line&&(r+="Line Number: "+e.line+"\n"),t.config.globalProperties.$fhcAlert.alertSystemError(r)})},auth(e){n(e,(e,n)=>{n?n+=": "+e.message:n=e.message;var r="";r+="Controller name: "+e.controller+"\n",r+="Method name: "+e.method+"\n",r+="Required permissions: "+e.required_permissions,t.config.globalProperties.$fhcAlert.alertDefault("error",n,r,!0)})}}};function i(t,e,n,r){if("string"==typeof t&&void 0===r)[e,n,r]=[t,e,n],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===n&&void 0===r&&(r=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},r?r.form=t:r={form:t}}return[e,n,r]}function s(t){if("string"==typeof t.data||t.data instanceof String)return s({data:t});const e=t.data;return delete t.data,e?(e.meta?e.meta.response=t:e.meta={response:t},e):{meta:{response:t},data:null}}function a(t){if(!1===t||"off"===t)return{...r,success:!1,fail:!1};if(!t||!0===t)return{...r};if("success"===t)return{...r,fail:!1};if("fail"===t)return{...r,success:!1};const{success:e,fail:n,handler:i,combine:s}=t;return t={...r},Object.entries({fail:n,success:e}).forEach(([e,n])=>{void 0!==n&&(t[e]=n)}),Object.entries({handler:i,combine:s}).forEach(([e,n])=>{void 0!==n&&(t[e]={...t[e],...n})}),t}function o(t){const e=a(t?.errorHandling);if(t?.form){const n=e.handler.form;e.handler={...e.handler,form:e=>n(t.form,e)}}else e.combine={...e.combine,form:[]};return e}function l(t){return t.response?404==t.response.status?[{type:"not_found",message:t.message,url:t.request.responseURL}]:null==t.response.data.errors?[]:t.response.data.errors:t.request?[{type:"site_failed",message:t.message,url:t.request.responseURL}]:[{type:"script",message:t.message}]}function d(t,e){const n={},r=[];if(null==e)return{};for(;e.length;)r.push(e.pop());for(var i of r){let r=i.type,a=null;for(var s in t.combine){let e=t.combine[s].includes(r),n=t.handler[s];if(e&&n&&(a=s,"form"==a))break}a&&(r=a);t.handler[r]?(n[r]||(n[r]=[]),Array.isArray(i)?n[r].push(...i):n[r].push(i)):e.push(i)}return n}void 0!==e?.errorHandling&&(r=a(e.errorHandling));const p=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});p.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,n])=>{if(n instanceof FileList)for(const r of n)t.FormData.append(e+(n.length>1?"[]":""),r);else Array.isArray(n)?n.every(t=>!(t instanceof File))?t.jsondata[e]=n:n.forEach(r=>t.FormData.append(e+(n.length>1?"[]":""),r)):t.jsondata[e]=n;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),p.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$api._defaultErrorHandlers[n.type])(n,e.config))),s(e)),t=>{if("ERR_CANCELED"==t.code)return Promise.reject({handled:!0,...t});const e=o(t.config);if(!e.fail)return Promise.reject(t);const n=l(t),r=d(e,n);for(var i in r)e.handler[i](r[i]);return n.length?Promise.reject(t):Promise.reject({handled:!0,...t})}),t.config.globalProperties.$api={getUri:t=>p.getUri({url:t}),get:(t,e,n,r)=>([e,n,r]=i(t,e,n,r),n&&(r?r.params=n:r={params:n}),p.get(e,r)),post:(t,e,n,r)=>([e,n,r]=i(t,e,n,r),p.post(e,n,r)),call(e,n,r){if(Array.isArray(e)){const s=t.config.globalProperties.$api;return Promise.allSettled(e.map((t,e)=>(Array.isArray(t)||(t=["#"+e,t]),s.call(t[1],{errorHeader:t[0],errorHandling:!1})))).then(t=>{const[,,e]=i(r,void 0,void 0,n||{}),s=o(e);if(!s.success&&!s.fail)return t;const a={};for(var p of t){const[t,e]="fulfilled"===p.status?[s.success,p.value]:[s.fail,p.reason];if(!t)return;const n=d(s,l(e));for(var u in n)a[u]?a[u][e.config.errorHeader]=n[u]:a[u]={[e.config.errorHeader]:n[u]}}for(var c in a)s.handler[c](a[c]);return t})}let{method:s,url:a,params:p,config:u}=e;return void 0!==n&&(u=n),s||(s="get"),s.toLowerCase&&(s=s.toLowerCase()),"get"==s?this.get(r,a,p,u):"post"==s?this.post(r,a,p,u):void console.error("FhcApi: method not allowed:",s)}},t.provide("$api",t.config.globalProperties.$api)}},Y={loadCategory:t=>({method:"get",url:"/api/frontend/v1/phrasen/loadModule/"+t}),setLanguage:(t,e)=>({method:"post",url:"/api/frontend/v1/phrasen/setLanguage",params:{categories:t,language:e}}),getLanguage:()=>({method:"get",url:"/api/frontend/v1/phrasen/getLanguage"}),getActiveDbLanguages:()=>({method:"get",url:"/api/frontend/v1/phrasen/getAllLanguages"})};const tt=Vue.reactive({}),et={};let nt=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language),rt=Vue.computed(()=>nt.value?FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(t=>t.sprache==nt.value).LC_Time:null);const it={user_language:nt,user_locale:rt,setLanguage(t){const e=Object.keys(tt);return this.config.globalProperties.$api.call(Y.setLanguage(e,t)).then(e=>(e.data.forEach(t=>{tt[t.category][t.phrase]=t.text}),nt.value=t,e))},loadCategory(t){return Array.isArray(t)?Promise.all(t.map(this.config.globalProperties.$p.loadCategory)):(et[t]||(et[t]=this.config.globalProperties.$api.call(Y.loadCategory(t)).then(e=>e?.data?function(t,e){return t.filter(t=>t.category==e).reduce((t,e)=>(t[e.phrase]||(t[e.phrase]=e.text),t),{})}(e.data,t):{}).then(e=>{tt[t]=e})),et[t])},t_ref(t,e,n){return console.warn("deprecated"),Vue.computed(()=>this.t(t,e,n))},t(t,e,n){if(void 0===n&&(Array.isArray(t)&&2==t.length||t.split&&2==t.split("/").length)&&(n=e,[t,e]=t.split?t.split("/"):t),void 0===e)return console.error("invalid input",t,e,n),"";let r=Vue.computed(()=>tt[t]?function(t,e,n){let r=tt[t][e];return r?(n&&(r=r.replace(/\{([^}]*)\}/g,(t,e)=>void 0===n[e]?t:n[e])),r):"<< PHRASE "+e+">>"}(t,e,n):"");return tt[t]||this.loadCategory(t),r.value}};var st={install(t,e){t.config.globalProperties.$fhcApi||t.use(q),t.config.globalProperties.$api||t.use(Q),t.config.globalProperties.$p={t:it.t,loadCategory:e=>it.loadCategory.call(t,e),setLanguage:e=>it.setLanguage.call(t,e),user_language:nt,user_locale:rt,t_ref:it.t_ref},t.provide("$p",t.config.globalProperties.$p)}},at=Object.freeze({__proto__:null,default:st,user_locale:rt});Vue.createApp({name:"ProfilUpdateRequestsApp",components:{"profil-update-view":F},data:()=>({profilUpdateStates:null}),provide(){return{profilUpdateStates:Vue.computed(()=>!!this.profilUpdateStates&&this.profilUpdateStates)}},methods:{},created(){this.$api.call(b.getStatus()).then(t=>{this.profilUpdateStates=t.data}).catch(t=>{console.error(t)})}}).use(st).mount("#content"); +getStatus:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getStatus",{})},getTopic:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getTopic",{})},acceptProfilRequest:function({profil_update_id:t,uid:e,status_message:n,topic:r,requested_change:i}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/acceptProfilRequest",{profil_update_id:t,uid:e,status_message:n,topic:r,requested_change:i})},denyProfilRequest:function({profil_update_id:t,uid:e,topic:n,status_message:r}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/denyProfilRequest",{profil_update_id:t,uid:e,topic:n,status_message:r})},insertFile:function(t,e=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/insertFile/${e}`,t)},getProfilRequestFiles:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${t}`,{})},selectProfilRequest:function(t=null,e=null){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/selectProfilRequest",{...t?{uid:t}:{},...e?{id:e}:{}})},insertProfilRequest:function(t,e,n=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/insertProfilRequest",{topic:t,payload:e,...n?{fileID:n}:{}})},updateProfilRequest:function(t,e,n,r=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/updateProfilRequest",{topic:t,payload:e,ID:n,...r?{fileID:r}:{}})},deleteProfilRequest:function(t){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/deleteProfilRequest",{requestID:t})}},D={getRoomInfo(t,e,n){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getRoomplan",{ort_kurzbz:t,start_date:e,end_date:n})},getStunden(){return this.$fhcApi.get("/api/frontend/v1/LvPlan/Stunden",{})},getOrtReservierungen(t,e,n){return this.$fhcApi.post(`/api/frontend/v1/LvPlan/getReservierungen/${t}`,{start_date:e,end_date:n})},getLvPlanReservierungen(t,e){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getReservierungen",{start_date:t,end_date:e})},getLehreinheitStudiensemester(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${t}`,{})},studiensemesterDateInterval(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${t}`,{})},LvPlanEvents(t,e,n){return this.$fhcApi.get("/api/frontend/v1/LvPlan/LvPlanEvents",{start_date:t,end_date:e,lv_id:n})}},O={verband:{get(){return this.$fhcApi.get("api/frontend/v1/stv/verband")},favorites:{get(){return this.$fhcApi.get("api/frontend/v1/stv/favorites")},set(t){return this.$fhcApi.post("api/frontend/v1/stv/favorites/set",{favorites:t})}}},students:{uid(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/uid/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},prestudent(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/prestudent/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},person(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/person/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},verband(t){return this.$fhcApi.getUri("api/frontend/v1/stv/students/"+t)}},filter:{getStg(){return this.$fhcApi.get("api/frontend/v1/stv/filter/getStg")},setStg(t){return this.$fhcApi.post("api/frontend/v1/stv/filter/setStg",{studiengang_kz:t})}},konto:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/konto/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id),only_open:e.filter,studiengang_kz:e.studiengang_kz_intern?e.stg_kz:""}),t.ajaxRequestFunc=(t,e,n)=>this.$fhcApi.post(t,n,e),t.ajaxResponse=(t,e,n)=>n.data,t},checkDoubles(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/checkDoubles",e,{confirmErrorHandler:t=>!0})},insert(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/insert",e)},counter(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/counter",t)},edit(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/update",e)},delete(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/delete",{buchungsnr:t})},getBuchungstypen(){return this.$fhcApi.get("api/frontend/v1/stv/konto/getBuchungstypen")}},group:{getGruppen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/Gruppen/getGruppen/"+n.id)},deleteGroup(t){return this.$fhcApi.post("api/frontend/v1/stv/Gruppen/deleteGruppe/",t)}},kontakt:{getAdressen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressen/"+n.id)},addNewAddress(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewAddress/"+e,n)},loadAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadAddress/",{address_id:t})},updateAddress(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateAddress/"+e,n)},deleteAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteAddress/",{address_id:t})},getPlaces(t){return this.$fhcApi.get("api/frontend/v1/stv/address/getPlaces/"+t)},getFirmen(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getFirmen/"+t)},getNations(){return this.$fhcApi.get("api/frontend/v1/stv/address/getNations/")},getAdressentypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressentypen/")},getBankverbindung(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getBankverbindung/"+n.id)},addNewBankverbindung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewBankverbindung/"+e,n)},loadBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadBankverbindung/",{bankverbindung_id:t})},updateBankverbindung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateBankverbindung/"+e,n)},deleteBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteBankverbindung/",{bankverbindung_id:t})},getKontakte(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakte/"+n.id)},addNewContact(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewContact/"+e,n)},loadContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadContact/",{kontakt_id:t})},updateContact(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateContact/"+e,n)},deleteContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteContact/",{kontakt_id:t})},getStandorteByFirma(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getStandorteByFirma/"+t)},getKontakttypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakttypen/")}},prestudent:{get(t,e){return this.$fhcApi.post("api/frontend/v1/stv/prestudent/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e))},updatePrestudent(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/prestudent/updatePrestudent/"+e,n)},getBezeichnungZGV(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungZGV/")},getBezeichnungMZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungMZgv/")},getBezeichnungDZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungDZgv/")},getStgs(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStgs/")},getAusbildung(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAusbildung/")},getAufmerksamdurch(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAufmerksamdurch/")},getBerufstaetigkeit(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBerufstaetigkeit/")},getTypenStg(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getTypenStg/")},getBisstandort(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBisstandort/")},getHistoryPrestudent(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/status/getHistoryPrestudent/"+n.id)},getMaxSem(t){return this.$fhcApi.post("api/frontend/v1/stv/status/getMaxSemester/",{studiengang_kzs:t})},advanceStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/advanceStatus/"+t+"/"+e+"/"+n+"/"+r)},confirmStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/confirmStatus/"+t+"/"+e+"/"+n+"/"+r)},isLastStatus(t){return this.$fhcApi.get("api/frontend/v1/stv/status/isLastStatus/"+t)},deleteStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/deleteStatus/"+t+"/"+e+"/"+n+"/"+r)},getLastBismeldestichtag(){return this.$fhcApi.get("api/frontend/v1/stv/status/getLastBismeldestichtag/")},getHistoryPrestudents(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getHistoryPrestudents/"+n.id)}},status:{insertStatus(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/insertStatus/"+e,n)},loadStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/loadStatus/"+t+"/"+e+"/"+n+"/"+r)},updateStatus(t,{prestudent_id:e,status_kurzbz:n,studiensemester_kurzbz:r,ausbildungssemester:i},s){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/updateStatus/"+e+"/"+n+"/"+r+"/"+i,s)},getStudienplaene(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudienplaene/"+t)},getStudiengang(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudiengang/"+t)},getStatusgruende(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusgruende/")},getStati(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStati/")},addStudent(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/addStudent/"+t,e,{errorHeader:t})},changeStatus(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/changeStatus/"+t,e,{errorHeader:t})},getStatusarray(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusarray/")}},details:{get(t,e){let n="api/frontend/v1/stv/student/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e);return this.$fhcApi.post(n)},save(t,e,n,r){let i="api/frontend/v1/stv/student/save/"+encodeURIComponent(e)+"/"+encodeURIComponent(n);return this.$fhcApi.post(t,i,r)}},exam:{getPruefungen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getPruefungen/"+n.id)},loadPruefung(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/loadPruefung/"+t)},getTypenPruefungen(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getTypenPruefungen")},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/getAllLehreinheiten/",t)},getLvsByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsByStudent/"+t)},getLvsandLesByStudent(t,e){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsandLesByStudent/"+t+"/"+e)},getLvsAndMas(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsAndMas/"+t)},getMitarbeiterLv(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getMitarbeiterLv/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getNoten")},checkZeugnisnoteLv(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/",t)},addPruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/insertPruefung/",e)},updatePruefung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/updatePruefung/"+e,n)},deletePruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/deletePruefung/"+t)}},abschlusspruefung:{getAbschlusspruefung(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/"+n.id)},addNewAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/",e)},loadAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/",{id:t})},updateAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/",e)},deleteAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/",{id:t})},getTypenAbschlusspruefung(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/")},getTypenAntritte(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/")},getBeurteilungen(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/")},getAkadGrade(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getAkadGrade/",{studiengang_kz:t})},getTypStudiengang(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/",{studiengang_kz:t})},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/"+t)},getPruefer(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getPruefer/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getNoten/")},checkForExistingExams(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/",{uids:t})}},grades:{list(){return this.$fhcApi.get("api/frontend/v1/stv/grades/list")},getCertificate(t,e){let n="api/frontend/v1/stv/grades/getCertificate/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},getTeacherProposal(t,e){let n="api/frontend/v1/stv/grades/getTeacherProposal/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},getRepeaterGrades(t,e){let n="api/frontend/v1/stv/grades/getRepeaterGrades/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},updateCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,note:r,lehrveranstaltung_bezeichnung:i}){return this.$fhcApi.post("api/frontend/v1/stv/grades/updateCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,note:r},{errorHeader:i})},deleteCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,lehrveranstaltung_bezeichnung:r}){return this.$fhcApi.post("api/frontend/v1/stv/grades/deleteCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n},{errorHeader:r})},copyTeacherProposalToCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,lehrveranstaltung_bezeichnung:r}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyTeacherProposalToCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n},{errorHeader:r})},copyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id:t,lv_bezeichnung:e}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate",{studierendenantrag_lehrveranstaltung_id:t},{errorHeader:e})},getGradeFromPoints(t,e,n,r){const i=r?{errorHandling:!1}:{};return this.$fhcApi.post("api/frontend/v1/stv/grades/getGradeFromPoints",{points:t,lehrveranstaltung_id:e,studiensemester_kurzbz:n},i)}},mobility:{getMobilitaeten(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getMobilitaeten/"+n.id)},getProgramsMobility(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getProgramsMobility/")},addNewMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/insertMobility/",e)},loadMobility(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/loadMobility/"+t)},updateMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/updateMobility/",e)},deleteMobility(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobility/"+t)},getLVList(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLVList/"+t)},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/getAllLehreinheiten/",t)},getLvsandLesByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLvsandLesByStudent/"+t)},getPurposes(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getPurposes/"+n.id)},getSupports(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getSupports/"+n.id)},getListPurposes(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListPurposes/")},getListSupports(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListSupports/")},deleteMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilityPurpose/"+t.bisio_id,t)},addMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilityPurpose/"+t.bisio_id,t)},deleteMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilitySupport/"+t.bisio_id,t)},addMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilitySupport/"+t.bisio_id,t)}},archiv:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/archiv/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id)}),t.ajaxRequestFunc=(t,e,n)=>this.$fhcApi.post(t,n,e),t.ajaxResponse=(t,e,n)=>n.data,t},getArchivVorlagen(){return this.$fhcApi.post("api/frontend/v1/stv/archiv/getArchivVorlagen")},archive(t){return this.$fhcApi.post("api/frontend/v1/documents/archive",t)},archiveSigned(t){return this.$fhcApi.post("api/frontend/v1/documents/archiveSigned",t)},update(t){return this.$fhcApi.post("api/frontend/v1/stv/archiv/update",t)},delete({akte_id:t,studiengang_kz:e}){return this.$fhcApi.post("api/frontend/v1/stv/archiv/delete",{akte_id:t,studiengang_kz:e})}},documents:{getDocumentsUnaccepted(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/"+n.id+"/"+n.studiengang_kz)},getDocumentsAccepted(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsAccepted/"+n.id+"/"+n.studiengang_kz)},deleteZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},createZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/createZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},loadAkte(t){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/loadAkte/"+t)},getDoktypen(){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDoktypen/")},updateFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/updateAkte/"+t,e)},deleteFile(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteAkte/"+t)},uploadFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/uploadDokument/"+t,e)}},exemptions:{getAnrechnungen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getAnrechnungen/"+n.id)},getLehrveranstaltungen(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/"+t)},getBegruendungen(){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getBegruendungen/")},getLvsKompatibel(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLvsKompatibel/"+t)},getLektoren(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLektoren/"+t)},addNewAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/insertAnrechnung/",e)},loadAnrechnung(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/loadAnrechnung/"+t)},editAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/updateAnrechnung/",e)},deleteAnrechnung(t){return this.$fhcApi.post("api/frontend/v1/stv/anrechnungen/deleteAnrechnung/"+t)}},jointstudies:{getStudies(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudien/"+n.id)},getTypenMobility(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/")},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/")},getStudyprograms(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/")},getListPartner(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/")},getStatiPrestudent(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/")},loadStudy(t){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/loadStudie/"+t)},insertStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/insertStudie/",e)},updateStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/updateStudie/",e)},deleteStudy(t){return this.$fhcApi.post("api/frontend/v1/stv/GemeinsameStudien/deleteStudie/"+t)}},courselist:{getCourselist(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStundenplan/"+n.student_uid+"/"+n.start_date+"/"+n.end_date+"/"+n.group_consecutiveHours+"/"+n.dbStundenplanTable)},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStudiensemester/")}},configStudent(){return this.$fhcApi.get("api/frontend/v1/stv/config/student")},configStudents(){return this.$fhcApi.get("api/frontend/v1/stv/config/students")}},x={person:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getUid/")},addNewNotiz(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/addNewNotiz/"+e,n)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/updateNotiz/"+e,n)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getMitarbeiter/"+t)},isBerechtigt(t,e){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/isBerechtigt/")}}},R={person:{getAllBetriebsmittel(t,e,n){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/"+n.type+"/"+n.id)},addNewBetriebsmittel(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/"+e,n)},loadBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/"+t)},updateBetriebsmittel(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/"+e,n)},deleteBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/"+t)},getTypenBetriebsmittel(){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/")},loadInventarliste(t){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/"+t)}}},B={updatePersonUnrulyStatus(t,e){try{const n={person_id:t,unruly:e},r="/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus";return this.$fhcApi.post(r,n,null)}catch(t){throw t}},filterPerson(t,e=""){try{const n=e+"/api/frontend/v1/checkperson/CheckPerson/filterPerson";return axios.post(n,t)}catch(t){throw t}}},L={getContentID(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/ContentID",{ort_kurzbz:t})},getRooms(t,e,n,r,i=0){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getRooms",{datum:t,von:e,bis:n,typ:r,personenanzahl:i})},getRoomTypes(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getTypes")}},U={content(t,e=null,n=null,r=null){return this.$fhcApi.get("/api/frontend/v1/Cms/content",{content_id:t,...e?{version:e}:{},...n?{sprache:n}:{},...r?{sichtbar:r}:{}})},getNews(t=1,e=10,n){return this.$fhcApi.get("/api/frontend/v1/Cms/getNews",{page:t,page_size:e,sprache:n})},news(t){return this.$fhcApi.get("/api/frontend/v1/Cms/news",{limit:t})},getNewsRowCount:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getNewsRowCount",{})},getNewsExtra:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getStudiengangInfoForNews",{})}},H={getStudentenMail(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Lehre/lvStudentenMail",{lehreinheit_id:t})},getLvInfo(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/LV/${t}/${e}`,{})},getStudentPruefungen(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/Pruefungen/${t}`,{})},getStudentProjektarbeiten(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/getStudentProjektarbeiten/${t}`,{})},getStudentProjektabgaben(t){return this.$fhcApi.get("/api/frontend/v1/Lehre/getStudentProjektabgaben",{projektarbeit_id:t.projektarbeit_id,student_uid:t.student_uid})},postStudentProjektarbeitEndupload(t){return this.$fhcApi.post("/api/frontend/v1/Lehre/postStudentProjektarbeitEndupload",t,{Headers:{"Content-Type":"multipart/form-data"}})},postStudentProjektarbeitZwischenabgabe(t){return this.$fhcApi.post("/api/frontend/v1/Lehre/postStudentProjektarbeitZwischenabgabe",t,{Headers:{"Content-Type":"multipart/form-data"}})},getStudentProjektarbeitAbgabeFile(t,e){const n=`/Cis/Abgabetool/getStudentProjektarbeitAbgabeFile?paabgabe_id=${t}&student_uid=${e}`;window.location=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+n},getMitarbeiterProjektarbeiten(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/getMitarbeiterProjektarbeiten?showall=${e}`,{})},postProjektarbeitAbgabe(t){const e={paabgabe_id:t.paabgabe_id,paabgabetyp_kurzbz:t.bezeichnung.paabgabetyp_kurzbz,datum:t.datum,fixtermin:t.fixtermin,insertvon:t.insertvon,kurzbz:t.kurzbz,projektarbeit_id:t.projektarbeit_id};return this.$fhcApi.post("/api/frontend/v1/Lehre/postProjektarbeitAbgabe",e,null)},deleteProjektarbeitAbgabe(t){const e={paabgabe_id:t};return this.$fhcApi.post("/api/frontend/v1/Lehre/deleteProjektarbeitAbgabe",e,null)},postSerientermin(t,e,n,r,i){const s={datum:t,paabgabetyp_kurzbz:e,bezeichnung:n,kurzbz:r,projektarbeit_ids:i};return this.$fhcApi.post("/api/frontend/v1/Lehre/postSerientermin",s,null)},fetchDeadlines(t){const e={person_id:t};return this.$fhcApi.post("/api/frontend/v1/Lehre/fetchDeadlines",e,null)}},j={getLvMenu(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/LvMenu/getLvMenu/${t}/${e}`,{})}},M={person:{getMessages(t,e,n){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessages/"+n.id+"/"+n.type+"/"+n.size+"/"+n.page)},getVorlagen(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getVorlagen/")},getMsgVarsLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/")},getMessageVarsPerson(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessageVarsPerson/"+t.id+"/"+t.type_id)},getMsgVarsPrestudent(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsPrestudent/"+t.id+"/"+t.type_id)},getPersonId(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getPersonId/"+t.id+"/"+t.type_id)},getUid(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getUid/"+t.id+"/"+t.type_id)},getDataVorlage(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getDataVorlage/"+t)},getNameOfDefaultRecipient(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getNameOfDefaultRecipient/"+t.id+"/"+t.type_id)},getPreviewText(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/getPreviewText/"+t.id+"/"+t.type_id,e)},getReplyData(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getReplyData/"+t)},sendMessageFromModalContext(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/messages/messages/sendMessage/"+e,n)},sendMessage(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/sendMessage/"+t,e)},deleteMessage(t){return this.$fhcApi.post("api/frontend/v1/messages/messages/deleteMessage/"+t)}}},J={getVorlagen(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagen/")},getVorlagenByLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/")}},z={getStudiensemester:function(){return this.$fhcApi.get("/components/Cis/Mylv/Studiensemester",{})},getAllStudienSemester:function(t=void 0,e=void 0,n=void 0,r=void 0){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienAllSemester",{studiensemester:t,studiengang:e,semester:n,studienplan:r})},getStudiengaengeForStudienSemester:function(t){return this.$fhcApi.get(`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${t}`,{})},getStudienplaeneBySemester:function(t,e){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienplaeneBySemester",{studiengang:t,studiensemester:e})},getLvPlanForStudiensemester:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${t}/${e}`,{})},getLvEvaluierungInfo:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/Studium/getLvEvaluierungInfo/${t}/${e}`,{})}},I={search:S,phrasen:C,navigation:P,dashboard:{async getViewData(){return this.$fhcApi.get("/api/frontend/v1/Cis4FhcApi/getViewData",null,null)}},filter:T,studstatus:E,profil:k,profilUpdate:w,lvPlan:D,bookmark:{getBookmarks:function(){return this.$fhcApi.get("/api/frontend/v1/Bookmark/getBookmarks",{})},delete:function(t){return this.$fhcApi.get(`/api/frontend/v1/Bookmark/delete/${t}`,{})},update:function({bookmark_id:t,url:e,title:n,tag:r=null}){return this.$fhcApi.post(`/api/frontend/v1/Bookmark/update/${t}`,{url:e,title:n})},insert:function({url:t,title:e,tag:n}){return this.$fhcApi.post("/api/frontend/v1/Bookmark/insert",{url:t,title:e,tag:n})}},stv:O,notiz:x,betriebsmittel:R,checkperson:B,ampeln:{open:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/open",{})},all:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/all",{})},confirm:function(t){return this.$fhcApi.get(`/api/frontend/v1/Ampeln/confirm/${t}`,{})}},ort:L,cms:U,lehre:H,addons:j,messages:M,vorlagen:J,addons:j,studiengang:{studiengangInformation:function(){return this.$fhcApi.get("/api/frontend/v1/Studgang/getStudiengangInfo",{})},getStudiengangByKz:function(t){return this.$fhcApi.get("/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz",{studiengang_kz:t})}},menu:{getMenu:function(){return this.$fhcApi.get("/api/frontend/v1/CisMenu/getMenu",{})}},authinfo:{getAuthUID(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthUID",{})},getAuthInfo(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthInfo",{})}},studium:z,language:{getAll(){return this.$fhcApi.get("/api/frontend/v1/language/get")}}},q={install:(t,e)=>{if(t.config.globalProperties.$fhcApi)return void(e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory.addEndpoints(e.factory)));function n(t,e,n,r){if("string"==typeof t&&void 0===r)[e,n,r]=[t,e,n],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===n&&void 0===r&&(r=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},r?r.form=t:r={form:t}}return[e,n,r]}function r(t){const e=t.data;return delete t.data,e.meta?e.meta.response=t:e.meta={response:t},e}FHC_JS_DATA_STORAGE_OBJECT.app_root,FHC_JS_DATA_STORAGE_OBJECT.ci_router;const i=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});i.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,n])=>{if(n instanceof FileList)for(const r of n)t.FormData.append(e+(n.length>1?"[]":""),r);else Array.isArray(n)?n.every(t=>!(t instanceof File))?t.jsondata[e]=n:n.forEach(r=>t.FormData.append(e+(n.length>1?"[]":""),r)):t.jsondata[e]=n;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),i.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[n.type])(n,e.config))),r(e)),e=>"ERR_CANCELED"==e.code?Promise.reject({handled:!0,...e}):"off"==e.config?.errorHandling||!1===e.config?.errorHandling||"success"==e.config?.errorHandling?Promise.reject(e):e.response?404==e.response.status?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL,!0),Promise.reject({handled:!0,...e})):(e.response.data.errors=e.response.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[n.type])(n,e.config)),e.response.data.errors.length?Promise.reject(e):Promise.reject({handled:!0,...e})):e.request?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL),Promise.reject({handled:!0,...e})):(t.config.globalProperties.$fhcAlert.alertError(e.message),Promise.reject({handled:!0,...e}))),t.config.globalProperties.$fhcApi={getUri:t=>(console.warn("$fhcApi.getUri is DEPRECATED! Use $api.getUri instead."),i.getUri({url:t})),get:(t,e,r,s)=>(console.warn("$fhcApi.get is DEPRECATED! Use $api.get instead."),[e,r,s]=n(t,e,r,s),r&&(s?s.params=r:s={params:r}),i.get(e,s)),post:(t,e,r,s)=>(console.warn("$fhcApi.post is DEPRECATED! Use $api.post instead."),[e,r,s]=n(t,e,r,s),i.post(e,r,s)),_defaultErrorHandlers:{validation(e,n){const r=t.config.globalProperties.$fhcAlert;return n?.form?(n.form.clearValidation(),n.form.setFeedback(!1,e.messages),!1):Array.isArray(e.messages)?(e.messages.forEach(r.alertError),!1):"object"!=typeof e.messages||(n?.errorHeader?Object.values(e.messages).forEach(e=>r.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e,!0)):Object.entries(e.messages).forEach(([t,e])=>r.alertDefault("error",t,e,!0)),!1)},general(e,n){const r=t.config.globalProperties.$fhcAlert;n?.form?n.form.setFeedback(!1,e.message):n?.errorHeader?r.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e.message,!0):r.alertError(e.message)},php(e){const n=t.config.globalProperties.$fhcAlert;var r="";switch(r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":n.alertDefault("warn","PHP "+e.severity,r,!0);break;case"Notice":case"User Notice":case"Runtime Notice":n.alertDefault("info","PHP "+e.severity,r,!0);break;default:r="Type: PHP "+e.severity+"\n\n"+r,n.alertSystemError(r)}},exception(e){const n=t.config.globalProperties.$fhcAlert;var r="";r+="Type: "+e.class+"\n\n",r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),n.alertSystemError(r)},db(e){const n=t.config.globalProperties.$fhcAlert;var r="";void 0!==e.heading&&(r+=e.heading+"\n\n"),void 0!==e.code&&(r+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(r+="SQL: "+e.sql+"\n\n"),void 0!==e.message?r+="Message: "+e.message+"\n\n":void 0!==e.messages&&(r+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(r+="Filename: "+e.filename+"\n"),void 0!==e.line&&(r+="Line Number: "+e.line+"\n"),n.alertSystemError(r)},auth(e,n){const r=t.config.globalProperties.$fhcAlert;var i="";i+="Controller name: "+e.controller+"\n",i+="Method name: "+e.method+"\n",i+="Required permissions: "+e.required_permissions,n?.errorHeader?r.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e.message,!0):r.alertDefault("error",e.message,i)}}};class s{constructor(e,n){void 0===n?(this.$fhcApi={getUri:e=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.getUri(e)),get:(e,n,r,i)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.get(e,n,r,i)),post:(e,n,r,i)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.post(e,n,r,i))},Object.defineProperty(this.$fhcApi,"factory",{get:()=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory)}),t.config.globalProperties.$fhcApi.factory=this):Object.defineProperty(this,"$fhcApi",{get(){return(n||this).$fhcApi}}),this.addEndpoints(e,!0)}addEndpoints(t,e){Object.keys(t).forEach(e=>{Object.defineProperty(this,e,{get(){return"function"==typeof t[e]?t[e].bind(this):new s(t[e],this.$fhcApi.factory)}})}),e||console.warn("$fhcApi.factory.addEndpoints() is DEPRECATED!")}}const a=new s(I);e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),a.addEndpoints(e.factory)),t.config.globalProperties.$fhcApi.factory=a,t.provide("$fhcApi",t.config.globalProperties.$fhcApi)}};const N="error",G="retval",V={get:function(t,e,n=null){return V._axiosCall(t,e,"get",n)},post:function(t,e,n=null){return V._axiosCall(t,e,"post",n)},isSuccess:function(t){return!("object"!=typeof t||!t.hasOwnProperty(N)||!t.hasOwnProperty(G)||0!=t.error)},isError:function(t){return!V.isSuccess(t)},hasData:function(t){return!(!V.isSuccess(t)||!("object"==typeof t[G]&&Object.keys(t[G]).length>0||"array"==typeof t[G]&&t[G].length>0||"string"==typeof t[G]&&""!=t[G].trim()||"number"==typeof t[G]))},getData:function(t){return V.hasData(t)?t[G]:null},getError:function(t){return"object"==typeof t&&Object.keys(t).length>0&&t.hasOwnProperty(G)?t[G]:"Generic error"},getErrorCode:function(t){return"object"==typeof t&&t.hasOwnProperty(N)?t[N]:1},_generateRouterURI:function(t){var e=null;return"undefined"!=typeof FHC_JS_DATA_STORAGE_OBJECT&&(e=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"+t),e},_printDebug:function(t,e,n){},_axiosCall:function(t,e,n,r){let i={method:n,url:V._generateRouterURI(t),timeout:5e3};if("get"==n?i.params=e:i.data=e,"object"==typeof r)for(var s in r)i[s]=r[s];return axios(i)}},W=document.createElement("div"),Z=Vue.createApp({name:"FhcAlertApp",components:{PvToast:e,PvConfirm:n},methods:{mailToUrl:t=>"mailto:"+FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto+"?subject=Meldung%20Systemfehler&body="+("\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method+"%0D%0A\n\t\t\t\tFehler Meldung: "+t.message.detail+"%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!"),openMessagecard(t){bootstrap.Collapse.getOrCreateInstance(t.target.getAttribute("href")).toggle()}},unmounted(){W.parentElement.removeChild(W)},computed:{showmaillink:function(){return""!==FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto}},template:'\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t'});Z.use(t),Z.use(r);const K=Z.mount(W);document.body.appendChild(W);var X={install:(t,e)=>{t.config.globalProperties.$p||t.use(st);const n={alertSuccess(t){if(Array.isArray(t))return t.forEach(this.alertSuccess);K.$refs.toast.add({severity:"success",summary:"Info",detail:t,life:1e3})},alertInfo(t){if(Array.isArray(t))return t.forEach(this.alertInfo);K.$refs.toast.add({severity:"info",summary:"Info",detail:t,life:3e3})},alertWarning(t){if(Array.isArray(t))return t.forEach(this.alertWarning);K.$refs.toast.add({severity:"warn",summary:"Achtung",detail:t})},alertError(t){if(Array.isArray(t))return t.forEach(this.alertError);K.$refs.toast.add({severity:"error",summary:"Achtung",detail:t})},alertSystemError(e){if(Array.isArray(e))return e.forEach(this.alertSystemError);K.$refs.alert.add({severity:"error",summary:Vue.computed(()=>t.config.globalProperties.$p.t("alert/systemerror")),detail:e})},confirmDelete:()=>new Promise((e,n)=>{K.$confirm.require({group:"fhcAlertConfirm",header:Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:Vue.computed(()=>t.config.globalProperties.$p.t("alert/confirm_delete")),acceptLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/loeschen")),acceptClass:"p-button-danger",rejectLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:"p-button-secondary",accept(){e(!0)},reject(){e(!1)}})}),confirm:e=>new Promise((n,r)=>{K.$confirm.require({group:e?.group??"fhcAlertConfirm",header:e?.header??Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:e?.message??"",acceptLabel:e?.acceptLabel??"Ok",acceptClass:e?.acceptClass??"btn btn-primary",rejectLabel:e?.rejectLabel??Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:e?.rejectClass??"btn btn-outline-secondary",accept(){n(!0)},reject(){n(!1)}})}),alertDefault(t,e,n,r=!1,i=!1){let s={severity:t,summary:e,detail:n,html:i};r||(s.life=3e3),K.$refs.toast.add(s)},alertMultiple(t,e="info",n="Info",r=!1,i=!1){return!!t.every(t=>"string"==typeof t)&&(t.forEach(t=>this.alertDefault(e,n,t,r,i)),!0)},handleSystemError(t){if(!t.hasOwnProperty("name")||t.name.toLowerCase()!=="AbortError".toLowerCase()){if("string"==typeof t)return n.alertSystemError(t);if(Array.isArray(t)&&t.every(t=>"string"==typeof t))return t.every(n.alertSystemError);if(!t.hasOwnProperty("handled")||!t.handled){if("object"==typeof t&&null!==t){let e="";return t.hasOwnProperty("response")&&t.response?.data?.retval?e+="Error Message: "+(t.response.data.retval.message||t.response.data.retval)+"\r\n":t.hasOwnProperty("message")&&(e+="Error Message: "+t.message.toUpperCase()+"\r\n"),t.hasOwnProperty("config")&&t.config.hasOwnProperty("url")&&(e+="Error ConfigURL: "+t.config.url+"\r\n"),t.hasOwnProperty("stack")&&(e+="Error Stack: "+t.stack+"\r\n"),""==e&&(e="Error Message: "+JSON.stringify(t)+"\r\n"),e+="Error Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,n.alertSystemError(e)}n.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method)}}},handleSystemMessage(t){if("string"==typeof t)return n.alertWarning(t);if(Array.isArray(t)){if(t.every(t=>"string"==typeof t))return t.every(n.alertWarning);if(t.every(t=>"object"==typeof t)&&null!==msg)return t.every(t=>{t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?n.alertWarning(JSON.stringify(t.data.retval)):n.alertSystemError(JSON.stringify(t))})}"object"!=typeof t||null===t?n.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method):t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?n.alertWarning(JSON.stringify(t.data.retval)):n.alertSystemError(JSON.stringify(t))},resetFormValidation(t){const e=new Event("fhc-form-reset");t.querySelectorAll(["[data-fhc-form-validate],[data-fhc-form-error]"]).forEach(t=>t.dispatchEvent(e))},handleFormValidation(t,e){if(void 0===e){if(t&&t.nodeType===Node.ELEMENT_NODE)return e=>n.handleFormValidation(e,t)}else if(400==t?.response?.status){let r=V.getError(t.response.data);"object"!=typeof r&&(r=t.response.data),n.resetFormValidation(e);const i=Object.entries(r).filter(([t,n])=>{const r=e.querySelector('[data-fhc-form-validate="'+t+'"]');return!r||(r.dispatchEvent(new CustomEvent("fhc-form-invalidate",{detail:n})),!1)}).map(t=>t[1]),s=e.querySelector("[data-fhc-form-error]");return void(s&&i.length?s.dispatchEvent(new CustomEvent("fhc-form-error",{detail:i})):i.forEach(n.alertError))}if(400==t?.response?.status){let e=V.getError(t.response.data);n.alertError("object"==typeof e?Object.values(e):e)}else n.handleSystemError(t)}};t.config.globalProperties.$fhcAlert=n,t.provide("$fhcAlert",t.config.globalProperties.$fhcAlert)}},Q={install:(t,e)=>{if(t.config.globalProperties.$api)return;function n(t,e){Array.isArray(t)?t.forEach(e):Object.entries(t).forEach(([t,n])=>n.forEach(n=>e(n,t)))}t.config.globalProperties.$fhcAlert||t.use(X);let r={success:!0,fail:!0,combine:{form:["validation","general"],toast:["validation","general","not_found","site_failed"]},handler:{form(t,e){t.clearValidation(),e.forEach(e=>t.setFeedback(!1,e.messages||e.message))},async toast(e){const n=t.config.globalProperties.$p;if(!n)return Promise.reject("Phrasen plugin not loaded!");async function r(t){t=t.reduce((t,e)=>{switch(e.type){case"not_found":case"site_failed":e.message?t[e.message]=[e.url]:t._default=[e.url];break;case"general":t._default||(t._default=[]),t._default.push(e.message);break;case"validation":Object.entries(e.messages).forEach(([e,n])=>{t[e]||(t[e]=[]),Array.isArray(n)?t[e].push(...n):t[e].push(n)})}return t},{});let e=0;const r=await Promise.all(Object.entries(t).sort((t,e)=>["_default"].indexOf(e[0])-["_default"].indexOf(t[0])).map(async([t,r])=>{if("_default"==t){await n.loadCategory("dashboard");t='
'+n.t("dashboard/general")+"
"}else t="
"+t+"
";return e+=r.length,t+"
"+r.join("
")+"
"}));return{counter:e,msgs:r}}let i,s;Array.isArray(e)?({counter:i,msgs:s}=await r(e)):({counter:i,msgs:s}=await Object.entries(e).reduce(async(t,[e,n])=>{const i=await t,{counter:s,msgs:a}=await r(n);return i.counter+=s,i.msgs.push("
"+e+"
"+a.join("")+"
"),i},Promise.resolve({counter:0,msgs:[]}))),await n.loadCategory("ui");const a=n.t("ui/n_errors",{n:i});t.config.globalProperties.$fhcAlert.alertDefault("error",a,"
"+s.join("")+"
",!0,!0)},php(e){n(e,(e,n)=>{var r="";switch(r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":n?n+=": PHP "+e.severity:n="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("warn",n,r,!0);break;case"Notice":case"User Notice":case"Runtime Notice":n?n+=": PHP "+e.severity:n="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("info",n,r,!0);break;default:r="Type: PHP "+e.severity+"\n\n"+r,n&&(r=n+"\n\n"+r),t.config.globalProperties.$fhcAlert.alertSystemError(r)}})},exception(e){n(e,(e,n)=>{var r="";n&&(r+=n+"\n\n"),r+="Type: "+e.class+"\n\n",r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),t.config.globalProperties.$fhcAlert.alertSystemError(r)})},db(e){n(e,(e,n)=>{var r="";n&&(r+=n+"\n\n"),void 0!==e.heading&&(r+=e.heading+"\n\n"),void 0!==e.code&&(r+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(r+="SQL: "+e.sql+"\n\n"),void 0!==e.message?r+="Message: "+e.message+"\n\n":void 0!==e.messages&&(r+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(r+="Filename: "+e.filename+"\n"),void 0!==e.line&&(r+="Line Number: "+e.line+"\n"),t.config.globalProperties.$fhcAlert.alertSystemError(r)})},auth(e){n(e,(e,n)=>{n?n+=": "+e.message:n=e.message;var r="";r+="Controller name: "+e.controller+"\n",r+="Method name: "+e.method+"\n",r+="Required permissions: "+e.required_permissions,t.config.globalProperties.$fhcAlert.alertDefault("error",n,r,!0)})}}};function i(t,e,n,r){if("string"==typeof t&&void 0===r)[e,n,r]=[t,e,n],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===n&&void 0===r&&(r=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},r?r.form=t:r={form:t}}return[e,n,r]}function s(t){if("string"==typeof t.data||t.data instanceof String)return s({data:t});const e=t.data;return delete t.data,e?(e.meta?e.meta.response=t:e.meta={response:t},e):{meta:{response:t},data:null}}function a(t){if(!1===t||"off"===t)return{...r,success:!1,fail:!1};if(!t||!0===t)return{...r};if("success"===t)return{...r,fail:!1};if("fail"===t)return{...r,success:!1};const{success:e,fail:n,handler:i,combine:s}=t;return t={...r},Object.entries({fail:n,success:e}).forEach(([e,n])=>{void 0!==n&&(t[e]=n)}),Object.entries({handler:i,combine:s}).forEach(([e,n])=>{void 0!==n&&(t[e]={...t[e],...n})}),t}function o(t){const e=a(t?.errorHandling);if(t?.form){const n=e.handler.form;e.handler={...e.handler,form:e=>n(t.form,e)}}else e.combine={...e.combine,form:[]};return e}function l(t){return t.response?404==t.response.status?[{type:"not_found",message:t.message,url:t.request.responseURL}]:null==t.response.data.errors?[]:t.response.data.errors:t.request?[{type:"site_failed",message:t.message,url:t.request.responseURL}]:[{type:"script",message:t.message}]}function d(t,e){const n={},r=[];if(null==e)return{};for(;e.length;)r.push(e.pop());for(var i of r){let r=i.type,a=null;for(var s in t.combine){let e=t.combine[s].includes(r),n=t.handler[s];if(e&&n&&(a=s,"form"==a))break}a&&(r=a);t.handler[r]?(n[r]||(n[r]=[]),Array.isArray(i)?n[r].push(...i):n[r].push(i)):e.push(i)}return n}void 0!==e?.errorHandling&&(r=a(e.errorHandling));const p=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});p.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,n])=>{if(n instanceof FileList)for(const r of n)t.FormData.append(e+(n.length>1?"[]":""),r);else Array.isArray(n)?n.every(t=>!(t instanceof File))?t.jsondata[e]=n:n.forEach(r=>t.FormData.append(e+(n.length>1?"[]":""),r)):t.jsondata[e]=n;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),p.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$api._defaultErrorHandlers[n.type])(n,e.config))),s(e)),t=>{if("ERR_CANCELED"==t.code)return Promise.reject({handled:!0,...t});const e=o(t.config);if(!e.fail)return Promise.reject(t);const n=l(t),r=d(e,n);for(var i in r)e.handler[i](r[i]);return n.length?Promise.reject(t):Promise.reject({handled:!0,...t})}),t.config.globalProperties.$api={getUri:t=>p.getUri({url:t}),get:(t,e,n,r)=>([e,n,r]=i(t,e,n,r),n&&(r?r.params=n:r={params:n}),p.get(e,r)),post:(t,e,n,r)=>([e,n,r]=i(t,e,n,r),p.post(e,n,r)),call(e,n,r){if(Array.isArray(e)){const s=t.config.globalProperties.$api;return Promise.allSettled(e.map((t,e)=>(Array.isArray(t)||(t=["#"+e,t]),s.call(t[1],{errorHeader:t[0],errorHandling:!1})))).then(t=>{const[,,e]=i(r,void 0,void 0,n||{}),s=o(e);if(!s.success&&!s.fail)return t;const a={};for(var p of t){const[t,e]="fulfilled"===p.status?[s.success,p.value]:[s.fail,p.reason];if(!t)return;const n=d(s,l(e));for(var u in n)a[u]?a[u][e.config.errorHeader]=n[u]:a[u]={[e.config.errorHeader]:n[u]}}for(var c in a)s.handler[c](a[c]);return t})}let{method:s,url:a,params:p,config:u}=e;return void 0!==n&&(u=n),s||(s="get"),s.toLowerCase&&(s=s.toLowerCase()),"get"==s?this.get(r,a,p,u):"post"==s?this.post(r,a,p,u):void console.error("FhcApi: method not allowed:",s)},getErrorHandler:t=>o(t)},t.provide("$api",t.config.globalProperties.$api)}},Y={loadCategory:t=>({method:"get",url:"/api/frontend/v1/phrasen/loadModule/"+t}),setLanguage:(t,e)=>({method:"post",url:"/api/frontend/v1/phrasen/setLanguage",params:{categories:t,language:e}}),getLanguage:()=>({method:"get",url:"/api/frontend/v1/phrasen/getLanguage"}),getActiveDbLanguages:()=>({method:"get",url:"/api/frontend/v1/phrasen/getAllLanguages"})};const tt=Vue.reactive({}),et={};let nt=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language),rt=Vue.computed(()=>nt.value?FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(t=>t.sprache==nt.value).LC_Time:null);const it={user_language:nt,user_locale:rt,setLanguage(t){const e=Object.keys(tt);return this.config.globalProperties.$api.call(Y.setLanguage(e,t)).then(e=>(e.data.forEach(t=>{tt[t.category][t.phrase]=t.text}),nt.value=t,e))},loadCategory(t){return Array.isArray(t)?Promise.all(t.map(this.config.globalProperties.$p.loadCategory)):(et[t]||(et[t]=this.config.globalProperties.$api.call(Y.loadCategory(t)).then(e=>e?.data?function(t,e){return t.filter(t=>t.category==e).reduce((t,e)=>(t[e.phrase]||(t[e.phrase]=e.text),t),{})}(e.data,t):{}).then(e=>{tt[t]=e})),et[t])},t_ref(t,e,n){return console.warn("deprecated"),Vue.computed(()=>this.t(t,e,n))},t(t,e,n){if(void 0===n&&(Array.isArray(t)&&2==t.length||t.split&&2==t.split("/").length)&&(n=e,[t,e]=t.split?t.split("/"):t),void 0===e)return console.error("invalid input",t,e,n),"";let r=Vue.computed(()=>tt[t]?function(t,e,n){let r=tt[t][e];return r?(n&&(r=r.replace(/\{([^}]*)\}/g,(t,e)=>void 0===n[e]?t:n[e])),r):"<< PHRASE "+e+">>"}(t,e,n):"");return tt[t]||this.loadCategory(t),r.value}};var st={install(t,e){t.config.globalProperties.$fhcApi||t.use(q),t.config.globalProperties.$api||t.use(Q),t.config.globalProperties.$p={t:it.t,loadCategory:e=>it.loadCategory.call(t,e),setLanguage:e=>it.setLanguage.call(t,e),user_language:nt,user_locale:rt,t_ref:it.t_ref},t.provide("$p",t.config.globalProperties.$p)}},at=Object.freeze({__proto__:null,default:st,user_locale:rt});Vue.createApp({name:"ProfilUpdateRequestsApp",components:{"profil-update-view":F},data:()=>({profilUpdateStates:null}),provide(){return{profilUpdateStates:Vue.computed(()=>!!this.profilUpdateStates&&this.profilUpdateStates)}},methods:{},created(){this.$api.call(b.getStatus()).then(t=>{this.profilUpdateStates=t.data}).catch(t=>{console.error(t)})}}).use(st).mount("#content"); //# sourceMappingURL=ProfilUpdateRequests.js.map diff --git a/public/dist/js/apps/Cis/ProfilUpdateRequests.js.map b/public/dist/js/apps/Cis/ProfilUpdateRequests.js.map index 9f0975ec6..ac0862d1a 100644 --- a/public/dist/js/apps/Cis/ProfilUpdateRequests.js.map +++ b/public/dist/js/apps/Cis/ProfilUpdateRequests.js.map @@ -1 +1 @@ -{"version":3,"file":"ProfilUpdateRequests.js","sources":["../../../../js/components/Fetch.js","../../../../js/components/filter/Filter/Config.js","../../../../js/components/filter/Filter/Columns.js","../../../../js/components/filter/Table/Download.js","../../../../js/directives/collapseAutoClose.js","../../../../js/tabulator/layouts/fitDataStretchFrozen.js","../../../../js/api/factory/filter.js","../../../../js/components/filter/Filter.js","../../../../js/components/Bootstrap/Modal.js","../../../../js/components/Cis/Profil/ProfilComponents/Kontakt.js","../../../../js/components/Cis/Profil/ProfilComponents/Adresse.js","../../../../js/api/factory/profilUpdate.js","../../../../js/components/Cis/ProfilUpdate/AcceptDenyUpdate.js","../../../../js/components/Loader.js","../../../../js/tabulator/filters/Dates.js","../../../../js/components/Cis/ProfilUpdate/ProfilUpdateView.js","../../../../js/api/search.js","../../../../js/api/phrasen.js","../../../../js/api/navigation.js","../../../../js/api/filter.js","../../../../js/api/studstatus.js","../../../../js/api/profil.js","../../../../js/api/profilUpdate.js","../../../../js/api/lvPlan.js","../../../../js/api/stv.js","../../../../js/api/stv/verband.js","../../../../js/api/stv/students.js","../../../../js/api/stv/filter.js","../../../../js/api/stv/konto.js","../../../../js/api/stv/group.js","../../../../js/api/stv/kontakt.js","../../../../js/api/stv/prestudent.js","../../../../js/api/stv/status.js","../../../../js/api/stv/details.js","../../../../js/api/stv/exam.js","../../../../js/api/stv/abschlusspruefung.js","../../../../js/api/stv/grades.js","../../../../js/api/stv/mobility.js","../../../../js/api/stv/archiv.js","../../../../js/api/stv/documents.js","../../../../js/api/stv/exemptions.js","../../../../js/api/stv/jointstudies.js","../../../../js/api/stv/courselist.js","../../../../js/api/notiz.js","../../../../js/api/notiz/person.js","../../../../js/api/betriebsmittel.js","../../../../js/api/betriebsmittel/person.js","../../../../js/api/checkperson.js","../../../../js/api/ort.js","../../../../js/api/cms.js","../../../../js/api/lehre.js","../../../../js/api/addons.js","../../../../js/api/messages.js","../../../../js/api/messages/person.js","../../../../js/api/vorlagen.js","../../../../js/api/studium.js","../../../../js/api/fhcapifactory.js","../../../../js/api/dashboard.js","../../../../js/api/bookmark.js","../../../../js/api/ampeln.js","../../../../js/api/studiengang.js","../../../../js/api/menu.js","../../../../js/api/authinfo.js","../../../../js/api/language.js","../../../../js/plugin/OldFhcApi.js","../../../../js/RESTClient.js","../../../../js/plugins/FhcAlert.js","../../../../js/plugins/Api.js","../../../../js/api/factory/phrasen.js","../../../../js/plugins/Phrasen.js","../../../../js/apps/Cis/ProfilUpdateRequests.js"],"sourcesContent":["/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport const CoreFetchCmpt = {\n\temits: ['dataFetched'], // this component can emit the event dataFetched that it is catched by this component itself\n\tprops: {\n\t\trefresh: { // to refresh this component\n\t\t\ttype: Boolean\n\t\t},\n\t\tapiFunction: { // the function to call, must return a Promise\n\t\t\trequired: true,\n\t\t\ttype: Function\n\t\t},\n\t\tapiFunctionParameters: {} // parameters for the apiFunction, type mixed, optional\n\t},\n\twatch: {\n\t\t/**\n\t\t * If the refresh property is changed then call fetchData\n\t\t */\n\t\trefresh: function (newValue, oldValue) {\n\t\t\tthis.fetchData();\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tloading: false, // if in loading or not\n\t\t\terror: false, // if an error occurred while loading data\n\t\t\terrorMessage: null // the error message\n\t\t};\n\t},\n\tcreated: function() {\n\t\tthis.fetchData();\n\t},\n\tmethods: {\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchData: function() {\n\t\t\tthis.loading = true; // loader started\n\t\t\tthis.error = false;\n\t\t\tthis.errorMessage = null;\n\n\t\t\t// Checks if the apifunction is a callable function\n\t\t\tif (typeof this.apiFunction == \"function\")\n\t\t\t{\n\t\t\t\t// Call the function stored in apiFunction\n\t \t\tlet apiFunctionResult = this.apiFunction(this.apiFunctionParameters);\n\n\t\t\t\t// It is expected that the function returns a Promise\n\t\t\t\tif (apiFunctionResult instanceof Promise)\n\t\t\t\t{\n\t\t\t\t\tapiFunctionResult\n\t\t\t\t\t\t.then(this.successHandler) // on success\n\t\t\t\t\t\t.catch(this.errorHandler) // on error\n\t\t\t\t\t\t.finally(this.finallyHandler); // finally in any case\n\t\t\t\t}\n\t\t\t\telse // otherwise display an error\n\t\t\t\t{\n\t\t\t\t\tthis.setError(\"The called apiFunction does not return a Promise\");\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // otherwise display an error\n\t\t\t{\n\t\t\t\tthis.setError(\"Property apiFunction is not a function\");\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsetError: function(errorMessage) {\n\t\t\tthis.loading = false; // loading ended\n\t\t\tthis.error = true; // error occurred\n\t\t\tthis.errorMessage = errorMessage; // save the error message\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsuccessHandler: function(response) {\n\t\t\tthis.$emit('dataFetched', response ? response.data : undefined); // trigger the event dataFetched\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\terrorHandler: function(error) {\n\t\t\tif (error.response?.data?.retval)\n\t\t\t\tthis.setError(error.response.data.retval);\n\t\t\telse if (error.data?.message)\n\t\t\t\tthis.setError(error.data.message);\n\t\t\telse\n\t\t\t\tthis.setError(error.message);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfinallyHandler: function() {\n\t\t\tthis.loading = false; // loading ended\n\t\t}\n\t},\n\ttemplate: `\n\t\t\n\t\t\t
Loading...
\n\t\t
\n\t\t\n\t\t\t
{{ errorMessage }}
\n\t\t
\n\t\t\n\t`\n};\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nconst FILTER_COMPONENT_NEW_FILTER = 'Filter Component New Filter';\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\tfilters: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tcolumns: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tfields: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t}\n\t},\n\temits: {\n\t\tswitchFilter: ['filterId'],\n\t\tapplyFilterConfig: ['filterFields'],\n\t\tsaveCustomFilter: ['customFilterName']\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tcurrentFields: []\n\t\t};\n\t},\n\tcomputed: {\n\t\ttypes() {\n\t\t\treturn this.columns.reduce((a,c) => {\n\t\t\t\tlet type = c.type.toLowerCase();\n\t\t\t\tif (type.indexOf('int') >= 0)\n\t\t\t\t\ta[c.name] = 'Numeric';\n\t\t\t\telse if (\n\t\t\t\t\ttype.indexOf('varchar') >= 0 || \n\t\t\t\t\ttype.indexOf('text') >= 0 || \n\t\t\t\t\ttype.indexOf('bpchar') >= 0\n\t\t\t\t)\n\t\t\t\t\ta[c.name] = 'Text';\n\t\t\t\telse if (\n\t\t\t\t\ttype.indexOf('timestamp') >= 0 || \n\t\t\t\t\ttype.indexOf('date') >= 0\n\t\t\t\t)\n\t\t\t\t\ta[c.name] = 'Date';\n\t\t\t\telse\n\t\t\t\t\ta[c.name] = '';\n\t\t\t\treturn a;\n\t\t\t}, {});\n\t\t}\n\t},\n\twatch: {\n\t\tfields(n) {\n\t\t\tthis.currentFields = n;\n\t\t}\n\t},\n\tmethods: {\n\t\tswitchFilter(evt) {\n\t\t\tthis.$emit('switchFilter', evt.currentTarget.value);\n\t\t},\n\t\tapplyFilterConfig() {\n\t\t\tconst filteredFields = this.currentFields.filter(el => el.name != FILTER_COMPONENT_NEW_FILTER);\n\t\t\tif (filteredFields.filter(el => el.condition == \"\").length)\n\t\t\t\talert(\"Please fill all the filter options\");\n\t\t\telse\n\t\t\t\tthis.$emit('applyFilterConfig', filteredFields);\n\t\t},\n\t\taddField(evt) {\n\t\t\tthis.currentFields.push({\n\t\t\t\tname: FILTER_COMPONENT_NEW_FILTER\n\t\t\t});\n\t\t},\n\t\tremoveField(index) {\n\t\t\tthis.currentFields.splice(index, 1);\n\t\t}\n\t},\n\ttemplate: `\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tFilter {{ index + 1 }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
\n\t`\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\tfields: Array,\n\t\tselected: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tnames: {\n\t\t\ttype: Object,\n\t\t\tdefault: {}\n\t\t}\n\t},\n\temits: {\n\t\thide: ['fieldName'],\n\t\tshow: ['fieldName']\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tselectedFields: []\n\t\t};\n\t},\n\twatch: {\n\t\tselected(n) {\n\t\t\tthis.selectedFields = n;\n\t\t}\n\t},\n\tmethods: {\n\t\ttoggle(field) {\n\t\t\tif (this.selectedFields.indexOf(field) != -1)\n\t\t\t{\n\t\t\t\tthis.selectedFields.splice(this.selectedFields.indexOf(field), 1);\n\t\t\t\tthis.$emit('hide', field);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.selectedFields.push(field);\n\t\t\t\tthis.$emit('show', field);\n\t\t\t}\n\t\t}\n\t},\n\ttemplate: `\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{{ names[fieldToDisplay] || fieldToDisplay }}\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
\n\t`\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nconst DEFAULT_ICONS = {\n\tjsonLines: 'fa-file-lines',\n\txlsx: 'fa-file-excel',\n\tpdf: 'fa-file-pdf',\n\thtml: 'fa-file-code',\n\tjson: 'fa-file',\n\tcsv: 'fa-file-csv'\n};\nconst DEFAULT_LABELS = {\n\tjsonLines: 'Download as JSONLINES',\n\txlsx: 'Download as XLSX',\n\tpdf: 'Download as PDF',\n\thtml: 'Download as HTML',\n\tjson: 'Download as JSON',\n\tcsv: 'Download as CSV '\n};\n\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\ttabulator: Object,\n\t\tconfig: {\n\t\t\ttype: [Boolean, String, Function, Array, Object],\n\t\t\tdefault: false\n\t\t},\n\t\ticonClass: [String, Array, Object]\n\t},\n\tcomputed: {\n\t\tcurrentConfig() {\n\t\t\tif (!this.config)\n\t\t\t\treturn false;\n\n\t\t\tlet config = this.config;\n\n\t\t\tif (config instanceof Function)\n\t\t\t\treturn [config];\n\n\t\t\tif (config === null)\n\t\t\t\treturn [];\n\n\t\t\tif (this.config === true)\n\t\t\t\tconfig = ['csv'];\n\n\t\t\tif (Object.prototype.toString.call(config) === \"[object String]\")\n\t\t\t\tconfig = config.split(',');\n\n\t\t\tif (typeof config === 'object' && !Array.isArray(config)) {\n\t\t\t\tlet newConfig = [];\n\t\t\t\tfor (var k in config) {\n\t\t\t\t\tvar v = config[k], type;\n\t\t\t\t\t\n\t\t\t\t\tif (!v)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\n\t\t\t\t\tif (Object.prototype.toString.call(v) === \"[object String]\") {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(v);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\tlabel: v === k ? DEFAULT_LABELS[type] : k,\n\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\t\tif(type !== null) {\n\t\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\t\tlabel: v,\n\t\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\talert('neither ' + k + ' nor ' + v + ' are supported download file types');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (typeof v === 'object' && !Array.isArray(v)) {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tif (v.formatter === undefined)\n\t\t\t\t\t\t\t\tv.formatter = type;\n\t\t\t\t\t\t\tif (v.label === undefined)\n\t\t\t\t\t\t\t\tv.label = DEFAULT_LABELS[type];\n\t\t\t\t\t\t\tif (v.icon === undefined)\n\t\t\t\t\t\t\t\tv.icon = DEFAULT_ICONS[type];\n\t\t\t\t\t\t\tnewConfig.push(v);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (v.label === undefined)\n\t\t\t\t\t\t\t\tv.label = k;\n\t\t\t\t\t\t\tnewConfig.push(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\tlabel: DEFAULT_LABELS[type],\n\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\talert(k + ' is not a supported download file type');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconfig = newConfig;\n\t\t\t}\n\n\t\t\tif (Array.isArray(config))\n\t\t\t{\n\t\t\t\tconfig = config.map(el => {\n\t\t\t\t\tif (Object.prototype.toString.call(el) === \"[object String]\") {\n\t\t\t\t\t\tlet formatter = this.stringToFileFormatter(el);\n\t\t\t\t\t\tif (formatter === null)\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[formatter],\n\t\t\t\t\t\t\tlabel: DEFAULT_LABELS[formatter],\n\t\t\t\t\t\t\tformatter\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (el instanceof Function)\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tformatter: el\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (typeof el === 'object' && !Array.isArray(el) && el !== null) {\n\t\t\t\t\t\tif (el.formatter instanceof Function)\n\t\t\t\t\t\t\treturn el;\n\t\t\t\t\t\tif (this.validateFileFormatter(el.formatter))\n\t\t\t\t\t\t\treturn el;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn null;\n\t\t\t\t}).filter(el => el !== null);\n\n\t\t\t\tif (config.length < 2)\n\t\t\t\t\treturn config;\n\n\t\t\t\tif (config.filter(el => el.label || el.icon).length == config.length)\n\t\t\t\t\treturn config;\n\n\t\t\t\talert('Config not valid');\n\t\t\t}\n\n\t\t\treturn [];\n\t\t}\n\t},\n\tmethods: {\n\t\tstringToFileFormatter(input) {\n\t\t\tlet lcInput = input.toLowerCase();\n\t\t\t\n\t\t\tif (lcInput == 'jsonlines')\n\t\t\t\treturn 'jsonLines';\n\t\t\t\n\t\t\tif (['xlsx', 'pdf', 'html', 'json', 'csv'].includes(lcInput))\n\t\t\t\treturn lcInput;\n\n\t\t\treturn null;\n\t\t},\n\t\tvalidateFileFormatter(input) {\n\t\t\tlet formatter = this.stringToFileFormatter(input);\n\t\t\tif (!formatter) {\n\t\t\t\talert(input + ' is not a supported file formatter');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (formatter == 'xlsx') {\n\t\t\t\tif (!window.XLSX) {\n\t\t\t\t\talert('XLSX Library not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (formatter == 'pdf') {\n\t\t\t\tif (!window.jspdf) {\n\t\t\t\t\talert('jsPDF Library not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar doc = new jspdf.jsPDF({});\n\t\t\t\tif (!doc.autoTable) {\n\t\t\t\t\talert('jsPDF-AutoTable Plugin not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tdownload(config) {\n\t\t\tthis.tabulator.download(config.formatter, config.file, config.options)\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t`\n};\n\n","const elementDataMap = new WeakMap();\n\nexport default {\n\tmounted(el, binding) {\n\t\tlet open = false;\n\t\telementDataMap.set(el, evt => {\n\t\t\tif (!open)\n\t\t\t\treturn;\n\n\t\t\tif (el.contains(evt.target))\n\t\t\t\treturn;\n\n\t\t\tconst collapse = bootstrap.Collapse.getInstance(el)\n\t\t\tif (collapse)\n\t\t\t\tcollapse.hide();\n\t\t});\n\t\tel.addEventListener('shown.bs.collapse', () => {\n\t\t\topen = true;\n\t\t});\n\t\tel.addEventListener('hide.bs.collapse', () => {\n\t\t\topen = false;\n\t\t});\n\t\tdocument.addEventListener('click', elementDataMap.get(el), true);\n\t},\n\tbeforeUnmount(el, binding) {\n\t\tdocument.removeEventListener('click', elementDataMap.get(el));\n\t\tdelete el.collapsibleAutoHideFunc;\n\t}\n}","/**\n * This may need changes if Tabulator gets updated!\n *\n * Current working Version: 5.5.2\n * \n * This is a copy of the fitDataStretch function. The only difference\n * is the check for frozen columns on line 22.\n */\n\nexport default window.Tabulator?.extendModule(\"layout\", \"modes\", {\n\tfitDataStretchFrozen(columns, forced) {\n\t\tvar colsWidth = 0,\n\t\ttableWidth = this.table.rowManager.element.clientWidth,\n\t\tgap = 0,\n\t\tlastCol = false;\n\n\t\tcolumns.forEach((column, i) => {\n\t\t\tif (!column.widthFixed) {\n\t\t\t\tcolumn.reinitializeWidth();\n\t\t\t}\n\n\t\t\tif (this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible && !column.definition.frozen) {\n\t\t\t\tlastCol = column;\n\t\t\t}\n\n\t\t\tif (column.visible) {\n\t\t\t\tcolsWidth += column.getWidth();\n\t\t\t}\n\t\t});\n\n\t\tif (lastCol){\n\t\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\n\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\t\tlastCol.setWidth(0);\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\n\t\t\tif (gap > 0) {\n\t\t\t\tlastCol.setWidth(gap);\n\t\t\t} else {\n\t\t\t\tlastCol.reinitializeWidth();\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\t\t}\n\t}\n});\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/saveCustomFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t};\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/removeCustomFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t};\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/applyFilterFields',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t};\n\t},\n\taddFilterField(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/addFilterField',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t};\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/removeFilterField',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t};\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/filter/getFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t};\n\t},\n\tgetFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/filter/getFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t};\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport {CoreFetchCmpt} from '../../components/Fetch.js';\nimport FilterConfig from './Filter/Config.js';\nimport FilterColumns from './Filter/Columns.js';\nimport TableDownload from './Table/Download.js';\nimport collapseAutoClose from '../../directives/collapseAutoClose.js';\n\nimport moduleLayoutFitDataStretchFrozen from '../../tabulator/layouts/fitDataStretchFrozen.js';\n\nimport ApiFilter from '../../api/factory/filter.js';\n\n//\nconst FILTER_COMPONENT_NEW_FILTER = 'Filter Component New Filter';\nconst FILTER_COMPONENT_NEW_FILTER_TYPE = 'Filter Component New Filter Type';\n\nvar _uuid = 0;\n\n/**\n *\n */\nexport const CoreFilterCmpt = {\n\tcomponents: {\n\t\tCoreFetchCmpt,\n\t\tFilterConfig,\n\t\tFilterColumns,\n\t\tTableDownload\n\t},\n\tdirectives: {\n\t\tcollapseAutoClose\n\t},\n\temits: [\n\t\t'nwNewEntry',\n\t\t'click:new',\n\t\t'tableBuilt',\n\t\t'uuidDefined'\n\t],\n\tprops: {\n\t\tonNwNewEntry: Function, // NOTE(chris): Hack to get the nwNewEntry listener into $props\n\t\ttitle: String,\n\t\tdescription: String,\n\t\tsideMenu: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tfilterType: {\n\t\t\ttype: String\n\t\t},\n\t\ttabulatorOptions: Object,\n\t\ttabulatorEvents: Array,\n\t\ttableOnly: Boolean,\n\t\tnoColumnFilter:Boolean,\n\t\treload: Boolean,\n\t\treloadBtnInfotext: String,\n\t\tdownload: {\n\t\t\ttype: [Boolean, String, Function, Array, Object],\n\t\t\tdefault: false\n\t\t},\n\t\tnewBtnShow: Boolean,\n\t\tnewBtnClass: [String, Array, Object],\n\t\tnewBtnDisabled: Boolean,\n\t\tnewBtnLabel: String,\n\t\tuniqueId: String,\n\n\t\tidField: String,\n\t\tparentIdField: String,\n\t\tcountOnly: Boolean,\n\t\tuseSelectionSpan: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tuuid: 0,\n\t\t\t// FilterCmpt properties\n\t\t\tfilterName: null,\n\t\t\tfilterActive: false,\n\t\t\tfields: null,\n\t\t\tdataset: null,\n\t\t\tdatasetMetadata: null,\n\t\t\tselectedFields: null,\n\t\t\tfilterFields: null,\n\n\t\t\tavailableFilters: null,\n\t\t\tselectedFilter: null,\n\n\t\t\t// FetchCmpt binded properties\n\t\t\tfetchCmptRefresh: false,\n\t\t\tfetchCmptApiFunction: null,\n\t\t\tfetchCmptApiFunctionParams: null,\n\t\t\tfetchCmptDataFetched: null,\n\n\t\t\tfetchResult: null,\n\n\t\t\ttabulator: null,\n\t\t\ttableBuilt: false,\n\t\t\ttabulatorHasSelector: false,\n\t\t\tselectedData: [],\n\t\t\tpersistence: {\n\t\t\t\tsort: true,\n\t\t\t\tcolumns: true,\n\t\t\t\tfilter: false,\n\t\t\t\theaderFilter: false,\n\t\t\t\tgroup: false,\n\t\t\t\tpage: false,\n\t\t\t}\n\t\t};\n\t},\n\tcomputed: {\n\t\tnotSelectedFields() {\n\t\t\tif (!this.fields || !this.selectedFields)\n\t\t\t\treturn null;\n\t\t\treturn this.fields.filter(x => this.selectedFields.indexOf(x) === -1)\n\t\t},\n\t\tfilteredData() {\n\t\t\tif (!this.dataset)\n\t\t\t\treturn [];\n\t\t\treturn JSON.parse(JSON.stringify(this.dataset));\n\t\t},\n\t\tfilteredColumns() {\n\t\t\tlet fields = JSON.parse(JSON.stringify(this.fields)) || [];\n\t\t\tlet selectedFields = JSON.parse(JSON.stringify(this.selectedFields)) || [];\n\n\t\t\tlet columns = null;\n\n\t\t\t// If the tabulator options has been provided and it contains the property columns\n\t\t\tif (this.tabulatorOptions && this.tabulatorOptions.hasOwnProperty('columns'))\n\t\t\t\tcolumns = this.tabulatorOptions.columns;\n\n\t\t\t// If columns is not an array or it is an array with less elements then the array fields\n\t\t\tif (!Array.isArray(columns) || (Array.isArray(columns) && columns.length < fields.length))\n\t\t\t{\n\t\t\t\tcolumns = []; // set it as an empty array\n\n\t\t\t\t// Loop throught all the retrieved columns from database\n\t\t\t\tfor (let field of fields)\n\t\t\t\t{\n\t\t\t\t\t// Create a new column having the title equal to the field name\n\t\t\t\t\tlet column = {\n\t\t\t\t\t\ttitle: field,\n\t\t\t\t\t\tfield: field\n\t\t\t\t\t};\n\n\t\t\t\t\t// If the column has to be displayed or not\n\t\t\t\t\tcolumn.visible = selectedFields.indexOf(field) >= 0;\n\n\t\t\t\t\t// Add the new column to the list of columns\n\t\t\t\t\tcolumns.push(column);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // the property columns has been provided in the tabulator options\n\t\t\t{\n\t\t\t\t// Loop throught the property columns of the tabulator options\n\t\t\t\tfor (let col of columns)\n\t\t\t\t{\n\t\t\t\t\t// If the column has to be displayed or not\n\t\t\t\t\t/* fields.indexOf(col.field) == -1; ensures displaying formatter colums\n\t\t\t\t\te.g. column with rowSelection checkboxes or with custom formatted action buttons */\n\t\t\t\t\tcol.visible = selectedFields.indexOf(col.field) >= 0 || fields.indexOf(col.field) == -1;\n\n\t\t\t\t\tif (col.hasOwnProperty('resizable'))\n\t\t\t\t\t\tcol.resizable = col.visible;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn columns;\n\t\t},\n\t\tfieldIdsForVisibilty() {\n\t\t\tif (!this.tableBuilt)\n\t\t\t\treturn [];\n\t\t\treturn this.tabulator.getColumns().filter(col => {\n\t\t\t\tlet def = col.getDefinition();\n\t\t\t\treturn !def.frozen && def.title && def.formatter != \"responsiveCollapse\";\n\t\t\t}).map(col => col.getField());\n\t\t},\n\t\tfieldNames() {\n\t\t\tif (!this.tableBuilt)\n\t\t\t\treturn {};\n\t\t\treturn this.tabulator.getColumns().reduce((res, col) => {\n\t\t\t\tres[col.getField()] = col.getDefinition().title;\n\t\t\t\treturn res;\n\t\t\t}, {});\n\t\t},\n\t\tidExtra() {\n\t\t\tif (!this.uuid)\n\t\t\t\treturn '';\n\t\t\treturn '-' + this.uuid;\n\t\t},\n\t\tcolumnsForFilter() {\n\t\t\tif (!this.filteredColumns || !this.datasetMetadata)\n\t\t\t\treturn [];\n\t\t\tconst filterTitles = this.filteredColumns.reduce((a,c) => {\n\t\t\t\ta[c.field] = c.title;\n\t\t\t\treturn a;\n\t\t\t}, {});\n\t\t\treturn this.datasetMetadata.map(el => ({...el, ...{title: filterTitles[el.name]}}));\n\t\t}\n\t},\n\tmethods: {\n\t\treloadTable() {\n\t\t\tif (this.tableOnly)\n\t\t\t\tthis.tabulator.setData();\n\t\t\telse\n\t\t\t\tthis.getFilter();\n\t\t},\n\t\tasync initTabulator() {\n\t\t\tlet placeholder = '< Phrasen Plugin not loaded! >';\n\t\t\tif (this.$p) {\n\t\t\t\tawait this.$p.loadCategory('ui');\n\t\t\t\tplaceholder = this.$p.t('ui/keineDatenVorhanden');\n\t\t\t}\n\n\t\t\tif (!this.tableOnly) {\n\t\t\t\t// prefetch data to get fields & selectedFields for filteredColumns & filteredData\n\t\t\t\tawait new Promise(resolve => {\n\t\t\t\t\tconst filterId = window.location.hash ? window.location.hash.slice(1) : null;\n\n\t\t\t\t\tconst resolvePromiseFunc = data => {\n\t\t\t\t\t\tthis.setRenderData(data);\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t};\n\t\t\t\t\t// get the filter data\n\t\t\t\t\tif (filterId === null)\n\t\t\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilter(wsParams)),\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tresolvePromiseFunc\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilterById(wsParams)),\n\t\t\t\t\t\t\t{ filterId },\n\t\t\t\t\t\t\tresolvePromiseFunc\n\t\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Define a default tabulator options in case it was not provided\n\t\t\tlet tabulatorOptions = {...{\n\t\t\t\t\tlayout: \"fitDataStretchFrozen\",\n\t\t\t\t\tmovableColumns: true,\n\t\t\t\t\tcolumnDefaults:{\n\t\t\t\t\t\ttooltip: true\n\t\t\t\t\t},\n\t\t\t\t\tplaceholder,\n\t\t\t\t\tpersistence: this.persistence,\n\t\t\t\t}, ...(this.tabulatorOptions || {})};\n\n\t\t\t// set default height if no height property is set\n\t\t\tif (tabulatorOptions.height === undefined &&\n\t\t\t\ttabulatorOptions.minHeight === undefined &&\n\t\t\t\ttabulatorOptions.maxHeight === undefined) {\n\t\t\t\ttabulatorOptions.height = 500;\n\t\t\t}\n\n\t\t\tif (!this.tableOnly) {\n\t\t\t\ttabulatorOptions.data = this.filteredData;\n\t\t\t\ttabulatorOptions.columns = this.filteredColumns;\n\t\t\t} else {\n\t\t\t\ttabulatorOptions.columns.forEach(col => {\n\t\t\t\t\tif (col.visible === undefined)\n\t\t\t\t\t\tcol.visible = true;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (tabulatorOptions.selectable || (tabulatorOptions.columns && tabulatorOptions.columns.filter(el => el.formatter == 'rowSelection').length))\n\t\t\t\tthis.tabulatorHasSelector = true;\n\n\t\t\tif (this.idField) {\n\t\t\t\t// enable nested tabulator if parent Id given\n\t\t\t\tif (this.parentIdField) tabulatorOptions.dataTree = true;\n\t\t\t\t// set tabulator index\n\t\t\t\ttabulatorOptions.index = this.idField;\n\t\t\t}\n\n\t\t\t// Start the tabulator with the build options\n\t\t\tthis.tabulator = new Tabulator(\n\t\t\t\tthis.$refs.table,\n\t\t\t\ttabulatorOptions\n\t\t\t);\n\t\t\t// If event handlers have been provided\n\t\t\tif (Array.isArray(this.tabulatorEvents) && this.tabulatorEvents.length > 0)\n\t\t\t{\n\t\t\t\t// Attach all the provided event handlers to the started tabulator\n\t\t\t\tfor (let evt of this.tabulatorEvents)\n\t\t\t\t\tthis.tabulator.on(evt.event, evt.handler);\n\t\t\t}\n\t\t\tthis.tabulator.on('tableBuilt', () => {this.tableBuilt = true; this.$emit('tableBuilt');});\n\t\t\tthis.tabulator.on(\"rowSelectionChanged\", data => {\n\t\t\t\tthis.selectedData = data;\n\t\t\t});\n\n\t\t\t// if nested tabulator, restructure data\n\t\t\tif (this.parentIdField && this.idField) {\n\t\t\t\tthis.tabulator.on(\"dataLoading\", data => {\n\t\t\t\t\tlet toDelete = [];\n\n\t\t\t\t\t// loop through all data\n\t\t\t\t\tfor (let childIdx = 0; childIdx < data.length; childIdx++)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet child = data[childIdx];\n\n\t\t\t\t\t\t// if it has parent id, it is a child\n\t\t\t\t\t\tif (child[this.parentIdField])\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// append the child on the right place. If parent found, mark original sw child on 0 level for deleting\n\t\t\t\t\t\t\tif (this.appendChild(data, child)) toDelete.push(childIdx);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// delete the marked children from 0 level\n\t\t\t\t\tfor (let counter = 0; counter < toDelete.length; counter++)\n\t\t\t\t\t{\n\t\t\t\t\t\t// decrease index by counter as index of data array changes after every deletion\n\t\t\t\t\t\tdata.splice(toDelete[counter] - counter, 1);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (this.tableOnly) {\n\t\t\t\tthis.tabulator.on('tableBuilt', () => {\n\t\t\t\t\tconst cols = this.tabulator.getColumns();\n\t\t\t\t\tthis.fields = cols.map(col => col.getField());\n\t\t\t\t\tthis.selectedFields = cols.filter(col => col.isVisible()).map(col => col.getField());\n\t\t\t\t\tif (this.tabulator.options.persistence.headerFilter)\n\t\t\t\t\t\tthis._setHeaderFilter();\n\t\t\t\t});\n\n\t\t\t}\n\n\t\t\tthis.tabulator.on(\"dataFiltered\", filters => {\n\t\t\t\tthis.filterActive = filters.length > 0;\n\t\t\t});\n\t\t},\n\t\tupdateTabulator() {\n\t\t\tif (this.tabulator) {\n\t\t\t\tif (this.tableBuilt)\n\t\t\t\t\tthis._updateTabulator();\n\t\t\t\telse\n\t\t\t\t\tthis.tabulator.on('tableBuilt', this._updateTabulator);\n\t\t\t}\n\t\t},\n\t\t_updateTabulator() {\n\t\t\tthis.tabulatorHasSelector = this.tabulatorOptions.selectable || this.filteredColumns.filter(el => el.formatter == 'rowSelection').length;\n\t\t\tthis.tabulator.setColumns(this.filteredColumns);\n\t\t\tthis.tabulator.setData(this.filteredData);\n\t\t\tthis._setHeaderFilter()\n\t\t},\n\t\tclearFilters()\n\t\t{\n\t\t\tlet existingFilters = this.tabulator.getHeaderFilters();\n\t\t\texistingFilters.forEach(filter => {\n\t\t\t\tthis.tabulator.setHeaderFilterValue(filter.field, \"\");\n\t\t\t});\n\t\t\tthis.tabulator.clearFilter();\n\t\t\tthis.filterActive = false;\n\t\t},\n\t\t_setHeaderFilter()\n\t\t{\n\t\t\tconst existingFilters = this.tabulator.getHeaderFilters();\n\t\t\texistingFilters.forEach(filter => {\n\t\t\t\tthis.tabulator.setHeaderFilterValue(filter.field, filter.value);\n\t\t\t});\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tgetFilter() {\n\t\t\tif (this.selectedFilter === null)\n\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilter(wsParams)),\n\t\t\t\t\tnull,\n\t\t\t\t\tthis.render\n\t\t\t\t);\n\t\t\telse\n\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilterById(wsParams)),\n\t\t\t\t\t{\n\t\t\t\t\t\tfilterId: this.selectedFilter\n\t\t\t\t\t},\n\t\t\t\t\tthis.render\n\t\t\t\t);\n\t\t},\n\t\tsetRenderData(data) {\n\t\t\tthis.fetchResult = data;\n\t\t\tthis.filterName = data.filterName;\n\t\t\tthis.dataset = data.dataset;\n\t\t\tthis.datasetMetadata = data.datasetMetadata;\n\n\t\t\tthis.fields = data.fields;\n\t\t\tthis.selectedFields = data.selectedFields;\n\t\t\tthis.filterFields = [];\n\n\t\t\tfor (let i = 0; i < data.datasetMetadata.length; i++)\n\t\t\t{\n\t\t\t\tfor (let j = 0; j < data.filters.length; j++)\n\t\t\t\t{\n\t\t\t\t\tif (data.datasetMetadata[i].name == data.filters[j].name)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet filter = data.filters[j];\n\t\t\t\t\t\tfilter.type = data.datasetMetadata[i].type;\n\n\t\t\t\t\t\tthis.filterFields.push(filter);\n\t\t\t\t\t\t//break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\trender(response) {\n\t\t\tlet data = response;\n\n\t\t\tthis.setRenderData(data);\n\n\t\t\t// If the side menu is active\n\t\t\tif (this.sideMenu === true)\n\t\t\t{\n\t\t\t\tthis.setSideMenu(data);\n\t\t\t}\n\t\t\telse // otherwise use the dropdown in the filter options\n\t\t\t{\n\t\t\t\tthis.setDropDownMenu(data);\n\t\t\t}\n\t\t\tthis.updateTabulator();\n\t\t},\n\t\t/**\n\t\t * Set the menu\n\t\t */\n\t\tsetSideMenu(data) {\n\t\t\tlet filters = data.sideMenu.filters;\n\t\t\tlet personalFilters = data.sideMenu.personalFilters;\n\t\t\tlet filtersArray = [];\n\n\t\t\tfor (let filtersCount = 0; filtersCount < filters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = filters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: filters[filtersCount].filter_id,\n\t\t\t\t\tlink: link + filters[filtersCount].filter_id,\n\t\t\t\t\tdescription: filters[filtersCount].desc,\n\t\t\t\t\tsort: filtersCount,\n\t\t\t\t\tonClickCall: this.handlerGetFilterById\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (let filtersCount = 0; filtersCount < personalFilters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = personalFilters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: personalFilters[filtersCount].filter_id,\n\t\t\t\t\tlink: link + personalFilters[filtersCount].filter_id,\n\t\t\t\t\tdescription: personalFilters[filtersCount].desc,\n\t\t\t\t\tsubscriptDescription: personalFilters[filtersCount].subscriptDescription,\n\t\t\t\t\tsubscriptLinkClass: personalFilters[filtersCount].subscriptLinkClass,\n\t\t\t\t\tsubscriptLinkValue: personalFilters[filtersCount].subscriptLinkValue,\n\t\t\t\t\tsort: filtersCount,\n\t\t\t\t\tonClickCall: this.handlerGetFilterById,\n\t\t\t\t\tonClickSubscriptCall: this.handlerRemoveCustomFilter\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.availableFilters = filtersArray;\n\n\t\t\tthis.$emit(\n\t\t\t\t'nwNewEntry',\n\t\t\t\t{\n\t\t\t\t\tlink: \"#\",\n\t\t\t\t\tdescription: \"Filters\",\n\t\t\t\t\ticon: \"filter\",\n\t\t\t\t\tchildren: filtersArray\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t * Set the drop down menu\n\t\t */\n\t\tsetDropDownMenu(data) {\n\t\t\tlet filters = data.sideMenu.filters;\n\t\t\tlet personalFilters = data.sideMenu.personalFilters;\n\t\t\tlet filtersArray = [];\n\n\t\t\tfor (let filtersCount = 0; filtersCount < filters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = filters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: filters[filtersCount].filter_id,\n\t\t\t\t\toption: filters[filtersCount].filter_id,\n\t\t\t\t\tdescription: filters[filtersCount].desc\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (let filtersCount = 0; filtersCount < personalFilters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = personalFilters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: personalFilters[filtersCount].filter_id,\n\t\t\t\t\toption: personalFilters[filtersCount].filter_id,\n\t\t\t\t\tdescription: personalFilters[filtersCount].desc\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.availableFilters = filtersArray;\n\t\t},\n\t\t/**\n\t\t * Used to start/refresh the FetchCmpt\n\t\t */\n\t\tstartFetchCmpt(apiFunction, apiFunctionParameters, dataFetchedCallback) {\n\t\t\t// Assign the function api of the FetchCmpt binded property\n\t\t\tthis.fetchCmptApiFunction = apiFunction;\n\n\t\t\t// In case a null value is provided set the parameters as an empty object\n\t\t\tif (apiFunctionParameters == null) apiFunctionParameters = {};\n\n\t\t\t// Always needed parameters\n\t\t\tapiFunctionParameters.filterUniqueId = FHC_JS_DATA_STORAGE_OBJECT.called_path + \"/\" + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\t\t\tapiFunctionParameters.filterType = this.filterType;\n\n\t\t\tif (this.uniqueId)\n\t\t\t\tapiFunctionParameters.filterUniqueId += '_' + this.uniqueId;\n\n\t\t\t// Assign parameters to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptApiFunctionParams = apiFunctionParameters;\n\t\t\t// Assign data fetch callback to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptDataFetched = dataFetchedCallback;\n\t\t\t// Set the FetchCmpt binded property refresh to have the component to refresh\n\t\t\t// NOTE: this should be the last one to be called because it triggers the FetchCmpt to start to refresh\n\t\t\tthis.fetchCmptRefresh === true ? this.fetchCmptRefresh = false : this.fetchCmptRefresh = true;\n\t\t},\n\n\t\t// ------------------------------------------------------------------------------------------------------------------\n\t\t// Event handlers\n\n\t\t/**\n\t\t *\n\t\t */\n\t\thandlerSaveCustomFilter(customFilterName) {\n\t\t\tthis.selectedFilter = null;\n\t\t\t//\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.saveCustomFilter(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tcustomFilterName\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\thandlerRemoveCustomFilter(event) {\n\t\t\tlet filterId = event.currentTarget.getAttribute(\"href\").substring(1);\n\t\t\tif (filterId === this.selectedFilter)\n\t\t\t\tthis.selectedFilter = null;\n\t\t\t//\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.removeCustomFilter(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tfilterId: filterId\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\n\t\t/*\n\t\t *\n\t\t */\n\t\thandlerGetFilterById: function(event) {\n\n\t\t\tlet filterId = null;\n\n\t\t\t// Get the attribute href if side menu is rendered\n\t\t\tlet attr = event.currentTarget.getAttribute(\"href\");\n\n\t\t\t// Otherwise get the value of the drop down menu\n\t\t\tif (attr == null)\n\t\t\t{\n\t\t\t\tfilterId = event.currentTarget.value;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfilterId = attr.substring(1);\n\t\t\t}\n\n\t\t\tthis.switchFilter(filterId);\n\t\t},\n\t\tswitchFilter(filterId) {\n\t\t\tthis.selectedFilter = filterId;\n\t\t\tthis.getFilter();\n\t\t},\n\t\tapplyFilterConfig(filterFields) {\n\t\t\tthis.selectedFilter = null;\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.applyFilterFields(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tfilterFields\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\n\t\t// append child to it's parent\n\t\tappendChild(data, child) {\n\t\t\t// get parent id\n\t\t\tlet parentId = child[this.parentIdField];\n\n\t\t\t// loop thorugh all data\n\t\t\tfor (let parentIdx = 0; parentIdx < data.length; parentIdx++)\n\t\t\t{\n\t\t\t\tlet parent = data[parentIdx];\n\n\t\t\t\t// if it's the parent\n\t\t\t\tif (parent[this.idField] == parentId)\n\t\t\t\t{\n\t\t\t\t\t// create children array if not done yet\n\t\t\t\t\tif (!parent._children) parent._children = [];\n\n\t\t\t\t\t// if child is not included in children array, append the child\n\t\t\t\t\tif (!parent._children.includes(child)) parent._children.push(child);\n\n\t\t\t\t\t// parent found\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t// search children for parents\n\t\t\t\telse if (parent._children) this.appendChild(parent._children, child);\n\t\t\t}\n\n\t\t\t// parent not found\n\t\t\treturn false;\n\t\t}\n\t},\n\tbeforeCreate() {\n\t\tif (!this.tableOnly == !this.filterType)\n\t\t\talert('You can not have a filter-type in table-only mode!');\n\t},\n\tcreated() {\n\t\tif (this.sideMenu && (!this.$props.onNwNewEntry || !(this.$props.onNwNewEntry instanceof Function)))\n\t\t\talert('\"nwNewEntry\" listener is mandatory when sideMenu is true');\n\t\tthis.uuid = _uuid++;\n\t\tthis.$emit('uuidDefined', this.uuid)\n\t},\n\tmounted() {\n\t\tthis.initTabulator().then(() => {\n\t\t\tif (!this.tableOnly) {\n\t\t\t\tthis.selectedFilter = window.location.hash ? window.location.hash.slice(1) : null;\n\t\t\t\tthis.render(this.fetchResult);\n\t\t\t}\n\t\t});\n\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t\t\n\n\t\t
\n\t\t\t
\n\t\t\t\t

\n\t\t\t\t\t{{ title }}\n\t\t\t\t

\n\t\t\t
\n\t\t
\n\t\t
\n\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{{ selectedData.length }} ausgewählt\n\t\t\t\t\t\t Mit {{ selectedData.length }} ausgewählten:\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t[ {{ filterName }} ]\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t
\n\n\t\t\n\t\t
\n\t`\n};\n","//import Phrasen from '../../plugin/Phrasen.js';\n\nexport default {\n\tname: 'BootstrapModal',\n\tdata: () => ({\n\t\tmodal: null,\n\t\tfullscreen: false\n\t}),\n\tprops: {\n\t\tbackdrop: {\n\t\t\ttype: [Boolean,String],\n\t\t\tdefault: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['static', true, false].includes(value);\n\t\t\t}\n\t\t},\n\t\tfocus: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tkeyboard: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tnoCloseBtn: Boolean,\n\t\tdialogClass: [String,Array,Object],\n\t\theaderClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tbodyClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: 'px-4 py-5'\n\t\t},\n\t\tfooterClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tallowFullscreenExpand: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\temits: [\n\t\t\"hideBsModal\",\n\t\t\"hiddenBsModal\",\n\t\t\"hidePreventedBsModal\",\n\t\t\"showBsModal\",\n\t\t\"shownBsModal\"\n\t],\n\tmethods: {\n\t\tdispose() {\n\t\t\treturn this.modal.dispose();\n\t\t},\n\t\thandleUpdate() {\n\t\t\treturn this.modal.handleUpdate();\n\t\t},\n\t\thide() {\n\t\t\treturn this.modal.hide();\n\t\t},\n\t\tshow(relatedTarget) {\n\t\t\treturn this.modal.show(relatedTarget);\n\t\t},\n\t\ttoggle() {\n\t\t\treturn this.modal.toggle();\n\t\t},\n\t\ttoggleFullscreen() {\n\t\t\tthis.fullscreen = !this.fullscreen\n\t\t}\n\t},\n\tmounted() {\n\t\tif (this.$refs.modal)\n\t\t\tthis.modal = new bootstrap.Modal(this.$refs.modal, {\n\t\t\t\tbackdrop: this.backdrop,\n\t\t\t\tfocus: this.focus,\n\t\t\t\tkeyboard: this.keyboard\n\t\t\t});\n\t},\n\tpopup(body, options, title, footer) {\n\t\tconst BsModal = this,\n\t\t\tslots = {};\n\t\tif (body !== undefined)\n\t\t\tslots.default = () => body;\n\t\tif (title !== undefined)\n\t\t\tslots.title = () => title;\n\t\tif (footer !== undefined)\n\t\t\tslots.footer = () => footer;\n\n\t\t// little hack to check whether primevue is included in the app or not\n\t\tlet includedPrimevue = false;\n\t\tif(typeof primevue !== 'undefined'){\n\t\t\tincludedPrimevue = true;\n\t\t}\n\n\t\treturn new Promise((resolve,reject) => {\n\t\t\tconst instance = Vue.createApp({\n\t\t\t\tname: 'ModalTmpApp',\n\t\t\t\tsetup() {\n\t\t\t\t\treturn () => Vue.h(BsModal, {...{\n\t\t\t\t\t\tclass: 'fade'\n\t\t\t\t\t},...options, ...{\n\t\t\t\t\t\tref: 'modal',\n\t\t\t\t\t\t'onHidden.bs.modal': instance.unmount\n\t\t\t\t\t}}, slots);\n\t\t\t\t},\n\t\t\t\tmounted() {\n\t\t\t\t\tthis.$refs.modal.show();\n\t\t\t\t\t\n\t\t\t\t},\n\t\t\t\tbeforeUnmount() {\n\t\t\t\t\tif (this.$refs.modal)\n\t\t\t\t\t\tthis.$refs.modal.result !== false ? resolve(this.$refs.modal.result) : reject();\n\t\t\t\t},\n\t\t\t\tunmounted() {\n\t\t\t\t\twrapper.parentElement.removeChild(wrapper);\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst wrapper = document.createElement(\"div\");\n\t\t\t\n\t\t\t// if(primevue) --> won't work because primevue is not defined in this scope and promise would be rejected\n\t\t\tif (includedPrimevue){\n\t\t\t\tinstance.use(primevue.config.default, {zIndex: {overlay: 9999}})\n\t\t\t}\n\t\t\t\t \n\t\t\t//instance.use(Phrasen); // TODO(chris): find a more dynamic way\n\t\t\timport('../../plugins/Phrasen.js').then((Phrasen) => {\n\t\t\t\tinstance.use(Phrasen.default);\n\t\t\t\tinstance.mount(wrapper);\n\t\t\t\tdocument.body.appendChild(wrapper);\n\t\t\t});\n\t\t});\n\t},\n\ttemplate: `
\n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
`\n}\n","export default{\n props:{\n view:String,\n data:Object,\n },\n data(){\n return {\n\n }\n },\n created(){\n\n }, \n template:/*html*/`\n\t\n`,\n};","export default {\n props:{\n data:Object,\n view:String,\n withZustelladresse:{\n type:Boolean,\n default:true,\n },\n },\n data(){\n return{}\n },\n created(){\n \n },\n template:/*html*/`\n \n
\n \n \n
\n \n
\n \n
\n
\n
{{$p.t('person','strasse')}}
\n {{data.strasse}} \n
\n
\n \n \n
\n
\n
{{$p.t('global','typ')}}
\n {{data.typ}} \n
\n
\n \n
\n
\n
{{$p.t('person','ort')}}
\n {{data.ort}} \n
\n
\n
\n
\n
{{$p.t('person','plz')}}
\n {{data.plz}} \n
\n
\n\n
\n
\n
{{$p.t('person','zustelladresse')}}
\n
\n \n
\n
\n
\n
\n`\n};","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\t//! API calls for profil update requests\n\tgetStatus() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/getStatus'\n\t\t};\n\t},\n\tgetTopic() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/getTopic'\n\t\t};\n\t},\n\tacceptProfilRequest({profil_update_id, uid, status_message, topic, requested_change}) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/acceptProfilRequest',\n\t\t\tparams: {\n\t\t\t\tprofil_update_id,\n\t\t\t\tuid,\n\t\t\t\tstatus_message,\n\t\t\t\ttopic,\n\t\t\t\trequested_change\n\t\t\t}\n\t\t};\n\t},\n\tdenyProfilRequest({profil_update_id, uid, topic, status_message}) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/denyProfilRequest',\n\t\t\tparams: {\n\t\t\t\tprofil_update_id,\n\t\t\t\tuid,\n\t\t\t\ttopic,\n\t\t\t\tstatus_message\n\t\t\t}\n\t\t};\n\t},\n\tinsertFile(dms, replace = null) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n\t\t\tparams: dms\n\t\t};\n\t},\n\tupdateProfilbild(dms) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: `/api/frontend/v1/ProfilUpdate/updateProfilbild`,\n\t\t\tparams: dms\n\t\t};\n\t},\n\tgetProfilUpdateWithPermission(filter) {\n\t\tconst url_filter = (filter !== '') ? '/' + encodeURIComponent(filter) : '';\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/getProfilUpdateWithPermission' + url_filter\n\t\t};\n\t},\n\tgetProfilRequestFiles(requestID) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`\n\t\t};\n\t},\n\tselectProfilRequest(uid = null, id = null) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/selectProfilRequest',\n\t\t\tparams: {\n\t\t\t\t...(uid ? { uid } : {}),\n\t\t\t\t...(id ? { id } : {})\n\t\t\t}\n\t\t};\n\t},\n\tinsertProfilRequest(topic, payload, fileID = null) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/insertProfilRequest',\n\t\t\tparams: {\n\t\t\t\ttopic,\n\t\t\t\tpayload,\n\t\t\t\t...(fileID ? { fileID } : {})\n\t\t\t}\n\t\t};\n\t},\n\tupdateProfilRequest(topic, payload, ID, fileID = null) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/updateProfilRequest',\n\t\t\tparams: {\n\t\t\t\ttopic,\n\t\t\t\tpayload,\n\t\t\t\tID,\n\t\t\t\t...(fileID ? { fileID } : {})\n\t\t\t}\n\t\t};\n\t},\n\tdeleteProfilRequest(requestID) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/deleteProfilRequest',\n\t\t\tparams: { requestID }\n\t\t};\n\t}\n};","import BsModal from \"../../Bootstrap/Modal.js\";\nimport Alert from \"../../Bootstrap/Alert.js\";\nimport Kontakt from \"../Profil/ProfilComponents/Kontakt.js\";\nimport Adresse from \"../Profil/ProfilComponents/Adresse.js\";\n\nimport ApiProfilUpdate from '../../../api/factory/profilUpdate.js';\n\nexport default {\n components: {\n BsModal,\n Kontakt,\n Adresse,\n },\n inject: [\"profilUpdateStates\"],\n mixins: [BsModal],\n props: {\n title: {\n type: String,\n },\n value: {\n type: Object,\n },\n setLoading: {\n type: Function,\n },\n\n /*\n * NOTE(chris):\n * Hack to expose in \"emits\" declared events to $props which we use\n * in the v-bind directive to forward all events.\n * @see: https://github.com/vuejs/core/issues/3432\n */\n onHideBsModal: Function,\n onHiddenBsModal: Function,\n onHidePreventedBsModal: Function,\n onShowBsModal: Function,\n onShownBsModal: Function,\n },\n data() {\n return {\n data: this.value,\n loading: false,\n result: false,\n info: null,\n files: null,\n };\n },\n\n methods: {\n getProfilStatus: async function () {\n return (\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/Cis/ProfilUpdate/show/${dms_id}`\n );\n },\n getDocumentLink: function (dms_id) {\n return (\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/Cis/ProfilUpdate/show/${dms_id}`\n );\n },\n handleRequest: function (type) {\n this.loading = true;\n this.setLoading(true);\n this.$api\n .call(ApiProfilUpdate[\n type.toLowerCase() == \"accept\"\n ? \"acceptProfilRequest\"\n : \"denyProfilRequest\"\n ](this.data))\n .then((res) => {\n this.result = true;\n })\n\t\t.catch((e) => this.$fhcAlert.handleSystemError)\n .finally(() => {\n\t\t this.setLoading(false);\n\t\t this.loading = false;\n this.hide();\n });\n },\n },\n\n computed: {\n getComponentView: function () {\n if (this.data.topic.toLowerCase().includes(\"kontakt\")) {\n return \"kontakt\";\n } else if (this.data.topic.toLowerCase().includes(\"adresse\")) {\n return \"adresse\";\n } else {\n return \"text_input\";\n }\n },\n },\n created() {\n // only fetching the profilUpdate Attachemnts if the profilUpdate actually has attachments\n if (this.value.attachment_id) {\n this.$api\n .call(ApiProfilUpdate.getProfilRequestFiles(\n this.data.profil_update_id\n ))\n .then((res) => {\n this.files = res.data;\n });\n }\n },\n mounted() {\n this.modal = this.$refs.modalContainer.modal;\n },\n popup(options) {\n return BsModal.popup.bind(this)(null, options);\n },\n template: /*html*/ `\n\n \n \n \n\n\n \n \n\n \n \n `,\n};\n","import BsModal from './Bootstrap/Modal.js';\n\nexport default {\n\tcomponents: {\n\t\tBsModal\n\t},\n\tprops: {\n\t\ttimeout: {\n\t\t\ttype: Number,\n\t\t\tdefault: 300\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tt: null,\n\t\t\tstate: 0\n\t\t}\n\t},\n\tmethods: {\n\t\tshow() {\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 0:\n\t\t\t\t\tif (this.timeout) {\n\t\t\t\t\t\tthis.state = 1;\n\t\t\t\t\t\tthis.t = window.setTimeout(() => this.$refs.modal.show(), this.timeout);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else\n\t\t\t\t\t\treturn this.$refs.modal.show();\n\t\t\t\tcase 4:\n\t\t\t\t\treturn window.setTimeout(() => this.show(), 1);\n\t\t\t}\n\t\t},\n\t\thide() {\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn window.clearTimeout(this.t);\n\t\t\t\tcase 2:\n\t\t\t\t\treturn window.setTimeout(() => this.hide(), 1);\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.$refs.modal.hide();\n\t\t\t}\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.$refs.modal.$refs.modal.addEventListener('show.bs.modal', () => {\n\t\t\tthis.state = 2;\n\t\t});\n\t\tthis.$refs.modal.$refs.modal.addEventListener('shown.bs.modal', () => {\n\t\t\tthis.state = 3;\n\t\t});\n\t\tthis.$refs.modal.$refs.modal.addEventListener('hide.bs.modal', () => {\n\t\t\tthis.state = 4;\n\t\t});\n\t\tthis.$refs.modal.$refs.modal.addEventListener('hidden.bs.modal', () => {\n\t\t\tthis.state = 0;\n\t\t});\n\t},\n\ttemplate: `\n\t\n\t\tLoading...\n\t`\n}","if (!primevue) {\n\tconsole.error('PrimeVue not loaded!');\n}\n\n// NOTE(chris): Click on clear button gives an error. This is a bug in primevue => fixed in current version\nTabulator.extendModule('filter', 'filters', {\n\t\"dates\": (headerValue, rowValue) => {\n\t\tif (!headerValue)\n\t\t\treturn true;\n\n\t\tlet rowDate = new Date(rowValue);\n\n\t\tif (Array.isArray(headerValue))\n\t\t{\n\t\t\tlet startDate = new Date(headerValue[0]);\n\t\t\tif (headerValue[1])\n\t\t\t{\n\t\t\t\tlet endDate = new Date(headerValue[1]);\n\n\t\t\t\tendDate.setHours(23, 59, 59, 999);\n\n\t\t\t\treturn rowDate >= startDate && rowDate <= endDate;\n\t\t\t}\n\n\t\t\treturn rowDate.toDateString() === startDate.toDateString();\n\t\t}\n\t\tlet singleDate = new Date(headerValue);\n\t\treturn rowDate.toDateString() === singleDate.toDateString();\n\t}\n});\n\nfunction dateFilter(cell, onRendered, success) {\n\tlet div = document.createElement('div');\n\n\tlet initialValue = null;\n\n\tlet val = cell.getValue();\n\n\tif (Array.isArray(val))\n\t{\n\t\tconst start = val[0] ? new Date(val[0]) : null;\n\t\tconst end = val[1] ? new Date(val[1]) : null;\n\t\tinitialValue = [start, end];\n\t}\n\n\tVue.createApp({\n\t\tcomponents: {\n\t\t\tPrimevueCalendar: primevue.calendar\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tval: initialValue\n\t\t\t}\n\t\t},\n\t\twatch: {\n\t\t\tval(n) {\n\t\t\t\tsuccess(n);\n\t\t\t}\n\t\t},\n\t\ttemplate: `\n\t\t\t\t `\n\t}).use(primevue.config.default).mount(div);\n\n\treturn div;\n}\nexport { dateFilter };","import { CoreFilterCmpt } from \"../../filter/Filter.js\";\nimport AcceptDenyUpdate from \"./AcceptDenyUpdate.js\";\nimport Alert from \"../../../components/Bootstrap/Alert.js\";\nimport Loading from \"../../../components/Loader.js\";\n\nimport ApiProfilUpdate from '../../../api/factory/profilUpdate.js';\nimport { dateFilter } from '../../../tabulator/filters/Dates.js';\n\nconst sortProfilUpdates = (ele1, ele2, thisPointer) => {\n let result = 0;\n if (ele1.status === thisPointer.profilUpdateStates[\"Pending\"]) {\n result = -1;\n } else if (ele1.status === thisPointer.profilUpdateStates[\"Accepted\"]) {\n result =\n ele2.status === thisPointer.profilUpdateStates[\"Rejected\"] ? -1 : 1;\n } else {\n result = 1;\n }\n\n if (ele1.status === ele2.status) {\n //? if they have the same status , insert_date gets compared for order\n result =\n new Date(ele2.insertamum.split(\".\").reverse().join(\"-\")) -\n new Date(ele1.insertamum.split(\".\").reverse().join(\"-\"));\n }\n return result;\n};\n\nexport default {\n components: {\n CoreFilterCmpt,\n Loading,\n AcceptDenyUpdate,\n },\n inject: [\"profilUpdateStates\"],\n props: {\n id: {\n type: String,\n },\n },\n data() {\n return {\n categoryLoaded: false,\n showModal: false,\n modalData: null,\n loading: false,\n filter: \"Pending\",\n profil_update_id: Number(this.id),\n\n };\n },\n\tcomputed: {\n\t\tprofilUpdateEvents: function () {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\t\"event\": \"dataProcessed\",\n\t\t\t\t\t\"handler\": this.handleDataProcessed\n\t\t\t\t}\n\t\t\t];\n\t\t},\n\t\tprofilUpdateOptions: function () {\n\t\t\treturn {\n\t\t\t\tajaxURL: 'dummy',\n\t\t\t\tajaxRequestFunc: (url, config, params) => {\n\t\t\t\t\treturn this.$api.call(ApiProfilUpdate.getProfilUpdateWithPermission(params.filter));\n\t\t\t\t},\n\t\t\t\tajaxParams: () => {\n\t\t\t\t\tlet filter = '';\n\t\t\t\t\tswitch (this.filter) {\n\t\t\t\t\t\tcase this.profilUpdateStates[\"Pending\"]:\n\t\t\t\t\t\t\tfilter = this.profilUpdateStates[\"Pending\"];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase this.profilUpdateStates[\"Accepted\"]:\n\t\t\t\t\t\t\tfilter = this.profilUpdateStates[\"Accepted\"];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase this.profilUpdateStates[\"Rejected\"]:\n\t\t\t\t\t\t\tfilter = this.profilUpdateStates[\"Rejected\"];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tfilter = '';\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\t\"filter\": filter\n\t\t\t\t\t};\n\t\t\t\t},\n ajaxResponse: (url, params, response) => {\n //url - the URL of the request\n //params - the parameters passed with the request\n //response - the JSON object returned in the body of the response.\n //? sorts the response data from the backend\n\t\t\t\t\tif (response?.data)\n\t\t\t\t\t\tresponse.data.sort((ele1, ele2) => sortProfilUpdates(ele1, ele2, this));\n\n\t\t\t\t\treturn response.data;\n },\n //? adds tooltip with the status message of a profil update request if its status is not pending\n columnDefaults: {\n tooltip: (e, cell, onRendered) => {\n //e - mouseover event\n //cell - cell component\n //onRendered - onRendered callback registration function\n let statusMessage = cell.getData().status_message;\n let statusDate = cell.getData().status_timestamp;\n let status = cell.getData().status;\n if (!statusMessage) {\n return null;\n }\n let el = document.createElement(\"div\");\n el.classList.add(\"border\", \"border-dark\");\n\n let statusDateEl = document.createElement(\"span\");\n statusDateEl.classList.add(\"d-block\", \"mb-1\");\n statusDateEl.innerHTML =\n \"Request was \" + status + \" on \" + statusDate;\n let statusMessageEl = document.createElement(\"span\");\n statusMessageEl.innerHTML = \"Status message: \" + statusMessage;\n\n el.appendChild(statusDateEl);\n el.appendChild(statusMessageEl);\n return el;\n },\n },\n rowContextMenu: (e, component) => {\n let menu = [];\n if (\n component.getData().status === this.profilUpdateStates[\"Pending\"]\n ) {\n menu.push(\n {\n label: ` ${this.$p.t(\n \"profilUpdate\",\n \"acceptUpdate\"\n )}`,\n action: (e, column) => {\n this.$api\n .call(ApiProfilUpdate.acceptProfilRequest(column.getData()))\n .then((res) => {\n this.$refs.UpdatesTable.tabulator.setData();\n })\n\t\t\t\t\t.catch((e) => this.$fhcAlert.handleSystemError);\n },\n },\n {\n separator: true,\n },\n {\n label: ` ${this.$p.t(\n \"profilUpdate\",\n \"denyUpdate\"\n )}`,\n action: (e, column) => {\n this.$api\n .call(ApiProfilUpdate.denyProfilRequest(column.getData()))\n .then((res) => {\n this.$refs.UpdatesTable.tabulator.setData();\n })\n\t\t\t\t\t.catch((e) => this.$fhcAlert.handleSystemError);\n },\n },\n {\n separator: true,\n },\n {\n label: ` ${this.$p.t(\n \"profilUpdate\",\n \"showRequest\"\n )}`,\n action: (e, column) => {\n this.showAcceptDenyModal(column.getData());\n },\n }\n );\n } else {\n menu.push({\n label: ` ${this.$p.t(\n \"profilUpdate\",\n \"showRequest\"\n )}`,\n action: (e, column) => {\n this.showAcceptDenyModal(column.getData());\n },\n });\n }\n return menu;\n },\n\n height: 600,\n layout: \"fitDataStretchFrozen\",\n\n columns: [\n {\n title: this.$p.t(\"profilUpdate\", \"UID\"),\n field: \"uid\",\n minWidth: 100,\n resizable: true,\n headerFilter: true,\n //responsive:0,\n },\n {\n title: this.$p.t(\"profilUpdate\", \"Name\"),\n field: \"name\",\n minWidth: 200,\n resizable: true,\n headerFilter: true,\n //responsive:0,\n },\n {\n title: this.$p.t(\"lehre\", \"studiengang\") + ' (' + this.$p.t(\"profil\", \"studentIn\") + ')',\n field: \"studiengang\",\n minWidth: 50,\n resizable: true,\n headerFilter: \"list\",\n headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:\"asc\"},\n //responsive:0,\n },\n {\n title: this.$p.t(\"lehre\", \"organisationsform\") + ' (' + this.$p.t(\"profil\", \"studentIn\") + ')',\n field: \"orgform\",\n minWidth: 50,\n resizable: true,\n headerFilter: \"list\",\n headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:\"asc\"},\n //responsive:0,\n },\n {\n title: this.$p.t(\"lehre\", \"organisationseinheit\") + ' (' + this.$p.t(\"profil\", \"mitarbeiterIn\") + ')',\n field: \"oezuordnung\",\n minWidth: 200,\n resizable: true,\n headerFilter: \"list\",\n headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:\"asc\"},\n //responsive:0,\n },\n {\n title: this.$p.t(\"profilUpdate\", \"Topic\"),\n field: \"topic\",\n resizable: true,\n minWidth: 200,\n headerFilter: \"list\",\n headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:\"asc\"},\n //responsive:0,\n },\n {\n title: this.$p.t(\"profilUpdate\", \"insertamum\"),\n field: \"insertamum_iso\",\n resizable: true,\n\t\t\theaderFilterFunc: 'dates',\n\t\t\theaderFilter: dateFilter,\n minWidth: 200,\n\t\t\tformatter:\"datetime\",\n\t\t\tformatterParams: this.datetimeFormatterParams(),\n //responsive:0,\n },\n {\n title: this.$p.t(\"profilUpdate\", \"Status\"),\n field: \"status_translated\",\n hozAlign: \"center\",\n headerFilter: \"list\",\n headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:\"asc\"},\n formatter: (cell, para) => {\n let iconClasses = \"\";\n let status = cell.getRow().getData().status;\n switch (status) {\n case this.profilUpdateStates[\"Pending\"]:\n iconClasses += \"fa fa-lg fa-circle-info text-info \";\n break;\n case this.profilUpdateStates[\"Accepted\"]:\n iconClasses += \"fa fa-lg fa-circle-check text-success \";\n break;\n case this.profilUpdateStates[\"Rejected\"]:\n iconClasses += \"fa fa-lg fa-circle-xmark text-danger \";\n break;\n }\n return `
${cell.getValue()}
`;\n },\n\n resizable: true,\n minWidth: 200,\n //responsive:0,\n },\n {\n title: this.$p.t(\"profilUpdate\", \"actions\"),\n headerSort: false,\n\t\t\tfrozen: true,\n formatter: (cell, params) => {\n let details = this.$p.t('global', 'details');\n let html = `
\n \n
`;\n\n // Convert the HTML string to an HTML node\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, \"text/html\");\n const node = doc.body.firstChild;\n\n // Add event listeners\n node\n .querySelector(\"#showButton\")\n .addEventListener(\"click\", () => {\n this.showAcceptDenyModal(cell.getRow().getData());\n });\n\n return node;\n },\n minWidth: 200,\n resizable: true,\n hozAlign: \"center\",\n },\n ],\n };\n }\n \n },\n methods: {\n denyProfilUpdate: function (data) {\n this.$api\n .call(ApiProfilUpdate.denyProfilRequest(data))\n .then((res) => {\n // block when the request was successful\n })\n\t\t.catch((e) => this.$fhcAlert.handleSystemError)\n .finally(() => {\n this.$refs.UpdatesTable.tabulator.setData();\n });\n },\n acceptProfilUpdate: function (data) {\n this.$api\n .call(ApiProfilUpdate.acceptProfilRequest(data))\n .then((res) => {\n // block when the request was successful\n })\n\t\t.catch((e) => this.$fhcAlert.handleSystemError)\n .finally(() => {\n // update the data inside the table\n this.$refs.UpdatesTable.tabulator.setData();\n });\n },\n setLoading: function (newValue) {\n this.loading = newValue;\n },\n hideAcceptDenyModal: function () {\n //? checks the AcceptDenyModal component property result, if the user made a successful request or not\n if (this.$refs.AcceptDenyModal.result) {\n //? refetches the data, if any request was denied or accepted\n //* setData will call the ajaxURL again to refresh the data\n\n this.$refs.UpdatesTable.tabulator.setData();\n } else {\n // when modal was closed without submitting request\n }\n this.showModal = false;\n this.modalData = null;\n },\n\n showAcceptDenyModal(value) {\n this.modalData = value;\n if (!this.modalData) {\n return;\n }\n this.showModal = true;\n\n // after a state change, wait for the DOM updates to complete\n Vue.nextTick(() => {\n this.$refs.AcceptDenyModal.show();\n });\n },\n\n updateData: function (event) {\n this.$refs.UpdatesTable.tabulator.setData();\n //? store the selected view in the session storage of the browser\n sessionStorage.setItem(\"filter\", event.target.value);\n\t\t},\n\t\thandleDataProcessed: function () {\n\t\t\tif (this.profil_update_id) {\n\t\t\t\tconst arrayRowData = this.$refs.UpdatesTable.tabulator\n\t\t\t\t\t.getData()\n\t\t\t\t\t.filter((row) => {\n\t\t\t\t\t\treturn row.profil_update_id === this.profil_update_id;\n\t\t\t\t\t});\n\t\t\t\tif (arrayRowData.length) {\n\t\t\t\t\tthis.showAcceptDenyModal(arrayRowData[0]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdatetimeFormatterParams: function() {\n\t\t\tconst params = {\n\t\t\t\tinputFormat:\"yyyy-MM-dd\",\n\t\t\t\toutputFormat:\"dd.MM.yyyy\",\n\t\t\t\tinvalidPlaceholder:\"(invalid date)\",\n\t\t\t\ttimezone:FHC_JS_DATA_STORAGE_OBJECT.timezone\n\t\t\t};\n\t\t\treturn params;\n\t\t}\n },\n watch: {\n loading: function (newValue, oldValue) {\n if (newValue) {\n this.$refs.loadingModalRef.show();\n } else {\n this.$refs.loadingModalRef.hide();\n }\n },\n },\n created() {\n this.$p.loadCategory([\"profilUpdate\", \"lehre\", \"profil\", \"global\"]).then(() => {\n this.categoryLoaded = true;\n });\n },\n\n mounted() {\n\t\t//? opens the AcceptDenyUpdate Modal if a preselected profil_update_id was passed to the component (used for email links)\n if (sessionStorage.getItem(\"filter\")) {\n this.filter = sessionStorage.getItem(\"filter\");\n }\n },\n template: /*html*/ `\n
\n \n \n
\n
{{$p.t('ui','anzeigen')}}
\n \n \n \n
\n \n \n \n\n
`,\n};\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsearch(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/search';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchAdvanced(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/searchAdvanced';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchdummy(searchsettings) {\n\t\tconst url = 'public/js/apps/api/dummyapi.php/Search';\n\t\treturn this.$fhcApi.post(url, searchsettings);\n\t}\n};\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/loadModule/' + category);\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst payload = {categories, language}\n\t\treturn this.$fhcApi.post('/api/frontend/v1/phrasen/setLanguage', payload);\n\t},\n\tgetLanguage() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getLanguage', {});\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getAllLanguages', {});\n\t}\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetHeader(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/header',\n\t\t\t{ navigation_page }\n\t\t);\n\t},\n\tgetMenu: function(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/menu',\n\t\t\t{ navigation_page }\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/saveCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t);\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/applyFilterFields',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t);\n\t},\n\taddFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/addFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tgetFilter(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tabmeldung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/abmeldung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(stdsem, prestudent_id, grund) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/abmeldung/createAntrag', {\n\t\t\t\tstudiensemester: stdsem,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\tif (!Array.isArray(antrag_id))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t\t{ antrag_id }\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag_id.map(antrag => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t{ antrag_id: antrag.studierendenantrag_id },\n\t\t\t\t{ errorHeader: '#' + antrag.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t},\n\tunterbrechung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/unterbrechung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(studiensemester, prestudent_id, grund, datum_wiedereinstieg, attachment) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/createAntrag', {\n\t\t\t\tstudiensemester,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund,\n\t\t\t\tdatum_wiedereinstieg,\n\t\t\t\tattachment\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/cancelAntrag', {\n\t\t\t\tantrag_id\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t}\n\t},\n\twiederholung: {\n\t\tgetDetails(prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/' + prestudent_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tgetLvs(antrag_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getLvs/' + antrag_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tcreate(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/createAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/cancelAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tsaveLvs(forbiddenLvs, mandatoryLvs) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/saveLvs', {\n\t\t\t\tforbiddenLvs,\n\t\t\t\tmandatoryLvs\n\t\t\t});\n\t\t}\n\t},\n\tleitung: {\n\t\tgetStgs() {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getActiveStgs');\n\t\t},\n\t\tgetAntraege(url, config, params) {\n\t\t\treturn this.$fhcApi\n\t\t\t\t.get('/api/frontend/v1/studstatus/leitung/getAntraege/' + url)\n\t\t\t\t.then(res => res.data); // Return data for tabulator\n\t\t},\n\t\tgetHistory(antrag_id) {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getHistory/' + antrag_id)\n\t\t},\n\t\tgetPrestudents(query, signal) {\n\t\t\treturn this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/getPrestudents',\n\t\t\t\t{ query },\n\t\t\t\t{\n signal: signal,\n timeout: 30000\n }\n\t\t\t);\n\t\t},\n\t\tapprove(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treopen(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tunpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tobject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tapproveObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tdenyObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t}\n};","export default {\n\n getView: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getView/${uid}`,{}\n );\n },\n\n fotoSperre: function (value) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/fotoSperre/${value}`,\n {}\n );\n \n },\n\n isStudent: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isStudent`,\n {\n uid:uid,\n }\n );\n },\n\n isMitarbeiter: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isMitarbeiter/${uid}`,\n {}\n );\n },\n\n getZustellAdresse: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellAdresse`,{}\n );\n },\n\n getZustellKontakt: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellKontakt`,{}\n );\n },\n\n getGemeinden: function(nation,zip){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getGemeinden/${nation}/${zip}`,\n {}\n );\n \n },\n getAllNationen:function(){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Profil/getAllNationen\",{}\n );\n },\n}","export default {\n //! API calls for profil update requests\n \n getStatus: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getStatus`,{});\n },\n \n getTopic: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getTopic`,{});\n },\n \n acceptProfilRequest: function ({profil_update_id, uid, status_message, topic, requested_change}) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/acceptProfilRequest\",{profil_update_id, uid, status_message, topic, requested_change});\n },\n \n denyProfilRequest: function ({profil_update_id, uid, topic, status_message}) {\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/denyProfilRequest\",{profil_update_id,uid,topic,status_message});\n },\n \n insertFile: function (dms, replace = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n dms);\n\n },\n \n getProfilRequestFiles: function (requestID) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`,{});\n },\n \n selectProfilRequest: function (uid = null, id = null) {\n\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/selectProfilRequest`,\n {...(uid?{uid}:{}),\n ...(id?{id}:{})\n });\n },\n \n insertProfilRequest: function (topic, payload, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/insertProfilRequest\",\n {\n topic,\n payload,\n ...(fileID ? { fileID } : {}),\n });\n },\n \n updateProfilRequest: function (topic, payload, ID, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/updateProfilRequest`,\n {\n topic,\n payload,\n ID,\n ...(fileID ? { fileID: fileID } : {}),\n });\n },\n \n deleteProfilRequest: function (requestID) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/deleteProfilRequest`,\n {\n requestID,\n });\n },\n };\n ","\nexport default {\n\tgetRoomInfo(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getRoomplan',\n\t\t\t{ ort_kurzbz, start_date, end_date}\n\t\t);\n\t},\n\tgetStunden() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/Stunden',\n\t\t\t{}\n\t\t);\n\t},\n\tgetOrtReservierungen(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/LvPlan/getReservierungen/${ort_kurzbz}`,\n\t\t\t{ start_date, end_date}\n\t\t);\n\t},\n\tgetLvPlanReservierungen(start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getReservierungen',\n\t\t\t{ start_date, end_date }\n\t\t);\n\t},\n\tgetLehreinheitStudiensemester(lehreinheit_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${lehreinheit_id}`,\n\t\t\t{}\n\t\t);\n\t},\n\tstudiensemesterDateInterval(date) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${date}`,\n\t\t\t{}\n\t\t);\n\t},\n\tLvPlanEvents(start_date, end_date, lv_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/LvPlanEvents',\n\t\t\t{ start_date, end_date, lv_id }\n\t\t);\n\t},\n\t\n\t\n};","import verband from './stv/verband.js';\nimport students from './stv/students.js';\nimport filter from './stv/filter.js';\nimport konto from './stv/konto.js';\nimport group from './stv/group.js';\nimport kontakt from './stv/kontakt.js';\nimport prestudent from './stv/prestudent.js';\nimport status from './stv/status.js';\nimport details from './stv/details.js';\nimport exam from './stv/exam.js';\nimport abschlusspruefung from './stv/abschlusspruefung.js';\nimport grades from './stv/grades.js';\nimport mobility from './stv/mobility.js';\nimport archiv from './stv/archiv.js';\nimport documents from './stv/documents.js';\nimport exemptions from './stv/exemptions.js';\nimport jointstudies from \"./stv/jointstudies.js\";\nimport courselist from './stv/courselist.js';\n\nexport default {\n\tverband,\n\tstudents,\n\tfilter,\n\tkonto,\n\tgroup,\n\tkontakt,\n\tprestudent,\n\tstatus,\n\tdetails,\n\texam,\n\tabschlusspruefung,\n\tgrades,\n\tmobility,\n\tarchiv,\n\tdocuments,\n\texemptions,\n\tjointstudies,\n\tcourselist,\n\tconfigStudent() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/student');\n\t},\n\tconfigStudents() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/students');\n\t}\n};\n","export default {\n\tget() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/verband');\n\t},\n\tfavorites: {\n\t\tget() {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/stv/favorites');\n\t\t},\n\t\tset(favorites) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/stv/favorites/set', {\n\t\t\t\tfavorites\n\t\t\t});\n\t\t}\n\t}\n}","export default {\n\tuid(uid, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/uid/'\n\t\t\t+ encodeURIComponent(uid);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tprestudent(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/prestudent/'\n\t\t\t+ encodeURIComponent(prestudent_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tperson(person_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/person/'\n\t\t\t+ encodeURIComponent(person_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tverband(relative_path) {\n\t\treturn this.$fhcApi.getUri('api/frontend/v1/stv/students/' + relative_path);\n\t}\n}","export default {\n\tgetStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/filter/getStg');\n\t},\n\tsetStg(studiengang_kz) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/filter/setStg', {\n\t\t\tstudiengang_kz\n\t\t});\n\t}\n};","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/konto/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id),\n\t\t\t\tonly_open: self.filter,\n\t\t\t\tstudiengang_kz: self.studiengang_kz_intern ? self.stg_kz : ''\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tcheckDoubles(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/checkDoubles', data, {\n\t\t\tconfirmErrorHandler: error => true\n\t\t});\n\t},\n\tinsert(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/insert', data);\n\t},\n\tcounter(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/counter', data);\n\t},\n\tedit(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/update', data);\n\t},\n\tdelete(buchungsnr) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/delete', {buchungsnr});\n\t},\n\tgetBuchungstypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/konto/getBuchungstypen');\n\t}\n};","export default {\n\tgetGruppen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/Gruppen/getGruppen/' + params.id);\n\t},\n\tdeleteGroup(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/Gruppen/deleteGruppe/', params);\n\t}\n}","export default {\n\t//------------- address.js-----------\n\tgetAdressen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressen/' + params.id);\n\t},\n\taddNewAddress(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewAddress/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadAddress(address_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadAddress/', {address_id});\n\t},\n\tupdateAddress(form, address_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateAddress/' + address_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteAddress(address_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteAddress/', {address_id});\n\t},\n\tgetPlaces(plz) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getPlaces/' + plz);\n\t},\n\tgetFirmen(searchString) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getFirmen/' + searchString);\n\t},\n\tgetNations() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getNations/');\n\t},\n\tgetAdressentypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressentypen/');\n\t},\n\n\t//------------- bankverbindung.js-----------\n\tgetBankverbindung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getBankverbindung/' + params.id);\n\t},\n\taddNewBankverbindung(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewBankverbindung/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadBankverbindung(bankverbindung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadBankverbindung/', {bankverbindung_id});\n\t},\n\tupdateBankverbindung(form, bankverbindung_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateBankverbindung/' + bankverbindung_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteBankverbindung(bankverbindung_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteBankverbindung/', {bankverbindung_id});\n\t},\n\n\t//------------- contact.js-----------\n\tgetKontakte (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakte/' + params.id);\n\t},\n\taddNewContact(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewContact/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadContact(kontakt_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadContact/', {kontakt_id});\n\t},\n\tupdateContact(form, kontakt_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateContact/' + kontakt_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteContact(kontakt_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteContact/', {kontakt_id});\n\t},\n\tgetStandorteByFirma(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getStandorteByFirma/' + searchString);\n\t},\n\tgetKontakttypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakttypen/');\n\t}\n};","export default {\n\n//------------- Prestudent.js------------------------------------------------------\n\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\treturn \tthis.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/prestudent/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t);\n\t},\n\tupdatePrestudent(form, prestudent_id, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/prestudent/updatePrestudent/' + prestudent_id,\n\t\t\tdata\n\t\t);\n\t},\n\tgetBezeichnungZGV() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungZGV/');\n\t},\n\tgetBezeichnungMZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungMZgv/');\n\t},\n\tgetBezeichnungDZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungDZgv/');\n\t},\n\tgetStgs() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStgs/');\n\t},\n\tgetAusbildung() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAusbildung/');\n\t},\n\tgetAufmerksamdurch() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAufmerksamdurch/');\n\t},\n\tgetBerufstaetigkeit() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBerufstaetigkeit/');\n\t},\n\tgetTypenStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getTypenStg/');\n\t},\n\tgetBisstandort() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBisstandort/');\n\t},\n\n//------------- MultiStatus.js------------------------------------------------------\n\tgetHistoryPrestudent (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getHistoryPrestudent/' + params.id);\n\t},\n\tgetMaxSem(studiengang_kzs) {\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/status/getMaxSemester/', {studiengang_kzs});\n\t},\n\tadvanceStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/advanceStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tconfirmStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/confirmStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tisLastStatus(id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/isLastStatus/' + id);\n\t},\n\tdeleteStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/deleteStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tgetLastBismeldestichtag() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getLastBismeldestichtag/');\n\t},\n\n//------------- History.js------------------------------------------------------\n\tgetHistoryPrestudents (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getHistoryPrestudents/' + params.id);\n\t},\n\n}","export default {\n\n//------------- Modal.js------------------------------------------------------\n\n\tinsertStatus(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/status/insertStatus/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/status/loadStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tupdateStatus(form, {prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}, data) {\n\t\treturn this.$fhcApi.post(\n\t\t\tform,\n\t\t\t'api/frontend/v1/stv/status/updateStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester,\n\t\t\tdata\n\t\t);\n\t},\n\tgetStudienplaene(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudienplaene/' + prestudent_id);\n\t},\n\tgetStudiengang(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudiengang/' + prestudent_id);\n\t},\n\tgetStatusgruende() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusgruende/');\n\t},\n\tgetStati() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStati/');\n\t},\n\n//------------- Dropdown.js------------------------------------------------------\n\n\taddStudent(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/addStudent/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tchangeStatus(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/changeStatus/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tgetStatusarray() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusarray/');\n\t}\n}","export default {\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/student/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(url);\n\t},\n\tsave(form, prestudent_id, studiensemester_kurzbz, data) {\n\t\tlet url = 'api/frontend/v1/stv/student/save/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(form, url, data);\n\t},\n}\n","export default {\n\tgetPruefungen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getPruefungen/' + params.id);\n\t},\n\tloadPruefung(pruefung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/loadPruefung/' + pruefung_id);\n\t},\n\tgetTypenPruefungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getTypenPruefungen');\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/getAllLehreinheiten/', data)\n\t},\n\tgetLvsByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsByStudent/' + uid)\n\t},\n\tgetLvsandLesByStudent(uid, semester){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsandLesByStudent/' + uid + '/' + semester);\n\t},\n\tgetLvsAndMas(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsAndMas/' + uid)\n\t},\n\tgetMitarbeiterLv(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getMitarbeiterLv/' + id)\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getNoten');\n\t},\n\tcheckZeugnisnoteLv(data){\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/', data)\n\t},\n\taddPruefung(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/insertPruefung/', data);\n\t},\n\tupdatePruefung(form, id, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/updatePruefung/' + id, data);\n\t},\n\tdeletePruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/deletePruefung/' + id)\n\t}\n}","export default {\n\n\tgetAbschlusspruefung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/' + params.id);\n\t},\n\taddNewAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/', data\n\t\t);\n\t},\n\tloadAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/', {id});\n\t},\n\tupdateAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/', data\n\t\t);\n\t},\n\tdeleteAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/', {id});\n\t},\n\tgetTypenAbschlusspruefung(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/');\n\t},\n\tgetTypenAntritte(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/');\n\t},\n\tgetBeurteilungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/');\n\t},\n\tgetAkadGrade(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getAkadGrade/', {studiengang_kz});\n\t},\n\tgetTypStudiengang(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/', {studiengang_kz});\n\t},\n\tgetMitarbeiter(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/' + searchString);\n\t},\n\tgetPruefer(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getPruefer/' + searchString);\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getNoten/');\n\t},\n\tcheckForExistingExams(uids) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/', {uids}\n\t\t);\n\t}\n}","export default {\n\tlist() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/grades/list');\n\t},\n\tgetCertificate(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getCertificate/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetTeacherProposal(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getTeacherProposal/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetRepeaterGrades(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getRepeaterGrades/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tupdateCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, note, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/updateCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz,\n\t\t\t\tnote\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tdeleteCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/deleteCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyTeacherProposalToCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyTeacherProposalToCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id, lv_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate',\n\t\t\t{\n\t\t\t\tstudierendenantrag_lehrveranstaltung_id\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lv_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tgetGradeFromPoints(points, lehrveranstaltung_id, studiensemester_kurzbz, manualErrorHandling) {\n\t\tconst config = manualErrorHandling ? {errorHandling: false} : {};\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/grades/getGradeFromPoints',\n\t\t\t{\n\t\t\t\t\"points\": points,\n\t\t\t\t\"lehrveranstaltung_id\": lehrveranstaltung_id,\n\t\t\t\t\"studiensemester_kurzbz\": studiensemester_kurzbz\n\t\t\t},\n\t\t\tconfig\n\t\t\t);\n\t}\n}","export default {\n\tgetMobilitaeten (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getMobilitaeten/' + params.id);\n\t},\n\tgetProgramsMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getProgramsMobility/');\n\t},\n\taddNewMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/insertMobility/', data);\n\t},\n\tloadMobility(bisio_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/loadMobility/' + bisio_id);\n\t},\n\tupdateMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/updateMobility/', data);\n\t},\n\tdeleteMobility(bisio_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobility/' + bisio_id);\n\t},\n\tgetLVList(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLVList/' + studiengang_kz);\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/getAllLehreinheiten/', data)\n\t},\n\tgetLvsandLesByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLvsandLesByStudent/' + uid);\n\t},\n\tgetPurposes(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getPurposes/' + params.id);\n\t},\n\tgetSupports(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getSupports/' + params.id);\n\t},\n\tgetListPurposes() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListPurposes/');\n\t},\n\tgetListSupports() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListSupports/');\n\t},\n\tdeleteMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilityPurpose/' + params.bisio_id, params);\n\t},\n\taddMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilityPurpose/' + params.bisio_id, params);\n\t},\n\tdeleteMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilitySupport/' + params.bisio_id, params);\n\t},\n\taddMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilitySupport/' + params.bisio_id, params);\n\t},\n\n}","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/archiv/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id)\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tgetArchivVorlagen() {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/getArchivVorlagen');\n\t},\n\tarchive(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archive',\n\t\t\tdata\n\t\t);\n\t},\n\tarchiveSigned(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archiveSigned',\n\t\t\tdata\n\t\t);\n\t},\n\tupdate(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/update', data);\n\t},\n\tdelete({akte_id, studiengang_kz}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/delete', {akte_id, studiengang_kz});\n\t}\n};\n","export default {\n\tgetDocumentsUnaccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tgetDocumentsAccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsAccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tdeleteZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteZuordnung/' + params.prestudent_id + '/' + params.dokument_kurzbz);\n\t},\n\tcreateZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/createZuordnung/'\n\t\t\t+ params.prestudent_id + '/'\n\t\t\t+ params.dokument_kurzbz);\n\t},\n\tloadAkte(akte_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/loadAkte/' + akte_id);\n\t},\n\tgetDoktypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDoktypen/');\n\t},\n\tupdateFile(akte_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/updateAkte/' + akte_id,\n\t\t\tdata);\n\t},\n\tdeleteFile(akte_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteAkte/' + akte_id);\n\t},\n\tuploadFile(prestudent_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/uploadDokument/' + prestudent_id,\n\t\t\tdata);\n\t},\n}","export default {\n\tgetAnrechnungen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getAnrechnungen/' + params.id);\n\t},\n\tgetLehrveranstaltungen(prestudent_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/' + prestudent_id);\n\t},\n\tgetBegruendungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getBegruendungen/');\n\t},\n\tgetLvsKompatibel(lv_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLvsKompatibel/' + lv_id);\n\t},\n\tgetLektoren(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLektoren/' + studiengang_kz);\n\t},\n\taddNewAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/insertAnrechnung/', data);\n\t},\n\tloadAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/loadAnrechnung/' + anrechnung_id);\n\t},\n\teditAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/updateAnrechnung/', data);\n\t},\n\tdeleteAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/anrechnungen/deleteAnrechnung/' + anrechnung_id);\n\t},\n}","export default {\n\tgetStudies(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudien/' + params.id);\n\t},\n\tgetTypenMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/');\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/');\n\t},\n\tgetStudyprograms(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/');\n\t},\n\tgetListPartner(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/');\n\t},\n\tgetStatiPrestudent(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/');\n\t},\n\tloadStudy(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/loadStudie/' + id);\n\t},\n\tinsertStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/insertStudie/', data);\n\t},\n\tupdateStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/updateStudie/', data);\n\t},\n\tdeleteStudy(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/GemeinsameStudien/deleteStudie/' + id);\n\t},\n\n}","export default {\n\tgetCourselist(url, config, params) {\n\t\t//corresponding logic controller Stundenplan.php\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStundenplan/'\n\t\t\t+ params.student_uid + '/'\n\t\t\t+ params.start_date + '/'\n\t\t\t+ params.end_date + '/'\n\t\t\t+ params.group_consecutiveHours + '/'\n\t\t\t+ params.dbStundenplanTable\n\t\t);\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStudiensemester/');\n\t},\n}","import person from \"./notiz/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetNotizen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getUid/');\n\t},\n\taddNewNotiz(form, id, formData) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(form, notiz_id, formData){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getMitarbeiter/' + event);\n\t},\n\tisBerechtigt(id, type_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/isBerechtigt/');\n\t}\n}","import person from \"./betriebsmittel/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetAllBetriebsmittel(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/' + params.type + '/' + params.id);\n\t},\n\taddNewBetriebsmittel(form, person_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/' +\n\t\t\tperson_id, formData\n\t\t);\n\t},\n\tloadBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/' + betriebsmittelperson_id);\n\t},\n\tupdateBetriebsmittel(form, betriebsmittelperson_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/' + betriebsmittelperson_id,\n\t\t\tformData);\n\t},\n\tdeleteBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/' +\tbetriebsmittelperson_id);\n\t},\n\tgetTypenBetriebsmittel(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/');\n\t},\n\tloadInventarliste(query){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/' +\tquery);\n\t}\n}","export default {\n\tupdatePersonUnrulyStatus(person_id, unrulyParam) {\n\n\t\ttry {\n\t\t\tconst payload = {person_id, unruly: unrulyParam}\n\t\t\tconst url = '/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus';\n\t\t\treturn this.$fhcApi.post(url, payload, null);\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t},\n\tfilterPerson(payload, base = ''){\n\n\t\ttry {\n\t\t\tconst url = base + '/api/frontend/v1/checkperson/CheckPerson/filterPerson';\n\t\t\treturn axios.post(url, payload)\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t}\n}","export default {\n getContentID(ort_kurbz) {\n\t\treturn this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Ort/ContentID\",\n\t\t\t{ ort_kurzbz: ort_kurbz }\n\t\t);\n\t},\n\tgetRooms(datum, von, bis, typ, personenanzahl = 0) {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getRooms\",\n\t\t\t{ datum, von, bis, typ, personenanzahl }\n\t\t);\n\t},\n\tgetRoomTypes() {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getTypes\"\n\t\t);\n\t}\n}","export default {\n content(content_id, version=null, sprache=null, sichtbar=null) {\n return this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/content\",\n\t\t\t{ \n\t\t\t\tcontent_id: content_id,\n\t\t\t\t...(version?{version}:{}),\n\t\t\t\t...(sprache?{sprache}:{}),\n\t\t\t\t...(sichtbar?{sichtbar}:{}),\n }\n );\n },\n\t//api function used for the news View that renders the html\n\tgetNews(page = 1, page_size = 10, sprache) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNews\",\n\t\t\t{\n\t\t\t\tpage,\n\t\t\t\tpage_size,\n\t\t\t\tsprache,\n\t\t\t},\n\t\t);\n\t},\n\t//api function used for the widget component\n\tnews(limit) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/news\",\n\t\t\t{\n\t\t\t\tlimit: limit\n\t\t\t}\n\t\t);\n\t},\n\tgetNewsRowCount: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNewsRowCount\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetNewsExtra: function(){\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getStudiengangInfoForNews\",\n\t\t\t{}\n\t\t);\n\t}\n }","export default {\n getStudentenMail(lehreinheit_id) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Lehre/lvStudentenMail\",\n { lehreinheit_id: lehreinheit_id }\n );\n },\n\tgetLvInfo(studiensemester_kurzbz, lehrveranstaltung_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/LV/${studiensemester_kurzbz}/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentPruefungen(lehrveranstaltung_id){\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentProjektarbeiten(uid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getStudentProjektarbeiten/${uid}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentProjektabgaben(detail) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getStudentProjektabgaben`\n\t\t\t, {\n\t\t\t\tprojektarbeit_id: detail.projektarbeit_id,\n\t\t\t\tstudent_uid: detail.student_uid\n\t\t\t}\n\t\t);\n\t},\n\tpostStudentProjektarbeitEndupload(formData) {\n\t\tconst url = '/api/frontend/v1/Lehre/postStudentProjektarbeitEndupload';\n\t\tconst headers = {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\treturn this.$fhcApi.post(url, formData, headers)\n\t},\n\tpostStudentProjektarbeitZwischenabgabe(formData) {\n\t\tconst url = '/api/frontend/v1/Lehre/postStudentProjektarbeitZwischenabgabe';\n\t\tconst headers = {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\treturn this.$fhcApi.post(url, formData, headers)\n\t},\n\tgetStudentProjektarbeitAbgabeFile(paabgabe_id, student_uid) {\n\t\tconst url = `/Cis/Abgabetool/getStudentProjektarbeitAbgabeFile?paabgabe_id=${paabgabe_id}&student_uid=${student_uid}`;\n\n\t\twindow.location = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + url\n\t},\n\tgetMitarbeiterProjektarbeiten(uid, all) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getMitarbeiterProjektarbeiten?showall=${all}`\n\t\t\t, {}\n\t\t);\n\t},\n\tpostProjektarbeitAbgabe(termin) {\n\t\tconst payload = {\n\t\t\tpaabgabe_id: termin.paabgabe_id,\n\t\t\tpaabgabetyp_kurzbz: termin.bezeichnung.paabgabetyp_kurzbz,\n\t\t\tdatum: termin.datum,\n\t\t\tfixtermin: termin.fixtermin,\n\t\t\tinsertvon: termin.insertvon,\n\t\t\tkurzbz: termin.kurzbz,\n\t\t\tprojektarbeit_id: termin.projektarbeit_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/postProjektarbeitAbgabe';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t\t\n\t},\n\tdeleteProjektarbeitAbgabe(paabgabe_id) {\n\t\tconst payload = {\n\t\t\tpaabgabe_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/deleteProjektarbeitAbgabe';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t},\n\tpostSerientermin(datum, paabgabetyp_kurzbz, bezeichnung, kurzbz, projektarbeit_ids) {\n\t\tconst payload = {\n\t\t\tdatum, paabgabetyp_kurzbz, bezeichnung, kurzbz, projektarbeit_ids\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/postSerientermin';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t},\n\tfetchDeadlines(person_id) {\n\t\tconst payload = {\n\t\t\tperson_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/fetchDeadlines';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t}\n }","export default {\n getLvMenu(lvid, studiensemester_kurzbz) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/LvMenu/getLvMenu/${lvid}/${studiensemester_kurzbz}`,\n {}\n );\n },\n\n \n }","import person from \"./messages/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\t\tgetMessages(url, config, params) {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessages/' + params.id + '/' + params.type + '/' + params.size + '/' + params.page);\n\t\t},\n\t\tgetVorlagen(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagen/');\n\t\t},\n\t\tgetMsgVarsLoggedInUser(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/');\n\t\t},\n\t\tgetMessageVarsPerson(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessageVarsPerson/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetMsgVarsPrestudent(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsPrestudent/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPersonId(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getPersonId/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetUid(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getUid/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetVorlagentext(vorlage_kurzbz){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagentext/' + vorlage_kurzbz);\n\t\t},\n\t\tgetNameOfDefaultRecipient(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getNameOfDefaultRecipient/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPreviewText(params, data){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/getPreviewText/' + params.id + '/' + params.type_id,\n\t\t\t\tdata);\n\t\t},\n\t\tgetReplyData(messageId){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getReplyData/' + messageId);\n\t\t},\n\t\tsendMessageFromModalContext(form, id, data) {\n\t\t\treturn this.$fhcApi.post(form,'api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tsendMessage(id, data) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tdeleteMessage(messageId){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/deleteMessage/' + messageId);\n\t\t}\n}","export default {\n\tgetVorlagen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagen/');\n\t},\n\tgetVorlagenByLoggedInUser() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/');\n\t}\n}","export default {\n\n\tgetStudiensemester: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/components/Cis/Mylv/Studiensemester',\n\t\t\t{}\n\t\t);\n\t},\n\n\tgetAllStudienSemester: function (studiensemester=undefined, studiengang=undefined, semester=undefined, studienplan=undefined) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/Studium/getStudienAllSemester',\n\t\t\t{studiensemester, studiengang, semester, studienplan}\n\t\t);\n\t},\n\n\tgetStudiengaengeForStudienSemester: function (studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${studiensemester}`,\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudienplaeneBySemester: function (studiengang, studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudienplaeneBySemester`,\n\t\t\t{\n\t\t\t\tstudiengang,\n\t\t\t\tstudiensemester,\n\t\t\t}\n\t\t);\n\t},\n\tgetLvPlanForStudiensemester: function (studiensemester, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${studiensemester}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\tgetLvEvaluierungInfo: function (studiensemester_kurzbz, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getLvEvaluierungInfo/${studiensemester_kurzbz}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\t\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport search from \"./search.js\";\nimport phrasen from \"./phrasen.js\";\nimport navigation from \"./navigation.js\";\nimport filter from \"./filter.js\";\nimport studstatus from \"./studstatus.js\";\nimport profil from \"./profil.js\";\nimport profilUpdate from \"./profilUpdate.js\";\nimport lvPlan from \"./lvPlan.js\";\nimport bookmark from \"./bookmark.js\";\nimport stv from \"./stv.js\";\nimport notiz from \"./notiz.js\";\nimport betriebsmittel from \"./betriebsmittel.js\";\nimport checkperson from \"./checkperson.js\";\nimport ampeln from \"./ampeln.js\";\nimport ort from \"./ort.js\";\nimport cms from \"./cms.js\";\nimport lehre from \"./lehre.js\";\nimport addons from \"./addons.js\";\nimport messages from \"./messages.js\";\nimport vorlagen from \"./vorlagen.js\";\nimport studiengang from \"./studiengang.js\";\nimport menu from \"./menu.js\";\nimport dashboard from \"./dashboard.js\";\nimport authinfo from \"./authinfo.js\";\nimport studium from \"./studium.js\";\nimport language from \"./language.js\";\n\nexport default {\n search,\n phrasen,\n navigation,\n dashboard,\n filter,\n studstatus,\n profil,\n profilUpdate,\n lvPlan,\n bookmark,\n stv,\n notiz,\n betriebsmittel,\n checkperson,\n ampeln,\n ort,\n cms,\n lehre,\n addons,\n messages,\n vorlagen,\n addons,\n\tstudiengang,\n\tmenu,\n\tauthinfo,\n\tstudium,\n language\n};\n","export default {\n\tasync getViewData() {\n\t\tconst url = `/api/frontend/v1/Cis4FhcApi/getViewData`;\n\t\treturn this.$fhcApi.get(url, null, null)\n\t},\n}","export default {\n\n getBookmarks: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/getBookmarks`\n ,{}\n );\n },\n \n delete: function (bookmark_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/delete/${bookmark_id}`\n ,{}\n ); \n },\n\n\tupdate: function ({ bookmark_id, url, title, tag=null}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/Bookmark/update/${bookmark_id}`\n\t\t\t, {\n\t\t\t\turl: url,\n\t\t\t\ttitle: title\n\t\t\t}\n\t\t);\n\t},\n\n insert: function ({url, title, tag}) {\n return this.$fhcApi.post(\n `/api/frontend/v1/Bookmark/insert`\n ,{\n url: url,\n title: title,\n tag: tag\n }\n ); \n },\n}","export default {\n \n open: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/open`,{});\n },\n\n all: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/all`,{});\n },\n\n confirm: function (ampel_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/confirm/${ampel_id}`,{});\n },\n\n}","export default {\n\tstudiengangInformation: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Studgang/getStudiengangInfo\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudiengangByKz: function (studiengang_kz) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz\",\n\t\t\t{\n\t\t\t\t\"studiengang_kz\": studiengang_kz\n\t\t\t}\n\t\t);\n\t}\n}","export default {\n\tgetMenu: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/CisMenu/getMenu\",\n\t\t\t{}\n\t\t);\n\t}\n\n}","\nexport default {\n\tgetAuthUID() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthUID',\n\t\t\t{ }\n\t\t);\n\t},\n\tgetAuthInfo() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthInfo',\n\t\t\t{}\n\t\t);\n\t},\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAll() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/language/get');\n\t}\n};","/** TODO(chris):\n * when deleting this file be sure to\n * remove line 1 & 90 from ../plugins/Phrasen.js\n */\nimport FhcApiFactory from '../api/fhcapifactory.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$fhcApi) {\n\t\t\t/* Deprecated Code start */\n\t\t\tif (options?.factory) {\n\t\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\t\tapp.config.globalProperties.$fhcApi.factory.addEndpoints(options.factory);\n\t\t\t}\n\t\t\t/* Deprecated Code end */\n\t\t\treturn;\n\t\t}\n\n\t\tfunction _get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\n\t\tfunction _clean_return_value(response) {\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = {response};\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tconst baseURL = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\";\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(response => {\n\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\treturn _clean_return_value(response);\n\n\t\t\t// NOTE(chris): loop through errors\n\t\t\tif (response.data.errors)\n\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t);\n\n\t\t\treturn _clean_return_value(response);\n\t\t}, error => {\n\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\n\t\t\tif (error.config?.errorHandling == 'off'\n\t\t\t\t|| error.config?.errorHandling === false\n\t\t\t\t|| error.config?.errorHandling == 'success')\n\t\t\t\treturn Promise.reject(error);\n\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL, true);\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t\t}\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\terror.response.data.errors = error.response.data.errors.filter(\n\t\t\t\t\terr => (error.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, error.config)\n\t\t\t\t);\n\t\t\t\tif (!error.response.data.errors.length)\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else if (error.request) {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertError(error.message);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t}\n\n\t\t\treturn Promise.reject(error);\n\t\t});\n\n\t\tapp.config.globalProperties.$fhcApi = {\n\t\t\tgetUri(url) {\n\t\t\t\tconsole.warn('$fhcApi.getUri is DEPRECATED! Use $api.getUri instead.');\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\tconsole.warn('$fhcApi.get is DEPRECATED! Use $api.get instead.');\n\t\t\t\t[uri, params, config] = _get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\tconsole.warn('$fhcApi.post is DEPRECATED! Use $api.post instead.');\n\t\t\t\t[uri, data, config] = _get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\t_defaultErrorHandlers: {\n\t\t\t\tvalidation(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form) {\n\t\t\t\t\t\tconfig.form.clearValidation();\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.messages);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(error.messages)) {\n\t\t\t\t\t\terror.messages.forEach($fhcAlert.alertError);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (typeof error.messages == 'object') {\n\t\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t\tObject.values(error.messages).forEach(\n\t\t\t\t\t\t\t\tvalue => $fhcAlert.alertDefault(\n\t\t\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tObject.entries(error.messages).forEach(\n\t\t\t\t\t\t\t\t([key, value]) => $fhcAlert.alertDefault('error', key, value, true)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tgeneral(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form)\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.message);\n\t\t\t\t\telse if (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertError(error.message);\n\t\t\t\t},\n\t\t\t\tphp(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('warn', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('info', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\texception(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tdb(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tauth(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertDefault('error', error.message, message);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/* Deprecated Code start */\n\t\tclass FhcApiFactoryWrapper {\n\t\t\tconstructor(factorypart, root) {\n\t\t\t\tif (root === undefined) {\n\t\t\t\t\tthis.$fhcApi = {\n\t\t\t\t\t\tgetUri(url) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.getUri(url);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget(form, uri, params, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.get(form, uri, params, config);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpost(form, uri, data, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.post(form, uri, data, config);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tObject.defineProperty(this.$fhcApi, 'factory', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.factory;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tapp.config.globalProperties.$fhcApi.factory = this;\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty(this, '$fhcApi', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\treturn (root || this).$fhcApi;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.addEndpoints(factorypart, true)\n\t\t\t}\n\n\t\t\taddEndpoints(factorypart, noWarn) {\n\t\t\t\tObject.keys(factorypart).forEach(key => {\n\t\t\t\t\tObject.defineProperty(this, key, {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tif (typeof factorypart[key] == 'function')\n\t\t\t\t\t\t\t\treturn factorypart[key].bind(this);\n\t\t\t\t\t\t\treturn new FhcApiFactoryWrapper(factorypart[key], this.$fhcApi.factory);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tif (!noWarn) console.warn('$fhcApi.factory.addEndpoints() is DEPRECATED!');\n\t\t\t}\n\t\t}\n\n\t\tconst factory = new FhcApiFactoryWrapper(FhcApiFactory);\n\t\tif (options?.factory) {\n\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\tfactory.addEndpoints(options.factory);\n\t\t}\n\n\t\tapp.config.globalProperties.$fhcApi.factory = factory;\n\t\t/* Deprecated Code end */\n\t\t\n\t\tapp.provide('$fhcApi', app.config.globalProperties.$fhcApi);\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n//--------------------------------------------------------------------------------------------------------------------\n// Configs\n\n// To see debug messages into the browser console set this parameter as true\nconst CORE_REST_CLIENT_DEBUG = false;\n\n// Default timeout (milliseconds)\nconst CORE_REST_CLIENT_TIMEOUT = 5000;\n\n//--------------------------------------------------------------------------------------------------------------------\n// Constants\n\n// Success\nconst CORE_REST_CLIENT_SUCCESS = 0;\n\n// Properties present in a response\nconst CORE_REST_CLIENT_ERROR = \"error\";\nconst CORE_REST_CLIENT_RETVAL = \"retval\";\n\n// HTTP method parameters\nconst CRC_HTTP_GET_METHOD = \"get\";\nconst CRC_HTTP_POST_METHOD = \"post\";\n\n/**\n * Definition and initialization of the object CoreRESTClient\n */\nexport const CoreRESTClient = {\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Public methods\n\n\t/**\n\t * Performs a call using the HTTP GET method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tget: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_GET_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Performs a call using the HTTP POST method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tpost: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_POST_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Checks if the response is a success\n\t */\n\tisSuccess: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR)\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL) && response.error == CORE_REST_CLIENT_SUCCESS)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Checks if the response is an error\n\t */\n\tisError: function(response) {\n\t\treturn !CoreRESTClient.isSuccess(response);\n\t},\n\n\t/**\n\t * Checks if the response has data\n\t */\n\thasData: function(response) {\n\n\t\tif (CoreRESTClient.isSuccess(response))\n\t\t{\n\t\t\tif ((typeof response[CORE_REST_CLIENT_RETVAL] === \"object\" && Object.keys(response[CORE_REST_CLIENT_RETVAL]).length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"array\" && response[CORE_REST_CLIENT_RETVAL].length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"string\" && response[CORE_REST_CLIENT_RETVAL].trim() != \"\")\n\t\t\t\t|| typeof response[CORE_REST_CLIENT_RETVAL] === \"number\")\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Retrives data from response object\n\t */\n\tgetData: function(response) {\n\n\t\tif (CoreRESTClient.hasData(response))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Retrives error message from response object\n\t */\n\tgetError: function(response) {\n\n\t\tif (typeof response === \"object\"\n\t\t\t&& Object.keys(response).length > 0\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn \"Generic error\";\n\t},\n\n\t/**\n\t * Retrives code from response object\n\t */\n\tgetErrorCode: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_ERROR];\n\t\t}\n\n\t\treturn 1; // Generic error\n\t},\n\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Private methods\n\n\t/**\n\t * Generate the router URI using the connection parameters\n\t */\n\t_generateRouterURI: function(wsURL) {\n\t\tvar uri = null;\n\n\t\t// Checks if global JS object FHC_JS_DATA_STORAGE_OBJECT exists\n\t\tif (typeof FHC_JS_DATA_STORAGE_OBJECT !== \"undefined\")\n\t\t{\n\t\t\turi = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\" + wsURL;\n\t\t}\n\n\t\treturn uri;\n\t},\n\n\t/**\n\t * Method to print debug info after a controller has been called\n\t */\n\t_printDebug: function(parameters, response, errorThrown) {\n\n\t\tif (CORE_REST_CLIENT_DEBUG === true) // If global const CORE_REST_CLIENT_DEBUG is true, but really true!\n\t\t{\n\t\t\t// Print info about called controller\n\t\t\tconsole.log(\"Called controller: \" + parameters.remoteController);\n\t\t\tconsole.log(\"Call parameters:\"); // parameters given to this call\n\t\t\tconsole.log(parameters);\n\n\t\t\tif (response != null) // if there is a response...\n\t\t\t{\n\t\t\t\tconsole.log(\"Controller Response:\");\n\t\t\t\tconsole.log(response); // ...print it\n\t\t\t}\n\t\t\tif (errorThrown != null) // if there is a jQuery error...\n\t\t\t{\n\t\t\t\tconsole.log(\"jQuery error:\");\n\t\t\t\tconsole.log(errorThrown); // ...print it\n\t\t\t}\n\t\t\tconsole.log(\"--------------------------------------------------------------------------------------------\");\n\t\t}\n\t},\n\n\t/**\n\t * Performs a call to the server were the CI PHP layer is running\n\t * - wsURL: alias of the core controller to call\n\t * - wsParameters: parameters to give to the called controller\n\t * - type: POST or GET HTTP method\n\t * - axiosParameters: an object to configure the axios call\n\t */\n\t_axiosCall: function(wsURL, wsParameters, type, axiosParameters) {\n\n\t\t// Axios config object\n\t\tlet axiosCallObj = {\n\t\t\tmethod: type,\n\t\t\turl: CoreRESTClient._generateRouterURI(wsURL),\n\t\t\ttimeout: CORE_REST_CLIENT_TIMEOUT // default time out\n\t\t};\n\n\t\t// The ajax call is HTTP GET\n\t\tif (type == CRC_HTTP_GET_METHOD)\n\t\t{\n\t\t\taxiosCallObj.params = wsParameters;\n\t\t}\n\t\t// The ajax call is HTTP POST\n\t\telse\n\t\t{\n\t\t\taxiosCallObj.data = wsParameters;\n\t\t}\n\n\t\t// Check if axiosParameters is an object\n\t\tif (typeof axiosParameters === \"object\")\n\t\t{\n\t\t\t// And then copies the its properties into axiosCallObj\n\t\t\tfor (var prop in axiosParameters) axiosCallObj[prop] = axiosParameters[prop];\n\t\t}\n\n\t\t// Perform the ajax call via axios\n\t\treturn axios(axiosCallObj);\n\t}\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n * \n * @usage:\n * Preperations:\n * Be sure to have PrimeVue loaded with the toast and confirmdialog\n * components as primevue variable\n * Install:\n * Import this Plugin and install it with the app.use() function.\n * Use:\n * In your component you can call now the global property $fhcAlert\n * which has the following functions:\n * \n * alertSuccess\n * ------------\n * Displays a success message\n * @param string\tmessage\n * @return void\n * \n * alertInfo\n * ---------\n * Displays an info message\n * @param string\tmessage\n * @return void\n * \n * alertWarning\n * ------------\n * Displays a warning\n * @param string\tmessage\n * @return void\n * \n * alertError\n * ----------\n * Displays an error\n * @param string\tmessage\n * @return void\n * \n * alertSystemError\n * ----------------\n * Displays an alert with the error details and a button to mail\n * the error to the Support Team\n * @param string\tmessage\n * @return void\n * \n * confirmDelete\n * -------------\n * Displays a confirmation dialog and returns a Promise which resolves\n * with true or false depending und the pressed button.\n * @return Promise\n * \n * alertDefault\n * ------------\n * Displays an alert\n * @param string\tseverity\t\tcan be 'success', 'info', 'warning', 'error'\n * @param string\ttitle\n * @param string\tmessage\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * alertMultiple\n * -------------\n * Displays multiple alerts\n * @param array\t\tmessageArray\n * @param string\tseverity\t\t(optional) defaults to 'info'\n * @param string\ttitle\t\t\t(optional) defaults to 'Info'\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * handleSystemError\n * -----------------\n * Automatiticly determine how to display an system error and display it.\n * This would be used in a catch block of an ajax call.\n * @param mixed\t\terror\n * @return void\n * \n * handleSystemMessage\n * -------------------\n * Automatiticly determine how to display a message and display it.\n * @param mixed\t\tmessage\n * @return void\n */\nimport PvConfig from \"../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js\";\nimport PvToast from \"../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js\";\nimport PvConfirm from \"../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js\";\nimport PvConfirmationService from \"../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js\";\nimport FhcPhrasen from \"./Phrasen.js\";\n\nimport {CoreRESTClient} from '../RESTClient.js';\n\nconst helperAppContainer = document.createElement('div');\n\nconst helperApp = Vue.createApp({\n\tname: \"FhcAlertApp\",\n\tcomponents: {\n\t\tPvToast,\n\t\tPvConfirm\n\t},\n\tmethods: {\n\t\tmailToUrl(slotProps) {\n\t\t\tlet mailTo = FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto;\n\t\t\tlet subject = 'Meldung%20Systemfehler';\n\t\t\tlet body = `\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: ` + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method + `%0D%0A\n\t\t\t\tFehler Meldung: ` + slotProps.message.detail + `%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!`\n\n\t\t\treturn \"mailto:\" + mailTo + \"?subject=\" + subject + \"&body=\" + body;\n\t\t},\n\t\topenMessagecard(e) {\n\t\t\tbootstrap.Collapse.getOrCreateInstance(e.target.getAttribute('href')).toggle();\n\t\t}\n\t},\n\tunmounted() {\n\t\thelperAppContainer.parentElement.removeChild(helperAppContainer);\n\t},\n\tcomputed: {\n\t\tshowmaillink: function() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto !== '';\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t`\n});\n\nhelperApp.use(PvConfig);\nhelperApp.use(PvConfirmationService);\n//helperApp.use(FhcPhrasen);\n\nconst helperAppInstance = helperApp.mount(helperAppContainer);\n\ndocument.body.appendChild(helperAppContainer);\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (!app.config.globalProperties.$p)\n\t\t\tapp.use(FhcPhrasen);\n\n\t\tconst $fhcAlert = {\n\t\t\talertSuccess(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSuccess);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'success', summary: 'Info', detail: message, life: 1000});\n\t\t\t},\n\t\t\talertInfo(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertInfo);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'info', summary: 'Info', detail: message, life: 3000 });\n\t\t\t},\n\t\t\talertWarning(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertWarning);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'warn', summary: 'Achtung', detail: message});\n\t\t\t},\n\t\t\talertError(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertError);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'error', summary: 'Achtung', detail: message });\n\t\t\t},\n\t\t\talertSystemError(message) {\n\t\t\t\t//TODO(Manu) for translation of content of template: restructure in data\n\t\t\t\t//and update definitions with translations\n\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSystemError);\n\t\t\t\thelperAppInstance.$refs.alert.add({\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t\tsummary: Vue.computed(() => app.config.globalProperties.$p.t('alert/systemerror')),\n\t\t\t\t\tdetail: message});\n\t\t\t},\n\t\t\tconfirmDelete() {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: 'fhcAlertConfirm',\n\t\t\t\t\t\theader: Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: Vue.computed(() => app.config.globalProperties.$p.t('alert/confirm_delete')),\n\t\t\t\t\t\tacceptLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/loeschen')),\n\t\t\t\t\t\tacceptClass: 'p-button-danger',\n\t\t\t\t\t\trejectLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: 'p-button-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tconfirm(options) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: options?.group ?? 'fhcAlertConfirm',\n\t\t\t\t\t\theader: options?.header ?? Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: options?.message ?? '',\n\t\t\t\t\t\tacceptLabel: options?.acceptLabel ?? 'Ok',\n\t\t\t\t\t\tacceptClass: options?.acceptClass ?? 'btn btn-primary',\n\t\t\t\t\t\trejectLabel: options?.rejectLabel ?? Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: options?.rejectClass ?? 'btn btn-outline-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\talertDefault(severity, title, message, sticky = false, html = false) {\n\t\t\t\tlet options = { severity: severity, summary: title, detail: message, html };\n\t\t\t\t\n\t\t\t\tif (!sticky)\n\t\t\t\t\toptions.life = 3000;\n\n\t\t\t\thelperAppInstance.$refs.toast.add(options);\n\t\t\t},\n\t\t\talertMultiple(messageArray, severity = 'info', title = 'Info', sticky = false, html = false){\n\t\t\t\t// Check, if array has only string values\n\t\t\t\tif (messageArray.every(message => typeof message === 'string')) {\n\t\t\t\t\tmessageArray.forEach(message => this.alertDefault(severity, title, message, sticky, html));\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\thandleSystemError(error) {\n\t\t\t\t// don't show an error message to the user if the error was an aborted request\n\t\t\t\tif(error.hasOwnProperty('name') && error.name.toLowerCase() === \"AbortError\".toLowerCase())\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is string\n\t\t\t\tif (typeof error === 'string')\n\t\t\t\t\treturn $fhcAlert.alertSystemError(error);\n\n\t\t\t\t// Error is array of strings\n\t\t\t\tif (Array.isArray(error) && error.every(err => typeof err === 'string'))\n\t\t\t\t\treturn error.every($fhcAlert.alertSystemError);\n\n\t\t\t\t// Error has been handled already\n\t\t\t\tif (error.hasOwnProperty('handled') && error.handled)\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is object\n\t\t\t\tif (typeof error === 'object' && error !== null) {\n\t\t\t\t\tlet errMsg = '';\n\n\n\t\t\t\t\tif (error.hasOwnProperty('response') && error.response?.data?.retval)\n\t\t\t\t\t\terrMsg += 'Error Message: ' + (error.response.data.retval.message || error.response.data.retval) + '\\r\\n';\n\t\t\t\t\telse if (error.hasOwnProperty('message'))\n\t\t\t\t\t\terrMsg += 'Error Message: ' + error.message.toUpperCase() + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('config') && error.config.hasOwnProperty('url'))\n\t\t\t\t\t\terrMsg += 'Error ConfigURL: ' + error.config.url + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('stack'))\n\t\t\t\t\t\terrMsg += 'Error Stack: ' + error.stack + '\\r\\n';\n\t\t\t\t\t\n\t\t\t\t\t// Fallback object error message\n\t\t\t\t\tif (errMsg == '')\n\t\t\t\t\t\terrMsg = 'Error Message: ' + JSON.stringify(error) + '\\r\\n';\n\n\t\t\t\t\terrMsg += 'Error Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\n\t\t\t\t\treturn $fhcAlert.alertSystemError(errMsg);\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\thandleSystemMessage(message) {\n\t\t\t\t// Message is string\n\t\t\t\tif (typeof message === 'string')\n\t\t\t\t\treturn $fhcAlert.alertWarning(message);\n\n\t\t\t\t// Message is array of strings\n\t\t\t\tif (Array.isArray(message)) {\n\t\t\t\t\t// If Array has only Strings\n\t\t\t\t\tif (message.every(msg => typeof msg === 'string'))\n\t\t\t\t\t\treturn message.every($fhcAlert.alertWarning);\n\n\t\t\t\t\t// If Array has only Objects\n\t\t\t\t\tif (message.every(msg => typeof msg === 'object') && msg !== null) {\n\t\t\t\t\t\treturn message.every(msg => {\n\t\t\t\t\t\t\tif (msg.hasOwnProperty('data') && msg.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(msg.data.retval));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(msg));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Message is Object with data property\n\t\t\t\tif (typeof message === 'object' && message !== null){\n\t\t\t\t\tif (message.hasOwnProperty('data') && message.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t// NOTE(chris): changed: alertSystemError => alertWarning\n\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(message.data.retval));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(message));\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\tresetFormValidation(form) {\n\t\t\t\tconst event = new Event('fhc-form-reset');\n\t\t\t\tform.querySelectorAll(['[data-fhc-form-validate],[data-fhc-form-error]']).forEach(el => el.dispatchEvent(event));\n\t\t\t\t/*const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\tif (alert) {\n\t\t\t\t\talert.innerHTML = '';\n\t\t\t\t\talert.classList.add('d-none');\n\t\t\t\t}\n\t\t\t\tform.querySelectorAll('.invalid-feedback').forEach(n => n.remove());\n\t\t\t\tform.querySelectorAll('.is-invalid').forEach(n => n.classList.remove('is-invalid'));\n\t\t\t\tform.querySelectorAll('.is-valid').forEach(n => n.classList.remove('is-valid'));*/\n\t\t\t},\n\t\t\thandleFormValidation(error, form) {\n\t\t\t\tif (form === undefined) {\n\t\t\t\t\tif (error && error.nodeType === Node.ELEMENT_NODE)\n\t\t\t\t\t\treturn err => $fhcAlert.handleFormValidation(err, error);\n\t\t\t\t} else {\n\t\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t\tif (typeof errors !== \"object\")\n\t\t\t\t\t\t\terrors = error.response.data;\n\n\t\t\t\t\t\t// NOTE(chris): reset form validation\n\t\t\t\t\t\t$fhcAlert.resetFormValidation(form);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// NOTE(chris): set form input validation\n\t\t\t\t\t\tconst notFound = Object.entries(errors).filter(([key, detail]) => {\n\t\t\t\t\t\t\tconst input = form.querySelector('[data-fhc-form-validate=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\tinput.dispatchEvent(new CustomEvent('fhc-form-invalidate', {detail}));\n\n\t\t\t\t\t\t\t/*const input = form.querySelector('[name=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\tinput.classList.add('is-invalid');\n\t\t\t\t\t\t\tconst feedback = document.createElement('div');\n\t\t\t\t\t\t\tfeedback.classList.add('invalid-feedback');\n\t\t\t\t\t\t\tfeedback.innerHTML = detail;\n\t\t\t\t\t\t\tinput.after(feedback);*/\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}).map(arr => arr[1]);\n\n\n\t\t\t\t\t\t//const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\t\t\tconst alert = form.querySelector('[data-fhc-form-error]');\n\t\t\t\t\t\tif (alert && notFound.length) {\n\t\t\t\t\t\t\talert.dispatchEvent(new CustomEvent('fhc-form-error', {detail: notFound}));\n\t\t\t\t\t\t\t/*notFound.forEach(txt => {\n\t\t\t\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\t\t\t\tp.innerHTML = txt;\n\t\t\t\t\t\t\t\talert.append(p);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (notFound.length) {\n\t\t\t\t\t\t\t\talert.lastChild.classList.add('mb-0');\n\t\t\t\t\t\t\t\talert.classList.remove('d-none');\n\t\t\t\t\t\t\t}*/\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnotFound.forEach($fhcAlert.alertError);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t$fhcAlert.alertError((typeof errors === 'object') ? Object.values(errors) : errors);\n\t\t\t\t} else {\n\t\t\t\t\t$fhcAlert.handleSystemError(error);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tapp.config.globalProperties.$fhcAlert = $fhcAlert;\n\t\tapp.provide('$fhcAlert', app.config.globalProperties.$fhcAlert);\n\t}\n}","import FhcAlert from './FhcAlert.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$api) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!app.config.globalProperties.$fhcAlert)\n\t\t\tapp.use(FhcAlert);\n\n\t\tfunction _send_array_or_object(errors, func) {\n\t\t\tif (Array.isArray(errors))\n\t\t\t\terrors.forEach(func);\n\t\t\telse\n\t\t\t\tObject.entries(errors).forEach(\n\t\t\t\t\t([title, errs]) => errs.forEach(\n\t\t\t\t\t\terror => func(error, title)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t}\n\t\tlet DEFAULT_ERROR_CONFIG = {\n\t\t\tsuccess: true,\n\t\t\tfail: true,\n\t\t\tcombine: {\n\t\t\t\tform: ['validation', 'general'],\n\t\t\t\ttoast: ['validation', 'general', 'not_found', 'site_failed']\n\t\t\t},\n\t\t\thandler: {\n\t\t\t\tform(form, errors) {\n\t\t\t\t\tform.clearValidation();\n\t\t\t\t\terrors.forEach(err => form.setFeedback(\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\terr.messages || err.message\n\t\t\t\t\t));\n\t\t\t\t},\n\t\t\t\tasync toast(errors) {\n\t\t\t\t\tconst $p = app.config.globalProperties.$p;\n\t\t\t\t\tif (!$p)\n\t\t\t\t\t\treturn Promise.reject('Phrasen plugin not loaded!');\n\t\t\t\t\n\t\t\t\t\tasync function _format_toast(errors) {\n\t\t\t\t\t\terrors = errors.reduce((result, err) => {\n\t\t\t\t\t\t\tswitch (err.type) {\n\t\t\t\t\t\t\tcase 'not_found':\n\t\t\t\t\t\t\tcase 'site_failed':\n\t\t\t\t\t\t\t\tif (err.message)\n\t\t\t\t\t\t\t\t\tresult[err.message] = [err.url];\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tresult._default = [err.url];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'general':\n\t\t\t\t\t\t\t\tif (!result._default)\n\t\t\t\t\t\t\t\t\tresult._default = [];\n\t\t\t\t\t\t\t\tresult._default.push(err.message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'validation':\n\t\t\t\t\t\t\t\tObject.entries(err.messages)\n\t\t\t\t\t\t\t\t\t.forEach(([field, msg]) => {\n\t\t\t\t\t\t\t\t\t\tif (!result[field])\n\t\t\t\t\t\t\t\t\t\t\tresult[field] = [];\n\t\t\t\t\t\t\t\t\t\tif (Array.isArray(msg))\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(...msg);\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(msg);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}, {});\n\t\t\t\t\t\tlet counter = 0;\n\t\t\t\t\t\tconst msgs = await Promise.all(Object.entries(errors)\n\t\t\t\t\t\t\t.sort((a, b) => ['_default'].indexOf(b[0]) - ['_default'].indexOf(a[0])) // sort _default first\n\t\t\t\t\t\t\t.map(async ([field, msgs]) => {\n\t\t\t\t\t\t\t\tif (field == '_default') {\n\t\t\t\t\t\t\t\t\tawait $p.loadCategory('dashboard');\n\t\t\t\t\t\t\t\t\tconst general = $p.t('dashboard/general');\n\t\t\t\t\t\t\t\t\tfield = '
' + general + '
';\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfield = '
' + field + '
';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcounter += msgs.length;\n\t\t\t\t\t\t\t\treturn field\n\t\t\t\t\t\t\t\t\t+ '
'\n\t\t\t\t\t\t\t\t\t+ msgs.join('
')\n\t\t\t\t\t\t\t\t\t+ '
';\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcounter,\n\t\t\t\t\t\t\tmsgs\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet counter, msgs;\n\t\t\t\t\tif (Array.isArray(errors)) {\n\t\t\t\t\t\t({ counter, msgs } = await _format_toast(errors));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t({ counter, msgs } = await Object.entries(errors)\n\t\t\t\t\t\t\t.reduce(async (res, [title, errs]) => {\n\t\t\t\t\t\t\t\tconst result = await res;\n\t\t\t\t\t\t\t\tconst { counter, msgs } = await _format_toast(errs);\n\t\t\t\t\t\t\t\tresult.counter += counter;\n\t\t\t\t\t\t\t\tresult.msgs.push('
'\n\t\t\t\t\t\t\t\t\t+ title\n\t\t\t\t\t\t\t\t\t+ '
'\n\t\t\t\t\t\t\t\t\t+ msgs.join('')\n\t\t\t\t\t\t\t\t\t+ '
');\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}, Promise.resolve({ counter: 0, msgs: []})));\n\t\t\t\t\t}\n\n\t\t\t\t\tawait $p.loadCategory('ui');\n\t\t\t\t\tconst n_errors = $p.t('ui/n_errors', { n: counter });\n\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\tn_errors,\n\t\t\t\t\t\t'
' + msgs.join('') + '
',\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tphp(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('warn', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('info', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\tmessage = title + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\texception(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tdb(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tauth(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\ttitle += ': ' + error.message;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ttitle = error.message;\n\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (options?.errorHandling !== undefined)\n\t\t\tDEFAULT_ERROR_CONFIG = _merge_error_config(options.errorHandling);\n\t\t\n\t\tfunction get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\t\tfunction clean_return_value(response) {\n\t\t\tif (typeof response.data === 'string' || response.data instanceof String)\n\t\t\t\treturn clean_return_value({ data: response });\n\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result)\n\t\t\t\treturn {meta: {response}, data: null};\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = { response };\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tfunction _merge_error_config(config) {\n\t\t\tif (config === false || config === 'off')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false, fail: false };\n\t\t\t\n\t\t\tif (!config || config === true)\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tif (config === 'success')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, fail: false };\n\t\t\t\n\t\t\tif (config === 'fail')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false };\n\t\t\t\n\t\t\tconst { success, fail, handler, combine } = config;\n\t\t\t\n\t\t\tconfig = { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tObject.entries({ fail, success }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = value;\n\t\t\t});\n\t\t\tObject.entries({ handler, combine }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = { ...config[key], ...value };\n\t\t\t});\n\n\t\t\treturn config;\n\t\t}\n\t\tfunction get_error_handler(config) {\n\t\t\tconst result = _merge_error_config(config?.errorHandling);\n\n\t\t\tif (!config?.form) {\n\t\t\t\tresult.combine = { ...result.combine, form: [] };\n\t\t\t} else {\n\t\t\t\tconst formHandler = result.handler.form;\n\t\t\t\tresult.handler = { ...result.handler, form: errors => formHandler(config.form, errors) };\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t\tfunction get_error_list(error) {\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\treturn [{\n\t\t\t\t\t\ttype: 'not_found',\n\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t\t}];\n\t\t\t\t} else {\n\t\t\t\t\tif (error.response.data.errors == undefined) return [];\n\t\t\t\t\treturn error.response.data.errors;\n\t\t\t\t}\n\t\t\t} else if (error.request) {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'site_failed',\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t}];\n\t\t\t} else {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'script',\n\t\t\t\t\tmessage: error.message\n\t\t\t\t}];\n\t\t\t}\n\t\t}\n\t\tfunction popHandleableErrors(errorHandling, errors) {\n\t\t\tconst result = {};\n\t\t\tconst copy = [];\n\n\t\t\tif (errors == undefined) return {};\n\n\t\t\twhile (errors.length)\n\t\t\t\tcopy.push(errors.pop());\n\t\t\tfor (var error of copy) {\n\t\t\t\tlet type = error.type;\n\t\t\t\tlet newType = null;\n\t\t\t\tfor (var t in errorHandling.combine) {\n\t\t\t\t\tlet newTypeCombinesType = errorHandling\n\t\t\t\t\t\t.combine[t]\n\t\t\t\t\t\t.includes(type);\n\t\t\t\t\tlet newTypeHasHandler = errorHandling.handler[t];\n\t\t\t\t\tif (newTypeCombinesType && newTypeHasHandler) {\n\t\t\t\t\t\tnewType = t;\n\t\t\t\t\t\tif (newType == 'form')\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (newType)\n\t\t\t\t\ttype = newType;\n\t\t\t\tconst handler = errorHandling.handler[type];\n\t\t\t\tif (handler) {\n\t\t\t\t\tif (!result[type])\n\t\t\t\t\t\tresult[type] = [];\n\t\t\t\t\tif (Array.isArray(error))\n\t\t\t\t\t\tresult[type].push(...error);\n\t\t\t\t\telse\n\t\t\t\t\t\tresult[type].push(error);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\terrors.push(error);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t+ FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(\n\t\t\tresponse => {\n\t\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\t\treturn clean_return_value(response);\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\tif (response.data.errors)\n\t\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$api._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t\t);\n\n\t\t\t\treturn clean_return_value(response);\n\t\t\t},\n\t\t\terror => {\n\t\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\n\t\t\t\tconst errorConfig = get_error_handler(error.config);\n\n\t\t\t\tif (!errorConfig.fail)\n\t\t\t\t\treturn Promise.reject(error);\n\n\t\t\t\tconst remaining = get_error_list(error);\n\n\t\t\t\tconst errors = popHandleableErrors(errorConfig, remaining);\n\n\t\t\t\tfor (var type in errors) {\n\t\t\t\t\terrorConfig.handler[type](errors[type]);\n\t\t\t\t}\n\n\t\t\t\tif (remaining.length)\n\t\t\t\t\treturn Promise.reject(error);\n\t\t\t\t\n\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\t\t\t}\n\t\t);\n\n\t\tapp.config.globalProperties.$api = {\n\t\t\tgetUri(url) {\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\t[uri, params, config] = get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\t[uri, data, config] = get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\tcall(factory, configoverwrite, form) {\n\t\t\t\tif (Array.isArray(factory)) {\n\t\t\t\t\tconst $api = app.config.globalProperties.$api;\n\n\t\t\t\t\treturn Promise\n\t\t\t\t\t\t.allSettled(factory.map((config, index) => {\n\t\t\t\t\t\t\tif (!Array.isArray(config))\n\t\t\t\t\t\t\t\tconfig = ['#' + index, config];\n\t\t\t\t\t\t\treturn $api.call(config[1], {\n\t\t\t\t\t\t\t\terrorHeader: config[0],\n\t\t\t\t\t\t\t\terrorHandling: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}))\n\t\t\t\t\t\t.then(result => {\n\t\t\t\t\t\t\tconst [ , , config ] = get_config(form, undefined, undefined, configoverwrite || {});\n\t\t\t\t\t\t\tconst errorConfig = get_error_handler(config);\n\n\t\t\t\t\t\t\tif (!errorConfig.success && !errorConfig.fail) {\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst typedErrors = {};\n\t\t\t\t\t\t\tfor (var res of result) {\n\t\t\t\t\t\t\t\tconst [ allowed, item ] = res.status === 'fulfilled'\n\t\t\t\t\t\t\t\t\t? [ errorConfig.success, res.value ]\n\t\t\t\t\t\t\t\t\t: [ errorConfig.fail, res.reason ];\n\t\t\t\t\t\t\t\tif (!allowed)\n\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\tconst errors = popHandleableErrors(errorConfig, get_error_list(item));\n\n\t\t\t\t\t\t\t\tfor (var type in errors) {\n\t\t\t\t\t\t\t\t\tif (!typedErrors[type])\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type] = {\n\t\t\t\t\t\t\t\t\t\t\t[item.config.errorHeader]: errors[type]\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type][item.config.errorHeader] = errors[type];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfor (var errType in typedErrors) {\n\t\t\t\t\t\t\t\terrorConfig.handler[errType](typedErrors[errType]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tlet { method, url, params, config } = factory;\n\t\t\t\tif (configoverwrite !== undefined) {\n\t\t\t\t\tconfig = configoverwrite;\n\t\t\t\t}\n\t\t\t\tif (!method) {\n\t\t\t\t\tmethod = 'get';\n\t\t\t\t}\n\t\t\t\tif (method.toLowerCase)\n\t\t\t\t\tmethod = method.toLowerCase();\n\t\t\t\tif (method == 'get') {\n\t\t\t\t\treturn this.get(form, url, params, config);\n\t\t\t\t} else if (method == 'post') {\n\t\t\t\t\treturn this.post(form, url, params, config);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"FhcApi: method not allowed:\", method);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tapp.provide('$api', app.config.globalProperties.$api);\n\t}\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/loadModule/' + category\n\t\t};\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst params = {categories, language}\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/phrasen/setLanguage',\n\t\t\tparams\n\t\t};\n\t},\n\tgetLanguage() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getLanguage'\n\t\t};\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getAllLanguages'\n\t\t};\n\t}\n};","import OldFhcApi from '../plugin/OldFhcApi.js'; // TODO(chris): remove at some point\nimport PluginsApi from './Api.js';\nimport ApiPhrasen from '../api/factory/phrasen.js';\n\nconst categories = Vue.reactive({});\nconst loadingModules = {};\nlet user_language = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language);\nexport let user_locale = Vue.computed(()=>{\n\tif(!user_language.value) return null;\n\treturn FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(language => language.sprache == user_language.value).LC_Time;\n});\n\nfunction extractCategory(obj, category) {\n\treturn obj.filter(e => e.category == category).reduce((res, elem) => {\n\t\tif (!res[elem.phrase])\n\t\t\tres[elem.phrase] = elem.text;\n\t\treturn res;\n\t}, {});\n}\nfunction getValueForLoadedPhrase(category, phrase, params) {\n\tlet result = categories[category][phrase];\n\tif (!result)\n\t\treturn '<< PHRASE ' + phrase + '>>';\n\tif (params)\n\t\tresult = result.replace(/\\{([^}]*)\\}/g, (match, p1) => params[p1] === undefined ? match : params[p1]);\n\treturn result;\n}\n\nconst phrasen = {\n\tuser_language,\n\tuser_locale,\n\tsetLanguage(language) {\n\t\tconst catArray = Object.keys(categories)\n\t\treturn this.config.globalProperties.$api\n\t\t\t.call(ApiPhrasen.setLanguage(catArray, language))\n\t\t\t.then(res => {\n\t\t\t\tres.data.forEach(row => {\n\t\t\t\t\tcategories[row.category][row.phrase] = row.text\n\t\t\t\t})\n\n\t\t\t\t// update the reactive data that holds the current active user_language\n\t\t\t\tuser_language.value = language;\n\n\t\t\t\treturn res\n\t\t\t})\n\t},\n\tloadCategory(category) {\n\t\tif (Array.isArray(category))\n\t\t\treturn Promise.all(category.map(this.config.globalProperties\n\t\t\t\t.$p.loadCategory));\n\n\t\tif (!loadingModules[category])\n\t\t\tloadingModules[category] = this.config.globalProperties.$api\n\t\t\t\t.call(ApiPhrasen.loadCategory(category))\n\t\t\t\t.then(res => res?.data ? extractCategory(res.data, category) : {})\n\t\t\t\t.then(res => {\n\t\t\t\t\tcategories[category] = res;\n\t\t\t\t});\n\t\treturn loadingModules[category];\n\t},\n\tt_ref(category, phrase, params) {\n\t\tconsole.warn('deprecated');\n\t\treturn Vue.computed(() => this.t(category, phrase, params));\n\t},\n\tt(category, phrase, params) {\n\t\tif (params === undefined && (\n\t\t\t(Array.isArray(category) && category.length == 2) ||\n\t\t\t(category.split && category.split('/').length == 2))\n\t\t\t) {\n\t\t\tparams = phrase;\n\t\t\t[category, phrase] = category.split ? category.split('/') : category;\n\t\t}\n\t\tif (phrase === undefined) {\n\t\t\tconsole.error('invalid input', category, phrase, params);\n\t\t\treturn '';\n\t\t}\n\t\tlet val = Vue.computed(() => {\n\t\t\tif (!categories[category])\n\t\t\t\treturn '';\n\t\t\treturn getValueForLoadedPhrase(category, phrase, params);\n\t\t});\n\t\tif (!categories[category])\n\t\t\tthis.loadCategory(category);\n\t\treturn val.value;\n\t}\n};\n\nexport default {\n\tinstall(app, options) {\n\t\tif (!app.config.globalProperties.$fhcApi)\n\t\t\tapp.use(OldFhcApi); // TODO(chris): remove at some point\n\t\tif (!app.config.globalProperties.$api)\n\t\t\tapp.use(PluginsApi);\n\t\tapp.config.globalProperties.$p = {\n\t\t\tt: phrasen.t,\n\t\t\tloadCategory: cat => phrasen.loadCategory.call(app, cat),\n\t\t\tsetLanguage: lang => phrasen.setLanguage.call(app, lang),\n\t\t\tuser_language: user_language,\n\t\t\tuser_locale,\n\t\t\tt_ref: phrasen.t_ref\n\t\t};\n\t\tapp.provide('$p', app.config.globalProperties.$p);\n\t}\n}","import ProfilUpdateView from \"../../components/Cis/ProfilUpdate/ProfilUpdateView.js\";\nimport PluginsPhrasen from \"../../plugins/Phrasen.js\";\n\nimport ApiProfilUpdate from '../../api/factory/profilUpdate.js';\n\n// TODO: sobald in verwendung den vue router pfad zu ProfilUpdateView definieren und diese app in component auslagern\nconst app = Vue.createApp({\n name: 'ProfilUpdateRequestsApp',\n components: {\n [\"profil-update-view\"]: ProfilUpdateView,\n },\n\n data() {\n return {\n profilUpdateStates: null,\n };\n },\n provide() {\n return {\n profilUpdateStates: Vue.computed(() =>\n this.profilUpdateStates ? this.profilUpdateStates : false\n ),\n };\n },\n methods: {},\n created() {\n this.$api\n .call(ApiProfilUpdate.getStatus())\n .then((response) => {\n this.profilUpdateStates = response.data;\n })\n .catch((error) => {\n console.error(error);\n });\n },\n});\napp.use(PluginsPhrasen).mount(\"#content\");"],"names":["CoreFetchCmpt","emits","props","refresh","type","Boolean","apiFunction","required","Function","apiFunctionParameters","watch","newValue","oldValue","this","fetchData","data","loading","error","errorMessage","created","methods","apiFunctionResult","Promise","then","successHandler","catch","errorHandler","finally","finallyHandler","setError","response","$emit","undefined","retval","message","template","FILTER_COMPONENT_NEW_FILTER","FilterConfig","filters","Array","default","columns","fields","switchFilter","applyFilterConfig","saveCustomFilter","currentFields","computed","types","reduce","a","c","toLowerCase","indexOf","name","n","evt","currentTarget","value","filteredFields","filter","el","condition","length","alert","addField","push","removeField","index","splice","FilterColumns","selected","names","Object","hide","show","selectedFields","toggle","field","DEFAULT_ICONS","jsonLines","xlsx","pdf","html","json","csv","DEFAULT_LABELS","TableDownload","tabulator","config","String","iconClass","currentConfig","prototype","toString","call","split","isArray","newConfig","k","v","stringToFileFormatter","icon","label","formatter","map","validateFileFormatter","input","lcInput","includes","window","XLSX","jspdf","jsPDF","autoTable","download","file","options","elementDataMap","WeakMap","collapseAutoClose","mounted","binding","open","set","contains","target","collapse","bootstrap","Collapse","getInstance","addEventListener","document","get","beforeUnmount","removeEventListener","collapsibleAutoHideFunc","Tabulator","extendModule","fitDataStretchFrozen","forced","colsWidth","tableWidth","table","rowManager","element","clientWidth","gap","lastCol","forEach","column","i","widthFixed","reinitializeWidth","responsiveLayout","modules","responsive","visible","definition","frozen","getWidth","modExists","setWidth","update","ApiFilter","wsParams","method","url","params","filterUniqueId","filterType","customFilterName","removeCustomFilter","filterId","applyFilterFields","filterFields","addFilterField","filterField","removeFilterField","getFilterById","getFilter","_uuid","CoreFilterCmpt","components","directives","onNwNewEntry","title","description","sideMenu","tabulatorOptions","tabulatorEvents","tableOnly","noColumnFilter","reload","reloadBtnInfotext","newBtnShow","newBtnClass","newBtnDisabled","newBtnLabel","uniqueId","idField","parentIdField","countOnly","useSelectionSpan","uuid","filterName","filterActive","dataset","datasetMetadata","availableFilters","selectedFilter","fetchCmptRefresh","fetchCmptApiFunction","fetchCmptApiFunctionParams","fetchCmptDataFetched","fetchResult","tableBuilt","tabulatorHasSelector","selectedData","persistence","sort","headerFilter","group","page","notSelectedFields","x","filteredData","JSON","parse","stringify","filteredColumns","hasOwnProperty","col","resizable","fieldIdsForVisibilty","getColumns","def","getDefinition","getField","fieldNames","res","idExtra","columnsForFilter","filterTitles","reloadTable","setData","initTabulator","placeholder","$p","loadCategory","t","resolve","location","hash","slice","resolvePromiseFunc","setRenderData","startFetchCmpt","$api","layout","movableColumns","columnDefaults","tooltip","height","minHeight","maxHeight","selectable","dataTree","$refs","on","event","handler","toDelete","childIdx","child","appendChild","counter","cols","isVisible","_setHeaderFilter","updateTabulator","_updateTabulator","setColumns","clearFilters","getHeaderFilters","setHeaderFilterValue","clearFilter","render","j","setSideMenu","setDropDownMenu","personalFilters","filtersArray","filtersCount","link","id","filter_id","desc","onClickCall","handlerGetFilterById","subscriptDescription","subscriptLinkClass","subscriptLinkValue","onClickSubscriptCall","handlerRemoveCustomFilter","children","option","dataFetchedCallback","FHC_JS_DATA_STORAGE_OBJECT","called_path","called_method","handlerSaveCustomFilter","getAttribute","substring","attr","parentId","parentIdx","parent","_children","beforeCreate","$props","BsModal","modal","fullscreen","backdrop","validator","focus","keyboard","noCloseBtn","dialogClass","headerClass","bodyClass","footerClass","allowFullscreenExpand","dispose","handleUpdate","relatedTarget","toggleFullscreen","Modal","popup","body","footer","slots","includedPrimevue","primevue","reject","instance","Vue","createApp","setup","h","class","ref","unmount","result","unmounted","wrapper","parentElement","removeChild","createElement","use","zIndex","overlay","Phrasen","mount","Kontakt","view","Adresse","withZustelladresse","ApiProfilUpdate","getStatus","getTopic","acceptProfilRequest","profil_update_id","uid","status_message","topic","requested_change","denyProfilRequest","insertFile","dms","replace","updateProfilbild","getProfilUpdateWithPermission","encodeURIComponent","getProfilRequestFiles","requestID","selectProfilRequest","insertProfilRequest","payload","fileID","updateProfilRequest","ID","deleteProfilRequest","AcceptDenyUpdate","inject","mixins","setLoading","onHideBsModal","onHiddenBsModal","onHidePreventedBsModal","onShowBsModal","onShownBsModal","info","files","getProfilStatus","async","app_root","ci_router","dms_id","getDocumentLink","handleRequest","e","$fhcAlert","handleSystemError","getComponentView","attachment_id","modalContainer","bind","Loading","timeout","Number","state","setTimeout","clearTimeout","dateFilter","cell","onRendered","success","div","initialValue","val","getValue","start","Date","end","PrimevueCalendar","calendar","console","dates","headerValue","rowValue","rowDate","startDate","endDate","setHours","toDateString","singleDate","ProfilUpdateView","categoryLoaded","showModal","modalData","profilUpdateEvents","handleDataProcessed","profilUpdateOptions","ajaxURL","ajaxRequestFunc","ajaxParams","profilUpdateStates","ajaxResponse","ele1","ele2","sortProfilUpdates","thisPointer","status","insertamum","reverse","join","statusMessage","getData","statusDate","status_timestamp","classList","add","statusDateEl","innerHTML","statusMessageEl","rowContextMenu","component","menu","action","UpdatesTable","separator","showAcceptDenyModal","minWidth","headerFilterParams","valuesLookup","listOnEmpty","autocomplete","headerFilterFunc","formatterParams","datetimeFormatterParams","hozAlign","para","iconClasses","getRow","headerSort","node","DOMParser","parseFromString","firstChild","querySelector","denyProfilUpdate","acceptProfilUpdate","hideAcceptDenyModal","AcceptDenyModal","nextTick","updateData","sessionStorage","setItem","arrayRowData","row","inputFormat","outputFormat","invalidPlaceholder","timezone","loadingModalRef","getItem","search","searchsettings","$fhcApi","post","searchAdvanced","searchdummy","phrasen$1","category","setLanguage","categories","language","getLanguage","getActiveDbLanguages","navigation","getHeader","navigation_page","getMenu","filter$1","studstatus","abmeldung","getDetails","antrag_id","prestudent_id","create","stdsem","grund","studiensemester","errorHandling","cancel","allSettled","antrag","studierendenantrag_id","errorHeader","unterbrechung","datum_wiedereinstieg","attachment","wiederholung","getLvs","saveLvs","forbiddenLvs","mandatoryLvs","leitung","getStgs","getAntraege","getHistory","getPrestudents","query","signal","approve","reopen","pause","unpause","object","approveObjection","denyObjection","profil","getView","fotoSperre","isStudent","isMitarbeiter","getZustellAdresse","getZustellKontakt","getGemeinden","nation","zip","getAllNationen","profilUpdate","lvPlan","getRoomInfo","ort_kurzbz","start_date","end_date","getStunden","getOrtReservierungen","getLvPlanReservierungen","getLehreinheitStudiensemester","lehreinheit_id","studiensemesterDateInterval","date","LvPlanEvents","lv_id","stv","verband","favorites","students","studiensemester_kurzbz","getUri","prestudent","person","person_id","relative_path","getStg","setStg","studiengang_kz","konto","tabulatorConfig","self","modelValue","only_open","studiengang_kz_intern","stg_kz","checkDoubles","form","confirmErrorHandler","insert","edit","delete","buchungsnr","getBuchungstypen","getGruppen","deleteGroup","kontakt","getAdressen","addNewAddress","loadAddress","address_id","updateAddress","deleteAddress","getPlaces","plz","getFirmen","searchString","getNations","getAdressentypen","getBankverbindung","addNewBankverbindung","loadBankverbindung","bankverbindung_id","updateBankverbindung","deleteBankverbindung","getKontakte","addNewContact","loadContact","kontakt_id","updateContact","deleteContact","getStandorteByFirma","getKontakttypen","updatePrestudent","getBezeichnungZGV","getBezeichnungMZgv","getBezeichnungDZgv","getAusbildung","getAufmerksamdurch","getBerufstaetigkeit","getTypenStg","getBisstandort","getHistoryPrestudent","getMaxSem","studiengang_kzs","advanceStatus","status_kurzbz","ausbildungssemester","confirmStatus","isLastStatus","deleteStatus","getLastBismeldestichtag","getHistoryPrestudents","insertStatus","loadStatus","updateStatus","getStudienplaene","getStudiengang","getStatusgruende","getStati","addStudent","changeStatus","getStatusarray","details","save","exam","getPruefungen","loadPruefung","pruefung_id","getTypenPruefungen","getAllLehreinheiten","getLvsByStudent","getLvsandLesByStudent","semester","getLvsAndMas","getMitarbeiterLv","getNoten","checkZeugnisnoteLv","addPruefung","updatePruefung","deletePruefung","abschlusspruefung","getAbschlusspruefung","addNewAbschlusspruefung","loadAbschlusspruefung","updateAbschlusspruefung","deleteAbschlusspruefung","getTypenAbschlusspruefung","getTypenAntritte","getBeurteilungen","getAkadGrade","getTypStudiengang","getMitarbeiter","getPruefer","checkForExistingExams","uids","grades","list","getCertificate","getTeacherProposal","getRepeaterGrades","updateCertificate","lehrveranstaltung_id","student_uid","note","lehrveranstaltung_bezeichnung","deleteCertificate","copyTeacherProposalToCertificate","copyRepeaterGradeToCertificate","studierendenantrag_lehrveranstaltung_id","lv_bezeichnung","getGradeFromPoints","points","manualErrorHandling","mobility","getMobilitaeten","getProgramsMobility","addNewMobility","loadMobility","bisio_id","updateMobility","deleteMobility","getLVList","getPurposes","getSupports","getListPurposes","getListSupports","deleteMobilityPurpose","addMobilityPurpose","deleteMobilitySupport","addMobilitySupport","archiv","getArchivVorlagen","archive","archiveSigned","akte_id","documents","getDocumentsUnaccepted","getDocumentsAccepted","deleteZuordnung","dokument_kurzbz","createZuordnung","loadAkte","getDoktypen","updateFile","deleteFile","uploadFile","exemptions","getAnrechnungen","getLehrveranstaltungen","getBegruendungen","getLvsKompatibel","getLektoren","addNewAnrechnung","loadAnrechnung","anrechnung_id","editAnrechnung","deleteAnrechnung","jointstudies","getStudies","getTypenMobility","getStudiensemester","getStudyprograms","getListPartner","getStatiPrestudent","loadStudy","insertStudy","updateStudy","deleteStudy","courselist","getCourselist","group_consecutiveHours","dbStundenplanTable","configStudent","configStudents","notiz","getNotizen","getUid","addNewNotiz","formData","loadNotiz","notiz_id","loadDokumente","deleteNotiz","type_id","updateNotiz","isBerechtigt","betriebsmittel","getAllBetriebsmittel","addNewBetriebsmittel","loadBetriebsmittel","betriebsmittelperson_id","updateBetriebsmittel","deleteBetriebsmittel","getTypenBetriebsmittel","loadInventarliste","checkperson","updatePersonUnrulyStatus","unrulyParam","unruly","filterPerson","base","axios","ort","getContentID","ort_kurbz","getRooms","datum","von","bis","typ","personenanzahl","getRoomTypes","cms","content","content_id","version","sprache","sichtbar","getNews","page_size","news","limit","getNewsRowCount","getNewsExtra","lehre","getStudentenMail","getLvInfo","getStudentPruefungen","getStudentProjektarbeiten","getStudentProjektabgaben","detail","projektarbeit_id","postStudentProjektarbeitEndupload","Headers","postStudentProjektarbeitZwischenabgabe","getStudentProjektarbeitAbgabeFile","paabgabe_id","getMitarbeiterProjektarbeiten","all","postProjektarbeitAbgabe","termin","paabgabetyp_kurzbz","bezeichnung","fixtermin","insertvon","kurzbz","deleteProjektarbeitAbgabe","postSerientermin","projektarbeit_ids","fetchDeadlines","addons","getLvMenu","lvid","messages","getMessages","size","getVorlagen","getMsgVarsLoggedInUser","getMessageVarsPerson","getMsgVarsPrestudent","getPersonId","getVorlagentext","vorlage_kurzbz","getNameOfDefaultRecipient","getPreviewText","getReplyData","messageId","sendMessageFromModalContext","sendMessage","deleteMessage","vorlagen","getVorlagenByLoggedInUser","studium","getAllStudienSemester","studiengang","studienplan","getStudiengaengeForStudienSemester","getStudienplaeneBySemester","getLvPlanForStudiensemester","getLvEvaluierungInfo","FhcApiFactory","phrasen","dashboard","getViewData","bookmark","getBookmarks","bookmark_id","tag","ampeln","confirm","ampel_id","studiengangInformation","getStudiengangByKz","authinfo","getAuthUID","getAuthInfo","getAll","OldFhcApi","install","app","globalProperties","factory","warn","addEndpoints","_get_config","uri","TypeError","clearValidation","setFeedback","_clean_return_value","meta","fhcApiAxios","baseURL","interceptors","request","FormData","values","every","item","FileList","File","newData","entries","nd","key","append","jsondata","errors","err","_defaultErrorHandlers","code","handled","alertDefault","responseURL","alertError","validation","apply","general","php","filename","line","backtrace","function","severity","alertSystemError","exception","db","heading","sql","auth","controller","required_permissions","FhcApiFactoryWrapper","constructor","factorypart","root","defineProperty","noWarn","keys","provide","CORE_REST_CLIENT_ERROR","CORE_REST_CLIENT_RETVAL","CoreRESTClient","wsURL","wsParameters","axiosParameters","_axiosCall","isSuccess","isError","hasData","trim","getError","getErrorCode","_generateRouterURI","_printDebug","parameters","errorThrown","axiosCallObj","prop","helperAppContainer","helperApp","PvToast","PvConfirm","mailToUrl","slotProps","systemerror_mailto","openMessagecard","getOrCreateInstance","showmaillink","PvConfig","PvConfirmationService","helperAppInstance","FhcAlert","FhcPhrasen","alertSuccess","toast","summary","life","alertInfo","alertWarning","confirmDelete","$confirm","require","header","acceptLabel","acceptClass","rejectLabel","rejectClass","accept","sticky","alertMultiple","messageArray","errMsg","toUpperCase","stack","handleSystemMessage","msg","resetFormValidation","Event","querySelectorAll","dispatchEvent","handleFormValidation","nodeType","Node","ELEMENT_NODE","notFound","CustomEvent","arr","PluginsApi","_send_array_or_object","func","errs","DEFAULT_ERROR_CONFIG","fail","combine","_format_toast","_default","msgs","b","n_errors","get_config","clean_return_value","_merge_error_config","get_error_handler","formHandler","get_error_list","popHandleableErrors","copy","pop","newType","newTypeCombinesType","newTypeHasHandler","errorConfig","remaining","configoverwrite","typedErrors","allowed","reason","errType","ApiPhrasen","reactive","loadingModules","user_language","user_locale","server_languages","find","LC_Time","catArray","phrase","text","obj","elem","extractCategory","t_ref","match","p1","getValueForLoadedPhrase","PluginsPhrasen","cat","lang"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ProfilUpdateRequests.js","sources":["../../../../js/components/Fetch.js","../../../../js/components/filter/Filter/Config.js","../../../../js/components/filter/Filter/Columns.js","../../../../js/components/filter/Table/Download.js","../../../../js/directives/collapseAutoClose.js","../../../../js/tabulator/layouts/fitDataStretchFrozen.js","../../../../js/api/factory/filter.js","../../../../js/components/filter/Filter.js","../../../../js/components/Bootstrap/Modal.js","../../../../js/components/Cis/Profil/ProfilComponents/Kontakt.js","../../../../js/components/Cis/Profil/ProfilComponents/Adresse.js","../../../../js/api/factory/profilUpdate.js","../../../../js/components/Cis/ProfilUpdate/AcceptDenyUpdate.js","../../../../js/components/Loader.js","../../../../js/tabulator/filters/Dates.js","../../../../js/components/Cis/ProfilUpdate/ProfilUpdateView.js","../../../../js/api/search.js","../../../../js/api/phrasen.js","../../../../js/api/navigation.js","../../../../js/api/filter.js","../../../../js/api/studstatus.js","../../../../js/api/profil.js","../../../../js/api/profilUpdate.js","../../../../js/api/lvPlan.js","../../../../js/api/stv.js","../../../../js/api/stv/verband.js","../../../../js/api/stv/students.js","../../../../js/api/stv/filter.js","../../../../js/api/stv/konto.js","../../../../js/api/stv/group.js","../../../../js/api/stv/kontakt.js","../../../../js/api/stv/prestudent.js","../../../../js/api/stv/status.js","../../../../js/api/stv/details.js","../../../../js/api/stv/exam.js","../../../../js/api/stv/abschlusspruefung.js","../../../../js/api/stv/grades.js","../../../../js/api/stv/mobility.js","../../../../js/api/stv/archiv.js","../../../../js/api/stv/documents.js","../../../../js/api/stv/exemptions.js","../../../../js/api/stv/jointstudies.js","../../../../js/api/stv/courselist.js","../../../../js/api/notiz.js","../../../../js/api/notiz/person.js","../../../../js/api/betriebsmittel.js","../../../../js/api/betriebsmittel/person.js","../../../../js/api/checkperson.js","../../../../js/api/ort.js","../../../../js/api/cms.js","../../../../js/api/lehre.js","../../../../js/api/addons.js","../../../../js/api/messages.js","../../../../js/api/messages/person.js","../../../../js/api/vorlagen.js","../../../../js/api/studium.js","../../../../js/api/fhcapifactory.js","../../../../js/api/dashboard.js","../../../../js/api/bookmark.js","../../../../js/api/ampeln.js","../../../../js/api/studiengang.js","../../../../js/api/menu.js","../../../../js/api/authinfo.js","../../../../js/api/language.js","../../../../js/plugin/OldFhcApi.js","../../../../js/RESTClient.js","../../../../js/plugins/FhcAlert.js","../../../../js/plugins/Api.js","../../../../js/api/factory/phrasen.js","../../../../js/plugins/Phrasen.js","../../../../js/apps/Cis/ProfilUpdateRequests.js"],"sourcesContent":["/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport const CoreFetchCmpt = {\n\temits: ['dataFetched'], // this component can emit the event dataFetched that it is catched by this component itself\n\tprops: {\n\t\trefresh: { // to refresh this component\n\t\t\ttype: Boolean\n\t\t},\n\t\tapiFunction: { // the function to call, must return a Promise\n\t\t\trequired: true,\n\t\t\ttype: Function\n\t\t},\n\t\tapiFunctionParameters: {} // parameters for the apiFunction, type mixed, optional\n\t},\n\twatch: {\n\t\t/**\n\t\t * If the refresh property is changed then call fetchData\n\t\t */\n\t\trefresh: function (newValue, oldValue) {\n\t\t\tthis.fetchData();\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tloading: false, // if in loading or not\n\t\t\terror: false, // if an error occurred while loading data\n\t\t\terrorMessage: null // the error message\n\t\t};\n\t},\n\tcreated: function() {\n\t\tthis.fetchData();\n\t},\n\tmethods: {\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchData: function() {\n\t\t\tthis.loading = true; // loader started\n\t\t\tthis.error = false;\n\t\t\tthis.errorMessage = null;\n\n\t\t\t// Checks if the apifunction is a callable function\n\t\t\tif (typeof this.apiFunction == \"function\")\n\t\t\t{\n\t\t\t\t// Call the function stored in apiFunction\n\t \t\tlet apiFunctionResult = this.apiFunction(this.apiFunctionParameters);\n\n\t\t\t\t// It is expected that the function returns a Promise\n\t\t\t\tif (apiFunctionResult instanceof Promise)\n\t\t\t\t{\n\t\t\t\t\tapiFunctionResult\n\t\t\t\t\t\t.then(this.successHandler) // on success\n\t\t\t\t\t\t.catch(this.errorHandler) // on error\n\t\t\t\t\t\t.finally(this.finallyHandler); // finally in any case\n\t\t\t\t}\n\t\t\t\telse // otherwise display an error\n\t\t\t\t{\n\t\t\t\t\tthis.setError(\"The called apiFunction does not return a Promise\");\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // otherwise display an error\n\t\t\t{\n\t\t\t\tthis.setError(\"Property apiFunction is not a function\");\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsetError: function(errorMessage) {\n\t\t\tthis.loading = false; // loading ended\n\t\t\tthis.error = true; // error occurred\n\t\t\tthis.errorMessage = errorMessage; // save the error message\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsuccessHandler: function(response) {\n\t\t\tthis.$emit('dataFetched', response ? response.data : undefined); // trigger the event dataFetched\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\terrorHandler: function(error) {\n\t\t\tif (error.response?.data?.retval)\n\t\t\t\tthis.setError(error.response.data.retval);\n\t\t\telse if (error.data?.message)\n\t\t\t\tthis.setError(error.data.message);\n\t\t\telse\n\t\t\t\tthis.setError(error.message);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfinallyHandler: function() {\n\t\t\tthis.loading = false; // loading ended\n\t\t}\n\t},\n\ttemplate: `\n\t\t\n\t\t\t
Loading...
\n\t\t
\n\t\t\n\t\t\t
{{ errorMessage }}
\n\t\t
\n\t\t\n\t`\n};\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nconst FILTER_COMPONENT_NEW_FILTER = 'Filter Component New Filter';\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\tfilters: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tcolumns: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tfields: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t}\n\t},\n\temits: {\n\t\tswitchFilter: ['filterId'],\n\t\tapplyFilterConfig: ['filterFields'],\n\t\tsaveCustomFilter: ['customFilterName']\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tcurrentFields: []\n\t\t};\n\t},\n\tcomputed: {\n\t\ttypes() {\n\t\t\treturn this.columns.reduce((a,c) => {\n\t\t\t\tlet type = c.type.toLowerCase();\n\t\t\t\tif (type.indexOf('int') >= 0)\n\t\t\t\t\ta[c.name] = 'Numeric';\n\t\t\t\telse if (\n\t\t\t\t\ttype.indexOf('varchar') >= 0 || \n\t\t\t\t\ttype.indexOf('text') >= 0 || \n\t\t\t\t\ttype.indexOf('bpchar') >= 0\n\t\t\t\t)\n\t\t\t\t\ta[c.name] = 'Text';\n\t\t\t\telse if (\n\t\t\t\t\ttype.indexOf('timestamp') >= 0 || \n\t\t\t\t\ttype.indexOf('date') >= 0\n\t\t\t\t)\n\t\t\t\t\ta[c.name] = 'Date';\n\t\t\t\telse\n\t\t\t\t\ta[c.name] = '';\n\t\t\t\treturn a;\n\t\t\t}, {});\n\t\t}\n\t},\n\twatch: {\n\t\tfields(n) {\n\t\t\tthis.currentFields = n;\n\t\t}\n\t},\n\tmethods: {\n\t\tswitchFilter(evt) {\n\t\t\tthis.$emit('switchFilter', evt.currentTarget.value);\n\t\t},\n\t\tapplyFilterConfig() {\n\t\t\tconst filteredFields = this.currentFields.filter(el => el.name != FILTER_COMPONENT_NEW_FILTER);\n\t\t\tif (filteredFields.filter(el => el.condition == \"\").length)\n\t\t\t\talert(\"Please fill all the filter options\");\n\t\t\telse\n\t\t\t\tthis.$emit('applyFilterConfig', filteredFields);\n\t\t},\n\t\taddField(evt) {\n\t\t\tthis.currentFields.push({\n\t\t\t\tname: FILTER_COMPONENT_NEW_FILTER\n\t\t\t});\n\t\t},\n\t\tremoveField(index) {\n\t\t\tthis.currentFields.splice(index, 1);\n\t\t}\n\t},\n\ttemplate: `\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tFilter {{ index + 1 }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
\n\t`\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\tfields: Array,\n\t\tselected: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tnames: {\n\t\t\ttype: Object,\n\t\t\tdefault: {}\n\t\t}\n\t},\n\temits: {\n\t\thide: ['fieldName'],\n\t\tshow: ['fieldName']\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tselectedFields: []\n\t\t};\n\t},\n\twatch: {\n\t\tselected(n) {\n\t\t\tthis.selectedFields = n;\n\t\t}\n\t},\n\tmethods: {\n\t\ttoggle(field) {\n\t\t\tif (this.selectedFields.indexOf(field) != -1)\n\t\t\t{\n\t\t\t\tthis.selectedFields.splice(this.selectedFields.indexOf(field), 1);\n\t\t\t\tthis.$emit('hide', field);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.selectedFields.push(field);\n\t\t\t\tthis.$emit('show', field);\n\t\t\t}\n\t\t}\n\t},\n\ttemplate: `\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{{ names[fieldToDisplay] || fieldToDisplay }}\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
\n\t`\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nconst DEFAULT_ICONS = {\n\tjsonLines: 'fa-file-lines',\n\txlsx: 'fa-file-excel',\n\tpdf: 'fa-file-pdf',\n\thtml: 'fa-file-code',\n\tjson: 'fa-file',\n\tcsv: 'fa-file-csv'\n};\nconst DEFAULT_LABELS = {\n\tjsonLines: 'Download as JSONLINES',\n\txlsx: 'Download as XLSX',\n\tpdf: 'Download as PDF',\n\thtml: 'Download as HTML',\n\tjson: 'Download as JSON',\n\tcsv: 'Download as CSV '\n};\n\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\ttabulator: Object,\n\t\tconfig: {\n\t\t\ttype: [Boolean, String, Function, Array, Object],\n\t\t\tdefault: false\n\t\t},\n\t\ticonClass: [String, Array, Object]\n\t},\n\tcomputed: {\n\t\tcurrentConfig() {\n\t\t\tif (!this.config)\n\t\t\t\treturn false;\n\n\t\t\tlet config = this.config;\n\n\t\t\tif (config instanceof Function)\n\t\t\t\treturn [config];\n\n\t\t\tif (config === null)\n\t\t\t\treturn [];\n\n\t\t\tif (this.config === true)\n\t\t\t\tconfig = ['csv'];\n\n\t\t\tif (Object.prototype.toString.call(config) === \"[object String]\")\n\t\t\t\tconfig = config.split(',');\n\n\t\t\tif (typeof config === 'object' && !Array.isArray(config)) {\n\t\t\t\tlet newConfig = [];\n\t\t\t\tfor (var k in config) {\n\t\t\t\t\tvar v = config[k], type;\n\t\t\t\t\t\n\t\t\t\t\tif (!v)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\n\t\t\t\t\tif (Object.prototype.toString.call(v) === \"[object String]\") {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(v);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\tlabel: v === k ? DEFAULT_LABELS[type] : k,\n\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\t\tif(type !== null) {\n\t\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\t\tlabel: v,\n\t\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\talert('neither ' + k + ' nor ' + v + ' are supported download file types');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (typeof v === 'object' && !Array.isArray(v)) {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tif (v.formatter === undefined)\n\t\t\t\t\t\t\t\tv.formatter = type;\n\t\t\t\t\t\t\tif (v.label === undefined)\n\t\t\t\t\t\t\t\tv.label = DEFAULT_LABELS[type];\n\t\t\t\t\t\t\tif (v.icon === undefined)\n\t\t\t\t\t\t\t\tv.icon = DEFAULT_ICONS[type];\n\t\t\t\t\t\t\tnewConfig.push(v);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (v.label === undefined)\n\t\t\t\t\t\t\t\tv.label = k;\n\t\t\t\t\t\t\tnewConfig.push(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\tlabel: DEFAULT_LABELS[type],\n\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\talert(k + ' is not a supported download file type');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconfig = newConfig;\n\t\t\t}\n\n\t\t\tif (Array.isArray(config))\n\t\t\t{\n\t\t\t\tconfig = config.map(el => {\n\t\t\t\t\tif (Object.prototype.toString.call(el) === \"[object String]\") {\n\t\t\t\t\t\tlet formatter = this.stringToFileFormatter(el);\n\t\t\t\t\t\tif (formatter === null)\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[formatter],\n\t\t\t\t\t\t\tlabel: DEFAULT_LABELS[formatter],\n\t\t\t\t\t\t\tformatter\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (el instanceof Function)\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tformatter: el\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (typeof el === 'object' && !Array.isArray(el) && el !== null) {\n\t\t\t\t\t\tif (el.formatter instanceof Function)\n\t\t\t\t\t\t\treturn el;\n\t\t\t\t\t\tif (this.validateFileFormatter(el.formatter))\n\t\t\t\t\t\t\treturn el;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn null;\n\t\t\t\t}).filter(el => el !== null);\n\n\t\t\t\tif (config.length < 2)\n\t\t\t\t\treturn config;\n\n\t\t\t\tif (config.filter(el => el.label || el.icon).length == config.length)\n\t\t\t\t\treturn config;\n\n\t\t\t\talert('Config not valid');\n\t\t\t}\n\n\t\t\treturn [];\n\t\t}\n\t},\n\tmethods: {\n\t\tstringToFileFormatter(input) {\n\t\t\tlet lcInput = input.toLowerCase();\n\t\t\t\n\t\t\tif (lcInput == 'jsonlines')\n\t\t\t\treturn 'jsonLines';\n\t\t\t\n\t\t\tif (['xlsx', 'pdf', 'html', 'json', 'csv'].includes(lcInput))\n\t\t\t\treturn lcInput;\n\n\t\t\treturn null;\n\t\t},\n\t\tvalidateFileFormatter(input) {\n\t\t\tlet formatter = this.stringToFileFormatter(input);\n\t\t\tif (!formatter) {\n\t\t\t\talert(input + ' is not a supported file formatter');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (formatter == 'xlsx') {\n\t\t\t\tif (!window.XLSX) {\n\t\t\t\t\talert('XLSX Library not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (formatter == 'pdf') {\n\t\t\t\tif (!window.jspdf) {\n\t\t\t\t\talert('jsPDF Library not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar doc = new jspdf.jsPDF({});\n\t\t\t\tif (!doc.autoTable) {\n\t\t\t\t\talert('jsPDF-AutoTable Plugin not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tdownload(config) {\n\t\t\tthis.tabulator.download(config.formatter, config.file, config.options)\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t`\n};\n\n","const elementDataMap = new WeakMap();\n\nexport default {\n\tmounted(el, binding) {\n\t\tlet open = false;\n\t\telementDataMap.set(el, evt => {\n\t\t\tif (!open)\n\t\t\t\treturn;\n\n\t\t\tif (el.contains(evt.target))\n\t\t\t\treturn;\n\n\t\t\tconst collapse = bootstrap.Collapse.getInstance(el)\n\t\t\tif (collapse)\n\t\t\t\tcollapse.hide();\n\t\t});\n\t\tel.addEventListener('shown.bs.collapse', () => {\n\t\t\topen = true;\n\t\t});\n\t\tel.addEventListener('hide.bs.collapse', () => {\n\t\t\topen = false;\n\t\t});\n\t\tdocument.addEventListener('click', elementDataMap.get(el), true);\n\t},\n\tbeforeUnmount(el, binding) {\n\t\tdocument.removeEventListener('click', elementDataMap.get(el));\n\t\tdelete el.collapsibleAutoHideFunc;\n\t}\n}","/**\n * This may need changes if Tabulator gets updated!\n *\n * Current working Version: 5.5.2\n * \n * This is a copy of the fitDataStretch function. The only difference\n * is the check for frozen columns on line 22.\n */\n\nexport default window.Tabulator?.extendModule(\"layout\", \"modes\", {\n\tfitDataStretchFrozen(columns, forced) {\n\t\tvar colsWidth = 0,\n\t\ttableWidth = this.table.rowManager.element.clientWidth,\n\t\tgap = 0,\n\t\tlastCol = false;\n\n\t\tcolumns.forEach((column, i) => {\n\t\t\tif (!column.widthFixed) {\n\t\t\t\tcolumn.reinitializeWidth();\n\t\t\t}\n\n\t\t\tif (this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible && !column.definition.frozen) {\n\t\t\t\tlastCol = column;\n\t\t\t}\n\n\t\t\tif (column.visible) {\n\t\t\t\tcolsWidth += column.getWidth();\n\t\t\t}\n\t\t});\n\n\t\tif (lastCol){\n\t\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\n\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\t\tlastCol.setWidth(0);\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\n\t\t\tif (gap > 0) {\n\t\t\t\tlastCol.setWidth(gap);\n\t\t\t} else {\n\t\t\t\tlastCol.reinitializeWidth();\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\t\t}\n\t}\n});\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/saveCustomFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t};\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/removeCustomFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t};\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/applyFilterFields',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t};\n\t},\n\taddFilterField(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/addFilterField',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t};\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/removeFilterField',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t};\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/filter/getFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t};\n\t},\n\tgetFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/filter/getFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t};\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport {CoreFetchCmpt} from '../../components/Fetch.js';\nimport FilterConfig from './Filter/Config.js';\nimport FilterColumns from './Filter/Columns.js';\nimport TableDownload from './Table/Download.js';\nimport collapseAutoClose from '../../directives/collapseAutoClose.js';\n\nimport moduleLayoutFitDataStretchFrozen from '../../tabulator/layouts/fitDataStretchFrozen.js';\n\nimport ApiFilter from '../../api/factory/filter.js';\n\n//\nconst FILTER_COMPONENT_NEW_FILTER = 'Filter Component New Filter';\nconst FILTER_COMPONENT_NEW_FILTER_TYPE = 'Filter Component New Filter Type';\n\nvar _uuid = 0;\n\n/**\n *\n */\nexport const CoreFilterCmpt = {\n\tcomponents: {\n\t\tCoreFetchCmpt,\n\t\tFilterConfig,\n\t\tFilterColumns,\n\t\tTableDownload\n\t},\n\tdirectives: {\n\t\tcollapseAutoClose\n\t},\n\temits: [\n\t\t'nwNewEntry',\n\t\t'click:new',\n\t\t'tableBuilt',\n\t\t'uuidDefined'\n\t],\n\tprops: {\n\t\tonNwNewEntry: Function, // NOTE(chris): Hack to get the nwNewEntry listener into $props\n\t\ttitle: String,\n\t\tdescription: String,\n\t\tsideMenu: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tfilterType: {\n\t\t\ttype: String\n\t\t},\n\t\ttabulatorOptions: Object,\n\t\ttabulatorEvents: Array,\n\t\ttableOnly: Boolean,\n\t\tnoColumnFilter:Boolean,\n\t\treload: Boolean,\n\t\treloadBtnInfotext: String,\n\t\tdownload: {\n\t\t\ttype: [Boolean, String, Function, Array, Object],\n\t\t\tdefault: false\n\t\t},\n\t\tnewBtnShow: Boolean,\n\t\tnewBtnClass: [String, Array, Object],\n\t\tnewBtnDisabled: Boolean,\n\t\tnewBtnLabel: String,\n\t\tuniqueId: String,\n\n\t\tidField: String,\n\t\tparentIdField: String,\n\t\tcountOnly: Boolean,\n\t\tuseSelectionSpan: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tuuid: 0,\n\t\t\t// FilterCmpt properties\n\t\t\tfilterName: null,\n\t\t\tfilterActive: false,\n\t\t\tfields: null,\n\t\t\tdataset: null,\n\t\t\tdatasetMetadata: null,\n\t\t\tselectedFields: null,\n\t\t\tfilterFields: null,\n\n\t\t\tavailableFilters: null,\n\t\t\tselectedFilter: null,\n\n\t\t\t// FetchCmpt binded properties\n\t\t\tfetchCmptRefresh: false,\n\t\t\tfetchCmptApiFunction: null,\n\t\t\tfetchCmptApiFunctionParams: null,\n\t\t\tfetchCmptDataFetched: null,\n\n\t\t\tfetchResult: null,\n\n\t\t\ttabulator: null,\n\t\t\ttableBuilt: false,\n\t\t\ttabulatorHasSelector: false,\n\t\t\tselectedData: [],\n\t\t\tpersistence: {\n\t\t\t\tsort: true,\n\t\t\t\tcolumns: true,\n\t\t\t\tfilter: false,\n\t\t\t\theaderFilter: false,\n\t\t\t\tgroup: false,\n\t\t\t\tpage: false,\n\t\t\t}\n\t\t};\n\t},\n\tcomputed: {\n\t\tnotSelectedFields() {\n\t\t\tif (!this.fields || !this.selectedFields)\n\t\t\t\treturn null;\n\t\t\treturn this.fields.filter(x => this.selectedFields.indexOf(x) === -1)\n\t\t},\n\t\tfilteredData() {\n\t\t\tif (!this.dataset)\n\t\t\t\treturn [];\n\t\t\treturn JSON.parse(JSON.stringify(this.dataset));\n\t\t},\n\t\tfilteredColumns() {\n\t\t\tlet fields = JSON.parse(JSON.stringify(this.fields)) || [];\n\t\t\tlet selectedFields = JSON.parse(JSON.stringify(this.selectedFields)) || [];\n\n\t\t\tlet columns = null;\n\n\t\t\t// If the tabulator options has been provided and it contains the property columns\n\t\t\tif (this.tabulatorOptions && this.tabulatorOptions.hasOwnProperty('columns'))\n\t\t\t\tcolumns = this.tabulatorOptions.columns;\n\n\t\t\t// If columns is not an array or it is an array with less elements then the array fields\n\t\t\tif (!Array.isArray(columns) || (Array.isArray(columns) && columns.length < fields.length))\n\t\t\t{\n\t\t\t\tcolumns = []; // set it as an empty array\n\n\t\t\t\t// Loop throught all the retrieved columns from database\n\t\t\t\tfor (let field of fields)\n\t\t\t\t{\n\t\t\t\t\t// Create a new column having the title equal to the field name\n\t\t\t\t\tlet column = {\n\t\t\t\t\t\ttitle: field,\n\t\t\t\t\t\tfield: field\n\t\t\t\t\t};\n\n\t\t\t\t\t// If the column has to be displayed or not\n\t\t\t\t\tcolumn.visible = selectedFields.indexOf(field) >= 0;\n\n\t\t\t\t\t// Add the new column to the list of columns\n\t\t\t\t\tcolumns.push(column);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // the property columns has been provided in the tabulator options\n\t\t\t{\n\t\t\t\t// Loop throught the property columns of the tabulator options\n\t\t\t\tfor (let col of columns)\n\t\t\t\t{\n\t\t\t\t\t// If the column has to be displayed or not\n\t\t\t\t\t/* fields.indexOf(col.field) == -1; ensures displaying formatter colums\n\t\t\t\t\te.g. column with rowSelection checkboxes or with custom formatted action buttons */\n\t\t\t\t\tcol.visible = selectedFields.indexOf(col.field) >= 0 || fields.indexOf(col.field) == -1;\n\n\t\t\t\t\tif (col.hasOwnProperty('resizable'))\n\t\t\t\t\t\tcol.resizable = col.visible;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn columns;\n\t\t},\n\t\tfieldIdsForVisibilty() {\n\t\t\tif (!this.tableBuilt)\n\t\t\t\treturn [];\n\t\t\treturn this.tabulator.getColumns().filter(col => {\n\t\t\t\tlet def = col.getDefinition();\n\t\t\t\treturn !def.frozen && def.title && def.formatter != \"responsiveCollapse\";\n\t\t\t}).map(col => col.getField());\n\t\t},\n\t\tfieldNames() {\n\t\t\tif (!this.tableBuilt)\n\t\t\t\treturn {};\n\t\t\treturn this.tabulator.getColumns().reduce((res, col) => {\n\t\t\t\tres[col.getField()] = col.getDefinition().title;\n\t\t\t\treturn res;\n\t\t\t}, {});\n\t\t},\n\t\tidExtra() {\n\t\t\tif (!this.uuid)\n\t\t\t\treturn '';\n\t\t\treturn '-' + this.uuid;\n\t\t},\n\t\tcolumnsForFilter() {\n\t\t\tif (!this.filteredColumns || !this.datasetMetadata)\n\t\t\t\treturn [];\n\t\t\tconst filterTitles = this.filteredColumns.reduce((a,c) => {\n\t\t\t\ta[c.field] = c.title;\n\t\t\t\treturn a;\n\t\t\t}, {});\n\t\t\treturn this.datasetMetadata.map(el => ({...el, ...{title: filterTitles[el.name]}}));\n\t\t}\n\t},\n\tmethods: {\n\t\treloadTable() {\n\t\t\tif (this.tableOnly)\n\t\t\t\tthis.tabulator.setData();\n\t\t\telse\n\t\t\t\tthis.getFilter();\n\t\t},\n\t\tasync initTabulator() {\n\t\t\tlet placeholder = '< Phrasen Plugin not loaded! >';\n\t\t\tif (this.$p) {\n\t\t\t\tawait this.$p.loadCategory('ui');\n\t\t\t\tplaceholder = this.$p.t('ui/keineDatenVorhanden');\n\t\t\t}\n\n\t\t\tif (!this.tableOnly) {\n\t\t\t\t// prefetch data to get fields & selectedFields for filteredColumns & filteredData\n\t\t\t\tawait new Promise(resolve => {\n\t\t\t\t\tconst filterId = window.location.hash ? window.location.hash.slice(1) : null;\n\n\t\t\t\t\tconst resolvePromiseFunc = data => {\n\t\t\t\t\t\tthis.setRenderData(data);\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t};\n\t\t\t\t\t// get the filter data\n\t\t\t\t\tif (filterId === null)\n\t\t\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilter(wsParams)),\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tresolvePromiseFunc\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilterById(wsParams)),\n\t\t\t\t\t\t\t{ filterId },\n\t\t\t\t\t\t\tresolvePromiseFunc\n\t\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Define a default tabulator options in case it was not provided\n\t\t\tlet tabulatorOptions = {...{\n\t\t\t\t\tlayout: \"fitDataStretchFrozen\",\n\t\t\t\t\tmovableColumns: true,\n\t\t\t\t\tcolumnDefaults:{\n\t\t\t\t\t\ttooltip: true\n\t\t\t\t\t},\n\t\t\t\t\tplaceholder,\n\t\t\t\t\tpersistence: this.persistence,\n\t\t\t\t}, ...(this.tabulatorOptions || {})};\n\n\t\t\t// set default height if no height property is set\n\t\t\tif (tabulatorOptions.height === undefined &&\n\t\t\t\ttabulatorOptions.minHeight === undefined &&\n\t\t\t\ttabulatorOptions.maxHeight === undefined) {\n\t\t\t\ttabulatorOptions.height = 500;\n\t\t\t}\n\n\t\t\tif (!this.tableOnly) {\n\t\t\t\ttabulatorOptions.data = this.filteredData;\n\t\t\t\ttabulatorOptions.columns = this.filteredColumns;\n\t\t\t} else {\n\t\t\t\ttabulatorOptions.columns.forEach(col => {\n\t\t\t\t\tif (col.visible === undefined)\n\t\t\t\t\t\tcol.visible = true;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (tabulatorOptions.selectable || (tabulatorOptions.columns && tabulatorOptions.columns.filter(el => el.formatter == 'rowSelection').length))\n\t\t\t\tthis.tabulatorHasSelector = true;\n\n\t\t\tif (this.idField) {\n\t\t\t\t// enable nested tabulator if parent Id given\n\t\t\t\tif (this.parentIdField) tabulatorOptions.dataTree = true;\n\t\t\t\t// set tabulator index\n\t\t\t\ttabulatorOptions.index = this.idField;\n\t\t\t}\n\n\t\t\t// Start the tabulator with the build options\n\t\t\tthis.tabulator = new Tabulator(\n\t\t\t\tthis.$refs.table,\n\t\t\t\ttabulatorOptions\n\t\t\t);\n\t\t\t// If event handlers have been provided\n\t\t\tif (Array.isArray(this.tabulatorEvents) && this.tabulatorEvents.length > 0)\n\t\t\t{\n\t\t\t\t// Attach all the provided event handlers to the started tabulator\n\t\t\t\tfor (let evt of this.tabulatorEvents)\n\t\t\t\t\tthis.tabulator.on(evt.event, evt.handler);\n\t\t\t}\n\t\t\tthis.tabulator.on('tableBuilt', () => {this.tableBuilt = true; this.$emit('tableBuilt');});\n\t\t\tthis.tabulator.on(\"rowSelectionChanged\", data => {\n\t\t\t\tthis.selectedData = data;\n\t\t\t});\n\n\t\t\t// if nested tabulator, restructure data\n\t\t\tif (this.parentIdField && this.idField) {\n\t\t\t\tthis.tabulator.on(\"dataLoading\", data => {\n\t\t\t\t\tlet toDelete = [];\n\n\t\t\t\t\t// loop through all data\n\t\t\t\t\tfor (let childIdx = 0; childIdx < data.length; childIdx++)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet child = data[childIdx];\n\n\t\t\t\t\t\t// if it has parent id, it is a child\n\t\t\t\t\t\tif (child[this.parentIdField])\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// append the child on the right place. If parent found, mark original sw child on 0 level for deleting\n\t\t\t\t\t\t\tif (this.appendChild(data, child)) toDelete.push(childIdx);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// delete the marked children from 0 level\n\t\t\t\t\tfor (let counter = 0; counter < toDelete.length; counter++)\n\t\t\t\t\t{\n\t\t\t\t\t\t// decrease index by counter as index of data array changes after every deletion\n\t\t\t\t\t\tdata.splice(toDelete[counter] - counter, 1);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (this.tableOnly) {\n\t\t\t\tthis.tabulator.on('tableBuilt', () => {\n\t\t\t\t\tconst cols = this.tabulator.getColumns();\n\t\t\t\t\tthis.fields = cols.map(col => col.getField());\n\t\t\t\t\tthis.selectedFields = cols.filter(col => col.isVisible()).map(col => col.getField());\n\t\t\t\t\tif (this.tabulator.options.persistence.headerFilter)\n\t\t\t\t\t\tthis._setHeaderFilter();\n\t\t\t\t});\n\n\t\t\t}\n\n\t\t\tthis.tabulator.on(\"dataFiltered\", filters => {\n\t\t\t\tthis.filterActive = filters.length > 0;\n\t\t\t});\n\t\t},\n\t\tupdateTabulator() {\n\t\t\tif (this.tabulator) {\n\t\t\t\tif (this.tableBuilt)\n\t\t\t\t\tthis._updateTabulator();\n\t\t\t\telse\n\t\t\t\t\tthis.tabulator.on('tableBuilt', this._updateTabulator);\n\t\t\t}\n\t\t},\n\t\t_updateTabulator() {\n\t\t\tthis.tabulatorHasSelector = this.tabulatorOptions.selectable || this.filteredColumns.filter(el => el.formatter == 'rowSelection').length;\n\t\t\tthis.tabulator.setColumns(this.filteredColumns);\n\t\t\tthis.tabulator.setData(this.filteredData);\n\t\t\tthis._setHeaderFilter()\n\t\t},\n\t\tclearFilters()\n\t\t{\n\t\t\tlet existingFilters = this.tabulator.getHeaderFilters();\n\t\t\texistingFilters.forEach(filter => {\n\t\t\t\tthis.tabulator.setHeaderFilterValue(filter.field, \"\");\n\t\t\t});\n\t\t\tthis.tabulator.clearFilter();\n\t\t\tthis.filterActive = false;\n\t\t},\n\t\t_setHeaderFilter()\n\t\t{\n\t\t\tconst existingFilters = this.tabulator.getHeaderFilters();\n\t\t\texistingFilters.forEach(filter => {\n\t\t\t\tthis.tabulator.setHeaderFilterValue(filter.field, filter.value);\n\t\t\t});\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tgetFilter() {\n\t\t\tif (this.selectedFilter === null)\n\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilter(wsParams)),\n\t\t\t\t\tnull,\n\t\t\t\t\tthis.render\n\t\t\t\t);\n\t\t\telse\n\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilterById(wsParams)),\n\t\t\t\t\t{\n\t\t\t\t\t\tfilterId: this.selectedFilter\n\t\t\t\t\t},\n\t\t\t\t\tthis.render\n\t\t\t\t);\n\t\t},\n\t\tsetRenderData(data) {\n\t\t\tthis.fetchResult = data;\n\t\t\tthis.filterName = data.filterName;\n\t\t\tthis.dataset = data.dataset;\n\t\t\tthis.datasetMetadata = data.datasetMetadata;\n\n\t\t\tthis.fields = data.fields;\n\t\t\tthis.selectedFields = data.selectedFields;\n\t\t\tthis.filterFields = [];\n\n\t\t\tfor (let i = 0; i < data.datasetMetadata.length; i++)\n\t\t\t{\n\t\t\t\tfor (let j = 0; j < data.filters.length; j++)\n\t\t\t\t{\n\t\t\t\t\tif (data.datasetMetadata[i].name == data.filters[j].name)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet filter = data.filters[j];\n\t\t\t\t\t\tfilter.type = data.datasetMetadata[i].type;\n\n\t\t\t\t\t\tthis.filterFields.push(filter);\n\t\t\t\t\t\t//break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\trender(response) {\n\t\t\tlet data = response;\n\n\t\t\tthis.setRenderData(data);\n\n\t\t\t// If the side menu is active\n\t\t\tif (this.sideMenu === true)\n\t\t\t{\n\t\t\t\tthis.setSideMenu(data);\n\t\t\t}\n\t\t\telse // otherwise use the dropdown in the filter options\n\t\t\t{\n\t\t\t\tthis.setDropDownMenu(data);\n\t\t\t}\n\t\t\tthis.updateTabulator();\n\t\t},\n\t\t/**\n\t\t * Set the menu\n\t\t */\n\t\tsetSideMenu(data) {\n\t\t\tlet filters = data.sideMenu.filters;\n\t\t\tlet personalFilters = data.sideMenu.personalFilters;\n\t\t\tlet filtersArray = [];\n\n\t\t\tfor (let filtersCount = 0; filtersCount < filters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = filters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: filters[filtersCount].filter_id,\n\t\t\t\t\tlink: link + filters[filtersCount].filter_id,\n\t\t\t\t\tdescription: filters[filtersCount].desc,\n\t\t\t\t\tsort: filtersCount,\n\t\t\t\t\tonClickCall: this.handlerGetFilterById\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (let filtersCount = 0; filtersCount < personalFilters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = personalFilters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: personalFilters[filtersCount].filter_id,\n\t\t\t\t\tlink: link + personalFilters[filtersCount].filter_id,\n\t\t\t\t\tdescription: personalFilters[filtersCount].desc,\n\t\t\t\t\tsubscriptDescription: personalFilters[filtersCount].subscriptDescription,\n\t\t\t\t\tsubscriptLinkClass: personalFilters[filtersCount].subscriptLinkClass,\n\t\t\t\t\tsubscriptLinkValue: personalFilters[filtersCount].subscriptLinkValue,\n\t\t\t\t\tsort: filtersCount,\n\t\t\t\t\tonClickCall: this.handlerGetFilterById,\n\t\t\t\t\tonClickSubscriptCall: this.handlerRemoveCustomFilter\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.availableFilters = filtersArray;\n\n\t\t\tthis.$emit(\n\t\t\t\t'nwNewEntry',\n\t\t\t\t{\n\t\t\t\t\tlink: \"#\",\n\t\t\t\t\tdescription: \"Filters\",\n\t\t\t\t\ticon: \"filter\",\n\t\t\t\t\tchildren: filtersArray\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t * Set the drop down menu\n\t\t */\n\t\tsetDropDownMenu(data) {\n\t\t\tlet filters = data.sideMenu.filters;\n\t\t\tlet personalFilters = data.sideMenu.personalFilters;\n\t\t\tlet filtersArray = [];\n\n\t\t\tfor (let filtersCount = 0; filtersCount < filters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = filters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: filters[filtersCount].filter_id,\n\t\t\t\t\toption: filters[filtersCount].filter_id,\n\t\t\t\t\tdescription: filters[filtersCount].desc\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (let filtersCount = 0; filtersCount < personalFilters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = personalFilters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: personalFilters[filtersCount].filter_id,\n\t\t\t\t\toption: personalFilters[filtersCount].filter_id,\n\t\t\t\t\tdescription: personalFilters[filtersCount].desc\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.availableFilters = filtersArray;\n\t\t},\n\t\t/**\n\t\t * Used to start/refresh the FetchCmpt\n\t\t */\n\t\tstartFetchCmpt(apiFunction, apiFunctionParameters, dataFetchedCallback) {\n\t\t\t// Assign the function api of the FetchCmpt binded property\n\t\t\tthis.fetchCmptApiFunction = apiFunction;\n\n\t\t\t// In case a null value is provided set the parameters as an empty object\n\t\t\tif (apiFunctionParameters == null) apiFunctionParameters = {};\n\n\t\t\t// Always needed parameters\n\t\t\tapiFunctionParameters.filterUniqueId = FHC_JS_DATA_STORAGE_OBJECT.called_path + \"/\" + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\t\t\tapiFunctionParameters.filterType = this.filterType;\n\n\t\t\tif (this.uniqueId)\n\t\t\t\tapiFunctionParameters.filterUniqueId += '_' + this.uniqueId;\n\n\t\t\t// Assign parameters to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptApiFunctionParams = apiFunctionParameters;\n\t\t\t// Assign data fetch callback to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptDataFetched = dataFetchedCallback;\n\t\t\t// Set the FetchCmpt binded property refresh to have the component to refresh\n\t\t\t// NOTE: this should be the last one to be called because it triggers the FetchCmpt to start to refresh\n\t\t\tthis.fetchCmptRefresh === true ? this.fetchCmptRefresh = false : this.fetchCmptRefresh = true;\n\t\t},\n\n\t\t// ------------------------------------------------------------------------------------------------------------------\n\t\t// Event handlers\n\n\t\t/**\n\t\t *\n\t\t */\n\t\thandlerSaveCustomFilter(customFilterName) {\n\t\t\tthis.selectedFilter = null;\n\t\t\t//\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.saveCustomFilter(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tcustomFilterName\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\thandlerRemoveCustomFilter(event) {\n\t\t\tlet filterId = event.currentTarget.getAttribute(\"href\").substring(1);\n\t\t\tif (filterId === this.selectedFilter)\n\t\t\t\tthis.selectedFilter = null;\n\t\t\t//\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.removeCustomFilter(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tfilterId: filterId\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\n\t\t/*\n\t\t *\n\t\t */\n\t\thandlerGetFilterById: function(event) {\n\n\t\t\tlet filterId = null;\n\n\t\t\t// Get the attribute href if side menu is rendered\n\t\t\tlet attr = event.currentTarget.getAttribute(\"href\");\n\n\t\t\t// Otherwise get the value of the drop down menu\n\t\t\tif (attr == null)\n\t\t\t{\n\t\t\t\tfilterId = event.currentTarget.value;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfilterId = attr.substring(1);\n\t\t\t}\n\n\t\t\tthis.switchFilter(filterId);\n\t\t},\n\t\tswitchFilter(filterId) {\n\t\t\tthis.selectedFilter = filterId;\n\t\t\tthis.getFilter();\n\t\t},\n\t\tapplyFilterConfig(filterFields) {\n\t\t\tthis.selectedFilter = null;\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.applyFilterFields(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tfilterFields\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\n\t\t// append child to it's parent\n\t\tappendChild(data, child) {\n\t\t\t// get parent id\n\t\t\tlet parentId = child[this.parentIdField];\n\n\t\t\t// loop thorugh all data\n\t\t\tfor (let parentIdx = 0; parentIdx < data.length; parentIdx++)\n\t\t\t{\n\t\t\t\tlet parent = data[parentIdx];\n\n\t\t\t\t// if it's the parent\n\t\t\t\tif (parent[this.idField] == parentId)\n\t\t\t\t{\n\t\t\t\t\t// create children array if not done yet\n\t\t\t\t\tif (!parent._children) parent._children = [];\n\n\t\t\t\t\t// if child is not included in children array, append the child\n\t\t\t\t\tif (!parent._children.includes(child)) parent._children.push(child);\n\n\t\t\t\t\t// parent found\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t// search children for parents\n\t\t\t\telse if (parent._children) this.appendChild(parent._children, child);\n\t\t\t}\n\n\t\t\t// parent not found\n\t\t\treturn false;\n\t\t}\n\t},\n\tbeforeCreate() {\n\t\tif (!this.tableOnly == !this.filterType)\n\t\t\talert('You can not have a filter-type in table-only mode!');\n\t},\n\tcreated() {\n\t\tif (this.sideMenu && (!this.$props.onNwNewEntry || !(this.$props.onNwNewEntry instanceof Function)))\n\t\t\talert('\"nwNewEntry\" listener is mandatory when sideMenu is true');\n\t\tthis.uuid = _uuid++;\n\t\tthis.$emit('uuidDefined', this.uuid)\n\t},\n\tmounted() {\n\t\tthis.initTabulator().then(() => {\n\t\t\tif (!this.tableOnly) {\n\t\t\t\tthis.selectedFilter = window.location.hash ? window.location.hash.slice(1) : null;\n\t\t\t\tthis.render(this.fetchResult);\n\t\t\t}\n\t\t});\n\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t\t\n\n\t\t
\n\t\t\t
\n\t\t\t\t

\n\t\t\t\t\t{{ title }}\n\t\t\t\t

\n\t\t\t
\n\t\t
\n\t\t
\n\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{{ selectedData.length }} ausgewählt\n\t\t\t\t\t\t Mit {{ selectedData.length }} ausgewählten:\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t[ {{ filterName }} ]\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t
\n\n\t\t\n\t\t
\n\t`\n};\n","//import Phrasen from '../../plugin/Phrasen.js';\n\nexport default {\n\tname: 'BootstrapModal',\n\tdata: () => ({\n\t\tmodal: null,\n\t\tfullscreen: false\n\t}),\n\tprops: {\n\t\tbackdrop: {\n\t\t\ttype: [Boolean,String],\n\t\t\tdefault: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['static', true, false].includes(value);\n\t\t\t}\n\t\t},\n\t\tfocus: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tkeyboard: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tnoCloseBtn: Boolean,\n\t\tdialogClass: [String,Array,Object],\n\t\theaderClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tbodyClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: 'px-4 py-5'\n\t\t},\n\t\tfooterClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tallowFullscreenExpand: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\temits: [\n\t\t\"hideBsModal\",\n\t\t\"hiddenBsModal\",\n\t\t\"hidePreventedBsModal\",\n\t\t\"showBsModal\",\n\t\t\"shownBsModal\"\n\t],\n\tmethods: {\n\t\tdispose() {\n\t\t\treturn this.modal.dispose();\n\t\t},\n\t\thandleUpdate() {\n\t\t\treturn this.modal.handleUpdate();\n\t\t},\n\t\thide() {\n\t\t\treturn this.modal.hide();\n\t\t},\n\t\tshow(relatedTarget) {\n\t\t\treturn this.modal.show(relatedTarget);\n\t\t},\n\t\ttoggle() {\n\t\t\treturn this.modal.toggle();\n\t\t},\n\t\ttoggleFullscreen() {\n\t\t\tthis.fullscreen = !this.fullscreen\n\t\t}\n\t},\n\tmounted() {\n\t\tif (this.$refs.modal)\n\t\t\tthis.modal = new bootstrap.Modal(this.$refs.modal, {\n\t\t\t\tbackdrop: this.backdrop,\n\t\t\t\tfocus: this.focus,\n\t\t\t\tkeyboard: this.keyboard\n\t\t\t});\n\t},\n\tpopup(body, options, title, footer) {\n\t\tconst BsModal = this,\n\t\t\tslots = {};\n\t\tif (body !== undefined)\n\t\t\tslots.default = () => body;\n\t\tif (title !== undefined)\n\t\t\tslots.title = () => title;\n\t\tif (footer !== undefined)\n\t\t\tslots.footer = () => footer;\n\n\t\t// little hack to check whether primevue is included in the app or not\n\t\tlet includedPrimevue = false;\n\t\tif(typeof primevue !== 'undefined'){\n\t\t\tincludedPrimevue = true;\n\t\t}\n\n\t\treturn new Promise((resolve,reject) => {\n\t\t\tconst instance = Vue.createApp({\n\t\t\t\tname: 'ModalTmpApp',\n\t\t\t\tsetup() {\n\t\t\t\t\treturn () => Vue.h(BsModal, {...{\n\t\t\t\t\t\tclass: 'fade'\n\t\t\t\t\t},...options, ...{\n\t\t\t\t\t\tref: 'modal',\n\t\t\t\t\t\t'onHidden.bs.modal': instance.unmount\n\t\t\t\t\t}}, slots);\n\t\t\t\t},\n\t\t\t\tmounted() {\n\t\t\t\t\tthis.$refs.modal.show();\n\t\t\t\t\t\n\t\t\t\t},\n\t\t\t\tbeforeUnmount() {\n\t\t\t\t\tif (this.$refs.modal)\n\t\t\t\t\t\tthis.$refs.modal.result !== false ? resolve(this.$refs.modal.result) : reject();\n\t\t\t\t},\n\t\t\t\tunmounted() {\n\t\t\t\t\twrapper.parentElement.removeChild(wrapper);\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst wrapper = document.createElement(\"div\");\n\t\t\t\n\t\t\t// if(primevue) --> won't work because primevue is not defined in this scope and promise would be rejected\n\t\t\tif (includedPrimevue){\n\t\t\t\tinstance.use(primevue.config.default, {zIndex: {overlay: 9999}})\n\t\t\t}\n\t\t\t\t \n\t\t\t//instance.use(Phrasen); // TODO(chris): find a more dynamic way\n\t\t\timport('../../plugins/Phrasen.js').then((Phrasen) => {\n\t\t\t\tinstance.use(Phrasen.default);\n\t\t\t\tinstance.mount(wrapper);\n\t\t\t\tdocument.body.appendChild(wrapper);\n\t\t\t});\n\t\t});\n\t},\n\ttemplate: `
\n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
`\n}\n","export default{\n props:{\n view:String,\n data:Object,\n },\n data(){\n return {\n\n }\n },\n created(){\n\n }, \n template:/*html*/`\n\t\n`,\n};","export default {\n props:{\n data:Object,\n view:String,\n withZustelladresse:{\n type:Boolean,\n default:true,\n },\n },\n data(){\n return{}\n },\n created(){\n \n },\n template:/*html*/`\n \n
\n \n \n
\n \n
\n \n
\n
\n
{{$p.t('person','strasse')}}
\n {{data.strasse}} \n
\n
\n \n \n
\n
\n
{{$p.t('global','typ')}}
\n {{data.typ}} \n
\n
\n \n
\n
\n
{{$p.t('person','ort')}}
\n {{data.ort}} \n
\n
\n
\n
\n
{{$p.t('person','plz')}}
\n {{data.plz}} \n
\n
\n\n
\n
\n
{{$p.t('person','zustelladresse')}}
\n
\n \n
\n
\n
\n
\n`\n};","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\t//! API calls for profil update requests\n\tgetStatus() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/getStatus'\n\t\t};\n\t},\n\tgetTopic() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/getTopic'\n\t\t};\n\t},\n\tacceptProfilRequest({profil_update_id, uid, status_message, topic, requested_change}) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/acceptProfilRequest',\n\t\t\tparams: {\n\t\t\t\tprofil_update_id,\n\t\t\t\tuid,\n\t\t\t\tstatus_message,\n\t\t\t\ttopic,\n\t\t\t\trequested_change\n\t\t\t}\n\t\t};\n\t},\n\tdenyProfilRequest({profil_update_id, uid, topic, status_message}) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/denyProfilRequest',\n\t\t\tparams: {\n\t\t\t\tprofil_update_id,\n\t\t\t\tuid,\n\t\t\t\ttopic,\n\t\t\t\tstatus_message\n\t\t\t}\n\t\t};\n\t},\n\tinsertFile(dms, replace = null) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n\t\t\tparams: dms\n\t\t};\n\t},\n\tupdateProfilbild(dms) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: `/api/frontend/v1/ProfilUpdate/updateProfilbild`,\n\t\t\tparams: dms\n\t\t};\n\t},\n\tgetProfilUpdateWithPermission(filter) {\n\t\tconst url_filter = (filter !== '') ? '/' + encodeURIComponent(filter) : '';\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/getProfilUpdateWithPermission' + url_filter\n\t\t};\n\t},\n\tgetProfilRequestFiles(requestID) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`\n\t\t};\n\t},\n\tselectProfilRequest(uid = null, id = null) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/selectProfilRequest',\n\t\t\tparams: {\n\t\t\t\t...(uid ? { uid } : {}),\n\t\t\t\t...(id ? { id } : {})\n\t\t\t}\n\t\t};\n\t},\n\tinsertProfilRequest(topic, payload, fileID = null) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/insertProfilRequest',\n\t\t\tparams: {\n\t\t\t\ttopic,\n\t\t\t\tpayload,\n\t\t\t\t...(fileID ? { fileID } : {})\n\t\t\t}\n\t\t};\n\t},\n\tupdateProfilRequest(topic, payload, ID, fileID = null) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/updateProfilRequest',\n\t\t\tparams: {\n\t\t\t\ttopic,\n\t\t\t\tpayload,\n\t\t\t\tID,\n\t\t\t\t...(fileID ? { fileID } : {})\n\t\t\t}\n\t\t};\n\t},\n\tdeleteProfilRequest(requestID) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/deleteProfilRequest',\n\t\t\tparams: { requestID }\n\t\t};\n\t}\n};","import BsModal from \"../../Bootstrap/Modal.js\";\nimport Alert from \"../../Bootstrap/Alert.js\";\nimport Kontakt from \"../Profil/ProfilComponents/Kontakt.js\";\nimport Adresse from \"../Profil/ProfilComponents/Adresse.js\";\n\nimport ApiProfilUpdate from '../../../api/factory/profilUpdate.js';\n\nexport default {\n components: {\n BsModal,\n Kontakt,\n Adresse,\n },\n inject: [\"profilUpdateStates\"],\n mixins: [BsModal],\n props: {\n title: {\n type: String,\n },\n value: {\n type: Object,\n },\n setLoading: {\n type: Function,\n },\n\n /*\n * NOTE(chris):\n * Hack to expose in \"emits\" declared events to $props which we use\n * in the v-bind directive to forward all events.\n * @see: https://github.com/vuejs/core/issues/3432\n */\n onHideBsModal: Function,\n onHiddenBsModal: Function,\n onHidePreventedBsModal: Function,\n onShowBsModal: Function,\n onShownBsModal: Function,\n },\n data() {\n return {\n data: this.value,\n loading: false,\n result: false,\n info: null,\n files: null,\n };\n },\n\n methods: {\n getProfilStatus: async function () {\n return (\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/Cis/ProfilUpdate/show/${dms_id}`\n );\n },\n getDocumentLink: function (dms_id) {\n return (\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/Cis/ProfilUpdate/show/${dms_id}`\n );\n },\n handleRequest: function (type) {\n this.loading = true;\n this.setLoading(true);\n this.$api\n .call(ApiProfilUpdate[\n type.toLowerCase() == \"accept\"\n ? \"acceptProfilRequest\"\n : \"denyProfilRequest\"\n ](this.data))\n .then((res) => {\n this.result = true;\n })\n\t\t.catch((e) => this.$fhcAlert.handleSystemError)\n .finally(() => {\n\t\t this.setLoading(false);\n\t\t this.loading = false;\n this.hide();\n });\n },\n },\n\n computed: {\n getComponentView: function () {\n if (this.data.topic.toLowerCase().includes(\"kontakt\")) {\n return \"kontakt\";\n } else if (this.data.topic.toLowerCase().includes(\"adresse\")) {\n return \"adresse\";\n } else {\n return \"text_input\";\n }\n },\n },\n created() {\n // only fetching the profilUpdate Attachemnts if the profilUpdate actually has attachments\n if (this.value.attachment_id) {\n this.$api\n .call(ApiProfilUpdate.getProfilRequestFiles(\n this.data.profil_update_id\n ))\n .then((res) => {\n this.files = res.data;\n });\n }\n },\n mounted() {\n this.modal = this.$refs.modalContainer.modal;\n },\n popup(options) {\n return BsModal.popup.bind(this)(null, options);\n },\n template: /*html*/ `\n\n \n \n \n\n\n \n \n\n \n \n
`,\n};\n","import BsModal from './Bootstrap/Modal.js';\n\nexport default {\n\tcomponents: {\n\t\tBsModal\n\t},\n\tprops: {\n\t\ttimeout: {\n\t\t\ttype: Number,\n\t\t\tdefault: 300\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tt: null,\n\t\t\tstate: 0\n\t\t}\n\t},\n\tmethods: {\n\t\tshow() {\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 0:\n\t\t\t\t\tif (this.timeout) {\n\t\t\t\t\t\tthis.state = 1;\n\t\t\t\t\t\tthis.t = window.setTimeout(() => this.$refs.modal.show(), this.timeout);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else\n\t\t\t\t\t\treturn this.$refs.modal.show();\n\t\t\t\tcase 4:\n\t\t\t\t\treturn window.setTimeout(() => this.show(), 1);\n\t\t\t}\n\t\t},\n\t\thide() {\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn window.clearTimeout(this.t);\n\t\t\t\tcase 2:\n\t\t\t\t\treturn window.setTimeout(() => this.hide(), 1);\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.$refs.modal.hide();\n\t\t\t}\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.$refs.modal.$refs.modal.addEventListener('show.bs.modal', () => {\n\t\t\tthis.state = 2;\n\t\t});\n\t\tthis.$refs.modal.$refs.modal.addEventListener('shown.bs.modal', () => {\n\t\t\tthis.state = 3;\n\t\t});\n\t\tthis.$refs.modal.$refs.modal.addEventListener('hide.bs.modal', () => {\n\t\t\tthis.state = 4;\n\t\t});\n\t\tthis.$refs.modal.$refs.modal.addEventListener('hidden.bs.modal', () => {\n\t\t\tthis.state = 0;\n\t\t});\n\t},\n\ttemplate: `\n\t\n\t\tLoading...\n\t`\n}","if (!primevue) {\n\tconsole.error('PrimeVue not loaded!');\n}\n\n// NOTE(chris): Click on clear button gives an error. This is a bug in primevue => fixed in current version\nTabulator.extendModule('filter', 'filters', {\n\t\"dates\": (headerValue, rowValue) => {\n\t\tif (!headerValue)\n\t\t\treturn true;\n\n\t\tlet rowDate = new Date(rowValue);\n\n\t\tif (Array.isArray(headerValue))\n\t\t{\n\t\t\tlet startDate = new Date(headerValue[0]);\n\t\t\tif (headerValue[1])\n\t\t\t{\n\t\t\t\tlet endDate = new Date(headerValue[1]);\n\n\t\t\t\tendDate.setHours(23, 59, 59, 999);\n\n\t\t\t\treturn rowDate >= startDate && rowDate <= endDate;\n\t\t\t}\n\n\t\t\treturn rowDate.toDateString() === startDate.toDateString();\n\t\t}\n\t\tlet singleDate = new Date(headerValue);\n\t\treturn rowDate.toDateString() === singleDate.toDateString();\n\t}\n});\n\nfunction dateFilter(cell, onRendered, success) {\n\tlet div = document.createElement('div');\n\n\tlet initialValue = null;\n\n\tlet val = cell.getValue();\n\n\tif (Array.isArray(val))\n\t{\n\t\tconst start = val[0] ? new Date(val[0]) : null;\n\t\tconst end = val[1] ? new Date(val[1]) : null;\n\t\tinitialValue = [start, end];\n\t}\n\n\tVue.createApp({\n\t\tcomponents: {\n\t\t\tPrimevueCalendar: primevue.calendar\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tval: initialValue\n\t\t\t}\n\t\t},\n\t\twatch: {\n\t\t\tval(n) {\n\t\t\t\tsuccess(n);\n\t\t\t}\n\t\t},\n\t\ttemplate: `\n\t\t\t\t `\n\t}).use(primevue.config.default).mount(div);\n\n\treturn div;\n}\nexport { dateFilter };","import { CoreFilterCmpt } from \"../../filter/Filter.js\";\nimport AcceptDenyUpdate from \"./AcceptDenyUpdate.js\";\nimport Alert from \"../../../components/Bootstrap/Alert.js\";\nimport Loading from \"../../../components/Loader.js\";\n\nimport ApiProfilUpdate from '../../../api/factory/profilUpdate.js';\nimport { dateFilter } from '../../../tabulator/filters/Dates.js';\n\nconst sortProfilUpdates = (ele1, ele2, thisPointer) => {\n let result = 0;\n if (ele1.status === thisPointer.profilUpdateStates[\"Pending\"]) {\n result = -1;\n } else if (ele1.status === thisPointer.profilUpdateStates[\"Accepted\"]) {\n result =\n ele2.status === thisPointer.profilUpdateStates[\"Rejected\"] ? -1 : 1;\n } else {\n result = 1;\n }\n\n if (ele1.status === ele2.status) {\n //? if they have the same status , insert_date gets compared for order\n result =\n new Date(ele2.insertamum.split(\".\").reverse().join(\"-\")) -\n new Date(ele1.insertamum.split(\".\").reverse().join(\"-\"));\n }\n return result;\n};\n\nexport default {\n components: {\n CoreFilterCmpt,\n Loading,\n AcceptDenyUpdate,\n },\n inject: [\"profilUpdateStates\"],\n props: {\n id: {\n type: String,\n },\n },\n data() {\n return {\n categoryLoaded: false,\n showModal: false,\n modalData: null,\n loading: false,\n filter: \"Pending\",\n profil_update_id: Number(this.id),\n\n };\n },\n\tcomputed: {\n\t\tprofilUpdateEvents: function () {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\t\"event\": \"dataProcessed\",\n\t\t\t\t\t\"handler\": this.handleDataProcessed\n\t\t\t\t}\n\t\t\t];\n\t\t},\n\t\tprofilUpdateOptions: function () {\n\t\t\treturn {\n\t\t\t\tajaxURL: 'dummy',\n\t\t\t\tajaxRequestFunc: (url, config, params) => {\n\t\t\t\t\treturn this.$api.call(ApiProfilUpdate.getProfilUpdateWithPermission(params.filter));\n\t\t\t\t},\n\t\t\t\tajaxParams: () => {\n\t\t\t\t\tlet filter = '';\n\t\t\t\t\tswitch (this.filter) {\n\t\t\t\t\t\tcase this.profilUpdateStates[\"Pending\"]:\n\t\t\t\t\t\t\tfilter = this.profilUpdateStates[\"Pending\"];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase this.profilUpdateStates[\"Accepted\"]:\n\t\t\t\t\t\t\tfilter = this.profilUpdateStates[\"Accepted\"];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase this.profilUpdateStates[\"Rejected\"]:\n\t\t\t\t\t\t\tfilter = this.profilUpdateStates[\"Rejected\"];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tfilter = '';\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\t\"filter\": filter\n\t\t\t\t\t};\n\t\t\t\t},\n ajaxResponse: (url, params, response) => {\n //url - the URL of the request\n //params - the parameters passed with the request\n //response - the JSON object returned in the body of the response.\n //? sorts the response data from the backend\n\t\t\t\t\tif (response?.data)\n\t\t\t\t\t\tresponse.data.sort((ele1, ele2) => sortProfilUpdates(ele1, ele2, this));\n\n\t\t\t\t\treturn response.data;\n },\n //? adds tooltip with the status message of a profil update request if its status is not pending\n columnDefaults: {\n tooltip: (e, cell, onRendered) => {\n //e - mouseover event\n //cell - cell component\n //onRendered - onRendered callback registration function\n let statusMessage = cell.getData().status_message;\n let statusDate = cell.getData().status_timestamp;\n let status = cell.getData().status;\n if (!statusMessage) {\n return null;\n }\n let el = document.createElement(\"div\");\n el.classList.add(\"border\", \"border-dark\");\n\n let statusDateEl = document.createElement(\"span\");\n statusDateEl.classList.add(\"d-block\", \"mb-1\");\n statusDateEl.innerHTML =\n \"Request was \" + status + \" on \" + statusDate;\n let statusMessageEl = document.createElement(\"span\");\n statusMessageEl.innerHTML = \"Status message: \" + statusMessage;\n\n el.appendChild(statusDateEl);\n el.appendChild(statusMessageEl);\n return el;\n },\n },\n rowContextMenu: (e, component) => {\n let menu = [];\n if (\n component.getData().status === this.profilUpdateStates[\"Pending\"]\n ) {\n menu.push(\n {\n label: ` ${this.$p.t(\n \"profilUpdate\",\n \"acceptUpdate\"\n )}`,\n action: (e, column) => {\n this.$api\n .call(ApiProfilUpdate.acceptProfilRequest(column.getData()))\n .then((res) => {\n this.$refs.UpdatesTable.tabulator.setData();\n })\n\t\t\t\t\t.catch((e) => this.$fhcAlert.handleSystemError);\n },\n },\n {\n separator: true,\n },\n {\n label: ` ${this.$p.t(\n \"profilUpdate\",\n \"denyUpdate\"\n )}`,\n action: (e, column) => {\n this.$api\n .call(ApiProfilUpdate.denyProfilRequest(column.getData()))\n .then((res) => {\n this.$refs.UpdatesTable.tabulator.setData();\n })\n\t\t\t\t\t.catch((e) => this.$fhcAlert.handleSystemError);\n },\n },\n {\n separator: true,\n },\n {\n label: ` ${this.$p.t(\n \"profilUpdate\",\n \"showRequest\"\n )}`,\n action: (e, column) => {\n this.showAcceptDenyModal(column.getData());\n },\n }\n );\n } else {\n menu.push({\n label: ` ${this.$p.t(\n \"profilUpdate\",\n \"showRequest\"\n )}`,\n action: (e, column) => {\n this.showAcceptDenyModal(column.getData());\n },\n });\n }\n return menu;\n },\n\n height: 600,\n layout: \"fitDataStretchFrozen\",\n\n columns: [\n {\n title: this.$p.t(\"profilUpdate\", \"UID\"),\n field: \"uid\",\n minWidth: 100,\n resizable: true,\n headerFilter: true,\n //responsive:0,\n },\n {\n title: this.$p.t(\"profilUpdate\", \"Name\"),\n field: \"name\",\n minWidth: 200,\n resizable: true,\n headerFilter: true,\n //responsive:0,\n },\n {\n title: this.$p.t(\"lehre\", \"studiengang\") + ' (' + this.$p.t(\"profil\", \"studentIn\") + ')',\n field: \"studiengang\",\n minWidth: 50,\n resizable: true,\n headerFilter: \"list\",\n headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:\"asc\"},\n //responsive:0,\n },\n {\n title: this.$p.t(\"lehre\", \"organisationsform\") + ' (' + this.$p.t(\"profil\", \"studentIn\") + ')',\n field: \"orgform\",\n minWidth: 50,\n resizable: true,\n headerFilter: \"list\",\n headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:\"asc\"},\n //responsive:0,\n },\n {\n title: this.$p.t(\"lehre\", \"organisationseinheit\") + ' (' + this.$p.t(\"profil\", \"mitarbeiterIn\") + ')',\n field: \"oezuordnung\",\n minWidth: 200,\n resizable: true,\n headerFilter: \"list\",\n headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:\"asc\"},\n //responsive:0,\n },\n {\n title: this.$p.t(\"profilUpdate\", \"Topic\"),\n field: \"topic\",\n resizable: true,\n minWidth: 200,\n headerFilter: \"list\",\n headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:\"asc\"},\n //responsive:0,\n },\n {\n title: this.$p.t(\"profilUpdate\", \"insertamum\"),\n field: \"insertamum_iso\",\n resizable: true,\n\t\t\theaderFilterFunc: 'dates',\n\t\t\theaderFilter: dateFilter,\n minWidth: 200,\n\t\t\tformatter:\"datetime\",\n\t\t\tformatterParams: this.datetimeFormatterParams(),\n //responsive:0,\n },\n {\n title: this.$p.t(\"profilUpdate\", \"Status\"),\n field: \"status_translated\",\n hozAlign: \"center\",\n headerFilter: \"list\",\n headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:\"asc\"},\n formatter: (cell, para) => {\n let iconClasses = \"\";\n let status = cell.getRow().getData().status;\n switch (status) {\n case this.profilUpdateStates[\"Pending\"]:\n iconClasses += \"fa fa-lg fa-circle-info text-info \";\n break;\n case this.profilUpdateStates[\"Accepted\"]:\n iconClasses += \"fa fa-lg fa-circle-check text-success \";\n break;\n case this.profilUpdateStates[\"Rejected\"]:\n iconClasses += \"fa fa-lg fa-circle-xmark text-danger \";\n break;\n }\n return `
${cell.getValue()}
`;\n },\n\n resizable: true,\n minWidth: 200,\n //responsive:0,\n },\n {\n title: this.$p.t(\"profilUpdate\", \"actions\"),\n headerSort: false,\n\t\t\tfrozen: true,\n formatter: (cell, params) => {\n let details = this.$p.t('global', 'details');\n let html = `
\n \n
`;\n\n // Convert the HTML string to an HTML node\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, \"text/html\");\n const node = doc.body.firstChild;\n\n // Add event listeners\n node\n .querySelector(\"#showButton\")\n .addEventListener(\"click\", () => {\n this.showAcceptDenyModal(cell.getRow().getData());\n });\n\n return node;\n },\n minWidth: 200,\n resizable: true,\n hozAlign: \"center\",\n },\n ],\n };\n }\n \n },\n methods: {\n denyProfilUpdate: function (data) {\n this.$api\n .call(ApiProfilUpdate.denyProfilRequest(data))\n .then((res) => {\n // block when the request was successful\n })\n\t\t.catch((e) => this.$fhcAlert.handleSystemError)\n .finally(() => {\n this.$refs.UpdatesTable.tabulator.setData();\n });\n },\n acceptProfilUpdate: function (data) {\n this.$api\n .call(ApiProfilUpdate.acceptProfilRequest(data))\n .then((res) => {\n // block when the request was successful\n })\n\t\t.catch((e) => this.$fhcAlert.handleSystemError)\n .finally(() => {\n // update the data inside the table\n this.$refs.UpdatesTable.tabulator.setData();\n });\n },\n setLoading: function (newValue) {\n this.loading = newValue;\n },\n hideAcceptDenyModal: function () {\n //? checks the AcceptDenyModal component property result, if the user made a successful request or not\n if (this.$refs.AcceptDenyModal.result) {\n //? refetches the data, if any request was denied or accepted\n //* setData will call the ajaxURL again to refresh the data\n\n this.$refs.UpdatesTable.tabulator.setData();\n } else {\n // when modal was closed without submitting request\n }\n this.showModal = false;\n this.modalData = null;\n },\n\n showAcceptDenyModal(value) {\n this.modalData = value;\n if (!this.modalData) {\n return;\n }\n this.showModal = true;\n\n // after a state change, wait for the DOM updates to complete\n Vue.nextTick(() => {\n this.$refs.AcceptDenyModal.show();\n });\n },\n\n updateData: function (event) {\n this.$refs.UpdatesTable.tabulator.setData();\n //? store the selected view in the session storage of the browser\n sessionStorage.setItem(\"filter\", event.target.value);\n\t\t},\n\t\thandleDataProcessed: function () {\n\t\t\tif (this.profil_update_id) {\n\t\t\t\tconst arrayRowData = this.$refs.UpdatesTable.tabulator\n\t\t\t\t\t.getData()\n\t\t\t\t\t.filter((row) => {\n\t\t\t\t\t\treturn row.profil_update_id === this.profil_update_id;\n\t\t\t\t\t});\n\t\t\t\tif (arrayRowData.length) {\n\t\t\t\t\tthis.showAcceptDenyModal(arrayRowData[0]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdatetimeFormatterParams: function() {\n\t\t\tconst params = {\n\t\t\t\tinputFormat:\"yyyy-MM-dd\",\n\t\t\t\toutputFormat:\"dd.MM.yyyy\",\n\t\t\t\tinvalidPlaceholder:\"(invalid date)\",\n\t\t\t\ttimezone:FHC_JS_DATA_STORAGE_OBJECT.timezone\n\t\t\t};\n\t\t\treturn params;\n\t\t}\n },\n watch: {\n loading: function (newValue, oldValue) {\n if (newValue) {\n this.$refs.loadingModalRef.show();\n } else {\n this.$refs.loadingModalRef.hide();\n }\n },\n },\n created() {\n this.$p.loadCategory([\"profilUpdate\", \"lehre\", \"profil\", \"global\"]).then(() => {\n this.categoryLoaded = true;\n });\n },\n\n mounted() {\n\t\t//? opens the AcceptDenyUpdate Modal if a preselected profil_update_id was passed to the component (used for email links)\n if (sessionStorage.getItem(\"filter\")) {\n this.filter = sessionStorage.getItem(\"filter\");\n }\n },\n template: /*html*/ `\n
\n \n \n
\n
{{$p.t('ui','anzeigen')}}
\n \n \n \n
\n \n \n \n\n
`,\n};\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsearch(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/search';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchAdvanced(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/searchAdvanced';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchdummy(searchsettings) {\n\t\tconst url = 'public/js/apps/api/dummyapi.php/Search';\n\t\treturn this.$fhcApi.post(url, searchsettings);\n\t}\n};\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/loadModule/' + category);\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst payload = {categories, language}\n\t\treturn this.$fhcApi.post('/api/frontend/v1/phrasen/setLanguage', payload);\n\t},\n\tgetLanguage() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getLanguage', {});\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getAllLanguages', {});\n\t}\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetHeader(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/header',\n\t\t\t{ navigation_page }\n\t\t);\n\t},\n\tgetMenu: function(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/menu',\n\t\t\t{ navigation_page }\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/saveCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t);\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/applyFilterFields',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t);\n\t},\n\taddFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/addFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tgetFilter(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tabmeldung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/abmeldung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(stdsem, prestudent_id, grund) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/abmeldung/createAntrag', {\n\t\t\t\tstudiensemester: stdsem,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\tif (!Array.isArray(antrag_id))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t\t{ antrag_id }\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag_id.map(antrag => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t{ antrag_id: antrag.studierendenantrag_id },\n\t\t\t\t{ errorHeader: '#' + antrag.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t},\n\tunterbrechung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/unterbrechung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(studiensemester, prestudent_id, grund, datum_wiedereinstieg, attachment) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/createAntrag', {\n\t\t\t\tstudiensemester,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund,\n\t\t\t\tdatum_wiedereinstieg,\n\t\t\t\tattachment\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/cancelAntrag', {\n\t\t\t\tantrag_id\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t}\n\t},\n\twiederholung: {\n\t\tgetDetails(prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/' + prestudent_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tgetLvs(antrag_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getLvs/' + antrag_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tcreate(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/createAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/cancelAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tsaveLvs(forbiddenLvs, mandatoryLvs) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/saveLvs', {\n\t\t\t\tforbiddenLvs,\n\t\t\t\tmandatoryLvs\n\t\t\t});\n\t\t}\n\t},\n\tleitung: {\n\t\tgetStgs() {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getActiveStgs');\n\t\t},\n\t\tgetAntraege(url, config, params) {\n\t\t\treturn this.$fhcApi\n\t\t\t\t.get('/api/frontend/v1/studstatus/leitung/getAntraege/' + url)\n\t\t\t\t.then(res => res.data); // Return data for tabulator\n\t\t},\n\t\tgetHistory(antrag_id) {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getHistory/' + antrag_id)\n\t\t},\n\t\tgetPrestudents(query, signal) {\n\t\t\treturn this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/getPrestudents',\n\t\t\t\t{ query },\n\t\t\t\t{\n signal: signal,\n timeout: 30000\n }\n\t\t\t);\n\t\t},\n\t\tapprove(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treopen(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tunpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tobject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tapproveObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tdenyObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t}\n};","export default {\n\n getView: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getView/${uid}`,{}\n );\n },\n\n fotoSperre: function (value) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/fotoSperre/${value}`,\n {}\n );\n \n },\n\n isStudent: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isStudent`,\n {\n uid:uid,\n }\n );\n },\n\n isMitarbeiter: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isMitarbeiter/${uid}`,\n {}\n );\n },\n\n getZustellAdresse: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellAdresse`,{}\n );\n },\n\n getZustellKontakt: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellKontakt`,{}\n );\n },\n\n getGemeinden: function(nation,zip){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getGemeinden/${nation}/${zip}`,\n {}\n );\n \n },\n getAllNationen:function(){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Profil/getAllNationen\",{}\n );\n },\n}","export default {\n //! API calls for profil update requests\n \n getStatus: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getStatus`,{});\n },\n \n getTopic: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getTopic`,{});\n },\n \n acceptProfilRequest: function ({profil_update_id, uid, status_message, topic, requested_change}) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/acceptProfilRequest\",{profil_update_id, uid, status_message, topic, requested_change});\n },\n \n denyProfilRequest: function ({profil_update_id, uid, topic, status_message}) {\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/denyProfilRequest\",{profil_update_id,uid,topic,status_message});\n },\n \n insertFile: function (dms, replace = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n dms);\n\n },\n \n getProfilRequestFiles: function (requestID) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`,{});\n },\n \n selectProfilRequest: function (uid = null, id = null) {\n\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/selectProfilRequest`,\n {...(uid?{uid}:{}),\n ...(id?{id}:{})\n });\n },\n \n insertProfilRequest: function (topic, payload, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/insertProfilRequest\",\n {\n topic,\n payload,\n ...(fileID ? { fileID } : {}),\n });\n },\n \n updateProfilRequest: function (topic, payload, ID, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/updateProfilRequest`,\n {\n topic,\n payload,\n ID,\n ...(fileID ? { fileID: fileID } : {}),\n });\n },\n \n deleteProfilRequest: function (requestID) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/deleteProfilRequest`,\n {\n requestID,\n });\n },\n };\n ","\nexport default {\n\tgetRoomInfo(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getRoomplan',\n\t\t\t{ ort_kurzbz, start_date, end_date}\n\t\t);\n\t},\n\tgetStunden() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/Stunden',\n\t\t\t{}\n\t\t);\n\t},\n\tgetOrtReservierungen(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/LvPlan/getReservierungen/${ort_kurzbz}`,\n\t\t\t{ start_date, end_date}\n\t\t);\n\t},\n\tgetLvPlanReservierungen(start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getReservierungen',\n\t\t\t{ start_date, end_date }\n\t\t);\n\t},\n\tgetLehreinheitStudiensemester(lehreinheit_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${lehreinheit_id}`,\n\t\t\t{}\n\t\t);\n\t},\n\tstudiensemesterDateInterval(date) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${date}`,\n\t\t\t{}\n\t\t);\n\t},\n\tLvPlanEvents(start_date, end_date, lv_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/LvPlanEvents',\n\t\t\t{ start_date, end_date, lv_id }\n\t\t);\n\t},\n\t\n\t\n};","import verband from './stv/verband.js';\nimport students from './stv/students.js';\nimport filter from './stv/filter.js';\nimport konto from './stv/konto.js';\nimport group from './stv/group.js';\nimport kontakt from './stv/kontakt.js';\nimport prestudent from './stv/prestudent.js';\nimport status from './stv/status.js';\nimport details from './stv/details.js';\nimport exam from './stv/exam.js';\nimport abschlusspruefung from './stv/abschlusspruefung.js';\nimport grades from './stv/grades.js';\nimport mobility from './stv/mobility.js';\nimport archiv from './stv/archiv.js';\nimport documents from './stv/documents.js';\nimport exemptions from './stv/exemptions.js';\nimport jointstudies from \"./stv/jointstudies.js\";\nimport courselist from './stv/courselist.js';\n\nexport default {\n\tverband,\n\tstudents,\n\tfilter,\n\tkonto,\n\tgroup,\n\tkontakt,\n\tprestudent,\n\tstatus,\n\tdetails,\n\texam,\n\tabschlusspruefung,\n\tgrades,\n\tmobility,\n\tarchiv,\n\tdocuments,\n\texemptions,\n\tjointstudies,\n\tcourselist,\n\tconfigStudent() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/student');\n\t},\n\tconfigStudents() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/students');\n\t}\n};\n","export default {\n\tget() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/verband');\n\t},\n\tfavorites: {\n\t\tget() {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/stv/favorites');\n\t\t},\n\t\tset(favorites) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/stv/favorites/set', {\n\t\t\t\tfavorites\n\t\t\t});\n\t\t}\n\t}\n}","export default {\n\tuid(uid, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/uid/'\n\t\t\t+ encodeURIComponent(uid);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tprestudent(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/prestudent/'\n\t\t\t+ encodeURIComponent(prestudent_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tperson(person_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/person/'\n\t\t\t+ encodeURIComponent(person_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tverband(relative_path) {\n\t\treturn this.$fhcApi.getUri('api/frontend/v1/stv/students/' + relative_path);\n\t}\n}","export default {\n\tgetStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/filter/getStg');\n\t},\n\tsetStg(studiengang_kz) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/filter/setStg', {\n\t\t\tstudiengang_kz\n\t\t});\n\t}\n};","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/konto/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id),\n\t\t\t\tonly_open: self.filter,\n\t\t\t\tstudiengang_kz: self.studiengang_kz_intern ? self.stg_kz : ''\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tcheckDoubles(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/checkDoubles', data, {\n\t\t\tconfirmErrorHandler: error => true\n\t\t});\n\t},\n\tinsert(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/insert', data);\n\t},\n\tcounter(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/counter', data);\n\t},\n\tedit(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/update', data);\n\t},\n\tdelete(buchungsnr) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/delete', {buchungsnr});\n\t},\n\tgetBuchungstypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/konto/getBuchungstypen');\n\t}\n};","export default {\n\tgetGruppen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/Gruppen/getGruppen/' + params.id);\n\t},\n\tdeleteGroup(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/Gruppen/deleteGruppe/', params);\n\t}\n}","export default {\n\t//------------- address.js-----------\n\tgetAdressen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressen/' + params.id);\n\t},\n\taddNewAddress(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewAddress/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadAddress(address_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadAddress/', {address_id});\n\t},\n\tupdateAddress(form, address_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateAddress/' + address_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteAddress(address_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteAddress/', {address_id});\n\t},\n\tgetPlaces(plz) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getPlaces/' + plz);\n\t},\n\tgetFirmen(searchString) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getFirmen/' + searchString);\n\t},\n\tgetNations() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getNations/');\n\t},\n\tgetAdressentypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressentypen/');\n\t},\n\n\t//------------- bankverbindung.js-----------\n\tgetBankverbindung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getBankverbindung/' + params.id);\n\t},\n\taddNewBankverbindung(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewBankverbindung/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadBankverbindung(bankverbindung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadBankverbindung/', {bankverbindung_id});\n\t},\n\tupdateBankverbindung(form, bankverbindung_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateBankverbindung/' + bankverbindung_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteBankverbindung(bankverbindung_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteBankverbindung/', {bankverbindung_id});\n\t},\n\n\t//------------- contact.js-----------\n\tgetKontakte (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakte/' + params.id);\n\t},\n\taddNewContact(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewContact/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadContact(kontakt_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadContact/', {kontakt_id});\n\t},\n\tupdateContact(form, kontakt_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateContact/' + kontakt_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteContact(kontakt_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteContact/', {kontakt_id});\n\t},\n\tgetStandorteByFirma(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getStandorteByFirma/' + searchString);\n\t},\n\tgetKontakttypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakttypen/');\n\t}\n};","export default {\n\n//------------- Prestudent.js------------------------------------------------------\n\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\treturn \tthis.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/prestudent/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t);\n\t},\n\tupdatePrestudent(form, prestudent_id, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/prestudent/updatePrestudent/' + prestudent_id,\n\t\t\tdata\n\t\t);\n\t},\n\tgetBezeichnungZGV() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungZGV/');\n\t},\n\tgetBezeichnungMZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungMZgv/');\n\t},\n\tgetBezeichnungDZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungDZgv/');\n\t},\n\tgetStgs() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStgs/');\n\t},\n\tgetAusbildung() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAusbildung/');\n\t},\n\tgetAufmerksamdurch() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAufmerksamdurch/');\n\t},\n\tgetBerufstaetigkeit() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBerufstaetigkeit/');\n\t},\n\tgetTypenStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getTypenStg/');\n\t},\n\tgetBisstandort() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBisstandort/');\n\t},\n\n//------------- MultiStatus.js------------------------------------------------------\n\tgetHistoryPrestudent (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getHistoryPrestudent/' + params.id);\n\t},\n\tgetMaxSem(studiengang_kzs) {\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/status/getMaxSemester/', {studiengang_kzs});\n\t},\n\tadvanceStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/advanceStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tconfirmStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/confirmStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tisLastStatus(id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/isLastStatus/' + id);\n\t},\n\tdeleteStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/deleteStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tgetLastBismeldestichtag() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getLastBismeldestichtag/');\n\t},\n\n//------------- History.js------------------------------------------------------\n\tgetHistoryPrestudents (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getHistoryPrestudents/' + params.id);\n\t},\n\n}","export default {\n\n//------------- Modal.js------------------------------------------------------\n\n\tinsertStatus(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/status/insertStatus/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/status/loadStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tupdateStatus(form, {prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}, data) {\n\t\treturn this.$fhcApi.post(\n\t\t\tform,\n\t\t\t'api/frontend/v1/stv/status/updateStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester,\n\t\t\tdata\n\t\t);\n\t},\n\tgetStudienplaene(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudienplaene/' + prestudent_id);\n\t},\n\tgetStudiengang(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudiengang/' + prestudent_id);\n\t},\n\tgetStatusgruende() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusgruende/');\n\t},\n\tgetStati() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStati/');\n\t},\n\n//------------- Dropdown.js------------------------------------------------------\n\n\taddStudent(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/addStudent/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tchangeStatus(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/changeStatus/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tgetStatusarray() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusarray/');\n\t}\n}","export default {\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/student/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(url);\n\t},\n\tsave(form, prestudent_id, studiensemester_kurzbz, data) {\n\t\tlet url = 'api/frontend/v1/stv/student/save/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(form, url, data);\n\t},\n}\n","export default {\n\tgetPruefungen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getPruefungen/' + params.id);\n\t},\n\tloadPruefung(pruefung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/loadPruefung/' + pruefung_id);\n\t},\n\tgetTypenPruefungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getTypenPruefungen');\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/getAllLehreinheiten/', data)\n\t},\n\tgetLvsByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsByStudent/' + uid)\n\t},\n\tgetLvsandLesByStudent(uid, semester){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsandLesByStudent/' + uid + '/' + semester);\n\t},\n\tgetLvsAndMas(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsAndMas/' + uid)\n\t},\n\tgetMitarbeiterLv(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getMitarbeiterLv/' + id)\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getNoten');\n\t},\n\tcheckZeugnisnoteLv(data){\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/', data)\n\t},\n\taddPruefung(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/insertPruefung/', data);\n\t},\n\tupdatePruefung(form, id, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/updatePruefung/' + id, data);\n\t},\n\tdeletePruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/deletePruefung/' + id)\n\t}\n}","export default {\n\n\tgetAbschlusspruefung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/' + params.id);\n\t},\n\taddNewAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/', data\n\t\t);\n\t},\n\tloadAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/', {id});\n\t},\n\tupdateAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/', data\n\t\t);\n\t},\n\tdeleteAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/', {id});\n\t},\n\tgetTypenAbschlusspruefung(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/');\n\t},\n\tgetTypenAntritte(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/');\n\t},\n\tgetBeurteilungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/');\n\t},\n\tgetAkadGrade(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getAkadGrade/', {studiengang_kz});\n\t},\n\tgetTypStudiengang(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/', {studiengang_kz});\n\t},\n\tgetMitarbeiter(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/' + searchString);\n\t},\n\tgetPruefer(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getPruefer/' + searchString);\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getNoten/');\n\t},\n\tcheckForExistingExams(uids) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/', {uids}\n\t\t);\n\t}\n}","export default {\n\tlist() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/grades/list');\n\t},\n\tgetCertificate(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getCertificate/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetTeacherProposal(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getTeacherProposal/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetRepeaterGrades(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getRepeaterGrades/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tupdateCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, note, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/updateCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz,\n\t\t\t\tnote\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tdeleteCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/deleteCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyTeacherProposalToCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyTeacherProposalToCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id, lv_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate',\n\t\t\t{\n\t\t\t\tstudierendenantrag_lehrveranstaltung_id\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lv_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tgetGradeFromPoints(points, lehrveranstaltung_id, studiensemester_kurzbz, manualErrorHandling) {\n\t\tconst config = manualErrorHandling ? {errorHandling: false} : {};\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/grades/getGradeFromPoints',\n\t\t\t{\n\t\t\t\t\"points\": points,\n\t\t\t\t\"lehrveranstaltung_id\": lehrveranstaltung_id,\n\t\t\t\t\"studiensemester_kurzbz\": studiensemester_kurzbz\n\t\t\t},\n\t\t\tconfig\n\t\t\t);\n\t}\n}","export default {\n\tgetMobilitaeten (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getMobilitaeten/' + params.id);\n\t},\n\tgetProgramsMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getProgramsMobility/');\n\t},\n\taddNewMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/insertMobility/', data);\n\t},\n\tloadMobility(bisio_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/loadMobility/' + bisio_id);\n\t},\n\tupdateMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/updateMobility/', data);\n\t},\n\tdeleteMobility(bisio_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobility/' + bisio_id);\n\t},\n\tgetLVList(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLVList/' + studiengang_kz);\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/getAllLehreinheiten/', data)\n\t},\n\tgetLvsandLesByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLvsandLesByStudent/' + uid);\n\t},\n\tgetPurposes(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getPurposes/' + params.id);\n\t},\n\tgetSupports(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getSupports/' + params.id);\n\t},\n\tgetListPurposes() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListPurposes/');\n\t},\n\tgetListSupports() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListSupports/');\n\t},\n\tdeleteMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilityPurpose/' + params.bisio_id, params);\n\t},\n\taddMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilityPurpose/' + params.bisio_id, params);\n\t},\n\tdeleteMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilitySupport/' + params.bisio_id, params);\n\t},\n\taddMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilitySupport/' + params.bisio_id, params);\n\t},\n\n}","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/archiv/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id)\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tgetArchivVorlagen() {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/getArchivVorlagen');\n\t},\n\tarchive(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archive',\n\t\t\tdata\n\t\t);\n\t},\n\tarchiveSigned(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archiveSigned',\n\t\t\tdata\n\t\t);\n\t},\n\tupdate(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/update', data);\n\t},\n\tdelete({akte_id, studiengang_kz}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/delete', {akte_id, studiengang_kz});\n\t}\n};\n","export default {\n\tgetDocumentsUnaccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tgetDocumentsAccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsAccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tdeleteZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteZuordnung/' + params.prestudent_id + '/' + params.dokument_kurzbz);\n\t},\n\tcreateZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/createZuordnung/'\n\t\t\t+ params.prestudent_id + '/'\n\t\t\t+ params.dokument_kurzbz);\n\t},\n\tloadAkte(akte_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/loadAkte/' + akte_id);\n\t},\n\tgetDoktypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDoktypen/');\n\t},\n\tupdateFile(akte_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/updateAkte/' + akte_id,\n\t\t\tdata);\n\t},\n\tdeleteFile(akte_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteAkte/' + akte_id);\n\t},\n\tuploadFile(prestudent_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/uploadDokument/' + prestudent_id,\n\t\t\tdata);\n\t},\n}","export default {\n\tgetAnrechnungen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getAnrechnungen/' + params.id);\n\t},\n\tgetLehrveranstaltungen(prestudent_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/' + prestudent_id);\n\t},\n\tgetBegruendungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getBegruendungen/');\n\t},\n\tgetLvsKompatibel(lv_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLvsKompatibel/' + lv_id);\n\t},\n\tgetLektoren(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLektoren/' + studiengang_kz);\n\t},\n\taddNewAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/insertAnrechnung/', data);\n\t},\n\tloadAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/loadAnrechnung/' + anrechnung_id);\n\t},\n\teditAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/updateAnrechnung/', data);\n\t},\n\tdeleteAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/anrechnungen/deleteAnrechnung/' + anrechnung_id);\n\t},\n}","export default {\n\tgetStudies(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudien/' + params.id);\n\t},\n\tgetTypenMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/');\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/');\n\t},\n\tgetStudyprograms(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/');\n\t},\n\tgetListPartner(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/');\n\t},\n\tgetStatiPrestudent(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/');\n\t},\n\tloadStudy(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/loadStudie/' + id);\n\t},\n\tinsertStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/insertStudie/', data);\n\t},\n\tupdateStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/updateStudie/', data);\n\t},\n\tdeleteStudy(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/GemeinsameStudien/deleteStudie/' + id);\n\t},\n\n}","export default {\n\tgetCourselist(url, config, params) {\n\t\t//corresponding logic controller Stundenplan.php\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStundenplan/'\n\t\t\t+ params.student_uid + '/'\n\t\t\t+ params.start_date + '/'\n\t\t\t+ params.end_date + '/'\n\t\t\t+ params.group_consecutiveHours + '/'\n\t\t\t+ params.dbStundenplanTable\n\t\t);\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStudiensemester/');\n\t},\n}","import person from \"./notiz/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetNotizen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getUid/');\n\t},\n\taddNewNotiz(form, id, formData) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(form, notiz_id, formData){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getMitarbeiter/' + event);\n\t},\n\tisBerechtigt(id, type_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/isBerechtigt/');\n\t}\n}","import person from \"./betriebsmittel/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetAllBetriebsmittel(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/' + params.type + '/' + params.id);\n\t},\n\taddNewBetriebsmittel(form, person_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/' +\n\t\t\tperson_id, formData\n\t\t);\n\t},\n\tloadBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/' + betriebsmittelperson_id);\n\t},\n\tupdateBetriebsmittel(form, betriebsmittelperson_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/' + betriebsmittelperson_id,\n\t\t\tformData);\n\t},\n\tdeleteBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/' +\tbetriebsmittelperson_id);\n\t},\n\tgetTypenBetriebsmittel(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/');\n\t},\n\tloadInventarliste(query){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/' +\tquery);\n\t}\n}","export default {\n\tupdatePersonUnrulyStatus(person_id, unrulyParam) {\n\n\t\ttry {\n\t\t\tconst payload = {person_id, unruly: unrulyParam}\n\t\t\tconst url = '/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus';\n\t\t\treturn this.$fhcApi.post(url, payload, null);\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t},\n\tfilterPerson(payload, base = ''){\n\n\t\ttry {\n\t\t\tconst url = base + '/api/frontend/v1/checkperson/CheckPerson/filterPerson';\n\t\t\treturn axios.post(url, payload)\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t}\n}","export default {\n getContentID(ort_kurbz) {\n\t\treturn this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Ort/ContentID\",\n\t\t\t{ ort_kurzbz: ort_kurbz }\n\t\t);\n\t},\n\tgetRooms(datum, von, bis, typ, personenanzahl = 0) {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getRooms\",\n\t\t\t{ datum, von, bis, typ, personenanzahl }\n\t\t);\n\t},\n\tgetRoomTypes() {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getTypes\"\n\t\t);\n\t}\n}","export default {\n content(content_id, version=null, sprache=null, sichtbar=null) {\n return this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/content\",\n\t\t\t{ \n\t\t\t\tcontent_id: content_id,\n\t\t\t\t...(version?{version}:{}),\n\t\t\t\t...(sprache?{sprache}:{}),\n\t\t\t\t...(sichtbar?{sichtbar}:{}),\n }\n );\n },\n\t//api function used for the news View that renders the html\n\tgetNews(page = 1, page_size = 10, sprache) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNews\",\n\t\t\t{\n\t\t\t\tpage,\n\t\t\t\tpage_size,\n\t\t\t\tsprache,\n\t\t\t},\n\t\t);\n\t},\n\t//api function used for the widget component\n\tnews(limit) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/news\",\n\t\t\t{\n\t\t\t\tlimit: limit\n\t\t\t}\n\t\t);\n\t},\n\tgetNewsRowCount: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNewsRowCount\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetNewsExtra: function(){\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getStudiengangInfoForNews\",\n\t\t\t{}\n\t\t);\n\t}\n }","export default {\n getStudentenMail(lehreinheit_id) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Lehre/lvStudentenMail\",\n { lehreinheit_id: lehreinheit_id }\n );\n },\n\tgetLvInfo(studiensemester_kurzbz, lehrveranstaltung_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/LV/${studiensemester_kurzbz}/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentPruefungen(lehrveranstaltung_id){\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentProjektarbeiten(uid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getStudentProjektarbeiten/${uid}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentProjektabgaben(detail) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getStudentProjektabgaben`\n\t\t\t, {\n\t\t\t\tprojektarbeit_id: detail.projektarbeit_id,\n\t\t\t\tstudent_uid: detail.student_uid\n\t\t\t}\n\t\t);\n\t},\n\tpostStudentProjektarbeitEndupload(formData) {\n\t\tconst url = '/api/frontend/v1/Lehre/postStudentProjektarbeitEndupload';\n\t\tconst headers = {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\treturn this.$fhcApi.post(url, formData, headers)\n\t},\n\tpostStudentProjektarbeitZwischenabgabe(formData) {\n\t\tconst url = '/api/frontend/v1/Lehre/postStudentProjektarbeitZwischenabgabe';\n\t\tconst headers = {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\treturn this.$fhcApi.post(url, formData, headers)\n\t},\n\tgetStudentProjektarbeitAbgabeFile(paabgabe_id, student_uid) {\n\t\tconst url = `/Cis/Abgabetool/getStudentProjektarbeitAbgabeFile?paabgabe_id=${paabgabe_id}&student_uid=${student_uid}`;\n\n\t\twindow.location = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + url\n\t},\n\tgetMitarbeiterProjektarbeiten(uid, all) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getMitarbeiterProjektarbeiten?showall=${all}`\n\t\t\t, {}\n\t\t);\n\t},\n\tpostProjektarbeitAbgabe(termin) {\n\t\tconst payload = {\n\t\t\tpaabgabe_id: termin.paabgabe_id,\n\t\t\tpaabgabetyp_kurzbz: termin.bezeichnung.paabgabetyp_kurzbz,\n\t\t\tdatum: termin.datum,\n\t\t\tfixtermin: termin.fixtermin,\n\t\t\tinsertvon: termin.insertvon,\n\t\t\tkurzbz: termin.kurzbz,\n\t\t\tprojektarbeit_id: termin.projektarbeit_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/postProjektarbeitAbgabe';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t\t\n\t},\n\tdeleteProjektarbeitAbgabe(paabgabe_id) {\n\t\tconst payload = {\n\t\t\tpaabgabe_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/deleteProjektarbeitAbgabe';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t},\n\tpostSerientermin(datum, paabgabetyp_kurzbz, bezeichnung, kurzbz, projektarbeit_ids) {\n\t\tconst payload = {\n\t\t\tdatum, paabgabetyp_kurzbz, bezeichnung, kurzbz, projektarbeit_ids\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/postSerientermin';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t},\n\tfetchDeadlines(person_id) {\n\t\tconst payload = {\n\t\t\tperson_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/fetchDeadlines';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t}\n }","export default {\n getLvMenu(lvid, studiensemester_kurzbz) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/LvMenu/getLvMenu/${lvid}/${studiensemester_kurzbz}`,\n {}\n );\n },\n\n \n }","import person from \"./messages/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\t\tgetMessages(url, config, params) {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessages/' + params.id + '/' + params.type + '/' + params.size + '/' + params.page);\n\t\t},\n\t\tgetVorlagen(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagen/');\n\t\t},\n\t\tgetMsgVarsLoggedInUser(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/');\n\t\t},\n\t\tgetMessageVarsPerson(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessageVarsPerson/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetMsgVarsPrestudent(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsPrestudent/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPersonId(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getPersonId/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetUid(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getUid/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetDataVorlage(vorlage_kurzbz){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getDataVorlage/' + vorlage_kurzbz);\n\t\t},\n\t\tgetNameOfDefaultRecipient(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getNameOfDefaultRecipient/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPreviewText(params, data){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/getPreviewText/' + params.id + '/' + params.type_id,\n\t\t\t\tdata);\n\t\t},\n\t\tgetReplyData(messageId){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getReplyData/' + messageId);\n\t\t},\n\t\tsendMessageFromModalContext(form, id, data) {\n\t\t\treturn this.$fhcApi.post(form,'api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tsendMessage(id, data) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tdeleteMessage(messageId){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/deleteMessage/' + messageId);\n\t\t}\n}","export default {\n\tgetVorlagen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagen/');\n\t},\n\tgetVorlagenByLoggedInUser() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/');\n\t}\n}","export default {\n\n\tgetStudiensemester: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/components/Cis/Mylv/Studiensemester',\n\t\t\t{}\n\t\t);\n\t},\n\n\tgetAllStudienSemester: function (studiensemester=undefined, studiengang=undefined, semester=undefined, studienplan=undefined) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/Studium/getStudienAllSemester',\n\t\t\t{studiensemester, studiengang, semester, studienplan}\n\t\t);\n\t},\n\n\tgetStudiengaengeForStudienSemester: function (studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${studiensemester}`,\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudienplaeneBySemester: function (studiengang, studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudienplaeneBySemester`,\n\t\t\t{\n\t\t\t\tstudiengang,\n\t\t\t\tstudiensemester,\n\t\t\t}\n\t\t);\n\t},\n\tgetLvPlanForStudiensemester: function (studiensemester, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${studiensemester}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\tgetLvEvaluierungInfo: function (studiensemester_kurzbz, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getLvEvaluierungInfo/${studiensemester_kurzbz}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\t\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport search from \"./search.js\";\nimport phrasen from \"./phrasen.js\";\nimport navigation from \"./navigation.js\";\nimport filter from \"./filter.js\";\nimport studstatus from \"./studstatus.js\";\nimport profil from \"./profil.js\";\nimport profilUpdate from \"./profilUpdate.js\";\nimport lvPlan from \"./lvPlan.js\";\nimport bookmark from \"./bookmark.js\";\nimport stv from \"./stv.js\";\nimport notiz from \"./notiz.js\";\nimport betriebsmittel from \"./betriebsmittel.js\";\nimport checkperson from \"./checkperson.js\";\nimport ampeln from \"./ampeln.js\";\nimport ort from \"./ort.js\";\nimport cms from \"./cms.js\";\nimport lehre from \"./lehre.js\";\nimport addons from \"./addons.js\";\nimport messages from \"./messages.js\";\nimport vorlagen from \"./vorlagen.js\";\nimport studiengang from \"./studiengang.js\";\nimport menu from \"./menu.js\";\nimport dashboard from \"./dashboard.js\";\nimport authinfo from \"./authinfo.js\";\nimport studium from \"./studium.js\";\nimport language from \"./language.js\";\n\nexport default {\n search,\n phrasen,\n navigation,\n dashboard,\n filter,\n studstatus,\n profil,\n profilUpdate,\n lvPlan,\n bookmark,\n stv,\n notiz,\n betriebsmittel,\n checkperson,\n ampeln,\n ort,\n cms,\n lehre,\n addons,\n messages,\n vorlagen,\n addons,\n\tstudiengang,\n\tmenu,\n\tauthinfo,\n\tstudium,\n language\n};\n","export default {\n\tasync getViewData() {\n\t\tconst url = `/api/frontend/v1/Cis4FhcApi/getViewData`;\n\t\treturn this.$fhcApi.get(url, null, null)\n\t},\n}","export default {\n\n getBookmarks: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/getBookmarks`\n ,{}\n );\n },\n \n delete: function (bookmark_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/delete/${bookmark_id}`\n ,{}\n ); \n },\n\n\tupdate: function ({ bookmark_id, url, title, tag=null}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/Bookmark/update/${bookmark_id}`\n\t\t\t, {\n\t\t\t\turl: url,\n\t\t\t\ttitle: title\n\t\t\t}\n\t\t);\n\t},\n\n insert: function ({url, title, tag}) {\n return this.$fhcApi.post(\n `/api/frontend/v1/Bookmark/insert`\n ,{\n url: url,\n title: title,\n tag: tag\n }\n ); \n },\n}","export default {\n \n open: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/open`,{});\n },\n\n all: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/all`,{});\n },\n\n confirm: function (ampel_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/confirm/${ampel_id}`,{});\n },\n\n}","export default {\n\tstudiengangInformation: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Studgang/getStudiengangInfo\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudiengangByKz: function (studiengang_kz) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz\",\n\t\t\t{\n\t\t\t\t\"studiengang_kz\": studiengang_kz\n\t\t\t}\n\t\t);\n\t}\n}","export default {\n\tgetMenu: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/CisMenu/getMenu\",\n\t\t\t{}\n\t\t);\n\t}\n\n}","\nexport default {\n\tgetAuthUID() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthUID',\n\t\t\t{ }\n\t\t);\n\t},\n\tgetAuthInfo() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthInfo',\n\t\t\t{}\n\t\t);\n\t},\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAll() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/language/get');\n\t}\n};","/** TODO(chris):\n * when deleting this file be sure to\n * remove line 1 & 90 from ../plugins/Phrasen.js\n */\nimport FhcApiFactory from '../api/fhcapifactory.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$fhcApi) {\n\t\t\t/* Deprecated Code start */\n\t\t\tif (options?.factory) {\n\t\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\t\tapp.config.globalProperties.$fhcApi.factory.addEndpoints(options.factory);\n\t\t\t}\n\t\t\t/* Deprecated Code end */\n\t\t\treturn;\n\t\t}\n\n\t\tfunction _get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\n\t\tfunction _clean_return_value(response) {\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = {response};\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tconst baseURL = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\";\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(response => {\n\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\treturn _clean_return_value(response);\n\n\t\t\t// NOTE(chris): loop through errors\n\t\t\tif (response.data.errors)\n\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t);\n\n\t\t\treturn _clean_return_value(response);\n\t\t}, error => {\n\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\n\t\t\tif (error.config?.errorHandling == 'off'\n\t\t\t\t|| error.config?.errorHandling === false\n\t\t\t\t|| error.config?.errorHandling == 'success')\n\t\t\t\treturn Promise.reject(error);\n\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL, true);\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t\t}\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\terror.response.data.errors = error.response.data.errors.filter(\n\t\t\t\t\terr => (error.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, error.config)\n\t\t\t\t);\n\t\t\t\tif (!error.response.data.errors.length)\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else if (error.request) {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertError(error.message);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t}\n\n\t\t\treturn Promise.reject(error);\n\t\t});\n\n\t\tapp.config.globalProperties.$fhcApi = {\n\t\t\tgetUri(url) {\n\t\t\t\tconsole.warn('$fhcApi.getUri is DEPRECATED! Use $api.getUri instead.');\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\tconsole.warn('$fhcApi.get is DEPRECATED! Use $api.get instead.');\n\t\t\t\t[uri, params, config] = _get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\tconsole.warn('$fhcApi.post is DEPRECATED! Use $api.post instead.');\n\t\t\t\t[uri, data, config] = _get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\t_defaultErrorHandlers: {\n\t\t\t\tvalidation(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form) {\n\t\t\t\t\t\tconfig.form.clearValidation();\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.messages);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(error.messages)) {\n\t\t\t\t\t\terror.messages.forEach($fhcAlert.alertError);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (typeof error.messages == 'object') {\n\t\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t\tObject.values(error.messages).forEach(\n\t\t\t\t\t\t\t\tvalue => $fhcAlert.alertDefault(\n\t\t\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tObject.entries(error.messages).forEach(\n\t\t\t\t\t\t\t\t([key, value]) => $fhcAlert.alertDefault('error', key, value, true)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tgeneral(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form)\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.message);\n\t\t\t\t\telse if (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertError(error.message);\n\t\t\t\t},\n\t\t\t\tphp(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('warn', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('info', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\texception(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tdb(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tauth(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertDefault('error', error.message, message);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/* Deprecated Code start */\n\t\tclass FhcApiFactoryWrapper {\n\t\t\tconstructor(factorypart, root) {\n\t\t\t\tif (root === undefined) {\n\t\t\t\t\tthis.$fhcApi = {\n\t\t\t\t\t\tgetUri(url) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.getUri(url);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget(form, uri, params, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.get(form, uri, params, config);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpost(form, uri, data, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.post(form, uri, data, config);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tObject.defineProperty(this.$fhcApi, 'factory', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.factory;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tapp.config.globalProperties.$fhcApi.factory = this;\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty(this, '$fhcApi', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\treturn (root || this).$fhcApi;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.addEndpoints(factorypart, true)\n\t\t\t}\n\n\t\t\taddEndpoints(factorypart, noWarn) {\n\t\t\t\tObject.keys(factorypart).forEach(key => {\n\t\t\t\t\tObject.defineProperty(this, key, {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tif (typeof factorypart[key] == 'function')\n\t\t\t\t\t\t\t\treturn factorypart[key].bind(this);\n\t\t\t\t\t\t\treturn new FhcApiFactoryWrapper(factorypart[key], this.$fhcApi.factory);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tif (!noWarn) console.warn('$fhcApi.factory.addEndpoints() is DEPRECATED!');\n\t\t\t}\n\t\t}\n\n\t\tconst factory = new FhcApiFactoryWrapper(FhcApiFactory);\n\t\tif (options?.factory) {\n\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\tfactory.addEndpoints(options.factory);\n\t\t}\n\n\t\tapp.config.globalProperties.$fhcApi.factory = factory;\n\t\t/* Deprecated Code end */\n\t\t\n\t\tapp.provide('$fhcApi', app.config.globalProperties.$fhcApi);\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n//--------------------------------------------------------------------------------------------------------------------\n// Configs\n\n// To see debug messages into the browser console set this parameter as true\nconst CORE_REST_CLIENT_DEBUG = false;\n\n// Default timeout (milliseconds)\nconst CORE_REST_CLIENT_TIMEOUT = 5000;\n\n//--------------------------------------------------------------------------------------------------------------------\n// Constants\n\n// Success\nconst CORE_REST_CLIENT_SUCCESS = 0;\n\n// Properties present in a response\nconst CORE_REST_CLIENT_ERROR = \"error\";\nconst CORE_REST_CLIENT_RETVAL = \"retval\";\n\n// HTTP method parameters\nconst CRC_HTTP_GET_METHOD = \"get\";\nconst CRC_HTTP_POST_METHOD = \"post\";\n\n/**\n * Definition and initialization of the object CoreRESTClient\n */\nexport const CoreRESTClient = {\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Public methods\n\n\t/**\n\t * Performs a call using the HTTP GET method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tget: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_GET_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Performs a call using the HTTP POST method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tpost: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_POST_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Checks if the response is a success\n\t */\n\tisSuccess: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR)\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL) && response.error == CORE_REST_CLIENT_SUCCESS)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Checks if the response is an error\n\t */\n\tisError: function(response) {\n\t\treturn !CoreRESTClient.isSuccess(response);\n\t},\n\n\t/**\n\t * Checks if the response has data\n\t */\n\thasData: function(response) {\n\n\t\tif (CoreRESTClient.isSuccess(response))\n\t\t{\n\t\t\tif ((typeof response[CORE_REST_CLIENT_RETVAL] === \"object\" && Object.keys(response[CORE_REST_CLIENT_RETVAL]).length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"array\" && response[CORE_REST_CLIENT_RETVAL].length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"string\" && response[CORE_REST_CLIENT_RETVAL].trim() != \"\")\n\t\t\t\t|| typeof response[CORE_REST_CLIENT_RETVAL] === \"number\")\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Retrives data from response object\n\t */\n\tgetData: function(response) {\n\n\t\tif (CoreRESTClient.hasData(response))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Retrives error message from response object\n\t */\n\tgetError: function(response) {\n\n\t\tif (typeof response === \"object\"\n\t\t\t&& Object.keys(response).length > 0\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn \"Generic error\";\n\t},\n\n\t/**\n\t * Retrives code from response object\n\t */\n\tgetErrorCode: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_ERROR];\n\t\t}\n\n\t\treturn 1; // Generic error\n\t},\n\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Private methods\n\n\t/**\n\t * Generate the router URI using the connection parameters\n\t */\n\t_generateRouterURI: function(wsURL) {\n\t\tvar uri = null;\n\n\t\t// Checks if global JS object FHC_JS_DATA_STORAGE_OBJECT exists\n\t\tif (typeof FHC_JS_DATA_STORAGE_OBJECT !== \"undefined\")\n\t\t{\n\t\t\turi = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\" + wsURL;\n\t\t}\n\n\t\treturn uri;\n\t},\n\n\t/**\n\t * Method to print debug info after a controller has been called\n\t */\n\t_printDebug: function(parameters, response, errorThrown) {\n\n\t\tif (CORE_REST_CLIENT_DEBUG === true) // If global const CORE_REST_CLIENT_DEBUG is true, but really true!\n\t\t{\n\t\t\t// Print info about called controller\n\t\t\tconsole.log(\"Called controller: \" + parameters.remoteController);\n\t\t\tconsole.log(\"Call parameters:\"); // parameters given to this call\n\t\t\tconsole.log(parameters);\n\n\t\t\tif (response != null) // if there is a response...\n\t\t\t{\n\t\t\t\tconsole.log(\"Controller Response:\");\n\t\t\t\tconsole.log(response); // ...print it\n\t\t\t}\n\t\t\tif (errorThrown != null) // if there is a jQuery error...\n\t\t\t{\n\t\t\t\tconsole.log(\"jQuery error:\");\n\t\t\t\tconsole.log(errorThrown); // ...print it\n\t\t\t}\n\t\t\tconsole.log(\"--------------------------------------------------------------------------------------------\");\n\t\t}\n\t},\n\n\t/**\n\t * Performs a call to the server were the CI PHP layer is running\n\t * - wsURL: alias of the core controller to call\n\t * - wsParameters: parameters to give to the called controller\n\t * - type: POST or GET HTTP method\n\t * - axiosParameters: an object to configure the axios call\n\t */\n\t_axiosCall: function(wsURL, wsParameters, type, axiosParameters) {\n\n\t\t// Axios config object\n\t\tlet axiosCallObj = {\n\t\t\tmethod: type,\n\t\t\turl: CoreRESTClient._generateRouterURI(wsURL),\n\t\t\ttimeout: CORE_REST_CLIENT_TIMEOUT // default time out\n\t\t};\n\n\t\t// The ajax call is HTTP GET\n\t\tif (type == CRC_HTTP_GET_METHOD)\n\t\t{\n\t\t\taxiosCallObj.params = wsParameters;\n\t\t}\n\t\t// The ajax call is HTTP POST\n\t\telse\n\t\t{\n\t\t\taxiosCallObj.data = wsParameters;\n\t\t}\n\n\t\t// Check if axiosParameters is an object\n\t\tif (typeof axiosParameters === \"object\")\n\t\t{\n\t\t\t// And then copies the its properties into axiosCallObj\n\t\t\tfor (var prop in axiosParameters) axiosCallObj[prop] = axiosParameters[prop];\n\t\t}\n\n\t\t// Perform the ajax call via axios\n\t\treturn axios(axiosCallObj);\n\t}\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n * \n * @usage:\n * Preperations:\n * Be sure to have PrimeVue loaded with the toast and confirmdialog\n * components as primevue variable\n * Install:\n * Import this Plugin and install it with the app.use() function.\n * Use:\n * In your component you can call now the global property $fhcAlert\n * which has the following functions:\n * \n * alertSuccess\n * ------------\n * Displays a success message\n * @param string\tmessage\n * @return void\n * \n * alertInfo\n * ---------\n * Displays an info message\n * @param string\tmessage\n * @return void\n * \n * alertWarning\n * ------------\n * Displays a warning\n * @param string\tmessage\n * @return void\n * \n * alertError\n * ----------\n * Displays an error\n * @param string\tmessage\n * @return void\n * \n * alertSystemError\n * ----------------\n * Displays an alert with the error details and a button to mail\n * the error to the Support Team\n * @param string\tmessage\n * @return void\n * \n * confirmDelete\n * -------------\n * Displays a confirmation dialog and returns a Promise which resolves\n * with true or false depending und the pressed button.\n * @return Promise\n * \n * alertDefault\n * ------------\n * Displays an alert\n * @param string\tseverity\t\tcan be 'success', 'info', 'warning', 'error'\n * @param string\ttitle\n * @param string\tmessage\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * alertMultiple\n * -------------\n * Displays multiple alerts\n * @param array\t\tmessageArray\n * @param string\tseverity\t\t(optional) defaults to 'info'\n * @param string\ttitle\t\t\t(optional) defaults to 'Info'\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * handleSystemError\n * -----------------\n * Automatiticly determine how to display an system error and display it.\n * This would be used in a catch block of an ajax call.\n * @param mixed\t\terror\n * @return void\n * \n * handleSystemMessage\n * -------------------\n * Automatiticly determine how to display a message and display it.\n * @param mixed\t\tmessage\n * @return void\n */\nimport PvConfig from \"../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js\";\nimport PvToast from \"../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js\";\nimport PvConfirm from \"../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js\";\nimport PvConfirmationService from \"../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js\";\nimport FhcPhrasen from \"./Phrasen.js\";\n\nimport {CoreRESTClient} from '../RESTClient.js';\n\nconst helperAppContainer = document.createElement('div');\n\nconst helperApp = Vue.createApp({\n\tname: \"FhcAlertApp\",\n\tcomponents: {\n\t\tPvToast,\n\t\tPvConfirm\n\t},\n\tmethods: {\n\t\tmailToUrl(slotProps) {\n\t\t\tlet mailTo = FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto;\n\t\t\tlet subject = 'Meldung%20Systemfehler';\n\t\t\tlet body = `\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: ` + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method + `%0D%0A\n\t\t\t\tFehler Meldung: ` + slotProps.message.detail + `%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!`\n\n\t\t\treturn \"mailto:\" + mailTo + \"?subject=\" + subject + \"&body=\" + body;\n\t\t},\n\t\topenMessagecard(e) {\n\t\t\tbootstrap.Collapse.getOrCreateInstance(e.target.getAttribute('href')).toggle();\n\t\t}\n\t},\n\tunmounted() {\n\t\thelperAppContainer.parentElement.removeChild(helperAppContainer);\n\t},\n\tcomputed: {\n\t\tshowmaillink: function() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto !== '';\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t`\n});\n\nhelperApp.use(PvConfig);\nhelperApp.use(PvConfirmationService);\n//helperApp.use(FhcPhrasen);\n\nconst helperAppInstance = helperApp.mount(helperAppContainer);\n\ndocument.body.appendChild(helperAppContainer);\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (!app.config.globalProperties.$p)\n\t\t\tapp.use(FhcPhrasen);\n\n\t\tconst $fhcAlert = {\n\t\t\talertSuccess(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSuccess);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'success', summary: 'Info', detail: message, life: 1000});\n\t\t\t},\n\t\t\talertInfo(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertInfo);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'info', summary: 'Info', detail: message, life: 3000 });\n\t\t\t},\n\t\t\talertWarning(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertWarning);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'warn', summary: 'Achtung', detail: message});\n\t\t\t},\n\t\t\talertError(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertError);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'error', summary: 'Achtung', detail: message });\n\t\t\t},\n\t\t\talertSystemError(message) {\n\t\t\t\t//TODO(Manu) for translation of content of template: restructure in data\n\t\t\t\t//and update definitions with translations\n\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSystemError);\n\t\t\t\thelperAppInstance.$refs.alert.add({\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t\tsummary: Vue.computed(() => app.config.globalProperties.$p.t('alert/systemerror')),\n\t\t\t\t\tdetail: message});\n\t\t\t},\n\t\t\tconfirmDelete() {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: 'fhcAlertConfirm',\n\t\t\t\t\t\theader: Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: Vue.computed(() => app.config.globalProperties.$p.t('alert/confirm_delete')),\n\t\t\t\t\t\tacceptLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/loeschen')),\n\t\t\t\t\t\tacceptClass: 'p-button-danger',\n\t\t\t\t\t\trejectLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: 'p-button-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tconfirm(options) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: options?.group ?? 'fhcAlertConfirm',\n\t\t\t\t\t\theader: options?.header ?? Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: options?.message ?? '',\n\t\t\t\t\t\tacceptLabel: options?.acceptLabel ?? 'Ok',\n\t\t\t\t\t\tacceptClass: options?.acceptClass ?? 'btn btn-primary',\n\t\t\t\t\t\trejectLabel: options?.rejectLabel ?? Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: options?.rejectClass ?? 'btn btn-outline-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\talertDefault(severity, title, message, sticky = false, html = false) {\n\t\t\t\tlet options = { severity: severity, summary: title, detail: message, html };\n\t\t\t\t\n\t\t\t\tif (!sticky)\n\t\t\t\t\toptions.life = 3000;\n\n\t\t\t\thelperAppInstance.$refs.toast.add(options);\n\t\t\t},\n\t\t\talertMultiple(messageArray, severity = 'info', title = 'Info', sticky = false, html = false){\n\t\t\t\t// Check, if array has only string values\n\t\t\t\tif (messageArray.every(message => typeof message === 'string')) {\n\t\t\t\t\tmessageArray.forEach(message => this.alertDefault(severity, title, message, sticky, html));\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\thandleSystemError(error) {\n\t\t\t\t// don't show an error message to the user if the error was an aborted request\n\t\t\t\tif(error.hasOwnProperty('name') && error.name.toLowerCase() === \"AbortError\".toLowerCase())\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is string\n\t\t\t\tif (typeof error === 'string')\n\t\t\t\t\treturn $fhcAlert.alertSystemError(error);\n\n\t\t\t\t// Error is array of strings\n\t\t\t\tif (Array.isArray(error) && error.every(err => typeof err === 'string'))\n\t\t\t\t\treturn error.every($fhcAlert.alertSystemError);\n\n\t\t\t\t// Error has been handled already\n\t\t\t\tif (error.hasOwnProperty('handled') && error.handled)\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is object\n\t\t\t\tif (typeof error === 'object' && error !== null) {\n\t\t\t\t\tlet errMsg = '';\n\n\n\t\t\t\t\tif (error.hasOwnProperty('response') && error.response?.data?.retval)\n\t\t\t\t\t\terrMsg += 'Error Message: ' + (error.response.data.retval.message || error.response.data.retval) + '\\r\\n';\n\t\t\t\t\telse if (error.hasOwnProperty('message'))\n\t\t\t\t\t\terrMsg += 'Error Message: ' + error.message.toUpperCase() + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('config') && error.config.hasOwnProperty('url'))\n\t\t\t\t\t\terrMsg += 'Error ConfigURL: ' + error.config.url + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('stack'))\n\t\t\t\t\t\terrMsg += 'Error Stack: ' + error.stack + '\\r\\n';\n\t\t\t\t\t\n\t\t\t\t\t// Fallback object error message\n\t\t\t\t\tif (errMsg == '')\n\t\t\t\t\t\terrMsg = 'Error Message: ' + JSON.stringify(error) + '\\r\\n';\n\n\t\t\t\t\terrMsg += 'Error Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\n\t\t\t\t\treturn $fhcAlert.alertSystemError(errMsg);\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\thandleSystemMessage(message) {\n\t\t\t\t// Message is string\n\t\t\t\tif (typeof message === 'string')\n\t\t\t\t\treturn $fhcAlert.alertWarning(message);\n\n\t\t\t\t// Message is array of strings\n\t\t\t\tif (Array.isArray(message)) {\n\t\t\t\t\t// If Array has only Strings\n\t\t\t\t\tif (message.every(msg => typeof msg === 'string'))\n\t\t\t\t\t\treturn message.every($fhcAlert.alertWarning);\n\n\t\t\t\t\t// If Array has only Objects\n\t\t\t\t\tif (message.every(msg => typeof msg === 'object') && msg !== null) {\n\t\t\t\t\t\treturn message.every(msg => {\n\t\t\t\t\t\t\tif (msg.hasOwnProperty('data') && msg.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(msg.data.retval));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(msg));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Message is Object with data property\n\t\t\t\tif (typeof message === 'object' && message !== null){\n\t\t\t\t\tif (message.hasOwnProperty('data') && message.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t// NOTE(chris): changed: alertSystemError => alertWarning\n\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(message.data.retval));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(message));\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\tresetFormValidation(form) {\n\t\t\t\tconst event = new Event('fhc-form-reset');\n\t\t\t\tform.querySelectorAll(['[data-fhc-form-validate],[data-fhc-form-error]']).forEach(el => el.dispatchEvent(event));\n\t\t\t\t/*const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\tif (alert) {\n\t\t\t\t\talert.innerHTML = '';\n\t\t\t\t\talert.classList.add('d-none');\n\t\t\t\t}\n\t\t\t\tform.querySelectorAll('.invalid-feedback').forEach(n => n.remove());\n\t\t\t\tform.querySelectorAll('.is-invalid').forEach(n => n.classList.remove('is-invalid'));\n\t\t\t\tform.querySelectorAll('.is-valid').forEach(n => n.classList.remove('is-valid'));*/\n\t\t\t},\n\t\t\thandleFormValidation(error, form) {\n\t\t\t\tif (form === undefined) {\n\t\t\t\t\tif (error && error.nodeType === Node.ELEMENT_NODE)\n\t\t\t\t\t\treturn err => $fhcAlert.handleFormValidation(err, error);\n\t\t\t\t} else {\n\t\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t\tif (typeof errors !== \"object\")\n\t\t\t\t\t\t\terrors = error.response.data;\n\n\t\t\t\t\t\t// NOTE(chris): reset form validation\n\t\t\t\t\t\t$fhcAlert.resetFormValidation(form);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// NOTE(chris): set form input validation\n\t\t\t\t\t\tconst notFound = Object.entries(errors).filter(([key, detail]) => {\n\t\t\t\t\t\t\tconst input = form.querySelector('[data-fhc-form-validate=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\tinput.dispatchEvent(new CustomEvent('fhc-form-invalidate', {detail}));\n\n\t\t\t\t\t\t\t/*const input = form.querySelector('[name=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\tinput.classList.add('is-invalid');\n\t\t\t\t\t\t\tconst feedback = document.createElement('div');\n\t\t\t\t\t\t\tfeedback.classList.add('invalid-feedback');\n\t\t\t\t\t\t\tfeedback.innerHTML = detail;\n\t\t\t\t\t\t\tinput.after(feedback);*/\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}).map(arr => arr[1]);\n\n\n\t\t\t\t\t\t//const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\t\t\tconst alert = form.querySelector('[data-fhc-form-error]');\n\t\t\t\t\t\tif (alert && notFound.length) {\n\t\t\t\t\t\t\talert.dispatchEvent(new CustomEvent('fhc-form-error', {detail: notFound}));\n\t\t\t\t\t\t\t/*notFound.forEach(txt => {\n\t\t\t\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\t\t\t\tp.innerHTML = txt;\n\t\t\t\t\t\t\t\talert.append(p);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (notFound.length) {\n\t\t\t\t\t\t\t\talert.lastChild.classList.add('mb-0');\n\t\t\t\t\t\t\t\talert.classList.remove('d-none');\n\t\t\t\t\t\t\t}*/\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnotFound.forEach($fhcAlert.alertError);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t$fhcAlert.alertError((typeof errors === 'object') ? Object.values(errors) : errors);\n\t\t\t\t} else {\n\t\t\t\t\t$fhcAlert.handleSystemError(error);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tapp.config.globalProperties.$fhcAlert = $fhcAlert;\n\t\tapp.provide('$fhcAlert', app.config.globalProperties.$fhcAlert);\n\t}\n}","import FhcAlert from './FhcAlert.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$api) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!app.config.globalProperties.$fhcAlert)\n\t\t\tapp.use(FhcAlert);\n\n\t\tfunction _send_array_or_object(errors, func) {\n\t\t\tif (Array.isArray(errors))\n\t\t\t\terrors.forEach(func);\n\t\t\telse\n\t\t\t\tObject.entries(errors).forEach(\n\t\t\t\t\t([title, errs]) => errs.forEach(\n\t\t\t\t\t\terror => func(error, title)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t}\n\t\tlet DEFAULT_ERROR_CONFIG = {\n\t\t\tsuccess: true,\n\t\t\tfail: true,\n\t\t\tcombine: {\n\t\t\t\tform: ['validation', 'general'],\n\t\t\t\ttoast: ['validation', 'general', 'not_found', 'site_failed']\n\t\t\t},\n\t\t\thandler: {\n\t\t\t\tform(form, errors) {\n\t\t\t\t\tform.clearValidation();\n\t\t\t\t\terrors.forEach(err => form.setFeedback(\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\terr.messages || err.message\n\t\t\t\t\t));\n\t\t\t\t},\n\t\t\t\tasync toast(errors) {\n\t\t\t\t\tconst $p = app.config.globalProperties.$p;\n\t\t\t\t\tif (!$p)\n\t\t\t\t\t\treturn Promise.reject('Phrasen plugin not loaded!');\n\t\t\t\t\n\t\t\t\t\tasync function _format_toast(errors) {\n\t\t\t\t\t\terrors = errors.reduce((result, err) => {\n\t\t\t\t\t\t\tswitch (err.type) {\n\t\t\t\t\t\t\tcase 'not_found':\n\t\t\t\t\t\t\tcase 'site_failed':\n\t\t\t\t\t\t\t\tif (err.message)\n\t\t\t\t\t\t\t\t\tresult[err.message] = [err.url];\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tresult._default = [err.url];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'general':\n\t\t\t\t\t\t\t\tif (!result._default)\n\t\t\t\t\t\t\t\t\tresult._default = [];\n\t\t\t\t\t\t\t\tresult._default.push(err.message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'validation':\n\t\t\t\t\t\t\t\tObject.entries(err.messages)\n\t\t\t\t\t\t\t\t\t.forEach(([field, msg]) => {\n\t\t\t\t\t\t\t\t\t\tif (!result[field])\n\t\t\t\t\t\t\t\t\t\t\tresult[field] = [];\n\t\t\t\t\t\t\t\t\t\tif (Array.isArray(msg))\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(...msg);\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(msg);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}, {});\n\t\t\t\t\t\tlet counter = 0;\n\t\t\t\t\t\tconst msgs = await Promise.all(Object.entries(errors)\n\t\t\t\t\t\t\t.sort((a, b) => ['_default'].indexOf(b[0]) - ['_default'].indexOf(a[0])) // sort _default first\n\t\t\t\t\t\t\t.map(async ([field, msgs]) => {\n\t\t\t\t\t\t\t\tif (field == '_default') {\n\t\t\t\t\t\t\t\t\tawait $p.loadCategory('dashboard');\n\t\t\t\t\t\t\t\t\tconst general = $p.t('dashboard/general');\n\t\t\t\t\t\t\t\t\tfield = '
' + general + '
';\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfield = '
' + field + '
';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcounter += msgs.length;\n\t\t\t\t\t\t\t\treturn field\n\t\t\t\t\t\t\t\t\t+ '
'\n\t\t\t\t\t\t\t\t\t+ msgs.join('
')\n\t\t\t\t\t\t\t\t\t+ '
';\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcounter,\n\t\t\t\t\t\t\tmsgs\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet counter, msgs;\n\t\t\t\t\tif (Array.isArray(errors)) {\n\t\t\t\t\t\t({ counter, msgs } = await _format_toast(errors));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t({ counter, msgs } = await Object.entries(errors)\n\t\t\t\t\t\t\t.reduce(async (res, [title, errs]) => {\n\t\t\t\t\t\t\t\tconst result = await res;\n\t\t\t\t\t\t\t\tconst { counter, msgs } = await _format_toast(errs);\n\t\t\t\t\t\t\t\tresult.counter += counter;\n\t\t\t\t\t\t\t\tresult.msgs.push('
'\n\t\t\t\t\t\t\t\t\t+ title\n\t\t\t\t\t\t\t\t\t+ '
'\n\t\t\t\t\t\t\t\t\t+ msgs.join('')\n\t\t\t\t\t\t\t\t\t+ '
');\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}, Promise.resolve({ counter: 0, msgs: []})));\n\t\t\t\t\t}\n\n\t\t\t\t\tawait $p.loadCategory('ui');\n\t\t\t\t\tconst n_errors = $p.t('ui/n_errors', { n: counter });\n\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\tn_errors,\n\t\t\t\t\t\t'
' + msgs.join('') + '
',\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tphp(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('warn', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('info', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\tmessage = title + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\texception(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tdb(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tauth(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\ttitle += ': ' + error.message;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ttitle = error.message;\n\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (options?.errorHandling !== undefined)\n\t\t\tDEFAULT_ERROR_CONFIG = _merge_error_config(options.errorHandling);\n\t\t\n\t\tfunction get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\t\tfunction clean_return_value(response) {\n\t\t\tif (typeof response.data === 'string' || response.data instanceof String)\n\t\t\t\treturn clean_return_value({ data: response });\n\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result)\n\t\t\t\treturn {meta: {response}, data: null};\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = { response };\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tfunction _merge_error_config(config) {\n\t\t\tif (config === false || config === 'off')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false, fail: false };\n\t\t\t\n\t\t\tif (!config || config === true)\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tif (config === 'success')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, fail: false };\n\t\t\t\n\t\t\tif (config === 'fail')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false };\n\t\t\t\n\t\t\tconst { success, fail, handler, combine } = config;\n\t\t\t\n\t\t\tconfig = { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tObject.entries({ fail, success }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = value;\n\t\t\t});\n\t\t\tObject.entries({ handler, combine }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = { ...config[key], ...value };\n\t\t\t});\n\n\t\t\treturn config;\n\t\t}\n\t\tfunction get_error_handler(config) {\n\t\t\tconst result = _merge_error_config(config?.errorHandling);\n\n\t\t\tif (!config?.form) {\n\t\t\t\tresult.combine = { ...result.combine, form: [] };\n\t\t\t} else {\n\t\t\t\tconst formHandler = result.handler.form;\n\t\t\t\tresult.handler = { ...result.handler, form: errors => formHandler(config.form, errors) };\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t\tfunction get_error_list(error) {\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\treturn [{\n\t\t\t\t\t\ttype: 'not_found',\n\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t\t}];\n\t\t\t\t} else {\n\t\t\t\t\tif (error.response.data.errors == undefined) return [];\n\t\t\t\t\treturn error.response.data.errors;\n\t\t\t\t}\n\t\t\t} else if (error.request) {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'site_failed',\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t}];\n\t\t\t} else {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'script',\n\t\t\t\t\tmessage: error.message\n\t\t\t\t}];\n\t\t\t}\n\t\t}\n\t\tfunction popHandleableErrors(errorHandling, errors) {\n\t\t\tconst result = {};\n\t\t\tconst copy = [];\n\n\t\t\tif (errors == undefined) return {};\n\n\t\t\twhile (errors.length)\n\t\t\t\tcopy.push(errors.pop());\n\t\t\tfor (var error of copy) {\n\t\t\t\tlet type = error.type;\n\t\t\t\tlet newType = null;\n\t\t\t\tfor (var t in errorHandling.combine) {\n\t\t\t\t\tlet newTypeCombinesType = errorHandling\n\t\t\t\t\t\t.combine[t]\n\t\t\t\t\t\t.includes(type);\n\t\t\t\t\tlet newTypeHasHandler = errorHandling.handler[t];\n\t\t\t\t\tif (newTypeCombinesType && newTypeHasHandler) {\n\t\t\t\t\t\tnewType = t;\n\t\t\t\t\t\tif (newType == 'form')\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (newType)\n\t\t\t\t\ttype = newType;\n\t\t\t\tconst handler = errorHandling.handler[type];\n\t\t\t\tif (handler) {\n\t\t\t\t\tif (!result[type])\n\t\t\t\t\t\tresult[type] = [];\n\t\t\t\t\tif (Array.isArray(error))\n\t\t\t\t\t\tresult[type].push(...error);\n\t\t\t\t\telse\n\t\t\t\t\t\tresult[type].push(error);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\terrors.push(error);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t+ FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(\n\t\t\tresponse => {\n\t\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\t\treturn clean_return_value(response);\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\tif (response.data.errors)\n\t\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$api._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t\t);\n\n\t\t\t\treturn clean_return_value(response);\n\t\t\t},\n\t\t\terror => {\n\t\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\n\t\t\t\tconst errorConfig = get_error_handler(error.config);\n\n\t\t\t\tif (!errorConfig.fail)\n\t\t\t\t\treturn Promise.reject(error);\n\n\t\t\t\tconst remaining = get_error_list(error);\n\n\t\t\t\tconst errors = popHandleableErrors(errorConfig, remaining);\n\n\t\t\t\tfor (var type in errors) {\n\t\t\t\t\terrorConfig.handler[type](errors[type]);\n\t\t\t\t}\n\n\t\t\t\tif (remaining.length)\n\t\t\t\t\treturn Promise.reject(error);\n\t\t\t\t\n\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\t\t\t}\n\t\t);\n\n\t\tapp.config.globalProperties.$api = {\n\t\t\tgetUri(url) {\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\t[uri, params, config] = get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\t[uri, data, config] = get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\tcall(factory, configoverwrite, form) {\n\t\t\t\tif (Array.isArray(factory)) {\n\t\t\t\t\tconst $api = app.config.globalProperties.$api;\n\n\t\t\t\t\treturn Promise\n\t\t\t\t\t\t.allSettled(factory.map((config, index) => {\n\t\t\t\t\t\t\tif (!Array.isArray(config))\n\t\t\t\t\t\t\t\tconfig = ['#' + index, config];\n\t\t\t\t\t\t\treturn $api.call(config[1], {\n\t\t\t\t\t\t\t\terrorHeader: config[0],\n\t\t\t\t\t\t\t\terrorHandling: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}))\n\t\t\t\t\t\t.then(result => {\n\t\t\t\t\t\t\tconst [ , , config ] = get_config(form, undefined, undefined, configoverwrite || {});\n\t\t\t\t\t\t\tconst errorConfig = get_error_handler(config);\n\n\t\t\t\t\t\t\tif (!errorConfig.success && !errorConfig.fail) {\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst typedErrors = {};\n\t\t\t\t\t\t\tfor (var res of result) {\n\t\t\t\t\t\t\t\tconst [ allowed, item ] = res.status === 'fulfilled'\n\t\t\t\t\t\t\t\t\t? [ errorConfig.success, res.value ]\n\t\t\t\t\t\t\t\t\t: [ errorConfig.fail, res.reason ];\n\t\t\t\t\t\t\t\tif (!allowed)\n\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\tconst errors = popHandleableErrors(errorConfig, get_error_list(item));\n\n\t\t\t\t\t\t\t\tfor (var type in errors) {\n\t\t\t\t\t\t\t\t\tif (!typedErrors[type])\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type] = {\n\t\t\t\t\t\t\t\t\t\t\t[item.config.errorHeader]: errors[type]\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type][item.config.errorHeader] = errors[type];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfor (var errType in typedErrors) {\n\t\t\t\t\t\t\t\terrorConfig.handler[errType](typedErrors[errType]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tlet { method, url, params, config } = factory;\n\t\t\t\tif (configoverwrite !== undefined) {\n\t\t\t\t\tconfig = configoverwrite;\n\t\t\t\t}\n\t\t\t\tif (!method) {\n\t\t\t\t\tmethod = 'get';\n\t\t\t\t}\n\t\t\t\tif (method.toLowerCase)\n\t\t\t\t\tmethod = method.toLowerCase();\n\t\t\t\tif (method == 'get') {\n\t\t\t\t\treturn this.get(form, url, params, config);\n\t\t\t\t} else if (method == 'post') {\n\t\t\t\t\treturn this.post(form, url, params, config);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"FhcApi: method not allowed:\", method);\n\t\t\t\t}\n\t\t\t},\n\t\t\tgetErrorHandler(config) {\n\t\t\t\treturn get_error_handler(config);\n\t\t\t}\n\t\t};\n\n\t\tapp.provide('$api', app.config.globalProperties.$api);\n\t}\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/loadModule/' + category\n\t\t};\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst params = {categories, language}\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/phrasen/setLanguage',\n\t\t\tparams\n\t\t};\n\t},\n\tgetLanguage() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getLanguage'\n\t\t};\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getAllLanguages'\n\t\t};\n\t}\n};","import OldFhcApi from '../plugin/OldFhcApi.js'; // TODO(chris): remove at some point\nimport PluginsApi from './Api.js';\nimport ApiPhrasen from '../api/factory/phrasen.js';\n\nconst categories = Vue.reactive({});\nconst loadingModules = {};\nlet user_language = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language);\nexport let user_locale = Vue.computed(()=>{\n\tif(!user_language.value) return null;\n\treturn FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(language => language.sprache == user_language.value).LC_Time;\n});\n\nfunction extractCategory(obj, category) {\n\treturn obj.filter(e => e.category == category).reduce((res, elem) => {\n\t\tif (!res[elem.phrase])\n\t\t\tres[elem.phrase] = elem.text;\n\t\treturn res;\n\t}, {});\n}\nfunction getValueForLoadedPhrase(category, phrase, params) {\n\tlet result = categories[category][phrase];\n\tif (!result)\n\t\treturn '<< PHRASE ' + phrase + '>>';\n\tif (params)\n\t\tresult = result.replace(/\\{([^}]*)\\}/g, (match, p1) => params[p1] === undefined ? match : params[p1]);\n\treturn result;\n}\n\nconst phrasen = {\n\tuser_language,\n\tuser_locale,\n\tsetLanguage(language) {\n\t\tconst catArray = Object.keys(categories)\n\t\treturn this.config.globalProperties.$api\n\t\t\t.call(ApiPhrasen.setLanguage(catArray, language))\n\t\t\t.then(res => {\n\t\t\t\tres.data.forEach(row => {\n\t\t\t\t\tcategories[row.category][row.phrase] = row.text\n\t\t\t\t})\n\n\t\t\t\t// update the reactive data that holds the current active user_language\n\t\t\t\tuser_language.value = language;\n\n\t\t\t\treturn res\n\t\t\t})\n\t},\n\tloadCategory(category) {\n\t\tif (Array.isArray(category))\n\t\t\treturn Promise.all(category.map(this.config.globalProperties\n\t\t\t\t.$p.loadCategory));\n\n\t\tif (!loadingModules[category])\n\t\t\tloadingModules[category] = this.config.globalProperties.$api\n\t\t\t\t.call(ApiPhrasen.loadCategory(category))\n\t\t\t\t.then(res => res?.data ? extractCategory(res.data, category) : {})\n\t\t\t\t.then(res => {\n\t\t\t\t\tcategories[category] = res;\n\t\t\t\t});\n\t\treturn loadingModules[category];\n\t},\n\tt_ref(category, phrase, params) {\n\t\tconsole.warn('deprecated');\n\t\treturn Vue.computed(() => this.t(category, phrase, params));\n\t},\n\tt(category, phrase, params) {\n\t\tif (params === undefined && (\n\t\t\t(Array.isArray(category) && category.length == 2) ||\n\t\t\t(category.split && category.split('/').length == 2))\n\t\t\t) {\n\t\t\tparams = phrase;\n\t\t\t[category, phrase] = category.split ? category.split('/') : category;\n\t\t}\n\t\tif (phrase === undefined) {\n\t\t\tconsole.error('invalid input', category, phrase, params);\n\t\t\treturn '';\n\t\t}\n\t\tlet val = Vue.computed(() => {\n\t\t\tif (!categories[category])\n\t\t\t\treturn '';\n\t\t\treturn getValueForLoadedPhrase(category, phrase, params);\n\t\t});\n\t\tif (!categories[category])\n\t\t\tthis.loadCategory(category);\n\t\treturn val.value;\n\t}\n};\n\nexport default {\n\tinstall(app, options) {\n\t\tif (!app.config.globalProperties.$fhcApi)\n\t\t\tapp.use(OldFhcApi); // TODO(chris): remove at some point\n\t\tif (!app.config.globalProperties.$api)\n\t\t\tapp.use(PluginsApi);\n\t\tapp.config.globalProperties.$p = {\n\t\t\tt: phrasen.t,\n\t\t\tloadCategory: cat => phrasen.loadCategory.call(app, cat),\n\t\t\tsetLanguage: lang => phrasen.setLanguage.call(app, lang),\n\t\t\tuser_language: user_language,\n\t\t\tuser_locale,\n\t\t\tt_ref: phrasen.t_ref\n\t\t};\n\t\tapp.provide('$p', app.config.globalProperties.$p);\n\t}\n}","import ProfilUpdateView from \"../../components/Cis/ProfilUpdate/ProfilUpdateView.js\";\nimport PluginsPhrasen from \"../../plugins/Phrasen.js\";\n\nimport ApiProfilUpdate from '../../api/factory/profilUpdate.js';\n\n// TODO: sobald in verwendung den vue router pfad zu ProfilUpdateView definieren und diese app in component auslagern\nconst app = Vue.createApp({\n name: 'ProfilUpdateRequestsApp',\n components: {\n [\"profil-update-view\"]: ProfilUpdateView,\n },\n\n data() {\n return {\n profilUpdateStates: null,\n };\n },\n provide() {\n return {\n profilUpdateStates: Vue.computed(() =>\n this.profilUpdateStates ? this.profilUpdateStates : false\n ),\n };\n },\n methods: {},\n created() {\n this.$api\n .call(ApiProfilUpdate.getStatus())\n .then((response) => {\n this.profilUpdateStates = response.data;\n })\n .catch((error) => {\n console.error(error);\n });\n },\n});\napp.use(PluginsPhrasen).mount(\"#content\");"],"names":["CoreFetchCmpt","emits","props","refresh","type","Boolean","apiFunction","required","Function","apiFunctionParameters","watch","newValue","oldValue","this","fetchData","data","loading","error","errorMessage","created","methods","apiFunctionResult","Promise","then","successHandler","catch","errorHandler","finally","finallyHandler","setError","response","$emit","undefined","retval","message","template","FILTER_COMPONENT_NEW_FILTER","FilterConfig","filters","Array","default","columns","fields","switchFilter","applyFilterConfig","saveCustomFilter","currentFields","computed","types","reduce","a","c","toLowerCase","indexOf","name","n","evt","currentTarget","value","filteredFields","filter","el","condition","length","alert","addField","push","removeField","index","splice","FilterColumns","selected","names","Object","hide","show","selectedFields","toggle","field","DEFAULT_ICONS","jsonLines","xlsx","pdf","html","json","csv","DEFAULT_LABELS","TableDownload","tabulator","config","String","iconClass","currentConfig","prototype","toString","call","split","isArray","newConfig","k","v","stringToFileFormatter","icon","label","formatter","map","validateFileFormatter","input","lcInput","includes","window","XLSX","jspdf","jsPDF","autoTable","download","file","options","elementDataMap","WeakMap","collapseAutoClose","mounted","binding","open","set","contains","target","collapse","bootstrap","Collapse","getInstance","addEventListener","document","get","beforeUnmount","removeEventListener","collapsibleAutoHideFunc","Tabulator","extendModule","fitDataStretchFrozen","forced","colsWidth","tableWidth","table","rowManager","element","clientWidth","gap","lastCol","forEach","column","i","widthFixed","reinitializeWidth","responsiveLayout","modules","responsive","visible","definition","frozen","getWidth","modExists","setWidth","update","ApiFilter","wsParams","method","url","params","filterUniqueId","filterType","customFilterName","removeCustomFilter","filterId","applyFilterFields","filterFields","addFilterField","filterField","removeFilterField","getFilterById","getFilter","_uuid","CoreFilterCmpt","components","directives","onNwNewEntry","title","description","sideMenu","tabulatorOptions","tabulatorEvents","tableOnly","noColumnFilter","reload","reloadBtnInfotext","newBtnShow","newBtnClass","newBtnDisabled","newBtnLabel","uniqueId","idField","parentIdField","countOnly","useSelectionSpan","uuid","filterName","filterActive","dataset","datasetMetadata","availableFilters","selectedFilter","fetchCmptRefresh","fetchCmptApiFunction","fetchCmptApiFunctionParams","fetchCmptDataFetched","fetchResult","tableBuilt","tabulatorHasSelector","selectedData","persistence","sort","headerFilter","group","page","notSelectedFields","x","filteredData","JSON","parse","stringify","filteredColumns","hasOwnProperty","col","resizable","fieldIdsForVisibilty","getColumns","def","getDefinition","getField","fieldNames","res","idExtra","columnsForFilter","filterTitles","reloadTable","setData","initTabulator","placeholder","$p","loadCategory","t","resolve","location","hash","slice","resolvePromiseFunc","setRenderData","startFetchCmpt","$api","layout","movableColumns","columnDefaults","tooltip","height","minHeight","maxHeight","selectable","dataTree","$refs","on","event","handler","toDelete","childIdx","child","appendChild","counter","cols","isVisible","_setHeaderFilter","updateTabulator","_updateTabulator","setColumns","clearFilters","getHeaderFilters","setHeaderFilterValue","clearFilter","render","j","setSideMenu","setDropDownMenu","personalFilters","filtersArray","filtersCount","link","id","filter_id","desc","onClickCall","handlerGetFilterById","subscriptDescription","subscriptLinkClass","subscriptLinkValue","onClickSubscriptCall","handlerRemoveCustomFilter","children","option","dataFetchedCallback","FHC_JS_DATA_STORAGE_OBJECT","called_path","called_method","handlerSaveCustomFilter","getAttribute","substring","attr","parentId","parentIdx","parent","_children","beforeCreate","$props","BsModal","modal","fullscreen","backdrop","validator","focus","keyboard","noCloseBtn","dialogClass","headerClass","bodyClass","footerClass","allowFullscreenExpand","dispose","handleUpdate","relatedTarget","toggleFullscreen","Modal","popup","body","footer","slots","includedPrimevue","primevue","reject","instance","Vue","createApp","setup","h","class","ref","unmount","result","unmounted","wrapper","parentElement","removeChild","createElement","use","zIndex","overlay","Phrasen","mount","Kontakt","view","Adresse","withZustelladresse","ApiProfilUpdate","getStatus","getTopic","acceptProfilRequest","profil_update_id","uid","status_message","topic","requested_change","denyProfilRequest","insertFile","dms","replace","updateProfilbild","getProfilUpdateWithPermission","encodeURIComponent","getProfilRequestFiles","requestID","selectProfilRequest","insertProfilRequest","payload","fileID","updateProfilRequest","ID","deleteProfilRequest","AcceptDenyUpdate","inject","mixins","setLoading","onHideBsModal","onHiddenBsModal","onHidePreventedBsModal","onShowBsModal","onShownBsModal","info","files","getProfilStatus","async","app_root","ci_router","dms_id","getDocumentLink","handleRequest","e","$fhcAlert","handleSystemError","getComponentView","attachment_id","modalContainer","bind","Loading","timeout","Number","state","setTimeout","clearTimeout","dateFilter","cell","onRendered","success","div","initialValue","val","getValue","start","Date","end","PrimevueCalendar","calendar","console","dates","headerValue","rowValue","rowDate","startDate","endDate","setHours","toDateString","singleDate","ProfilUpdateView","categoryLoaded","showModal","modalData","profilUpdateEvents","handleDataProcessed","profilUpdateOptions","ajaxURL","ajaxRequestFunc","ajaxParams","profilUpdateStates","ajaxResponse","ele1","ele2","sortProfilUpdates","thisPointer","status","insertamum","reverse","join","statusMessage","getData","statusDate","status_timestamp","classList","add","statusDateEl","innerHTML","statusMessageEl","rowContextMenu","component","menu","action","UpdatesTable","separator","showAcceptDenyModal","minWidth","headerFilterParams","valuesLookup","listOnEmpty","autocomplete","headerFilterFunc","formatterParams","datetimeFormatterParams","hozAlign","para","iconClasses","getRow","headerSort","node","DOMParser","parseFromString","firstChild","querySelector","denyProfilUpdate","acceptProfilUpdate","hideAcceptDenyModal","AcceptDenyModal","nextTick","updateData","sessionStorage","setItem","arrayRowData","row","inputFormat","outputFormat","invalidPlaceholder","timezone","loadingModalRef","getItem","search","searchsettings","$fhcApi","post","searchAdvanced","searchdummy","phrasen$1","category","setLanguage","categories","language","getLanguage","getActiveDbLanguages","navigation","getHeader","navigation_page","getMenu","filter$1","studstatus","abmeldung","getDetails","antrag_id","prestudent_id","create","stdsem","grund","studiensemester","errorHandling","cancel","allSettled","antrag","studierendenantrag_id","errorHeader","unterbrechung","datum_wiedereinstieg","attachment","wiederholung","getLvs","saveLvs","forbiddenLvs","mandatoryLvs","leitung","getStgs","getAntraege","getHistory","getPrestudents","query","signal","approve","reopen","pause","unpause","object","approveObjection","denyObjection","profil","getView","fotoSperre","isStudent","isMitarbeiter","getZustellAdresse","getZustellKontakt","getGemeinden","nation","zip","getAllNationen","profilUpdate","lvPlan","getRoomInfo","ort_kurzbz","start_date","end_date","getStunden","getOrtReservierungen","getLvPlanReservierungen","getLehreinheitStudiensemester","lehreinheit_id","studiensemesterDateInterval","date","LvPlanEvents","lv_id","stv","verband","favorites","students","studiensemester_kurzbz","getUri","prestudent","person","person_id","relative_path","getStg","setStg","studiengang_kz","konto","tabulatorConfig","self","modelValue","only_open","studiengang_kz_intern","stg_kz","checkDoubles","form","confirmErrorHandler","insert","edit","delete","buchungsnr","getBuchungstypen","getGruppen","deleteGroup","kontakt","getAdressen","addNewAddress","loadAddress","address_id","updateAddress","deleteAddress","getPlaces","plz","getFirmen","searchString","getNations","getAdressentypen","getBankverbindung","addNewBankverbindung","loadBankverbindung","bankverbindung_id","updateBankverbindung","deleteBankverbindung","getKontakte","addNewContact","loadContact","kontakt_id","updateContact","deleteContact","getStandorteByFirma","getKontakttypen","updatePrestudent","getBezeichnungZGV","getBezeichnungMZgv","getBezeichnungDZgv","getAusbildung","getAufmerksamdurch","getBerufstaetigkeit","getTypenStg","getBisstandort","getHistoryPrestudent","getMaxSem","studiengang_kzs","advanceStatus","status_kurzbz","ausbildungssemester","confirmStatus","isLastStatus","deleteStatus","getLastBismeldestichtag","getHistoryPrestudents","insertStatus","loadStatus","updateStatus","getStudienplaene","getStudiengang","getStatusgruende","getStati","addStudent","changeStatus","getStatusarray","details","save","exam","getPruefungen","loadPruefung","pruefung_id","getTypenPruefungen","getAllLehreinheiten","getLvsByStudent","getLvsandLesByStudent","semester","getLvsAndMas","getMitarbeiterLv","getNoten","checkZeugnisnoteLv","addPruefung","updatePruefung","deletePruefung","abschlusspruefung","getAbschlusspruefung","addNewAbschlusspruefung","loadAbschlusspruefung","updateAbschlusspruefung","deleteAbschlusspruefung","getTypenAbschlusspruefung","getTypenAntritte","getBeurteilungen","getAkadGrade","getTypStudiengang","getMitarbeiter","getPruefer","checkForExistingExams","uids","grades","list","getCertificate","getTeacherProposal","getRepeaterGrades","updateCertificate","lehrveranstaltung_id","student_uid","note","lehrveranstaltung_bezeichnung","deleteCertificate","copyTeacherProposalToCertificate","copyRepeaterGradeToCertificate","studierendenantrag_lehrveranstaltung_id","lv_bezeichnung","getGradeFromPoints","points","manualErrorHandling","mobility","getMobilitaeten","getProgramsMobility","addNewMobility","loadMobility","bisio_id","updateMobility","deleteMobility","getLVList","getPurposes","getSupports","getListPurposes","getListSupports","deleteMobilityPurpose","addMobilityPurpose","deleteMobilitySupport","addMobilitySupport","archiv","getArchivVorlagen","archive","archiveSigned","akte_id","documents","getDocumentsUnaccepted","getDocumentsAccepted","deleteZuordnung","dokument_kurzbz","createZuordnung","loadAkte","getDoktypen","updateFile","deleteFile","uploadFile","exemptions","getAnrechnungen","getLehrveranstaltungen","getBegruendungen","getLvsKompatibel","getLektoren","addNewAnrechnung","loadAnrechnung","anrechnung_id","editAnrechnung","deleteAnrechnung","jointstudies","getStudies","getTypenMobility","getStudiensemester","getStudyprograms","getListPartner","getStatiPrestudent","loadStudy","insertStudy","updateStudy","deleteStudy","courselist","getCourselist","group_consecutiveHours","dbStundenplanTable","configStudent","configStudents","notiz","getNotizen","getUid","addNewNotiz","formData","loadNotiz","notiz_id","loadDokumente","deleteNotiz","type_id","updateNotiz","isBerechtigt","betriebsmittel","getAllBetriebsmittel","addNewBetriebsmittel","loadBetriebsmittel","betriebsmittelperson_id","updateBetriebsmittel","deleteBetriebsmittel","getTypenBetriebsmittel","loadInventarliste","checkperson","updatePersonUnrulyStatus","unrulyParam","unruly","filterPerson","base","axios","ort","getContentID","ort_kurbz","getRooms","datum","von","bis","typ","personenanzahl","getRoomTypes","cms","content","content_id","version","sprache","sichtbar","getNews","page_size","news","limit","getNewsRowCount","getNewsExtra","lehre","getStudentenMail","getLvInfo","getStudentPruefungen","getStudentProjektarbeiten","getStudentProjektabgaben","detail","projektarbeit_id","postStudentProjektarbeitEndupload","Headers","postStudentProjektarbeitZwischenabgabe","getStudentProjektarbeitAbgabeFile","paabgabe_id","getMitarbeiterProjektarbeiten","all","postProjektarbeitAbgabe","termin","paabgabetyp_kurzbz","bezeichnung","fixtermin","insertvon","kurzbz","deleteProjektarbeitAbgabe","postSerientermin","projektarbeit_ids","fetchDeadlines","addons","getLvMenu","lvid","messages","getMessages","size","getVorlagen","getMsgVarsLoggedInUser","getMessageVarsPerson","getMsgVarsPrestudent","getPersonId","getDataVorlage","vorlage_kurzbz","getNameOfDefaultRecipient","getPreviewText","getReplyData","messageId","sendMessageFromModalContext","sendMessage","deleteMessage","vorlagen","getVorlagenByLoggedInUser","studium","getAllStudienSemester","studiengang","studienplan","getStudiengaengeForStudienSemester","getStudienplaeneBySemester","getLvPlanForStudiensemester","getLvEvaluierungInfo","FhcApiFactory","phrasen","dashboard","getViewData","bookmark","getBookmarks","bookmark_id","tag","ampeln","confirm","ampel_id","studiengangInformation","getStudiengangByKz","authinfo","getAuthUID","getAuthInfo","getAll","OldFhcApi","install","app","globalProperties","factory","warn","addEndpoints","_get_config","uri","TypeError","clearValidation","setFeedback","_clean_return_value","meta","fhcApiAxios","baseURL","interceptors","request","FormData","values","every","item","FileList","File","newData","entries","nd","key","append","jsondata","errors","err","_defaultErrorHandlers","code","handled","alertDefault","responseURL","alertError","validation","apply","general","php","filename","line","backtrace","function","severity","alertSystemError","exception","db","heading","sql","auth","controller","required_permissions","FhcApiFactoryWrapper","constructor","factorypart","root","defineProperty","noWarn","keys","provide","CORE_REST_CLIENT_ERROR","CORE_REST_CLIENT_RETVAL","CoreRESTClient","wsURL","wsParameters","axiosParameters","_axiosCall","isSuccess","isError","hasData","trim","getError","getErrorCode","_generateRouterURI","_printDebug","parameters","errorThrown","axiosCallObj","prop","helperAppContainer","helperApp","PvToast","PvConfirm","mailToUrl","slotProps","systemerror_mailto","openMessagecard","getOrCreateInstance","showmaillink","PvConfig","PvConfirmationService","helperAppInstance","FhcAlert","FhcPhrasen","alertSuccess","toast","summary","life","alertInfo","alertWarning","confirmDelete","$confirm","require","header","acceptLabel","acceptClass","rejectLabel","rejectClass","accept","sticky","alertMultiple","messageArray","errMsg","toUpperCase","stack","handleSystemMessage","msg","resetFormValidation","Event","querySelectorAll","dispatchEvent","handleFormValidation","nodeType","Node","ELEMENT_NODE","notFound","CustomEvent","arr","PluginsApi","_send_array_or_object","func","errs","DEFAULT_ERROR_CONFIG","fail","combine","_format_toast","_default","msgs","b","n_errors","get_config","clean_return_value","_merge_error_config","get_error_handler","formHandler","get_error_list","popHandleableErrors","copy","pop","newType","newTypeCombinesType","newTypeHasHandler","errorConfig","remaining","configoverwrite","typedErrors","allowed","reason","errType","getErrorHandler","ApiPhrasen","reactive","loadingModules","user_language","user_locale","server_languages","find","LC_Time","catArray","phrase","text","obj","elem","extractCategory","t_ref","match","p1","getValueForLoadedPhrase","PluginsPhrasen","cat","lang"],"mappings":"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"} \ No newline at end of file diff --git a/public/dist/js/apps/Dashboard/Admin.js b/public/dist/js/apps/Dashboard/Admin.js index 9c8721424..ec88ae5fc 100644 --- a/public/dist/js/apps/Dashboard/Admin.js +++ b/public/dist/js/apps/Dashboard/Admin.js @@ -1,4 +1,4 @@ -import t from"../../../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js?2025102901";import e from"../../../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js?2025102901";import i from"../../../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js?2025102901";import r from"../../../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js?2025102901";const n={emits:["dataFetched"],props:{refresh:{type:Boolean},apiFunction:{required:!0,type:Function},apiFunctionParameters:{}},watch:{refresh:function(t,e){this.fetchData()}},data:function(){return{loading:!1,error:!1,errorMessage:null}},created:function(){this.fetchData()},methods:{fetchData:function(){if(this.loading=!0,this.error=!1,this.errorMessage=null,"function"==typeof this.apiFunction){let t=this.apiFunction(this.apiFunctionParameters);t instanceof Promise?t.then(this.successHandler).catch(this.errorHandler).finally(this.finallyHandler):this.setError("The called apiFunction does not return a Promise")}else this.setError("Property apiFunction is not a function")},setError:function(t){this.loading=!1,this.error=!0,this.errorMessage=t},successHandler:function(t){this.$emit("dataFetched",t?t.data:void 0)},errorHandler:function(t){t.response?.data?.retval?this.setError(t.response.data.retval):t.data?.message?this.setError(t.data.message):this.setError(t.message)},finallyHandler:function(){this.loading=!1}},template:'\n\t\t\n\t\t\t
Loading...
\n\t\t
\n\t\t\n\t\t\t
{{ errorMessage }}
\n\t\t
\n\t\t\n\t'};var s={getHeader:t=>({method:"get",url:"/api/frontend/v1/navigation/header",params:{navigation_page:t}}),getMenu:t=>({method:"get",url:"/api/frontend/v1/navigation/menu",params:{navigation_page:t}})};const a={components:{CoreFetchCmpt:n},props:{addHeaderMenuEntries:Object,addSideMenuEntries:Object,hideTopMenu:Boolean,leftNavCssClasses:{type:String,default:"navbar navbar-left-side"}},data:()=>({headerMenu:{},sideMenu:{}}),computed:{headerMenuEntries(){let t=this.headerMenu?{...this.headerMenu}:{};return null!=this.headerMenu&&null!=this.addHeaderMenuEntries&&Object.keys(this.addHeaderMenuEntries).length>0&&(t[this.addHeaderMenuEntries.description]=this.addHeaderMenuEntries),t},sideMenuEntries(){let t=this.sideMenu?{...this.sideMenu}:{};return null!=this.sideMenu&&null!=this.addSideMenuEntries&&Object.keys(this.addSideMenuEntries).length>0&&(t[this.addSideMenuEntries.description]=this.addSideMenuEntries),t}},methods:{getNavigationPage:()=>FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,fetchCmptApiFunctionHeader(){return this.$api.call(s.getHeader(this.getNavigationPage()))},fetchCmptApiFunctionSideMenu(){return this.$api.call(s.getMenu(this.getNavigationPage()))},fetchCmptDataFetchedHeader(t){this.headerMenu=t||{}},fetchCmptDataFetchedMenu(t){this.sideMenu=t||{}},getDataBsToggle:t=>t.children?"dropdown":null},template:'\n\t\t\x3c!-- Load head menu --\x3e\n\t\t\n\t\t\x3c!-- Load side menu --\x3e\n\t\t\n\n\t\t\x3c!-- Top menu --\x3e\n\t\t\n\n\t\t\x3c!-- Left side menu --\x3e\n\t\t\n\t'};var o={name:"BootstrapModal",data:()=>({modal:null,fullscreen:!1}),props:{backdrop:{type:[Boolean,String],default:!0,validator:t=>["static",!0,!1].includes(t)},focus:{type:Boolean,default:!0},keyboard:{type:Boolean,default:!0},noCloseBtn:Boolean,dialogClass:[String,Array,Object],headerClass:{type:[String,Array,Object],default:""},bodyClass:{type:[String,Array,Object],default:"px-4 py-5"},footerClass:{type:[String,Array,Object],default:""},allowFullscreenExpand:{type:Boolean,default:!1}},emits:["hideBsModal","hiddenBsModal","hidePreventedBsModal","showBsModal","shownBsModal"],methods:{dispose(){return this.modal.dispose()},handleUpdate(){return this.modal.handleUpdate()},hide(){return this.modal.hide()},show(t){return this.modal.show(t)},toggle(){return this.modal.toggle()},toggleFullscreen(){this.fullscreen=!this.fullscreen}},mounted(){this.$refs.modal&&(this.modal=new bootstrap.Modal(this.$refs.modal,{backdrop:this.backdrop,focus:this.focus,keyboard:this.keyboard}))},popup(t,e,i,r){const n=this,s={};void 0!==t&&(s.default=()=>t),void 0!==i&&(s.title=()=>i),void 0!==r&&(s.footer=()=>r);let a=!1;return"undefined"!=typeof primevue&&(a=!0),new Promise((t,i)=>{const r=Vue.createApp({name:"ModalTmpApp",setup:()=>()=>Vue.h(n,{class:"fade",...e,ref:"modal","onHidden.bs.modal":r.unmount},s),mounted(){this.$refs.modal.show()},beforeUnmount(){this.$refs.modal&&(!1!==this.$refs.modal.result?t(this.$refs.modal.result):i())},unmounted(){o.parentElement.removeChild(o)}}),o=document.createElement("div");a&&r.use(primevue.config.default,{zIndex:{overlay:9999}}),Promise.resolve().then(function(){return dt}).then(t=>{r.use(t.default),r.mount(o),document.body.appendChild(o)})})},template:''},d={name:"BootstrapAlert",components:{BsModal:o},mixins:[o],props:{dialogClass:{type:[String,Array,Object],default:"modal-dialog-centered"},onHideBsModal:Function,onHiddenBsModal:Function,onHidePreventedBsModal:Function,onShowBsModal:Function,onShownBsModal:Function},data:()=>({result:!0}),mounted(){this.modal=this.$refs.modalContainer.modal},popup(t,e){return o.popup.bind(this)(t,e)},template:'\n\t\t\n\t\t\n\t'},l={name:"BootstrapPrompt",mixins:[d],props:{placeholder:String,default:String},data:()=>({value:"",result:!1}),created(){this.default&&(this.value=this.default)},popup(t,e){return"string"==typeof e&&(e={default:e}),d.popup.bind(this)(t,e)},template:'\n\t\t\n\t\t\n\t'},p={name:"BootstrapConfirm",mixins:[d],data:()=>({result:!1}),popup(t,e){return d.popup.bind(this)(t,e)},template:'\n\t\t\n\t\t\n\t'},h={emits:["change","delete"],props:{dashboard_id:Number,dashboard_kurzbz:String,beschreibung:String},data(){return{kurzbz:this.dashboard_kurzbz,desc:this.beschreibung}},methods:{sendDelete(){p.popup("Sure?").then(()=>this.$emit("delete",this.dashboard_id)).catch()}},template:'
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t
'},c={emits:["change","assignWidgets"],props:{dashboard_id:Number,widgets:Array},computed:{apiurl:()=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/dashboard"},methods:{sendChange(t){let e=!this.widgets.find(e=>e.widget_id==t).allowed;axios.post(this.apiurl+"/Widget/setAllowed",{dashboard_id:this.dashboard_id,widget_id:t,action:e?"add":"delete"}).catch(t=>console.error("ERROR: "+t))}},created(){axios.get(this.apiurl+"/Widget/getAll",{params:{dashboard_id:this.dashboard_id}}).then(t=>{this.$emit("assignWidgets",t.data.retval.map(t=>({...t,setup:JSON.parse(t.setup),arguments:JSON.parse(t.arguments),allowed:!!t.allowed})))}).catch(t=>console.error("ERROR:",t))},template:'\n\t
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t
'},u={name:"GridItem",components:{},inject:{},props:{item:Object,active:Boolean},emits:["mouseDown","mouseUp","startMove","startResize","dragging","endDrag","dropDrag","item","touchStart","touchEnd"],data:()=>({dragAction:"",dragging:!1}),computed:{},methods:{registerDragAction(t){if(this.$emit("mouseDown",t),t.target.hasAttribute("drag-action"))this.dragAction=t.target.getAttribute("drag-action");else{let e=t.target.closest("[drag-action]");this.dragAction=e?e.getAttribute("drag-action"):""}},tryDragStart(t,e){let i=this.dragAction||t.target.getAttribute("drag-action");if(i){if(this.dragging=!0,"move"==i)return this.$emit("startMove",t,e);if("resize"==i)return this.$emit("startResize",t,e)}},touchDragEnd(t){this.dragging&&(this.dragging=!1,this.$emit("touchEnd",t))},touchStart(t){this.$emit("touchStart",t),this.registerDragAction(t),this.tryDragStart(t,this.item)},touchMove(t){this.dragging&&(t.preventDefault(),this.$emit("dragging",t))}},template:'\n\t
\n\t\t\n\t
'};class g{constructor(t){t.w?(this.w=t.w,this.h=t.h,this.data=[...t.data],this.grid=[...t.grid]):(this.w=t,this.h=1,this.data=[],this.grid=[])}isFreeSlot(t,e){const i=e*this.w+t;return!this.grid[i]&&0!==this.grid[i]}getMaxY(){return this.data.reduce((t,e)=>(e?.y>t&&(t=e.y),t),0)}getFreeSlots(){const t=[];let e=this.getMaxY(),i=this.w*(e+1);for(let t=0;tthis.grid[e]=t.index),this.data[t.index]=t,this.h=Math.max(this.h,t.y+t.h),[];{const r=new g(this);t.frame.forEach(t=>r.grid[t]=-1);const n=r.tryMoving(i,e);if(n.length){const e=n.sort((t,e)=>(void 0===t.cost&&(t.cost=t.moves.reduce((t,e)=>t*e.cost,1)),void 0===e.cost&&(e.cost=e.moves.reduce((t,e)=>t*e.cost,1)),t.cost>e.cost)),i=[];return e[0].moves.forEach(t=>{const e={...this.data[t.index]};e.x+=t.x,e.y+=t.y,e.frame=this.getItemFrame(e),this.h=Math.max(this.h,e.y+e.h),this.remove(e),e.frame.forEach(t=>this.grid[t]=e.index),this.data[t.index]=e,i[t.index]={index:e.index,x:e.x,y:e.y}}),t.frame.forEach(e=>this.grid[e]=t.index),this.data[t.index]=t,i}console.error("FATAL","can't arrange item on grid")}}move(t,e,i){if(t.data.place[this.w]?.pinned)return[];if(t.x==e&&t.y==i)return[];let r;this.remove(t),t.x==e?r=i-t.y>0?0:3:t.y==i&&(r=e-t.x>0?1:2);const n=Array.isArray(t.frame)?[...t.frame]:[t.frame],s={...t};s.x=e,s.y=i,s.frame=this.getItemFrame(s);let a=this.getItemsInFrame(s.frame);if(a.some(t=>this.data[t]?.data.place[this.w]?.pinned))return[];let o=a.map(t=>this.data[t]),d=o.map(t=>t.frame).flat();if(!d.some(t=>!s.frame.includes(t))&&!d.some(t=>n.includes(t))){let r=[],s=[];for(let t of n){if(s.includes(t))continue;let e=o.shift();e&&(s=[...s,...this.getItemFrame({...e,...this.getSingleFramePosition(t)})],r[e.index]={index:e.index,...this.getSingleFramePosition(t)})}return r[t.index]={index:t.index,x:e,y:i},r}const l=this.add(s,r);return l[t.index]={index:t.index,x:e,y:i},l}resize(t,e,i){if(t.w==e&&t.h==i)return[];this.remove(t);const r={...t};r.w=e,r.h=i,r.frame=this.getItemFrame(r);const n=this.add(r);return n&&(n[t.index]={index:t.index,w:e,h:i,x:t.x,y:t.y,resize:!0}),n}tryMoving(t,e){if(Array.isArray(t)){t.forEach(t=>this.remove({index:t}));let i=[{grid:this,moves:[]}];return t.forEach(t=>{let r=[];i.forEach(i=>{i.grid.tryMoving(t,e).forEach(t=>{i.moves,t.moves=[...t.moves,...i.moves],r.push(t)})}),i=r}),i}const i=[0,3,1,2];this.remove({index:t});const r=1+.2*(this.data[t].weight||0);return i.reduce((i,n)=>{let s=this.tryMovingInDirection(n,t,1,(e===n?.5:1+.1*n)*r);return s?[...i,...s]:i},[]).filter(t=>t)}tryMovingInDirection(t,e,i,r){const n={index:e,x:0,y:0,cost:r};let s;switch(t){case 0:if(this.data[e].data?.place[this.w]?.pinned||this.data[e].y-i<0)return!1;s=this.data[e].frame.map(t=>t-this.w*i),n.y=-i;break;case 3:if(this.data[e].data?.place[this.w]?.pinned)return!1;this.data[e].y+this.data[e].h+i>this.h&&(r+=.4),s=this.data[e].frame.map(t=>t+this.w*i),n.y=i;break;case 1:if(this.data[e].data?.place[this.w]?.pinned||this.data[e].x-i<0)return!1;s=this.data[e].frame.map(t=>t-i),n.x=-i;break;case 2:if(this.data[e].data?.place[this.w]?.pinned||this.data[e].x+this.data[e].w+i>this.w)return!1;s=this.data[e].frame.map(t=>t+i),n.x=i}const a=this.getItemsInFrame(s);if(a.includes(-1))return this.tryMovingInDirection(t,e,i+1,r);const o=new g(this);if(s.forEach(t=>o.grid[t]=-1),!a.length)return[{grid:o,moves:[n]}];const d=o.tryMoving(a).map(t=>t.moves.unshift(n)&&t);return!!d.length&&d}clearWeights(){this.data.forEach(t=>t.weight=void 0)}getItemsInFrame(t){return t.map(t=>this.grid[t]).filter((t,e,i)=>(t||0===t)&&i.indexOf(t)===e)}remove(t){this.grid=this.grid.map(e=>e!=t.index?e:void 0)}getItemFrame(t){const e=[];for(let i=0;i({x:-1,y:-1,clientX:0,clientY:0,mode:0,grid:null,dragGrid:null,permUpdates:[],positionUpdates:null,fixedPositionUpdates:null,draggedOffset:[0,0],draggedItem:null,draggedNode:null,reorderedItems:[],clonedWidget:null}),inject:{sectionName:{type:String,default:""}},computed:{additionalRowComputed:{get(){return this.additionalRow},set(t){this.$emit("update:additionalRow",t)}},items_hashmap(){let t={};return this.items.forEach(e=>{if(this.reorderedItems.length>0&&this.needsReordering(e)){let t=this.reorderedItems.filter(t=>t.data.widgetid==e.widgetid)?.pop();t&&(e.x=t.x,e.y=t.y)}t[`x${e.x}y${e.y}`]=e}),t},items_placeholders(){let t=[],e=this.cols,i=this.rows,r={};for(let n=0;n({index:e,x:t.x,y:t.y,w:t.w,h:t.h,weight:t.weight||0,data:t}))},prePlacedItems(){return this.fixedPositionUpdates?this.indexedItems.map(t=>this.fixedPositionUpdates[t.index]?{index:t.index,weight:t.weight,data:t.data,x:void 0===this.fixedPositionUpdates[t.index].x?t.x:this.fixedPositionUpdates[t.index].x,y:void 0===this.fixedPositionUpdates[t.index].y?t.y:this.fixedPositionUpdates[t.index].y,w:void 0===this.fixedPositionUpdates[t.index].w?t.w:this.fixedPositionUpdates[t.index].w,h:void 0===this.fixedPositionUpdates[t.index].h?t.h:this.fixedPositionUpdates[t.index].h}:t):this.indexedItems},placedItems(){if(!this.positionUpdates)return this.prePlacedItems;let t=this.prePlacedItems.map(t=>{if(!this.positionUpdates[t.index])return t;let e=this.positionUpdates[t.index]?.h-t.h,i=this.positionUpdates[t.index]?.w-t.w;return{resize:this.positionUpdates[t.index]?.resize,index:t.index,weight:t.weight,data:t.data,x:void 0===this.positionUpdates[t.index].x?t.x:this.positionUpdates[t.index].x,y:void 0===this.positionUpdates[t.index].y?t.y:this.positionUpdates[t.index].y,w:i>0||void 0===this.positionUpdates[t.index].w?t.w:this.positionUpdates[t.index].w,h:e>0||void 0===this.positionUpdates[t.index].h?t.h:this.positionUpdates[t.index].h}}),e=[];return t.forEach(t=>{if(t.resize){let i={...t,w:void 0===this.positionUpdates[t.index].w?t.w:this.positionUpdates[t.index].w,h:void 0===this.positionUpdates[t.index].h?t.h:this.positionUpdates[t.index].h,resizeOverlay:!0,blank:!0};e.push(i)}}),[...t,...e]},showEmptyTileHover(){return!(!this.active||!this.grid||0!=this.mode||this.x<0||this.y<0||this.x>=this.cols||this.y>=this.rows)&&this.grid.isFreeSlot(this.x,this.y)},widgetSetup(){if(this.widgetsSetup)return this.widgetsSetup.reduce((t,e)=>(t[e.widget_id]=e,t),{})}},watch:{active(t){t||this.dragCancel()},cols(){this.dragCancel()},rows:{handler(t){this.$emit("gridHeight",t)},immediate:!0},indexedItems:{handler(t){this.dragCancel();const e=this.createNewGrid(t);this.fixedPositionUpdates=e,e.length&&this.$emit("rearrangeItems",e.filter(t=>t))},immediate:!0,deep:!0}},methods:{needsReordering(t){return!t?.data?.place[this.cols]},toggleDraggedItemOverlay(t){this.draggedNode&&(t?this.draggedNode.firstElementChild.classList.add("dashboard-item-overlay"):this.draggedNode.firstElementChild.classList.remove("dashboard-item-overlay"))},dragging(t){if(1==this.mode){this.toggleDraggedItemOverlay(!0);const t=this.$refs.container.getBoundingClientRect(),e=this.clonedWidget.getBoundingClientRect();let i=this.clientY-20,r=this.clientX-15;const n=0,s=t.height-e.height,a=0,o=t.width-e.width,d=Math.max(n,Math.min(s,i)),l=Math.max(a,Math.min(o,r));this.clonedWidget.style.top=`${d}px`,this.clonedWidget.style.left=`${l}px`}},createNewGrid(t){this.grid=new g(this.cols);const e=[];let i=[...t].sort((t,e)=>this.needsReordering(t)&&this.needsReordering(e)?0:this.needsReordering(t)?999:this.needsReordering(e)?-999:t.weight>e.weight),r=[];return i.forEach(i=>{let n=this.grid.getFreeSlots();if(this.needsReordering(i)){let t=n.shift();t?(i.x=t.x,i.y=t.y):(i.x=0,i.y=this.grid.h),r.push(i)}if(i.x+i.w>this.cols){let t,r=this.cols-i.x;this.resizeLimit&&([r]=this.resizeLimit(i.data,r,i.h)),r<1&&(r=1),r>this.cols&&(r=this.cols),i.x+r>this.cols&&(t=this.cols-r),r==i.w&&(r=void 0),e[i.index]={item:i.data,x:t,w:r}}i.frame=this.grid.getItemFrame(i),this.convertGridResultToUpdate(this.grid.add(i),e,t)}),this.reorderedItems=r,this.grid.clearWeights(),e},convertGridResultToUpdate(t,e,i){t&&(i||(i=this.indexedItems),t.forEach(t=>{let r={item:i[t.index].data};void 0!==t.x&&(r.x=t.x),void 0!==t.y&&(r.y=t.y),void 0!==t.w&&(r.w=t.w),void 0!==t.h&&(r.h=t.h),e[t.index]=r}))},mouseLeave(){},updateCursor(t){if(!this.active)return this.x=this.y=-1,!1;const e=this.active?this.marginForExtraRow:0,i=this.$refs.container.getBoundingClientRect();t.clientX||t.clientY||!t.touches||(t.clientX=t.touches[0].clientX,t.clientY=t.touches[0].clientY),this.clientX=t.clientX-i.left,this.clientY=t.clientY-i.top;const r=Math.floor(this.cols*(t.clientX-i.left)/this.$refs.container.clientWidth),n=Math.floor((this.rows+e)*(t.clientY-i.top)/this.$refs.container.clientHeight);return(this.x!=r||this.y!=n)&&(this.x=r,this.y=n,!0)},_dragStart(t,e){t.dataTransfer&&(t.dataTransfer.setDragImage(t.target,-99999,-99999),t.dataTransfer.dropEffect="move",t.dataTransfer.effectAllowed="move")},startMove(t,e){this.active&&(this.mode=1,this.draggedItem=e,this.$emit("draggedItem",e),setTimeout(()=>{this.draggedNode=t.target.closest(".drop-grid-item");let e=t.target.closest(".drop-grid-item")?.cloneNode(!0);e.style.zIndex=5,e.classList.add("widgetClone"),this.$refs.container.appendChild(e);e.querySelector("[style='display: none;']").style.removeProperty("display"),this.clonedWidget=e},0),this.draggedOffset=[e.x-this.x,e.y-this.y],this._dragStart(t,e))},startResize(t,e){this.active&&(this.mode=2,this.draggedItem=e,this.$emit("draggedItem",e),this._dragStart(t))},dragOver(t){if(this.y+1>this.rows&&(1==this.mode||2==this.mode)&&this.dragCancel(),!this.active)return this.dragCancel();if(this.checkPinnedWidgetAnimation(),2==this.mode&&this.checkWidgetSizeLimitAnimation(),this.updateCursor(t))switch(this.mode){case 1:{t.preventDefault(),this.dragGrid=new g(this.grid);let e=this.x+this.draggedOffset[0],i=this.y+this.draggedOffset[1];e<0?(this.draggedOffset[0]+=e,e=0):e+this.draggedItem.w>this.cols&&(this.draggedOffset[0]+=this.cols-this.draggedItem.w-e,e=this.cols-this.draggedItem.w),i<0&&(this.draggedOffset[1]+=i,i=0),this.positionUpdates=this.dragGrid.move(this.draggedItem,e,i);break}case 2:{t.preventDefault(),this.dragGrid=new g(this.grid);let e=Math.min(this.cols-this.draggedItem.x,Math.max(1,this.x-this.draggedItem.x+1)),i=Math.max(1,this.y-this.draggedItem.y+1);this.resizeLimit&&([e,i]=this.resizeLimit(this.draggedItem.data,e,i)),this.positionUpdates=this.dragGrid.resize(this.draggedItem,e,i);break}}},dragCancel(){this.removeWidgetClones(),this.additionalRowComputed=!1,this.toggleDraggedItemOverlay(!1),this.mode=0,this.positionUpdates=null,this.draggedOffset=[0,0],this.draggedItem=null,this.$emit("draggedItem",null),this.draggedNode=null},dragEnd(){if(this.removeWidgetClones(),this.toggleDraggedItemOverlay(!1),0==this.mode)return;document.getElementById(this.draggedItem.data.widgetid).classList.remove("border-danger"),Array.from(document.getElementsByClassName("denied-dragging-animation"))?.forEach(t=>{t.classList.remove("denied-dragging-animation")}),this.mode=0;let t=[];this.convertGridResultToUpdate(this.positionUpdates,t),t=this._updateFixedPositions(t),t.length&&this.$emit("rearrangeItems",t.filter(t=>t)),this.draggedItem=null,this.draggedNode=null,this.$emit("draggedItem",null)},_updateFixedPositions(t){t.forEach((t,e)=>{this.fixedPositionUpdates[e]?this.fixedPositionUpdates[e]={...this.fixedPositionUpdates[e],...t}:this.fixedPositionUpdates[e]=t});let e=this.createNewGrid(this.prePlacedItems);return e.length?(e.forEach((e,i)=>t[i]=e),this._updateFixedPositions(t)):t},emptyTileClicked(){this.additionalRowComputed=!1,this.$emit("newItem",this.x,this.y)},updateCursorOnMouseMove(t){0==this.mode&&this.updateCursor(t)},checkPinnedWidgetAnimation(){let t=[];switch(this.mode){case 2:for(let e=this.draggedItem.x;e<=this.x;e++)for(let i=this.draggedItem.y;i<=this.y;i++)this.items.forEach(r=>{r.x==e&&r.y==i&&t.push(r)});break;case 1:t=this.items.filter(t=>t.x==this.x&&t.y==this.y)}Array.from(document.getElementsByClassName("denied-dragging-animation"))?.forEach(t=>{t.classList.remove("denied-dragging-animation")}),t.forEach(t=>{if(t.place[this.cols]&&t.place[this.cols].pinned){let e=document.getElementById(t.widgetid).querySelector("[pinned='true']");e.classList.contains("denied-dragging-animation")||e.classList.add("denied-dragging-animation")}})},checkWidgetSizeLimitAnimation(){let t=this.itemsSetup[this.draggedItem.data.widget],e=t.width.max??t.width,i=t.width.min??t.width,r=t.height.max??t.height,n=t.height.min??t.height,s=document.getElementById(this.draggedItem.data.widgetid),a=this.x-this.draggedItem.x+1,o=this.y-this.draggedItem.y+1;a>0&&(a>e||a0&&(o>r||o\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t
'};let m={},v={},b=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/dashboard/Widget";var A={getWidget:t=>m[t],loadWidget:t=>m[t]?Promise.resolve(m[t]):v[t]?v[t]:b?(v[t]=new Promise((e,i)=>{axios.get(b,{params:{id:t}}).then(i=>{i.data.retval.arguments=JSON.parse(i.data.retval.arguments),i.data.retval.setup=JSON.parse(i.data.retval.setup),m[t]=i.data.retval,v[t]=void 0,e(m[t])}).catch(t=>i(t.response.data.retval.error))}),v[t]):Promise.reject("Widget could not be loaded because there is no path yet!"),setPath(t){b=t}},_={name:"Item",components:{BsModal:o,HeightTransition:{data:()=>({}),methods:{onEnter(t,e){t.style.height="0",t.style.height=t.scrollHeight+"px"},onLeave(t,e){t.style.height=t.scrollHeight+"px",t.style.height="0"}},template:'\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t'}},data:()=>({component:"",arguments:null,target:!1,widget:null,tmpConfig:{},isLoading:!1,hasConfig:!1,sharedData:null}),emits:["change","remove","dragstart","resizestart","configOpened","configClosed","pinItem","unPinItem"],props:["id","widgetID","config","width","height","custom","hidden","editMode","loading","item_data","place","setup","dragstate","resizeOverlay","additionalRow"],computed:{maxHeight(){return this.setup?.height?.max},maxWidth(){return"[object Number]"==Object.prototype.toString.call(this.setup?.width)?this.setup?.width:this.setup?.width?.max},minHeight(){return this.setup?.height?.min},minWidth(){return this.setup?.width?.min},isResizeable(){return this.maxWidth>1||this.maxHeight>1},isPinned(){return!!this.place?.pinned},ready(){return this.component&&null!==this.arguments}},methods:{unpin(){if(!this.editMode)return;let t={item:this.item_data,x:this.item_data.x,y:this.item_data.y};this.$emit("unPinItem",[t])},pinItem(){let t={item:this.item_data,x:this.item_data.x,y:this.item_data.y};this.$emit("pinItem",[t])},getWidgetC4Link:t=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+t.setup.cis4link,handleShowBsModal(){this.$emit("configOpened")},handleHideBsModal(){this.$emit("configClosed")},mouseDown(t){this.target=t.target},startDrag(t){this.$refs.dragHandle.contains(this.target)?this.$emit("dragstart",t):this.isResizeable&&this.$refs.resizeHandle.contains(this.target)&&this.isResizeable?this.$emit("resizestart",t):t.preventDefault()},openConfig(){this.tmpConfig={...this.arguments},this.$refs.config.show()},setConfig(t){this.hasConfig=t},changeConfig(){this.isLoading=!0;let t={...this.tmpConfig};this.sendChangeConfig(t)},changeConfigManually(){let t={...this.arguments};this.sendChangeConfig(t)},sendChangeConfig(t){for(var e in t)this.widget.arguments[e]==t[e]&&delete t[e];this.$emit("change",t)}},watch:{config(){this.arguments={...this.widget?.arguments,...this.config},this.tmpConfig={...this.arguments},this.$refs.config&&this.$refs.config.hide(),this.isLoading=!1}},async created(){this.widget=await A.loadWidget(this.id);let t=(await import(FHC_JS_DATA_STORAGE_OBJECT.app_root+this.widget.setup.file+"?"+FHC_JS_DATA_STORAGE_OBJECT.fhcomplete_build_version)).default;this.$options.components["widget"+this.widget.widget_id]=t,this.component="widget"+this.widget.widget_id,this.arguments={...this.widget.arguments,...this.config},this.tmpConfig={...this.arguments}},template:'\n\t
\n\t\t
\n\t\t\t\n\t\t
\n\t
\n\t
\n\t
\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{{ widget.setup.name }}\n\t\t\t\n\t\t\t\n\t\t\t\n \t\t\n \t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t\t
\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t
\n\t
'},y={data:()=>({}),props:{widget:{type:Object,required:!0}},methods:{path:t=>"/"==t[0]?FHC_JS_DATA_STORAGE_OBJECT.app_root+t:t},emits:["select"],template:'\n\t
\n\t\t\n\t\t
\n\t\t\t
{{ widget.setup.name || widget.widget_kurzbz }}
\n\t\t\t

{{ widget.beschreibung }}

\n\t\t
\n\t
'},w={name:"Section",components:{DropGrid:f,DashboardItem:_,WidgetIcon:y},inject:{widgetsSetup:{type:Array,default:[]},adminMode:{type:Boolean,default:!1},editMode:{type:Boolean,default:!1}},props:["name","widgets"],emits:["widgetAdd","widgetUpdate","widgetRemove"],data:()=>({configOpened:!1,gridWidth:1,gridHeight:null,draggedItem:null,additionalRow:!1}),provide(){return{editModeIsActive:Vue.computed(()=>this.editModeIsActive),sectionName:Vue.computed(()=>this.name)}},computed:{computedWidgetsSetup(){return this.widgetsSetup?this.widgetsSetup.reduce((t,e)=>(t[e.widget_id]=e.setup,t),{}):{}},editModeIsActive(){return(this.editMode||this.adminMode)&&!this.configOpened},getSectionStyle:()=>"margin-bottom: 8px;",items(){return this.widgets.map(t=>(!t?.widgetid&&t?.id&&(t.widgetid=t.id),{...t,reorder:!1,...t.place[this.gridWidth]||{reorder:!0,x:0,y:0,w:1,h:1}}))}},methods:{sectionNameTranslation(){switch(this.name){case"general":case"custom":return this.$p.t("dashboard",this.name);default:return this.name}},showSectionInformation(){return"general"==this.name?this.$p.t("dashboard","dashboardGeneralSectionDescription"):"custom"==this.name?this.$p.t("dashboard","dashboardCustomSectionDescription"):this.$p.t("dashboard","dashboardSectionDescription",[this.name])},handleConfigOpened(){this.configOpened=!0},handleConfigClosed(){this.configOpened=!1},checkResizeLimit(t,e,i){let r=A.getWidget(t.widget);if(r){let t=r.setup.width;t.max?t.min=t.min||1:t={min:t,max:t},et.max&&(e=t.max);let n=r.setup.height;n.max?n.min=n.min||1:n={min:n,max:n},in.max&&(i=n.max)}return[e,i]},removeWidget(t,e){if(t.custom)p.popup("Are you sure you want to delete this widget?").then(()=>this.$emit("widgetRemove",this.name,t.id));else{let i={};i[t.id]={hidden:!e},this.updatePreset(i)}},saveConfig(t,e){let i={};i[e.id]={config:t},this.updatePreset(i)},updatePositions(t,e=!1){let i={};t.forEach(t=>{let r={...t.item};r.placeholder||(r.place[this.gridWidth]||(r.place[this.gridWidth]={x:0,y:0,w:1,h:1}),delete r.x,delete r.y,delete r.w,delete r.h,delete r.place[this.gridWidth].pinned,void 0!==t.x&&(r.place[this.gridWidth].x=t.x),void 0!==t.y&&(r.place[this.gridWidth].y=t.y),void 0!==t.w&&(r.place[this.gridWidth].w=t.w),void 0!==t.h&&(r.place[this.gridWidth].h=t.h),e&&(r.place[this.gridWidth].pinned=!0),i[r.id]=r)}),this.updatePreset(i)},updatePreset(t){let e={};e[this.name]=t,this.$emit("widgetUpdate",this.name,e)}},mounted(){let t=this,e=t.$refs.container;t.gridWidth=parseInt(window.getComputedStyle(e).getPropertyValue("--fhc-dashboard-grid-size")),window.addEventListener("resize",()=>{t.gridWidth=parseInt(window.getComputedStyle(e).getPropertyValue("--fhc-dashboard-grid-size"))})},template:'\n\t
\n\t\t

\n\t\t\t\n\t\t\t{{sectionNameTranslation()}}:\n\t\t

\n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
'},$={components:{BsModal:o,WidgetIcon:y},props:["widgets"],data:()=>({callbacks:{}}),methods:{getWidget(){return new Promise((t,e)=>{this.callbacks={resolve:t,reject:e},this.$refs.modal.show()})},close(){this.callbacks.reject&&this.callbacks.reject(),this.callbacks={}},pick(t){this.callbacks.resolve&&this.callbacks.resolve(t),this.callbacks={},this.$refs.modal.hide()}},template:'
\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
'},S={mergeDeep(...t){const e=t=>t&&"object"==typeof t;return t.reduce((t,i)=>(Object.keys(i).forEach(r=>{const n=t[r],s=i[r];Array.isArray(n)&&Array.isArray(s)?t[r]=n.concat(...s):e(n)&&e(s)?t[r]=this.mergeDeep(n,s):t[r]=s}),t),{})}},C={components:{DashboardAdminEdit:h,DashboardAdminWidgets:c,DashboardAdminPresets:{components:{DashboardSection:w,DashboardWidgetPicker:$},props:{dashboard:String,widgets:Array},data:()=>({funktionen:{},sections:[],tmpLoading:""}),computed:{apiurl:()=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/dashboard",pickerWidgets(){return this.widgets.filter(t=>t.allowed)}},methods:{widgetAdd(t,e){this.$refs.widgetpicker.getWidget().then(i=>{e.widget=i,delete e.custom,e.preset=1;let r={...e};r.loading=!0,this.sections.forEach(e=>{e.name==t&&e.widgets.push(r)}),axios.post(this.apiurl+"/Config/addWidgetsToPreset",{db:this.dashboard,funktion_kurzbz:t,widgets:[e]}).then(i=>{let n=Object.keys(i.data.retval.data[t].widgets).pop();e.id=n,e.custom=1,this.sections.forEach(i=>{i.name==t&&(i.widgets.splice(i.widgets.indexOf(r),1),i.widgets.push(e))})}).catch(t=>{console.error("ERROR: ",t),alert("ERROR: "+t.response.data.retval)})}).catch(()=>{})},widgetUpdate(t,e){for(var i in e=e[t]){for(var r in this.sections)if(this.sections[r].name==t){for(var n in this.sections[r].widgets)if(this.sections[r].widgets[n].id==i){for(var s in e[i]=S.mergeDeep(this.sections[r].widgets[n],e[i]),{_x:1,_y:1,_w:1,_h:1,index:1,id:1})e[i][s]&&delete e[i][s];break}break}e[i].widgetid=i,delete e[i].custom}axios.post(this.apiurl+"/Config/addWidgetsToPreset",{db:this.dashboard,funktion_kurzbz:t,widgets:e}).then(()=>{this.sections.forEach(i=>{i.name==t&&i.widgets.forEach((t,r)=>{e[t.id]&&(e[t.id].id=t.id,e[t.id].index=t.index,i.widgets[r]=e[t.id],i.widgets[r].custom=1)})})}).catch(t=>{console.error("ERROR: ",t),alert("ERROR: "+t.response.data.retval)})},widgetRemove(t,e){axios.post(this.apiurl+"/Config/removeWidgetFromPreset",{db:this.dashboard,funktion_kurzbz:t,widgetid:e}).then(()=>{this.sections.forEach(i=>{i.name==t&&(i.widgets=i.widgets.filter(t=>t.id!=e))})}).catch(t=>{console.error("ERROR: ",t),alert("ERROR: "+t.response.data.retval)})},loadSections(t){let e=Array.from(t.target.querySelectorAll("option:checked"),t=>t.value);this.sections=[],this.tmpLoading=e.join("###"),axios.get(this.apiurl+"/Config/presetBatch",{params:{db:this.dashboard,funktionen:e}}).then(t=>{if(this.tmpLoading===e.join("###"))for(var i in t.data.retval){let e=[];for(var r in t.data.retval[i])t.data.retval[i][r].id=r,t.data.retval[i][r].custom=1,e.push(t.data.retval[i][r]);this.sections.push({name:i,widgets:e})}}).catch(t=>console.error("ERROR:",t))}},created(){axios.get(this.apiurl+"/Config/funktionen").then(t=>{this.funktionen={general:"GENERAL"},t.data.retval.forEach(t=>{this.funktionen[t.funktion_kurzbz]=t.beschreibung})}).catch(t=>console.error("ERROR:",t))},watch:{dashboard(){this.loadSections({target:this.$refs.funktionenList})}},template:'
\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t\t\n\t
'}},provide:()=>({adminMode:!0}),data:()=>({dashboards:[],current:-1,widgets:[]}),computed:{apiurl:()=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/dashboard",dashboard(){return this.dashboards.find(t=>t.dashboard_id==this.current)}},methods:{dashboardAdd(){let t="";l.popup("New Dashboard name").then(e=>(t=e,axios.post(this.apiurl+"/Dashboard/create",{dashboard_kurzbz:e}))).then(e=>{let i={dashboard_id:e.data.retval,dashboard_kurzbz:t,beschreibung:""};this.dashboards.push(i),this.current=i.dashboard_id}).catch(t=>void 0!==t?console.error("ERROR:",t):0)},dashboardUpdate(t){axios.post(this.apiurl+"/Dashboard/update",t).then(()=>{let e=this.dashboards.find(e=>e.dashboard_id==t.dashboard_id);e.dashboard_kurzbz=t.dashboard_kurzbz,e.beschreibung=t.beschreibung}).catch(t=>console.error("ERROR:",t))},dashboardDelete(t){axios.post(this.apiurl+"/Dashboard/delete",{dashboard_id:t}).then(()=>{this.current=-1,this.dashboards=this.dashboards.filter(e=>e.dashboard_id!=t)}).catch(t=>console.error("ERROR:",t))},assignWidgets(t){this.widgets=t}},created(){axios.get(this.apiurl+"/Dashboard").then(t=>{this.dashboards=t.data.retval}).catch(t=>console.error("ERROR:",t))},template:'
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
'},E={search(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/search",t,e)},searchAdvanced(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/searchAdvanced",t,e)},searchdummy(t){return this.$fhcApi.post("public/js/apps/api/dummyapi.php/Search",t)}},k={loadCategory(t){return this.$fhcApi.get("/api/frontend/v1/phrasen/loadModule/"+t)},setLanguage(t,e){const i={categories:t,language:e};return this.$fhcApi.post("/api/frontend/v1/phrasen/setLanguage",i)},getLanguage(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getLanguage",{})},getActiveDbLanguages(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getAllLanguages",{})}},P={getHeader(t){return this.$fhcApi.get("/api/frontend/v1/navigation/header",{navigation_page:t})},getMenu:function(t){return this.$fhcApi.get("/api/frontend/v1/navigation/menu",{navigation_page:t})}},T={saveCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/saveCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,customFilterName:t.customFilterName})},removeCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},applyFilterFields(t){return this.$fhcApi.post("/api/frontend/v1/filter/applyFilterFields",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterFields:t.filterFields})},addFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/addFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},removeFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},getFilterById(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},getFilter(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType})}},x={abmeldung:{getDetails(t,e){const i="/api/frontend/v1/studstatus/abmeldung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(i)},create(t,e,i){return this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/createAntrag",{studiensemester:t,prestudent_id:e,grund:i},{errorHandling:"strict"})},cancel(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t.studierendenantrag_id},{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t})}},unterbrechung:{getDetails(t,e){const i="/api/frontend/v1/studstatus/unterbrechung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(i)},create(t,e,i,r,n){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/createAntrag",{studiensemester:t,prestudent_id:e,grund:i,datum_wiedereinstieg:r,attachment:n},{errorHandling:"strict"})},cancel(t){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/cancelAntrag",{antrag_id:t},{errorHandling:"strict"})}},wiederholung:{getDetails(t){const e="/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/"+t;return this.$fhcApi.get(e)},getLvs(t){const e="/api/frontend/v1/studstatus/wiederholung/getLvs/"+t;return this.$fhcApi.get(e)},create(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/createAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},cancel(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/cancelAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},saveLvs(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/saveLvs",{forbiddenLvs:t,mandatoryLvs:e})}},leitung:{getStgs(){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getActiveStgs")},getAntraege(t,e,i){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getAntraege/"+t).then(t=>t.data)},getHistory(t){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getHistory/"+t)},getPrestudents(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/getPrestudents",{query:t},{signal:e,timeout:3e4})},approve(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t)},reject(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t)},reopen(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t)},pause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t)},unpause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t)},object(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t)},approveObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t)},denyObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t)}}},O={getView:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getView/${t}`,{})},fotoSperre:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/fotoSperre/${t}`,{})},isStudent:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/isStudent",{uid:t})},isMitarbeiter:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/isMitarbeiter/${t}`,{})},getZustellAdresse:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellAdresse",{})},getZustellKontakt:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellKontakt",{})},getGemeinden:function(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getGemeinden/${t}/${e}`,{})},getAllNationen:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getAllNationen",{})}},D={ +import t from"../../../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js?2025111701";import e from"../../../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js?2025111701";import i from"../../../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js?2025111701";import r from"../../../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js?2025111701";const n={emits:["dataFetched"],props:{refresh:{type:Boolean},apiFunction:{required:!0,type:Function},apiFunctionParameters:{}},watch:{refresh:function(t,e){this.fetchData()}},data:function(){return{loading:!1,error:!1,errorMessage:null}},created:function(){this.fetchData()},methods:{fetchData:function(){if(this.loading=!0,this.error=!1,this.errorMessage=null,"function"==typeof this.apiFunction){let t=this.apiFunction(this.apiFunctionParameters);t instanceof Promise?t.then(this.successHandler).catch(this.errorHandler).finally(this.finallyHandler):this.setError("The called apiFunction does not return a Promise")}else this.setError("Property apiFunction is not a function")},setError:function(t){this.loading=!1,this.error=!0,this.errorMessage=t},successHandler:function(t){this.$emit("dataFetched",t?t.data:void 0)},errorHandler:function(t){t.response?.data?.retval?this.setError(t.response.data.retval):t.data?.message?this.setError(t.data.message):this.setError(t.message)},finallyHandler:function(){this.loading=!1}},template:'\n\t\t\n\t\t\t
Loading...
\n\t\t
\n\t\t\n\t\t\t
{{ errorMessage }}
\n\t\t
\n\t\t\n\t'};var s={getHeader:t=>({method:"get",url:"/api/frontend/v1/navigation/header",params:{navigation_page:t}}),getMenu:t=>({method:"get",url:"/api/frontend/v1/navigation/menu",params:{navigation_page:t}})};const a={components:{CoreFetchCmpt:n},props:{addHeaderMenuEntries:Object,addSideMenuEntries:Object,hideTopMenu:Boolean,leftNavCssClasses:{type:String,default:"navbar navbar-left-side"}},data:()=>({headerMenu:{},sideMenu:{}}),computed:{headerMenuEntries(){let t=this.headerMenu?{...this.headerMenu}:{};return null!=this.headerMenu&&null!=this.addHeaderMenuEntries&&Object.keys(this.addHeaderMenuEntries).length>0&&(t[this.addHeaderMenuEntries.description]=this.addHeaderMenuEntries),t},sideMenuEntries(){let t=this.sideMenu?{...this.sideMenu}:{};return null!=this.sideMenu&&null!=this.addSideMenuEntries&&Object.keys(this.addSideMenuEntries).length>0&&(t[this.addSideMenuEntries.description]=this.addSideMenuEntries),t}},methods:{getNavigationPage:()=>FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,fetchCmptApiFunctionHeader(){return this.$api.call(s.getHeader(this.getNavigationPage()))},fetchCmptApiFunctionSideMenu(){return this.$api.call(s.getMenu(this.getNavigationPage()))},fetchCmptDataFetchedHeader(t){this.headerMenu=t||{}},fetchCmptDataFetchedMenu(t){this.sideMenu=t||{}},getDataBsToggle:t=>t.children?"dropdown":null},template:'\n\t\t\x3c!-- Load head menu --\x3e\n\t\t\n\t\t\x3c!-- Load side menu --\x3e\n\t\t\n\n\t\t\x3c!-- Top menu --\x3e\n\t\t\n\n\t\t\x3c!-- Left side menu --\x3e\n\t\t\n\t'};var o={name:"BootstrapModal",data:()=>({modal:null,fullscreen:!1}),props:{backdrop:{type:[Boolean,String],default:!0,validator:t=>["static",!0,!1].includes(t)},focus:{type:Boolean,default:!0},keyboard:{type:Boolean,default:!0},noCloseBtn:Boolean,dialogClass:[String,Array,Object],headerClass:{type:[String,Array,Object],default:""},bodyClass:{type:[String,Array,Object],default:"px-4 py-5"},footerClass:{type:[String,Array,Object],default:""},allowFullscreenExpand:{type:Boolean,default:!1}},emits:["hideBsModal","hiddenBsModal","hidePreventedBsModal","showBsModal","shownBsModal"],methods:{dispose(){return this.modal.dispose()},handleUpdate(){return this.modal.handleUpdate()},hide(){return this.modal.hide()},show(t){return this.modal.show(t)},toggle(){return this.modal.toggle()},toggleFullscreen(){this.fullscreen=!this.fullscreen}},mounted(){this.$refs.modal&&(this.modal=new bootstrap.Modal(this.$refs.modal,{backdrop:this.backdrop,focus:this.focus,keyboard:this.keyboard}))},popup(t,e,i,r){const n=this,s={};void 0!==t&&(s.default=()=>t),void 0!==i&&(s.title=()=>i),void 0!==r&&(s.footer=()=>r);let a=!1;return"undefined"!=typeof primevue&&(a=!0),new Promise((t,i)=>{const r=Vue.createApp({name:"ModalTmpApp",setup:()=>()=>Vue.h(n,{class:"fade",...e,ref:"modal","onHidden.bs.modal":r.unmount},s),mounted(){this.$refs.modal.show()},beforeUnmount(){this.$refs.modal&&(!1!==this.$refs.modal.result?t(this.$refs.modal.result):i())},unmounted(){o.parentElement.removeChild(o)}}),o=document.createElement("div");a&&r.use(primevue.config.default,{zIndex:{overlay:9999}}),Promise.resolve().then(function(){return dt}).then(t=>{r.use(t.default),r.mount(o),document.body.appendChild(o)})})},template:''},d={name:"BootstrapAlert",components:{BsModal:o},mixins:[o],props:{dialogClass:{type:[String,Array,Object],default:"modal-dialog-centered"},onHideBsModal:Function,onHiddenBsModal:Function,onHidePreventedBsModal:Function,onShowBsModal:Function,onShownBsModal:Function},data:()=>({result:!0}),mounted(){this.modal=this.$refs.modalContainer.modal},popup(t,e){return o.popup.bind(this)(t,e)},template:'\n\t\t\n\t\t\n\t'},l={name:"BootstrapPrompt",mixins:[d],props:{placeholder:String,default:String},data:()=>({value:"",result:!1}),created(){this.default&&(this.value=this.default)},popup(t,e){return"string"==typeof e&&(e={default:e}),d.popup.bind(this)(t,e)},template:'\n\t\t\n\t\t\n\t'},p={name:"BootstrapConfirm",mixins:[d],data:()=>({result:!1}),popup(t,e){return d.popup.bind(this)(t,e)},template:'\n\t\t\n\t\t\n\t'},h={emits:["change","delete"],props:{dashboard_id:Number,dashboard_kurzbz:String,beschreibung:String},data(){return{kurzbz:this.dashboard_kurzbz,desc:this.beschreibung}},methods:{sendDelete(){p.popup("Sure?").then(()=>this.$emit("delete",this.dashboard_id)).catch()}},template:'
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t
'},c={emits:["change","assignWidgets"],props:{dashboard_id:Number,widgets:Array},computed:{apiurl:()=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/dashboard"},methods:{sendChange(t){let e=!this.widgets.find(e=>e.widget_id==t).allowed;axios.post(this.apiurl+"/Widget/setAllowed",{dashboard_id:this.dashboard_id,widget_id:t,action:e?"add":"delete"}).catch(t=>console.error("ERROR: "+t))}},created(){axios.get(this.apiurl+"/Widget/getAll",{params:{dashboard_id:this.dashboard_id}}).then(t=>{this.$emit("assignWidgets",t.data.retval.map(t=>({...t,setup:JSON.parse(t.setup),arguments:JSON.parse(t.arguments),allowed:!!t.allowed})))}).catch(t=>console.error("ERROR:",t))},template:'\n\t
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t
'},u={name:"GridItem",components:{},inject:{},props:{item:Object,active:Boolean},emits:["mouseDown","mouseUp","startMove","startResize","dragging","endDrag","dropDrag","item","touchStart","touchEnd"],data:()=>({dragAction:"",dragging:!1}),computed:{},methods:{registerDragAction(t){if(this.$emit("mouseDown",t),t.target.hasAttribute("drag-action"))this.dragAction=t.target.getAttribute("drag-action");else{let e=t.target.closest("[drag-action]");this.dragAction=e?e.getAttribute("drag-action"):""}},tryDragStart(t,e){let i=this.dragAction||t.target.getAttribute("drag-action");if(i){if(this.dragging=!0,"move"==i)return this.$emit("startMove",t,e);if("resize"==i)return this.$emit("startResize",t,e)}},touchDragEnd(t){this.dragging&&(this.dragging=!1,this.$emit("touchEnd",t))},touchStart(t){this.$emit("touchStart",t),this.registerDragAction(t),this.tryDragStart(t,this.item)},touchMove(t){this.dragging&&(t.preventDefault(),this.$emit("dragging",t))}},template:'\n\t
\n\t\t\n\t
'};class g{constructor(t){t.w?(this.w=t.w,this.h=t.h,this.data=[...t.data],this.grid=[...t.grid]):(this.w=t,this.h=1,this.data=[],this.grid=[])}isFreeSlot(t,e){const i=e*this.w+t;return!this.grid[i]&&0!==this.grid[i]}getMaxY(){return this.data.reduce((t,e)=>(e?.y>t&&(t=e.y),t),0)}getFreeSlots(){const t=[];let e=this.getMaxY(),i=this.w*(e+1);for(let t=0;tthis.grid[e]=t.index),this.data[t.index]=t,this.h=Math.max(this.h,t.y+t.h),[];{const r=new g(this);t.frame.forEach(t=>r.grid[t]=-1);const n=r.tryMoving(i,e);if(n.length){const e=n.sort((t,e)=>(void 0===t.cost&&(t.cost=t.moves.reduce((t,e)=>t*e.cost,1)),void 0===e.cost&&(e.cost=e.moves.reduce((t,e)=>t*e.cost,1)),t.cost>e.cost)),i=[];return e[0].moves.forEach(t=>{const e={...this.data[t.index]};e.x+=t.x,e.y+=t.y,e.frame=this.getItemFrame(e),this.h=Math.max(this.h,e.y+e.h),this.remove(e),e.frame.forEach(t=>this.grid[t]=e.index),this.data[t.index]=e,i[t.index]={index:e.index,x:e.x,y:e.y}}),t.frame.forEach(e=>this.grid[e]=t.index),this.data[t.index]=t,i}console.error("FATAL","can't arrange item on grid")}}move(t,e,i){if(t.data.place[this.w]?.pinned)return[];if(t.x==e&&t.y==i)return[];let r;this.remove(t),t.x==e?r=i-t.y>0?0:3:t.y==i&&(r=e-t.x>0?1:2);const n=Array.isArray(t.frame)?[...t.frame]:[t.frame],s={...t};s.x=e,s.y=i,s.frame=this.getItemFrame(s);let a=this.getItemsInFrame(s.frame);if(a.some(t=>this.data[t]?.data.place[this.w]?.pinned))return[];let o=a.map(t=>this.data[t]),d=o.map(t=>t.frame).flat();if(!d.some(t=>!s.frame.includes(t))&&!d.some(t=>n.includes(t))){let r=[],s=[];for(let t of n){if(s.includes(t))continue;let e=o.shift();e&&(s=[...s,...this.getItemFrame({...e,...this.getSingleFramePosition(t)})],r[e.index]={index:e.index,...this.getSingleFramePosition(t)})}return r[t.index]={index:t.index,x:e,y:i},r}const l=this.add(s,r);return l[t.index]={index:t.index,x:e,y:i},l}resize(t,e,i){if(t.w==e&&t.h==i)return[];this.remove(t);const r={...t};r.w=e,r.h=i,r.frame=this.getItemFrame(r);const n=this.add(r);return n&&(n[t.index]={index:t.index,w:e,h:i,x:t.x,y:t.y,resize:!0}),n}tryMoving(t,e){if(Array.isArray(t)){t.forEach(t=>this.remove({index:t}));let i=[{grid:this,moves:[]}];return t.forEach(t=>{let r=[];i.forEach(i=>{i.grid.tryMoving(t,e).forEach(t=>{i.moves,t.moves=[...t.moves,...i.moves],r.push(t)})}),i=r}),i}const i=[0,3,1,2];this.remove({index:t});const r=1+.2*(this.data[t].weight||0);return i.reduce((i,n)=>{let s=this.tryMovingInDirection(n,t,1,(e===n?.5:1+.1*n)*r);return s?[...i,...s]:i},[]).filter(t=>t)}tryMovingInDirection(t,e,i,r){const n={index:e,x:0,y:0,cost:r};let s;switch(t){case 0:if(this.data[e].data?.place[this.w]?.pinned||this.data[e].y-i<0)return!1;s=this.data[e].frame.map(t=>t-this.w*i),n.y=-i;break;case 3:if(this.data[e].data?.place[this.w]?.pinned)return!1;this.data[e].y+this.data[e].h+i>this.h&&(r+=.4),s=this.data[e].frame.map(t=>t+this.w*i),n.y=i;break;case 1:if(this.data[e].data?.place[this.w]?.pinned||this.data[e].x-i<0)return!1;s=this.data[e].frame.map(t=>t-i),n.x=-i;break;case 2:if(this.data[e].data?.place[this.w]?.pinned||this.data[e].x+this.data[e].w+i>this.w)return!1;s=this.data[e].frame.map(t=>t+i),n.x=i}const a=this.getItemsInFrame(s);if(a.includes(-1))return this.tryMovingInDirection(t,e,i+1,r);const o=new g(this);if(s.forEach(t=>o.grid[t]=-1),!a.length)return[{grid:o,moves:[n]}];const d=o.tryMoving(a).map(t=>t.moves.unshift(n)&&t);return!!d.length&&d}clearWeights(){this.data.forEach(t=>t.weight=void 0)}getItemsInFrame(t){return t.map(t=>this.grid[t]).filter((t,e,i)=>(t||0===t)&&i.indexOf(t)===e)}remove(t){this.grid=this.grid.map(e=>e!=t.index?e:void 0)}getItemFrame(t){const e=[];for(let i=0;i({x:-1,y:-1,clientX:0,clientY:0,mode:0,grid:null,dragGrid:null,permUpdates:[],positionUpdates:null,fixedPositionUpdates:null,draggedOffset:[0,0],draggedItem:null,draggedNode:null,reorderedItems:[],clonedWidget:null}),inject:{sectionName:{type:String,default:""}},computed:{additionalRowComputed:{get(){return this.additionalRow},set(t){this.$emit("update:additionalRow",t)}},items_hashmap(){let t={};return this.items.forEach(e=>{if(this.reorderedItems.length>0&&this.needsReordering(e)){let t=this.reorderedItems.filter(t=>t.data.widgetid==e.widgetid)?.pop();t&&(e.x=t.x,e.y=t.y)}t[`x${e.x}y${e.y}`]=e}),t},items_placeholders(){let t=[],e=this.cols,i=this.rows,r={};for(let n=0;n({index:e,x:t.x,y:t.y,w:t.w,h:t.h,weight:t.weight||0,data:t}))},prePlacedItems(){return this.fixedPositionUpdates?this.indexedItems.map(t=>this.fixedPositionUpdates[t.index]?{index:t.index,weight:t.weight,data:t.data,x:void 0===this.fixedPositionUpdates[t.index].x?t.x:this.fixedPositionUpdates[t.index].x,y:void 0===this.fixedPositionUpdates[t.index].y?t.y:this.fixedPositionUpdates[t.index].y,w:void 0===this.fixedPositionUpdates[t.index].w?t.w:this.fixedPositionUpdates[t.index].w,h:void 0===this.fixedPositionUpdates[t.index].h?t.h:this.fixedPositionUpdates[t.index].h}:t):this.indexedItems},placedItems(){if(!this.positionUpdates)return this.prePlacedItems;let t=this.prePlacedItems.map(t=>{if(!this.positionUpdates[t.index])return t;let e=this.positionUpdates[t.index]?.h-t.h,i=this.positionUpdates[t.index]?.w-t.w;return{resize:this.positionUpdates[t.index]?.resize,index:t.index,weight:t.weight,data:t.data,x:void 0===this.positionUpdates[t.index].x?t.x:this.positionUpdates[t.index].x,y:void 0===this.positionUpdates[t.index].y?t.y:this.positionUpdates[t.index].y,w:i>0||void 0===this.positionUpdates[t.index].w?t.w:this.positionUpdates[t.index].w,h:e>0||void 0===this.positionUpdates[t.index].h?t.h:this.positionUpdates[t.index].h}}),e=[];return t.forEach(t=>{if(t.resize){let i={...t,w:void 0===this.positionUpdates[t.index].w?t.w:this.positionUpdates[t.index].w,h:void 0===this.positionUpdates[t.index].h?t.h:this.positionUpdates[t.index].h,resizeOverlay:!0,blank:!0};e.push(i)}}),[...t,...e]},showEmptyTileHover(){return!(!this.active||!this.grid||0!=this.mode||this.x<0||this.y<0||this.x>=this.cols||this.y>=this.rows)&&this.grid.isFreeSlot(this.x,this.y)},widgetSetup(){if(this.widgetsSetup)return this.widgetsSetup.reduce((t,e)=>(t[e.widget_id]=e,t),{})}},watch:{active(t){t||this.dragCancel()},cols(){this.dragCancel()},rows:{handler(t){this.$emit("gridHeight",t)},immediate:!0},indexedItems:{handler(t){this.dragCancel();const e=this.createNewGrid(t);this.fixedPositionUpdates=e,e.length&&this.$emit("rearrangeItems",e.filter(t=>t))},immediate:!0,deep:!0}},methods:{needsReordering(t){return!t?.data?.place[this.cols]},toggleDraggedItemOverlay(t){this.draggedNode&&(t?this.draggedNode.firstElementChild.classList.add("dashboard-item-overlay"):this.draggedNode.firstElementChild.classList.remove("dashboard-item-overlay"))},dragging(t){if(1==this.mode){this.toggleDraggedItemOverlay(!0);const t=this.$refs.container.getBoundingClientRect(),e=this.clonedWidget.getBoundingClientRect();let i=this.clientY-20,r=this.clientX-15;const n=0,s=t.height-e.height,a=0,o=t.width-e.width,d=Math.max(n,Math.min(s,i)),l=Math.max(a,Math.min(o,r));this.clonedWidget.style.top=`${d}px`,this.clonedWidget.style.left=`${l}px`}},createNewGrid(t){this.grid=new g(this.cols);const e=[];let i=[...t].sort((t,e)=>this.needsReordering(t)&&this.needsReordering(e)?0:this.needsReordering(t)?999:this.needsReordering(e)?-999:t.weight>e.weight),r=[];return i.forEach(i=>{let n=this.grid.getFreeSlots();if(this.needsReordering(i)){let t=n.shift();t?(i.x=t.x,i.y=t.y):(i.x=0,i.y=this.grid.h),r.push(i)}if(i.x+i.w>this.cols){let t,r=this.cols-i.x;this.resizeLimit&&([r]=this.resizeLimit(i.data,r,i.h)),r<1&&(r=1),r>this.cols&&(r=this.cols),i.x+r>this.cols&&(t=this.cols-r),r==i.w&&(r=void 0),e[i.index]={item:i.data,x:t,w:r}}i.frame=this.grid.getItemFrame(i),this.convertGridResultToUpdate(this.grid.add(i),e,t)}),this.reorderedItems=r,this.grid.clearWeights(),e},convertGridResultToUpdate(t,e,i){t&&(i||(i=this.indexedItems),t.forEach(t=>{let r={item:i[t.index].data};void 0!==t.x&&(r.x=t.x),void 0!==t.y&&(r.y=t.y),void 0!==t.w&&(r.w=t.w),void 0!==t.h&&(r.h=t.h),e[t.index]=r}))},mouseLeave(){},updateCursor(t){if(!this.active)return this.x=this.y=-1,!1;const e=this.active?this.marginForExtraRow:0,i=this.$refs.container.getBoundingClientRect();t.clientX||t.clientY||!t.touches||(t.clientX=t.touches[0].clientX,t.clientY=t.touches[0].clientY),this.clientX=t.clientX-i.left,this.clientY=t.clientY-i.top;const r=Math.floor(this.cols*(t.clientX-i.left)/this.$refs.container.clientWidth),n=Math.floor((this.rows+e)*(t.clientY-i.top)/this.$refs.container.clientHeight);return(this.x!=r||this.y!=n)&&(this.x=r,this.y=n,!0)},_dragStart(t,e){t.dataTransfer&&(t.dataTransfer.setDragImage(t.target,-99999,-99999),t.dataTransfer.dropEffect="move",t.dataTransfer.effectAllowed="move")},startMove(t,e){this.active&&(this.mode=1,this.draggedItem=e,this.$emit("draggedItem",e),setTimeout(()=>{this.draggedNode=t.target.closest(".drop-grid-item");let e=t.target.closest(".drop-grid-item")?.cloneNode(!0);e.style.zIndex=5,e.classList.add("widgetClone"),this.$refs.container.appendChild(e);e.querySelector("[style='display: none;']").style.removeProperty("display"),this.clonedWidget=e},0),this.draggedOffset=[e.x-this.x,e.y-this.y],this._dragStart(t,e))},startResize(t,e){this.active&&(this.mode=2,this.draggedItem=e,this.$emit("draggedItem",e),this._dragStart(t))},dragOver(t){if(this.y+1>this.rows&&(1==this.mode||2==this.mode)&&this.dragCancel(),!this.active)return this.dragCancel();if(this.checkPinnedWidgetAnimation(),2==this.mode&&this.checkWidgetSizeLimitAnimation(),this.updateCursor(t))switch(this.mode){case 1:{t.preventDefault(),this.dragGrid=new g(this.grid);let e=this.x+this.draggedOffset[0],i=this.y+this.draggedOffset[1];e<0?(this.draggedOffset[0]+=e,e=0):e+this.draggedItem.w>this.cols&&(this.draggedOffset[0]+=this.cols-this.draggedItem.w-e,e=this.cols-this.draggedItem.w),i<0&&(this.draggedOffset[1]+=i,i=0),this.positionUpdates=this.dragGrid.move(this.draggedItem,e,i);break}case 2:{t.preventDefault(),this.dragGrid=new g(this.grid);let e=Math.min(this.cols-this.draggedItem.x,Math.max(1,this.x-this.draggedItem.x+1)),i=Math.max(1,this.y-this.draggedItem.y+1);this.resizeLimit&&([e,i]=this.resizeLimit(this.draggedItem.data,e,i)),this.positionUpdates=this.dragGrid.resize(this.draggedItem,e,i);break}}},dragCancel(){this.removeWidgetClones(),this.additionalRowComputed=!1,this.toggleDraggedItemOverlay(!1),this.mode=0,this.positionUpdates=null,this.draggedOffset=[0,0],this.draggedItem=null,this.$emit("draggedItem",null),this.draggedNode=null},dragEnd(){if(this.removeWidgetClones(),this.toggleDraggedItemOverlay(!1),0==this.mode)return;document.getElementById(this.draggedItem.data.widgetid).classList.remove("border-danger"),Array.from(document.getElementsByClassName("denied-dragging-animation"))?.forEach(t=>{t.classList.remove("denied-dragging-animation")}),this.mode=0;let t=[];this.convertGridResultToUpdate(this.positionUpdates,t),t=this._updateFixedPositions(t),t.length&&this.$emit("rearrangeItems",t.filter(t=>t)),this.draggedItem=null,this.draggedNode=null,this.$emit("draggedItem",null)},_updateFixedPositions(t){t.forEach((t,e)=>{this.fixedPositionUpdates[e]?this.fixedPositionUpdates[e]={...this.fixedPositionUpdates[e],...t}:this.fixedPositionUpdates[e]=t});let e=this.createNewGrid(this.prePlacedItems);return e.length?(e.forEach((e,i)=>t[i]=e),this._updateFixedPositions(t)):t},emptyTileClicked(){this.additionalRowComputed=!1,this.$emit("newItem",this.x,this.y)},updateCursorOnMouseMove(t){0==this.mode&&this.updateCursor(t)},checkPinnedWidgetAnimation(){let t=[];switch(this.mode){case 2:for(let e=this.draggedItem.x;e<=this.x;e++)for(let i=this.draggedItem.y;i<=this.y;i++)this.items.forEach(r=>{r.x==e&&r.y==i&&t.push(r)});break;case 1:t=this.items.filter(t=>t.x==this.x&&t.y==this.y)}Array.from(document.getElementsByClassName("denied-dragging-animation"))?.forEach(t=>{t.classList.remove("denied-dragging-animation")}),t.forEach(t=>{if(t.place[this.cols]&&t.place[this.cols].pinned){let e=document.getElementById(t.widgetid).querySelector("[pinned='true']");e.classList.contains("denied-dragging-animation")||e.classList.add("denied-dragging-animation")}})},checkWidgetSizeLimitAnimation(){let t=this.itemsSetup[this.draggedItem.data.widget],e=t.width.max??t.width,i=t.width.min??t.width,r=t.height.max??t.height,n=t.height.min??t.height,s=document.getElementById(this.draggedItem.data.widgetid),a=this.x-this.draggedItem.x+1,o=this.y-this.draggedItem.y+1;a>0&&(a>e||a0&&(o>r||o\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t
'};let m={},v={},b=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/dashboard/Widget";var A={getWidget:t=>m[t],loadWidget:t=>m[t]?Promise.resolve(m[t]):v[t]?v[t]:b?(v[t]=new Promise((e,i)=>{axios.get(b,{params:{id:t}}).then(i=>{i.data.retval.arguments=JSON.parse(i.data.retval.arguments),i.data.retval.setup=JSON.parse(i.data.retval.setup),m[t]=i.data.retval,v[t]=void 0,e(m[t])}).catch(t=>i(t.response.data.retval.error))}),v[t]):Promise.reject("Widget could not be loaded because there is no path yet!"),setPath(t){b=t}},_={name:"Item",components:{BsModal:o,HeightTransition:{data:()=>({}),methods:{onEnter(t,e){t.style.height="0",t.style.height=t.scrollHeight+"px"},onLeave(t,e){t.style.height=t.scrollHeight+"px",t.style.height="0"}},template:'\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t'}},data:()=>({component:"",arguments:null,target:!1,widget:null,tmpConfig:{},isLoading:!1,hasConfig:!1,sharedData:null}),emits:["change","remove","dragstart","resizestart","configOpened","configClosed","pinItem","unPinItem"],props:["id","widgetID","config","width","height","custom","hidden","editMode","loading","item_data","place","setup","dragstate","resizeOverlay","additionalRow"],computed:{maxHeight(){return this.setup?.height?.max},maxWidth(){return"[object Number]"==Object.prototype.toString.call(this.setup?.width)?this.setup?.width:this.setup?.width?.max},minHeight(){return this.setup?.height?.min},minWidth(){return this.setup?.width?.min},isResizeable(){return this.maxWidth>1||this.maxHeight>1},isPinned(){return!!this.place?.pinned},ready(){return this.component&&null!==this.arguments}},methods:{unpin(){if(!this.editMode)return;let t={item:this.item_data,x:this.item_data.x,y:this.item_data.y};this.$emit("unPinItem",[t])},pinItem(){let t={item:this.item_data,x:this.item_data.x,y:this.item_data.y};this.$emit("pinItem",[t])},getWidgetC4Link:t=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+t.setup.cis4link,handleShowBsModal(){this.$emit("configOpened")},handleHideBsModal(){this.$emit("configClosed")},mouseDown(t){this.target=t.target},startDrag(t){this.$refs.dragHandle.contains(this.target)?this.$emit("dragstart",t):this.isResizeable&&this.$refs.resizeHandle.contains(this.target)&&this.isResizeable?this.$emit("resizestart",t):t.preventDefault()},openConfig(){this.tmpConfig={...this.arguments},this.$refs.config.show()},setConfig(t){this.hasConfig=t},changeConfig(){this.isLoading=!0;let t={...this.tmpConfig};this.sendChangeConfig(t)},changeConfigManually(){let t={...this.arguments};this.sendChangeConfig(t)},sendChangeConfig(t){for(var e in t)this.widget.arguments[e]==t[e]&&delete t[e];this.$emit("change",t)}},watch:{config(){this.arguments={...this.widget?.arguments,...this.config},this.tmpConfig={...this.arguments},this.$refs.config&&this.$refs.config.hide(),this.isLoading=!1}},async created(){this.widget=await A.loadWidget(this.id);let t=(await import(FHC_JS_DATA_STORAGE_OBJECT.app_root+this.widget.setup.file+"?"+FHC_JS_DATA_STORAGE_OBJECT.fhcomplete_build_version)).default;this.$options.components["widget"+this.widget.widget_id]=t,this.component="widget"+this.widget.widget_id,this.arguments={...this.widget.arguments,...this.config},this.tmpConfig={...this.arguments}},template:'\n\t
\n\t\t
\n\t\t\t\n\t\t
\n\t
\n\t
\n\t
\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{{ widget.setup.name }}\n\t\t\t\n\t\t\t\n\t\t\t\n \t\t\n \t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t\t
\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t
\n\t
'},y={data:()=>({}),props:{widget:{type:Object,required:!0}},methods:{path:t=>"/"==t[0]?FHC_JS_DATA_STORAGE_OBJECT.app_root+t:t},emits:["select"],template:'\n\t
\n\t\t\n\t\t
\n\t\t\t
{{ widget.setup.name || widget.widget_kurzbz }}
\n\t\t\t

{{ widget.beschreibung }}

\n\t\t
\n\t
'},w={name:"Section",components:{DropGrid:f,DashboardItem:_,WidgetIcon:y},inject:{widgetsSetup:{type:Array,default:[]},adminMode:{type:Boolean,default:!1},editMode:{type:Boolean,default:!1}},props:["name","widgets"],emits:["widgetAdd","widgetUpdate","widgetRemove"],data:()=>({configOpened:!1,gridWidth:1,gridHeight:null,draggedItem:null,additionalRow:!1}),provide(){return{editModeIsActive:Vue.computed(()=>this.editModeIsActive),sectionName:Vue.computed(()=>this.name)}},computed:{computedWidgetsSetup(){return this.widgetsSetup?this.widgetsSetup.reduce((t,e)=>(t[e.widget_id]=e.setup,t),{}):{}},editModeIsActive(){return(this.editMode||this.adminMode)&&!this.configOpened},getSectionStyle:()=>"margin-bottom: 8px;",items(){return this.widgets.map(t=>(!t?.widgetid&&t?.id&&(t.widgetid=t.id),{...t,reorder:!1,...t.place[this.gridWidth]||{reorder:!0,x:0,y:0,w:1,h:1}}))}},methods:{sectionNameTranslation(){switch(this.name){case"general":case"custom":return this.$p.t("dashboard",this.name);default:return this.name}},showSectionInformation(){return"general"==this.name?this.$p.t("dashboard","dashboardGeneralSectionDescription"):"custom"==this.name?this.$p.t("dashboard","dashboardCustomSectionDescription"):this.$p.t("dashboard","dashboardSectionDescription",[this.name])},handleConfigOpened(){this.configOpened=!0},handleConfigClosed(){this.configOpened=!1},checkResizeLimit(t,e,i){let r=A.getWidget(t.widget);if(r){let t=r.setup.width;t.max?t.min=t.min||1:t={min:t,max:t},et.max&&(e=t.max);let n=r.setup.height;n.max?n.min=n.min||1:n={min:n,max:n},in.max&&(i=n.max)}return[e,i]},removeWidget(t,e){if(t.custom)p.popup("Are you sure you want to delete this widget?").then(()=>this.$emit("widgetRemove",this.name,t.id));else{let i={};i[t.id]={hidden:!e},this.updatePreset(i)}},saveConfig(t,e){let i={};i[e.id]={config:t},this.updatePreset(i)},updatePositions(t,e=!1){let i={};t.forEach(t=>{let r={...t.item};r.placeholder||(r.place[this.gridWidth]||(r.place[this.gridWidth]={x:0,y:0,w:1,h:1}),delete r.x,delete r.y,delete r.w,delete r.h,delete r.place[this.gridWidth].pinned,void 0!==t.x&&(r.place[this.gridWidth].x=t.x),void 0!==t.y&&(r.place[this.gridWidth].y=t.y),void 0!==t.w&&(r.place[this.gridWidth].w=t.w),void 0!==t.h&&(r.place[this.gridWidth].h=t.h),e&&(r.place[this.gridWidth].pinned=!0),i[r.id]=r)}),this.updatePreset(i)},updatePreset(t){let e={};e[this.name]=t,this.$emit("widgetUpdate",this.name,e)}},mounted(){let t=this,e=t.$refs.container;t.gridWidth=parseInt(window.getComputedStyle(e).getPropertyValue("--fhc-dashboard-grid-size")),window.addEventListener("resize",()=>{t.gridWidth=parseInt(window.getComputedStyle(e).getPropertyValue("--fhc-dashboard-grid-size"))})},template:'\n\t
\n\t\t

\n\t\t\t\n\t\t\t{{sectionNameTranslation()}}:\n\t\t

\n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
'},$={components:{BsModal:o,WidgetIcon:y},props:["widgets"],data:()=>({callbacks:{}}),methods:{getWidget(){return new Promise((t,e)=>{this.callbacks={resolve:t,reject:e},this.$refs.modal.show()})},close(){this.callbacks.reject&&this.callbacks.reject(),this.callbacks={}},pick(t){this.callbacks.resolve&&this.callbacks.resolve(t),this.callbacks={},this.$refs.modal.hide()}},template:'
\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
'},S={mergeDeep(...t){const e=t=>t&&"object"==typeof t;return t.reduce((t,i)=>(Object.keys(i).forEach(r=>{const n=t[r],s=i[r];Array.isArray(n)&&Array.isArray(s)?t[r]=n.concat(...s):e(n)&&e(s)?t[r]=this.mergeDeep(n,s):t[r]=s}),t),{})}},C={components:{DashboardAdminEdit:h,DashboardAdminWidgets:c,DashboardAdminPresets:{components:{DashboardSection:w,DashboardWidgetPicker:$},props:{dashboard:String,widgets:Array},data:()=>({funktionen:{},sections:[],tmpLoading:""}),computed:{apiurl:()=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/dashboard",pickerWidgets(){return this.widgets.filter(t=>t.allowed)}},methods:{widgetAdd(t,e){this.$refs.widgetpicker.getWidget().then(i=>{e.widget=i,delete e.custom,e.preset=1;let r={...e};r.loading=!0,this.sections.forEach(e=>{e.name==t&&e.widgets.push(r)}),axios.post(this.apiurl+"/Config/addWidgetsToPreset",{db:this.dashboard,funktion_kurzbz:t,widgets:[e]}).then(i=>{let n=Object.keys(i.data.retval.data[t].widgets).pop();e.id=n,e.custom=1,this.sections.forEach(i=>{i.name==t&&(i.widgets.splice(i.widgets.indexOf(r),1),i.widgets.push(e))})}).catch(t=>{console.error("ERROR: ",t),alert("ERROR: "+t.response.data.retval)})}).catch(()=>{})},widgetUpdate(t,e){for(var i in e=e[t]){for(var r in this.sections)if(this.sections[r].name==t){for(var n in this.sections[r].widgets)if(this.sections[r].widgets[n].id==i){for(var s in e[i]=S.mergeDeep(this.sections[r].widgets[n],e[i]),{_x:1,_y:1,_w:1,_h:1,index:1,id:1})e[i][s]&&delete e[i][s];break}break}e[i].widgetid=i,delete e[i].custom}axios.post(this.apiurl+"/Config/addWidgetsToPreset",{db:this.dashboard,funktion_kurzbz:t,widgets:e}).then(()=>{this.sections.forEach(i=>{i.name==t&&i.widgets.forEach((t,r)=>{e[t.id]&&(e[t.id].id=t.id,e[t.id].index=t.index,i.widgets[r]=e[t.id],i.widgets[r].custom=1)})})}).catch(t=>{console.error("ERROR: ",t),alert("ERROR: "+t.response.data.retval)})},widgetRemove(t,e){axios.post(this.apiurl+"/Config/removeWidgetFromPreset",{db:this.dashboard,funktion_kurzbz:t,widgetid:e}).then(()=>{this.sections.forEach(i=>{i.name==t&&(i.widgets=i.widgets.filter(t=>t.id!=e))})}).catch(t=>{console.error("ERROR: ",t),alert("ERROR: "+t.response.data.retval)})},loadSections(t){let e=Array.from(t.target.querySelectorAll("option:checked"),t=>t.value);this.sections=[],this.tmpLoading=e.join("###"),axios.get(this.apiurl+"/Config/presetBatch",{params:{db:this.dashboard,funktionen:e}}).then(t=>{if(this.tmpLoading===e.join("###"))for(var i in t.data.retval){let e=[];for(var r in t.data.retval[i])t.data.retval[i][r].id=r,t.data.retval[i][r].custom=1,e.push(t.data.retval[i][r]);this.sections.push({name:i,widgets:e})}}).catch(t=>console.error("ERROR:",t))}},created(){axios.get(this.apiurl+"/Config/funktionen").then(t=>{this.funktionen={general:"GENERAL"},t.data.retval.forEach(t=>{this.funktionen[t.funktion_kurzbz]=t.beschreibung})}).catch(t=>console.error("ERROR:",t))},watch:{dashboard(){this.loadSections({target:this.$refs.funktionenList})}},template:'
\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t\t\n\t
'}},provide:()=>({adminMode:!0}),data:()=>({dashboards:[],current:-1,widgets:[]}),computed:{apiurl:()=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/dashboard",dashboard(){return this.dashboards.find(t=>t.dashboard_id==this.current)}},methods:{dashboardAdd(){let t="";l.popup("New Dashboard name").then(e=>(t=e,axios.post(this.apiurl+"/Dashboard/create",{dashboard_kurzbz:e}))).then(e=>{let i={dashboard_id:e.data.retval,dashboard_kurzbz:t,beschreibung:""};this.dashboards.push(i),this.current=i.dashboard_id}).catch(t=>void 0!==t?console.error("ERROR:",t):0)},dashboardUpdate(t){axios.post(this.apiurl+"/Dashboard/update",t).then(()=>{let e=this.dashboards.find(e=>e.dashboard_id==t.dashboard_id);e.dashboard_kurzbz=t.dashboard_kurzbz,e.beschreibung=t.beschreibung}).catch(t=>console.error("ERROR:",t))},dashboardDelete(t){axios.post(this.apiurl+"/Dashboard/delete",{dashboard_id:t}).then(()=>{this.current=-1,this.dashboards=this.dashboards.filter(e=>e.dashboard_id!=t)}).catch(t=>console.error("ERROR:",t))},assignWidgets(t){this.widgets=t}},created(){axios.get(this.apiurl+"/Dashboard").then(t=>{this.dashboards=t.data.retval}).catch(t=>console.error("ERROR:",t))},template:'
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
'},E={search(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/search",t,e)},searchAdvanced(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/searchAdvanced",t,e)},searchdummy(t){return this.$fhcApi.post("public/js/apps/api/dummyapi.php/Search",t)}},k={loadCategory(t){return this.$fhcApi.get("/api/frontend/v1/phrasen/loadModule/"+t)},setLanguage(t,e){const i={categories:t,language:e};return this.$fhcApi.post("/api/frontend/v1/phrasen/setLanguage",i)},getLanguage(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getLanguage",{})},getActiveDbLanguages(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getAllLanguages",{})}},P={getHeader(t){return this.$fhcApi.get("/api/frontend/v1/navigation/header",{navigation_page:t})},getMenu:function(t){return this.$fhcApi.get("/api/frontend/v1/navigation/menu",{navigation_page:t})}},T={saveCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/saveCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,customFilterName:t.customFilterName})},removeCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},applyFilterFields(t){return this.$fhcApi.post("/api/frontend/v1/filter/applyFilterFields",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterFields:t.filterFields})},addFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/addFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},removeFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},getFilterById(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},getFilter(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType})}},x={abmeldung:{getDetails(t,e){const i="/api/frontend/v1/studstatus/abmeldung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(i)},create(t,e,i){return this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/createAntrag",{studiensemester:t,prestudent_id:e,grund:i},{errorHandling:"strict"})},cancel(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t.studierendenantrag_id},{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t})}},unterbrechung:{getDetails(t,e){const i="/api/frontend/v1/studstatus/unterbrechung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(i)},create(t,e,i,r,n){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/createAntrag",{studiensemester:t,prestudent_id:e,grund:i,datum_wiedereinstieg:r,attachment:n},{errorHandling:"strict"})},cancel(t){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/cancelAntrag",{antrag_id:t},{errorHandling:"strict"})}},wiederholung:{getDetails(t){const e="/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/"+t;return this.$fhcApi.get(e)},getLvs(t){const e="/api/frontend/v1/studstatus/wiederholung/getLvs/"+t;return this.$fhcApi.get(e)},create(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/createAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},cancel(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/cancelAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},saveLvs(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/saveLvs",{forbiddenLvs:t,mandatoryLvs:e})}},leitung:{getStgs(){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getActiveStgs")},getAntraege(t,e,i){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getAntraege/"+t).then(t=>t.data)},getHistory(t){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getHistory/"+t)},getPrestudents(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/getPrestudents",{query:t},{signal:e,timeout:3e4})},approve(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t)},reject(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t)},reopen(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t)},pause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t)},unpause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t)},object(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t)},approveObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t)},denyObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t)}}},O={getView:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getView/${t}`,{})},fotoSperre:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/fotoSperre/${t}`,{})},isStudent:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/isStudent",{uid:t})},isMitarbeiter:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/isMitarbeiter/${t}`,{})},getZustellAdresse:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellAdresse",{})},getZustellKontakt:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellKontakt",{})},getGemeinden:function(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getGemeinden/${t}/${e}`,{})},getAllNationen:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getAllNationen",{})}},D={ //! API calls for profil update requests -getStatus:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getStatus",{})},getTopic:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getTopic",{})},acceptProfilRequest:function({profil_update_id:t,uid:e,status_message:i,topic:r,requested_change:n}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/acceptProfilRequest",{profil_update_id:t,uid:e,status_message:i,topic:r,requested_change:n})},denyProfilRequest:function({profil_update_id:t,uid:e,topic:i,status_message:r}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/denyProfilRequest",{profil_update_id:t,uid:e,topic:i,status_message:r})},insertFile:function(t,e=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/insertFile/${e}`,t)},getProfilRequestFiles:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${t}`,{})},selectProfilRequest:function(t=null,e=null){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/selectProfilRequest",{...t?{uid:t}:{},...e?{id:e}:{}})},insertProfilRequest:function(t,e,i=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/insertProfilRequest",{topic:t,payload:e,...i?{fileID:i}:{}})},updateProfilRequest:function(t,e,i,r=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/updateProfilRequest",{topic:t,payload:e,ID:i,...r?{fileID:r}:{}})},deleteProfilRequest:function(t){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/deleteProfilRequest",{requestID:t})}},R={getRoomInfo(t,e,i){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getRoomplan",{ort_kurzbz:t,start_date:e,end_date:i})},getStunden(){return this.$fhcApi.get("/api/frontend/v1/LvPlan/Stunden",{})},getOrtReservierungen(t,e,i){return this.$fhcApi.post(`/api/frontend/v1/LvPlan/getReservierungen/${t}`,{start_date:e,end_date:i})},getLvPlanReservierungen(t,e){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getReservierungen",{start_date:t,end_date:e})},getLehreinheitStudiensemester(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${t}`,{})},studiensemesterDateInterval(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${t}`,{})},LvPlanEvents(t,e,i){return this.$fhcApi.get("/api/frontend/v1/LvPlan/LvPlanEvents",{start_date:t,end_date:e,lv_id:i})}},F={verband:{get(){return this.$fhcApi.get("api/frontend/v1/stv/verband")},favorites:{get(){return this.$fhcApi.get("api/frontend/v1/stv/favorites")},set(t){return this.$fhcApi.post("api/frontend/v1/stv/favorites/set",{favorites:t})}}},students:{uid(t,e){let i="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/uid/"+encodeURIComponent(t);return this.$fhcApi.getUri(i)},prestudent(t,e){let i="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/prestudent/"+encodeURIComponent(t);return this.$fhcApi.getUri(i)},person(t,e){let i="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/person/"+encodeURIComponent(t);return this.$fhcApi.getUri(i)},verband(t){return this.$fhcApi.getUri("api/frontend/v1/stv/students/"+t)}},filter:{getStg(){return this.$fhcApi.get("api/frontend/v1/stv/filter/getStg")},setStg(t){return this.$fhcApi.post("api/frontend/v1/stv/filter/setStg",{studiengang_kz:t})}},konto:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/konto/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id),only_open:e.filter,studiengang_kz:e.studiengang_kz_intern?e.stg_kz:""}),t.ajaxRequestFunc=(t,e,i)=>this.$fhcApi.post(t,i,e),t.ajaxResponse=(t,e,i)=>i.data,t},checkDoubles(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/checkDoubles",e,{confirmErrorHandler:t=>!0})},insert(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/insert",e)},counter(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/counter",t)},edit(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/update",e)},delete(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/delete",{buchungsnr:t})},getBuchungstypen(){return this.$fhcApi.get("api/frontend/v1/stv/konto/getBuchungstypen")}},group:{getGruppen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/Gruppen/getGruppen/"+i.id)},deleteGroup(t){return this.$fhcApi.post("api/frontend/v1/stv/Gruppen/deleteGruppe/",t)}},kontakt:{getAdressen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressen/"+i.id)},addNewAddress(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewAddress/"+e,i)},loadAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadAddress/",{address_id:t})},updateAddress(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateAddress/"+e,i)},deleteAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteAddress/",{address_id:t})},getPlaces(t){return this.$fhcApi.get("api/frontend/v1/stv/address/getPlaces/"+t)},getFirmen(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getFirmen/"+t)},getNations(){return this.$fhcApi.get("api/frontend/v1/stv/address/getNations/")},getAdressentypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressentypen/")},getBankverbindung(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getBankverbindung/"+i.id)},addNewBankverbindung(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewBankverbindung/"+e,i)},loadBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadBankverbindung/",{bankverbindung_id:t})},updateBankverbindung(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateBankverbindung/"+e,i)},deleteBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteBankverbindung/",{bankverbindung_id:t})},getKontakte(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakte/"+i.id)},addNewContact(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewContact/"+e,i)},loadContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadContact/",{kontakt_id:t})},updateContact(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateContact/"+e,i)},deleteContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteContact/",{kontakt_id:t})},getStandorteByFirma(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getStandorteByFirma/"+t)},getKontakttypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakttypen/")}},prestudent:{get(t,e){return this.$fhcApi.post("api/frontend/v1/stv/prestudent/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e))},updatePrestudent(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/prestudent/updatePrestudent/"+e,i)},getBezeichnungZGV(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungZGV/")},getBezeichnungMZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungMZgv/")},getBezeichnungDZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungDZgv/")},getStgs(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStgs/")},getAusbildung(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAusbildung/")},getAufmerksamdurch(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAufmerksamdurch/")},getBerufstaetigkeit(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBerufstaetigkeit/")},getTypenStg(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getTypenStg/")},getBisstandort(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBisstandort/")},getHistoryPrestudent(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/status/getHistoryPrestudent/"+i.id)},getMaxSem(t){return this.$fhcApi.post("api/frontend/v1/stv/status/getMaxSemester/",{studiengang_kzs:t})},advanceStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/advanceStatus/"+t+"/"+e+"/"+i+"/"+r)},confirmStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/confirmStatus/"+t+"/"+e+"/"+i+"/"+r)},isLastStatus(t){return this.$fhcApi.get("api/frontend/v1/stv/status/isLastStatus/"+t)},deleteStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/deleteStatus/"+t+"/"+e+"/"+i+"/"+r)},getLastBismeldestichtag(){return this.$fhcApi.get("api/frontend/v1/stv/status/getLastBismeldestichtag/")},getHistoryPrestudents(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getHistoryPrestudents/"+i.id)}},status:{insertStatus(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/insertStatus/"+e,i)},loadStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/loadStatus/"+t+"/"+e+"/"+i+"/"+r)},updateStatus(t,{prestudent_id:e,status_kurzbz:i,studiensemester_kurzbz:r,ausbildungssemester:n},s){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/updateStatus/"+e+"/"+i+"/"+r+"/"+n,s)},getStudienplaene(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudienplaene/"+t)},getStudiengang(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudiengang/"+t)},getStatusgruende(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusgruende/")},getStati(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStati/")},addStudent(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/addStudent/"+t,e,{errorHeader:t})},changeStatus(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/changeStatus/"+t,e,{errorHeader:t})},getStatusarray(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusarray/")}},details:{get(t,e){let i="api/frontend/v1/stv/student/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e);return this.$fhcApi.post(i)},save(t,e,i,r){let n="api/frontend/v1/stv/student/save/"+encodeURIComponent(e)+"/"+encodeURIComponent(i);return this.$fhcApi.post(t,n,r)}},exam:{getPruefungen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getPruefungen/"+i.id)},loadPruefung(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/loadPruefung/"+t)},getTypenPruefungen(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getTypenPruefungen")},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/getAllLehreinheiten/",t)},getLvsByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsByStudent/"+t)},getLvsandLesByStudent(t,e){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsandLesByStudent/"+t+"/"+e)},getLvsAndMas(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsAndMas/"+t)},getMitarbeiterLv(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getMitarbeiterLv/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getNoten")},checkZeugnisnoteLv(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/",t)},addPruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/insertPruefung/",e)},updatePruefung(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/updatePruefung/"+e,i)},deletePruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/deletePruefung/"+t)}},abschlusspruefung:{getAbschlusspruefung(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/"+i.id)},addNewAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/",e)},loadAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/",{id:t})},updateAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/",e)},deleteAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/",{id:t})},getTypenAbschlusspruefung(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/")},getTypenAntritte(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/")},getBeurteilungen(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/")},getAkadGrade(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getAkadGrade/",{studiengang_kz:t})},getTypStudiengang(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/",{studiengang_kz:t})},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/"+t)},getPruefer(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getPruefer/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getNoten/")},checkForExistingExams(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/",{uids:t})}},grades:{list(){return this.$fhcApi.get("api/frontend/v1/stv/grades/list")},getCertificate(t,e){let i="api/frontend/v1/stv/grades/getCertificate/"+encodeURIComponent(t);return e&&(i=i+"/"+encodeURIComponent(e)),this.$fhcApi.get(i)},getTeacherProposal(t,e){let i="api/frontend/v1/stv/grades/getTeacherProposal/"+encodeURIComponent(t);return e&&(i=i+"/"+encodeURIComponent(e)),this.$fhcApi.get(i)},getRepeaterGrades(t,e){let i="api/frontend/v1/stv/grades/getRepeaterGrades/"+encodeURIComponent(t);return e&&(i=i+"/"+encodeURIComponent(e)),this.$fhcApi.get(i)},updateCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,note:r,lehrveranstaltung_bezeichnung:n}){return this.$fhcApi.post("api/frontend/v1/stv/grades/updateCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,note:r},{errorHeader:n})},deleteCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,lehrveranstaltung_bezeichnung:r}){return this.$fhcApi.post("api/frontend/v1/stv/grades/deleteCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i},{errorHeader:r})},copyTeacherProposalToCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,lehrveranstaltung_bezeichnung:r}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyTeacherProposalToCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i},{errorHeader:r})},copyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id:t,lv_bezeichnung:e}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate",{studierendenantrag_lehrveranstaltung_id:t},{errorHeader:e})},getGradeFromPoints(t,e,i,r){const n=r?{errorHandling:!1}:{};return this.$fhcApi.post("api/frontend/v1/stv/grades/getGradeFromPoints",{points:t,lehrveranstaltung_id:e,studiensemester_kurzbz:i},n)}},mobility:{getMobilitaeten(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getMobilitaeten/"+i.id)},getProgramsMobility(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getProgramsMobility/")},addNewMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/insertMobility/",e)},loadMobility(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/loadMobility/"+t)},updateMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/updateMobility/",e)},deleteMobility(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobility/"+t)},getLVList(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLVList/"+t)},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/getAllLehreinheiten/",t)},getLvsandLesByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLvsandLesByStudent/"+t)},getPurposes(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getPurposes/"+i.id)},getSupports(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getSupports/"+i.id)},getListPurposes(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListPurposes/")},getListSupports(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListSupports/")},deleteMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilityPurpose/"+t.bisio_id,t)},addMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilityPurpose/"+t.bisio_id,t)},deleteMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilitySupport/"+t.bisio_id,t)},addMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilitySupport/"+t.bisio_id,t)}},archiv:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/archiv/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id)}),t.ajaxRequestFunc=(t,e,i)=>this.$fhcApi.post(t,i,e),t.ajaxResponse=(t,e,i)=>i.data,t},getArchivVorlagen(){return this.$fhcApi.post("api/frontend/v1/stv/archiv/getArchivVorlagen")},archive(t){return this.$fhcApi.post("api/frontend/v1/documents/archive",t)},archiveSigned(t){return this.$fhcApi.post("api/frontend/v1/documents/archiveSigned",t)},update(t){return this.$fhcApi.post("api/frontend/v1/stv/archiv/update",t)},delete({akte_id:t,studiengang_kz:e}){return this.$fhcApi.post("api/frontend/v1/stv/archiv/delete",{akte_id:t,studiengang_kz:e})}},documents:{getDocumentsUnaccepted(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/"+i.id+"/"+i.studiengang_kz)},getDocumentsAccepted(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsAccepted/"+i.id+"/"+i.studiengang_kz)},deleteZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},createZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/createZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},loadAkte(t){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/loadAkte/"+t)},getDoktypen(){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDoktypen/")},updateFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/updateAkte/"+t,e)},deleteFile(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteAkte/"+t)},uploadFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/uploadDokument/"+t,e)}},exemptions:{getAnrechnungen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getAnrechnungen/"+i.id)},getLehrveranstaltungen(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/"+t)},getBegruendungen(){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getBegruendungen/")},getLvsKompatibel(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLvsKompatibel/"+t)},getLektoren(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLektoren/"+t)},addNewAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/insertAnrechnung/",e)},loadAnrechnung(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/loadAnrechnung/"+t)},editAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/updateAnrechnung/",e)},deleteAnrechnung(t){return this.$fhcApi.post("api/frontend/v1/stv/anrechnungen/deleteAnrechnung/"+t)}},jointstudies:{getStudies(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudien/"+i.id)},getTypenMobility(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/")},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/")},getStudyprograms(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/")},getListPartner(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/")},getStatiPrestudent(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/")},loadStudy(t){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/loadStudie/"+t)},insertStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/insertStudie/",e)},updateStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/updateStudie/",e)},deleteStudy(t){return this.$fhcApi.post("api/frontend/v1/stv/GemeinsameStudien/deleteStudie/"+t)}},courselist:{getCourselist(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStundenplan/"+i.student_uid+"/"+i.start_date+"/"+i.end_date+"/"+i.group_consecutiveHours+"/"+i.dbStundenplanTable)},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStudiensemester/")}},configStudent(){return this.$fhcApi.get("api/frontend/v1/stv/config/student")},configStudents(){return this.$fhcApi.get("api/frontend/v1/stv/config/students")}},z={person:{getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getUid/")},addNewNotiz(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/addNewNotiz/"+e,i)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/updateNotiz/"+e,i)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getMitarbeiter/"+t)},isBerechtigt(t,e){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/isBerechtigt/")}}},B={person:{getAllBetriebsmittel(t,e,i){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/"+i.type+"/"+i.id)},addNewBetriebsmittel(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/"+e,i)},loadBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/"+t)},updateBetriebsmittel(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/"+e,i)},deleteBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/"+t)},getTypenBetriebsmittel(){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/")},loadInventarliste(t){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/"+t)}}},M={updatePersonUnrulyStatus(t,e){try{const i={person_id:t,unruly:e},r="/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus";return this.$fhcApi.post(r,i,null)}catch(t){throw t}},filterPerson(t,e=""){try{const i=e+"/api/frontend/v1/checkperson/CheckPerson/filterPerson";return axios.post(i,t)}catch(t){throw t}}},H={getContentID(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/ContentID",{ort_kurzbz:t})},getRooms(t,e,i,r,n=0){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getRooms",{datum:t,von:e,bis:i,typ:r,personenanzahl:n})},getRoomTypes(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getTypes")}},I={content(t,e=null,i=null,r=null){return this.$fhcApi.get("/api/frontend/v1/Cms/content",{content_id:t,...e?{version:e}:{},...i?{sprache:i}:{},...r?{sichtbar:r}:{}})},getNews(t=1,e=10,i){return this.$fhcApi.get("/api/frontend/v1/Cms/getNews",{page:t,page_size:e,sprache:i})},news(t){return this.$fhcApi.get("/api/frontend/v1/Cms/news",{limit:t})},getNewsRowCount:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getNewsRowCount",{})},getNewsExtra:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getStudiengangInfoForNews",{})}},L={getStudentenMail(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Lehre/lvStudentenMail",{lehreinheit_id:t})},getLvInfo(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/LV/${t}/${e}`,{})},getStudentPruefungen(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/Pruefungen/${t}`,{})},getStudentProjektarbeiten(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/getStudentProjektarbeiten/${t}`,{})},getStudentProjektabgaben(t){return this.$fhcApi.get("/api/frontend/v1/Lehre/getStudentProjektabgaben",{projektarbeit_id:t.projektarbeit_id,student_uid:t.student_uid})},postStudentProjektarbeitEndupload(t){return this.$fhcApi.post("/api/frontend/v1/Lehre/postStudentProjektarbeitEndupload",t,{Headers:{"Content-Type":"multipart/form-data"}})},postStudentProjektarbeitZwischenabgabe(t){return this.$fhcApi.post("/api/frontend/v1/Lehre/postStudentProjektarbeitZwischenabgabe",t,{Headers:{"Content-Type":"multipart/form-data"}})},getStudentProjektarbeitAbgabeFile(t,e){const i=`/Cis/Abgabetool/getStudentProjektarbeitAbgabeFile?paabgabe_id=${t}&student_uid=${e}`;window.location=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+i},getMitarbeiterProjektarbeiten(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/getMitarbeiterProjektarbeiten?showall=${e}`,{})},postProjektarbeitAbgabe(t){const e={paabgabe_id:t.paabgabe_id,paabgabetyp_kurzbz:t.bezeichnung.paabgabetyp_kurzbz,datum:t.datum,fixtermin:t.fixtermin,insertvon:t.insertvon,kurzbz:t.kurzbz,projektarbeit_id:t.projektarbeit_id};return this.$fhcApi.post("/api/frontend/v1/Lehre/postProjektarbeitAbgabe",e,null)},deleteProjektarbeitAbgabe(t){const e={paabgabe_id:t};return this.$fhcApi.post("/api/frontend/v1/Lehre/deleteProjektarbeitAbgabe",e,null)},postSerientermin(t,e,i,r,n){const s={datum:t,paabgabetyp_kurzbz:e,bezeichnung:i,kurzbz:r,projektarbeit_ids:n};return this.$fhcApi.post("/api/frontend/v1/Lehre/postSerientermin",s,null)},fetchDeadlines(t){const e={person_id:t};return this.$fhcApi.post("/api/frontend/v1/Lehre/fetchDeadlines",e,null)}},J={getLvMenu(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/LvMenu/getLvMenu/${t}/${e}`,{})}},j={person:{getMessages(t,e,i){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessages/"+i.id+"/"+i.type+"/"+i.size+"/"+i.page)},getVorlagen(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getVorlagen/")},getMsgVarsLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/")},getMessageVarsPerson(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessageVarsPerson/"+t.id+"/"+t.type_id)},getMsgVarsPrestudent(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsPrestudent/"+t.id+"/"+t.type_id)},getPersonId(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getPersonId/"+t.id+"/"+t.type_id)},getUid(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getUid/"+t.id+"/"+t.type_id)},getVorlagentext(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getVorlagentext/"+t)},getNameOfDefaultRecipient(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getNameOfDefaultRecipient/"+t.id+"/"+t.type_id)},getPreviewText(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/getPreviewText/"+t.id+"/"+t.type_id,e)},getReplyData(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getReplyData/"+t)},sendMessageFromModalContext(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/messages/messages/sendMessage/"+e,i)},sendMessage(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/sendMessage/"+t,e)},deleteMessage(t){return this.$fhcApi.post("api/frontend/v1/messages/messages/deleteMessage/"+t)}}},U={getVorlagen(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagen/")},getVorlagenByLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/")}},G={getStudiensemester:function(){return this.$fhcApi.get("/components/Cis/Mylv/Studiensemester",{})},getAllStudienSemester:function(t=void 0,e=void 0,i=void 0,r=void 0){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienAllSemester",{studiensemester:t,studiengang:e,semester:i,studienplan:r})},getStudiengaengeForStudienSemester:function(t){return this.$fhcApi.get(`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${t}`,{})},getStudienplaeneBySemester:function(t,e){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienplaeneBySemester",{studiengang:t,studiensemester:e})},getLvPlanForStudiensemester:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${t}/${e}`,{})},getLvEvaluierungInfo:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/Studium/getLvEvaluierungInfo/${t}/${e}`,{})}},N={search:E,phrasen:k,navigation:P,dashboard:{async getViewData(){return this.$fhcApi.get("/api/frontend/v1/Cis4FhcApi/getViewData",null,null)}},filter:T,studstatus:x,profil:O,profilUpdate:D,lvPlan:R,bookmark:{getBookmarks:function(){return this.$fhcApi.get("/api/frontend/v1/Bookmark/getBookmarks",{})},delete:function(t){return this.$fhcApi.get(`/api/frontend/v1/Bookmark/delete/${t}`,{})},update:function({bookmark_id:t,url:e,title:i,tag:r=null}){return this.$fhcApi.post(`/api/frontend/v1/Bookmark/update/${t}`,{url:e,title:i})},insert:function({url:t,title:e,tag:i}){return this.$fhcApi.post("/api/frontend/v1/Bookmark/insert",{url:t,title:e,tag:i})}},stv:F,notiz:z,betriebsmittel:B,checkperson:M,ampeln:{open:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/open",{})},all:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/all",{})},confirm:function(t){return this.$fhcApi.get(`/api/frontend/v1/Ampeln/confirm/${t}`,{})}},ort:H,cms:I,lehre:L,addons:J,messages:j,vorlagen:U,addons:J,studiengang:{studiengangInformation:function(){return this.$fhcApi.get("/api/frontend/v1/Studgang/getStudiengangInfo",{})},getStudiengangByKz:function(t){return this.$fhcApi.get("/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz",{studiengang_kz:t})}},menu:{getMenu:function(){return this.$fhcApi.get("/api/frontend/v1/CisMenu/getMenu",{})}},authinfo:{getAuthUID(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthUID",{})},getAuthInfo(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthInfo",{})}},studium:G,language:{getAll(){return this.$fhcApi.get("/api/frontend/v1/language/get")}}},W={install:(t,e)=>{if(t.config.globalProperties.$fhcApi)return void(e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory.addEndpoints(e.factory)));function i(t,e,i,r){if("string"==typeof t&&void 0===r)[e,i,r]=[t,e,i],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===i&&void 0===r&&(r=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},r?r.form=t:r={form:t}}return[e,i,r]}function r(t){const e=t.data;return delete t.data,e.meta?e.meta.response=t:e.meta={response:t},e}FHC_JS_DATA_STORAGE_OBJECT.app_root,FHC_JS_DATA_STORAGE_OBJECT.ci_router;const n=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});n.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,i])=>{if(i instanceof FileList)for(const r of i)t.FormData.append(e+(i.length>1?"[]":""),r);else Array.isArray(i)?i.every(t=>!(t instanceof File))?t.jsondata[e]=i:i.forEach(r=>t.FormData.append(e+(i.length>1?"[]":""),r)):t.jsondata[e]=i;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),n.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(i=>(e.config[i.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[i.type])(i,e.config))),r(e)),e=>"ERR_CANCELED"==e.code?Promise.reject({handled:!0,...e}):"off"==e.config?.errorHandling||!1===e.config?.errorHandling||"success"==e.config?.errorHandling?Promise.reject(e):e.response?404==e.response.status?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL,!0),Promise.reject({handled:!0,...e})):(e.response.data.errors=e.response.data.errors.filter(i=>(e.config[i.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[i.type])(i,e.config)),e.response.data.errors.length?Promise.reject(e):Promise.reject({handled:!0,...e})):e.request?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL),Promise.reject({handled:!0,...e})):(t.config.globalProperties.$fhcAlert.alertError(e.message),Promise.reject({handled:!0,...e}))),t.config.globalProperties.$fhcApi={getUri:t=>(console.warn("$fhcApi.getUri is DEPRECATED! Use $api.getUri instead."),n.getUri({url:t})),get:(t,e,r,s)=>(console.warn("$fhcApi.get is DEPRECATED! Use $api.get instead."),[e,r,s]=i(t,e,r,s),r&&(s?s.params=r:s={params:r}),n.get(e,s)),post:(t,e,r,s)=>(console.warn("$fhcApi.post is DEPRECATED! Use $api.post instead."),[e,r,s]=i(t,e,r,s),n.post(e,r,s)),_defaultErrorHandlers:{validation(e,i){const r=t.config.globalProperties.$fhcAlert;return i?.form?(i.form.clearValidation(),i.form.setFeedback(!1,e.messages),!1):Array.isArray(e.messages)?(e.messages.forEach(r.alertError),!1):"object"!=typeof e.messages||(i?.errorHeader?Object.values(e.messages).forEach(e=>r.alertDefault("error",Array.isArray(i.errorHeader)?t.config.globalProperties.$p.t.apply(null,i.errorHeader):i.errorHeader,e,!0)):Object.entries(e.messages).forEach(([t,e])=>r.alertDefault("error",t,e,!0)),!1)},general(e,i){const r=t.config.globalProperties.$fhcAlert;i?.form?i.form.setFeedback(!1,e.message):i?.errorHeader?r.alertDefault("error",Array.isArray(i.errorHeader)?t.config.globalProperties.$p.t.apply(null,i.errorHeader):i.errorHeader,e.message,!0):r.alertError(e.message)},php(e){const i=t.config.globalProperties.$fhcAlert;var r="";switch(r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":i.alertDefault("warn","PHP "+e.severity,r,!0);break;case"Notice":case"User Notice":case"Runtime Notice":i.alertDefault("info","PHP "+e.severity,r,!0);break;default:r="Type: PHP "+e.severity+"\n\n"+r,i.alertSystemError(r)}},exception(e){const i=t.config.globalProperties.$fhcAlert;var r="";r+="Type: "+e.class+"\n\n",r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),i.alertSystemError(r)},db(e){const i=t.config.globalProperties.$fhcAlert;var r="";void 0!==e.heading&&(r+=e.heading+"\n\n"),void 0!==e.code&&(r+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(r+="SQL: "+e.sql+"\n\n"),void 0!==e.message?r+="Message: "+e.message+"\n\n":void 0!==e.messages&&(r+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(r+="Filename: "+e.filename+"\n"),void 0!==e.line&&(r+="Line Number: "+e.line+"\n"),i.alertSystemError(r)},auth(e,i){const r=t.config.globalProperties.$fhcAlert;var n="";n+="Controller name: "+e.controller+"\n",n+="Method name: "+e.method+"\n",n+="Required permissions: "+e.required_permissions,i?.errorHeader?r.alertDefault("error",Array.isArray(i.errorHeader)?t.config.globalProperties.$p.t.apply(null,i.errorHeader):i.errorHeader,e.message,!0):r.alertDefault("error",e.message,n)}}};class s{constructor(e,i){void 0===i?(this.$fhcApi={getUri:e=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.getUri(e)),get:(e,i,r,n)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.get(e,i,r,n)),post:(e,i,r,n)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.post(e,i,r,n))},Object.defineProperty(this.$fhcApi,"factory",{get:()=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory)}),t.config.globalProperties.$fhcApi.factory=this):Object.defineProperty(this,"$fhcApi",{get(){return(i||this).$fhcApi}}),this.addEndpoints(e,!0)}addEndpoints(t,e){Object.keys(t).forEach(e=>{Object.defineProperty(this,e,{get(){return"function"==typeof t[e]?t[e].bind(this):new s(t[e],this.$fhcApi.factory)}})}),e||console.warn("$fhcApi.factory.addEndpoints() is DEPRECATED!")}}const a=new s(N);e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),a.addEndpoints(e.factory)),t.config.globalProperties.$fhcApi.factory=a,t.provide("$fhcApi",t.config.globalProperties.$fhcApi)}};const q="error",V="retval",Z={get:function(t,e,i=null){return Z._axiosCall(t,e,"get",i)},post:function(t,e,i=null){return Z._axiosCall(t,e,"post",i)},isSuccess:function(t){return!("object"!=typeof t||!t.hasOwnProperty(q)||!t.hasOwnProperty(V)||0!=t.error)},isError:function(t){return!Z.isSuccess(t)},hasData:function(t){return!(!Z.isSuccess(t)||!("object"==typeof t[V]&&Object.keys(t[V]).length>0||"array"==typeof t[V]&&t[V].length>0||"string"==typeof t[V]&&""!=t[V].trim()||"number"==typeof t[V]))},getData:function(t){return Z.hasData(t)?t[V]:null},getError:function(t){return"object"==typeof t&&Object.keys(t).length>0&&t.hasOwnProperty(V)?t[V]:"Generic error"},getErrorCode:function(t){return"object"==typeof t&&t.hasOwnProperty(q)?t[q]:1},_generateRouterURI:function(t){var e=null;return"undefined"!=typeof FHC_JS_DATA_STORAGE_OBJECT&&(e=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"+t),e},_printDebug:function(t,e,i){},_axiosCall:function(t,e,i,r){let n={method:i,url:Z._generateRouterURI(t),timeout:5e3};if("get"==i?n.params=e:n.data=e,"object"==typeof r)for(var s in r)n[s]=r[s];return axios(n)}},K=document.createElement("div"),Y=Vue.createApp({name:"FhcAlertApp",components:{PvToast:e,PvConfirm:i},methods:{mailToUrl:t=>"mailto:"+FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto+"?subject=Meldung%20Systemfehler&body="+("\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method+"%0D%0A\n\t\t\t\tFehler Meldung: "+t.message.detail+"%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!"),openMessagecard(t){bootstrap.Collapse.getOrCreateInstance(t.target.getAttribute("href")).toggle()}},unmounted(){K.parentElement.removeChild(K)},computed:{showmaillink:function(){return""!==FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto}},template:'\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t'});Y.use(t),Y.use(r);const X=Y.mount(K);document.body.appendChild(K);var Q={install:(t,e)=>{t.config.globalProperties.$p||t.use(ot);const i={alertSuccess(t){if(Array.isArray(t))return t.forEach(this.alertSuccess);X.$refs.toast.add({severity:"success",summary:"Info",detail:t,life:1e3})},alertInfo(t){if(Array.isArray(t))return t.forEach(this.alertInfo);X.$refs.toast.add({severity:"info",summary:"Info",detail:t,life:3e3})},alertWarning(t){if(Array.isArray(t))return t.forEach(this.alertWarning);X.$refs.toast.add({severity:"warn",summary:"Achtung",detail:t})},alertError(t){if(Array.isArray(t))return t.forEach(this.alertError);X.$refs.toast.add({severity:"error",summary:"Achtung",detail:t})},alertSystemError(e){if(Array.isArray(e))return e.forEach(this.alertSystemError);X.$refs.alert.add({severity:"error",summary:Vue.computed(()=>t.config.globalProperties.$p.t("alert/systemerror")),detail:e})},confirmDelete:()=>new Promise((e,i)=>{X.$confirm.require({group:"fhcAlertConfirm",header:Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:Vue.computed(()=>t.config.globalProperties.$p.t("alert/confirm_delete")),acceptLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/loeschen")),acceptClass:"p-button-danger",rejectLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:"p-button-secondary",accept(){e(!0)},reject(){e(!1)}})}),confirm:e=>new Promise((i,r)=>{X.$confirm.require({group:e?.group??"fhcAlertConfirm",header:e?.header??Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:e?.message??"",acceptLabel:e?.acceptLabel??"Ok",acceptClass:e?.acceptClass??"btn btn-primary",rejectLabel:e?.rejectLabel??Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:e?.rejectClass??"btn btn-outline-secondary",accept(){i(!0)},reject(){i(!1)}})}),alertDefault(t,e,i,r=!1,n=!1){let s={severity:t,summary:e,detail:i,html:n};r||(s.life=3e3),X.$refs.toast.add(s)},alertMultiple(t,e="info",i="Info",r=!1,n=!1){return!!t.every(t=>"string"==typeof t)&&(t.forEach(t=>this.alertDefault(e,i,t,r,n)),!0)},handleSystemError(t){if(!t.hasOwnProperty("name")||t.name.toLowerCase()!=="AbortError".toLowerCase()){if("string"==typeof t)return i.alertSystemError(t);if(Array.isArray(t)&&t.every(t=>"string"==typeof t))return t.every(i.alertSystemError);if(!t.hasOwnProperty("handled")||!t.handled){if("object"==typeof t&&null!==t){let e="";return t.hasOwnProperty("response")&&t.response?.data?.retval?e+="Error Message: "+(t.response.data.retval.message||t.response.data.retval)+"\r\n":t.hasOwnProperty("message")&&(e+="Error Message: "+t.message.toUpperCase()+"\r\n"),t.hasOwnProperty("config")&&t.config.hasOwnProperty("url")&&(e+="Error ConfigURL: "+t.config.url+"\r\n"),t.hasOwnProperty("stack")&&(e+="Error Stack: "+t.stack+"\r\n"),""==e&&(e="Error Message: "+JSON.stringify(t)+"\r\n"),e+="Error Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,i.alertSystemError(e)}i.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method)}}},handleSystemMessage(t){if("string"==typeof t)return i.alertWarning(t);if(Array.isArray(t)){if(t.every(t=>"string"==typeof t))return t.every(i.alertWarning);if(t.every(t=>"object"==typeof t)&&null!==msg)return t.every(t=>{t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?i.alertWarning(JSON.stringify(t.data.retval)):i.alertSystemError(JSON.stringify(t))})}"object"!=typeof t||null===t?i.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method):t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?i.alertWarning(JSON.stringify(t.data.retval)):i.alertSystemError(JSON.stringify(t))},resetFormValidation(t){const e=new Event("fhc-form-reset");t.querySelectorAll(["[data-fhc-form-validate],[data-fhc-form-error]"]).forEach(t=>t.dispatchEvent(e))},handleFormValidation(t,e){if(void 0===e){if(t&&t.nodeType===Node.ELEMENT_NODE)return e=>i.handleFormValidation(e,t)}else if(400==t?.response?.status){let r=Z.getError(t.response.data);"object"!=typeof r&&(r=t.response.data),i.resetFormValidation(e);const n=Object.entries(r).filter(([t,i])=>{const r=e.querySelector('[data-fhc-form-validate="'+t+'"]');return!r||(r.dispatchEvent(new CustomEvent("fhc-form-invalidate",{detail:i})),!1)}).map(t=>t[1]),s=e.querySelector("[data-fhc-form-error]");return void(s&&n.length?s.dispatchEvent(new CustomEvent("fhc-form-error",{detail:n})):n.forEach(i.alertError))}if(400==t?.response?.status){let e=Z.getError(t.response.data);i.alertError("object"==typeof e?Object.values(e):e)}else i.handleSystemError(t)}};t.config.globalProperties.$fhcAlert=i,t.provide("$fhcAlert",t.config.globalProperties.$fhcAlert)}},tt={install:(t,e)=>{if(t.config.globalProperties.$api)return;function i(t,e){Array.isArray(t)?t.forEach(e):Object.entries(t).forEach(([t,i])=>i.forEach(i=>e(i,t)))}t.config.globalProperties.$fhcAlert||t.use(Q);let r={success:!0,fail:!0,combine:{form:["validation","general"],toast:["validation","general","not_found","site_failed"]},handler:{form(t,e){t.clearValidation(),e.forEach(e=>t.setFeedback(!1,e.messages||e.message))},async toast(e){const i=t.config.globalProperties.$p;if(!i)return Promise.reject("Phrasen plugin not loaded!");async function r(t){t=t.reduce((t,e)=>{switch(e.type){case"not_found":case"site_failed":e.message?t[e.message]=[e.url]:t._default=[e.url];break;case"general":t._default||(t._default=[]),t._default.push(e.message);break;case"validation":Object.entries(e.messages).forEach(([e,i])=>{t[e]||(t[e]=[]),Array.isArray(i)?t[e].push(...i):t[e].push(i)})}return t},{});let e=0;const r=await Promise.all(Object.entries(t).sort((t,e)=>["_default"].indexOf(e[0])-["_default"].indexOf(t[0])).map(async([t,r])=>{if("_default"==t){await i.loadCategory("dashboard");t='
'+i.t("dashboard/general")+"
"}else t="
"+t+"
";return e+=r.length,t+"
"+r.join("
")+"
"}));return{counter:e,msgs:r}}let n,s;Array.isArray(e)?({counter:n,msgs:s}=await r(e)):({counter:n,msgs:s}=await Object.entries(e).reduce(async(t,[e,i])=>{const n=await t,{counter:s,msgs:a}=await r(i);return n.counter+=s,n.msgs.push("
"+e+"
"+a.join("")+"
"),n},Promise.resolve({counter:0,msgs:[]}))),await i.loadCategory("ui");const a=i.t("ui/n_errors",{n:n});t.config.globalProperties.$fhcAlert.alertDefault("error",a,"
"+s.join("")+"
",!0,!0)},php(e){i(e,(e,i)=>{var r="";switch(r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":i?i+=": PHP "+e.severity:i="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("warn",i,r,!0);break;case"Notice":case"User Notice":case"Runtime Notice":i?i+=": PHP "+e.severity:i="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("info",i,r,!0);break;default:r="Type: PHP "+e.severity+"\n\n"+r,i&&(r=i+"\n\n"+r),t.config.globalProperties.$fhcAlert.alertSystemError(r)}})},exception(e){i(e,(e,i)=>{var r="";i&&(r+=i+"\n\n"),r+="Type: "+e.class+"\n\n",r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),t.config.globalProperties.$fhcAlert.alertSystemError(r)})},db(e){i(e,(e,i)=>{var r="";i&&(r+=i+"\n\n"),void 0!==e.heading&&(r+=e.heading+"\n\n"),void 0!==e.code&&(r+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(r+="SQL: "+e.sql+"\n\n"),void 0!==e.message?r+="Message: "+e.message+"\n\n":void 0!==e.messages&&(r+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(r+="Filename: "+e.filename+"\n"),void 0!==e.line&&(r+="Line Number: "+e.line+"\n"),t.config.globalProperties.$fhcAlert.alertSystemError(r)})},auth(e){i(e,(e,i)=>{i?i+=": "+e.message:i=e.message;var r="";r+="Controller name: "+e.controller+"\n",r+="Method name: "+e.method+"\n",r+="Required permissions: "+e.required_permissions,t.config.globalProperties.$fhcAlert.alertDefault("error",i,r,!0)})}}};function n(t,e,i,r){if("string"==typeof t&&void 0===r)[e,i,r]=[t,e,i],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===i&&void 0===r&&(r=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},r?r.form=t:r={form:t}}return[e,i,r]}function s(t){if("string"==typeof t.data||t.data instanceof String)return s({data:t});const e=t.data;return delete t.data,e?(e.meta?e.meta.response=t:e.meta={response:t},e):{meta:{response:t},data:null}}function a(t){if(!1===t||"off"===t)return{...r,success:!1,fail:!1};if(!t||!0===t)return{...r};if("success"===t)return{...r,fail:!1};if("fail"===t)return{...r,success:!1};const{success:e,fail:i,handler:n,combine:s}=t;return t={...r},Object.entries({fail:i,success:e}).forEach(([e,i])=>{void 0!==i&&(t[e]=i)}),Object.entries({handler:n,combine:s}).forEach(([e,i])=>{void 0!==i&&(t[e]={...t[e],...i})}),t}function o(t){const e=a(t?.errorHandling);if(t?.form){const i=e.handler.form;e.handler={...e.handler,form:e=>i(t.form,e)}}else e.combine={...e.combine,form:[]};return e}function d(t){return t.response?404==t.response.status?[{type:"not_found",message:t.message,url:t.request.responseURL}]:null==t.response.data.errors?[]:t.response.data.errors:t.request?[{type:"site_failed",message:t.message,url:t.request.responseURL}]:[{type:"script",message:t.message}]}function l(t,e){const i={},r=[];if(null==e)return{};for(;e.length;)r.push(e.pop());for(var n of r){let r=n.type,a=null;for(var s in t.combine){let e=t.combine[s].includes(r),i=t.handler[s];if(e&&i&&(a=s,"form"==a))break}a&&(r=a);t.handler[r]?(i[r]||(i[r]=[]),Array.isArray(n)?i[r].push(...n):i[r].push(n)):e.push(n)}return i}void 0!==e?.errorHandling&&(r=a(e.errorHandling));const p=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});p.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,i])=>{if(i instanceof FileList)for(const r of i)t.FormData.append(e+(i.length>1?"[]":""),r);else Array.isArray(i)?i.every(t=>!(t instanceof File))?t.jsondata[e]=i:i.forEach(r=>t.FormData.append(e+(i.length>1?"[]":""),r)):t.jsondata[e]=i;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),p.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(i=>(e.config[i.type+"ErrorHandler"]||t.config.globalProperties.$api._defaultErrorHandlers[i.type])(i,e.config))),s(e)),t=>{if("ERR_CANCELED"==t.code)return Promise.reject({handled:!0,...t});const e=o(t.config);if(!e.fail)return Promise.reject(t);const i=d(t),r=l(e,i);for(var n in r)e.handler[n](r[n]);return i.length?Promise.reject(t):Promise.reject({handled:!0,...t})}),t.config.globalProperties.$api={getUri:t=>p.getUri({url:t}),get:(t,e,i,r)=>([e,i,r]=n(t,e,i,r),i&&(r?r.params=i:r={params:i}),p.get(e,r)),post:(t,e,i,r)=>([e,i,r]=n(t,e,i,r),p.post(e,i,r)),call(e,i,r){if(Array.isArray(e)){const s=t.config.globalProperties.$api;return Promise.allSettled(e.map((t,e)=>(Array.isArray(t)||(t=["#"+e,t]),s.call(t[1],{errorHeader:t[0],errorHandling:!1})))).then(t=>{const[,,e]=n(r,void 0,void 0,i||{}),s=o(e);if(!s.success&&!s.fail)return t;const a={};for(var p of t){const[t,e]="fulfilled"===p.status?[s.success,p.value]:[s.fail,p.reason];if(!t)return;const i=l(s,d(e));for(var h in i)a[h]?a[h][e.config.errorHeader]=i[h]:a[h]={[e.config.errorHeader]:i[h]}}for(var c in a)s.handler[c](a[c]);return t})}let{method:s,url:a,params:p,config:h}=e;return void 0!==i&&(h=i),s||(s="get"),s.toLowerCase&&(s=s.toLowerCase()),"get"==s?this.get(r,a,p,h):"post"==s?this.post(r,a,p,h):void console.error("FhcApi: method not allowed:",s)}},t.provide("$api",t.config.globalProperties.$api)}},et={loadCategory:t=>({method:"get",url:"/api/frontend/v1/phrasen/loadModule/"+t}),setLanguage:(t,e)=>({method:"post",url:"/api/frontend/v1/phrasen/setLanguage",params:{categories:t,language:e}}),getLanguage:()=>({method:"get",url:"/api/frontend/v1/phrasen/getLanguage"}),getActiveDbLanguages:()=>({method:"get",url:"/api/frontend/v1/phrasen/getAllLanguages"})};const it=Vue.reactive({}),rt={};let nt=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language),st=Vue.computed(()=>nt.value?FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(t=>t.sprache==nt.value).LC_Time:null);const at={user_language:nt,user_locale:st,setLanguage(t){const e=Object.keys(it);return this.config.globalProperties.$api.call(et.setLanguage(e,t)).then(e=>(e.data.forEach(t=>{it[t.category][t.phrase]=t.text}),nt.value=t,e))},loadCategory(t){return Array.isArray(t)?Promise.all(t.map(this.config.globalProperties.$p.loadCategory)):(rt[t]||(rt[t]=this.config.globalProperties.$api.call(et.loadCategory(t)).then(e=>e?.data?function(t,e){return t.filter(t=>t.category==e).reduce((t,e)=>(t[e.phrase]||(t[e.phrase]=e.text),t),{})}(e.data,t):{}).then(e=>{it[t]=e})),rt[t])},t_ref(t,e,i){return console.warn("deprecated"),Vue.computed(()=>this.t(t,e,i))},t(t,e,i){if(void 0===i&&(Array.isArray(t)&&2==t.length||t.split&&2==t.split("/").length)&&(i=e,[t,e]=t.split?t.split("/"):t),void 0===e)return console.error("invalid input",t,e,i),"";let r=Vue.computed(()=>it[t]?function(t,e,i){let r=it[t][e];return r?(i&&(r=r.replace(/\{([^}]*)\}/g,(t,e)=>void 0===i[e]?t:i[e])),r):"<< PHRASE "+e+">>"}(t,e,i):"");return it[t]||this.loadCategory(t),r.value}};var ot={install(t,e){t.config.globalProperties.$fhcApi||t.use(W),t.config.globalProperties.$api||t.use(tt),t.config.globalProperties.$p={t:at.t,loadCategory:e=>at.loadCategory.call(t,e),setLanguage:e=>at.setLanguage.call(t,e),user_language:nt,user_locale:st,t_ref:at.t_ref},t.provide("$p",t.config.globalProperties.$p)}},dt=Object.freeze({__proto__:null,default:ot,user_locale:st});const lt=Vue.createApp({name:"AdminApp",data:()=>({appSideMenuEntries:{}}),components:{CoreNavigationCmpt:a,DashboardAdmin:C}});lt.use(ot),lt.mount("#main"); +getStatus:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getStatus",{})},getTopic:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getTopic",{})},acceptProfilRequest:function({profil_update_id:t,uid:e,status_message:i,topic:r,requested_change:n}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/acceptProfilRequest",{profil_update_id:t,uid:e,status_message:i,topic:r,requested_change:n})},denyProfilRequest:function({profil_update_id:t,uid:e,topic:i,status_message:r}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/denyProfilRequest",{profil_update_id:t,uid:e,topic:i,status_message:r})},insertFile:function(t,e=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/insertFile/${e}`,t)},getProfilRequestFiles:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${t}`,{})},selectProfilRequest:function(t=null,e=null){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/selectProfilRequest",{...t?{uid:t}:{},...e?{id:e}:{}})},insertProfilRequest:function(t,e,i=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/insertProfilRequest",{topic:t,payload:e,...i?{fileID:i}:{}})},updateProfilRequest:function(t,e,i,r=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/updateProfilRequest",{topic:t,payload:e,ID:i,...r?{fileID:r}:{}})},deleteProfilRequest:function(t){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/deleteProfilRequest",{requestID:t})}},R={getRoomInfo(t,e,i){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getRoomplan",{ort_kurzbz:t,start_date:e,end_date:i})},getStunden(){return this.$fhcApi.get("/api/frontend/v1/LvPlan/Stunden",{})},getOrtReservierungen(t,e,i){return this.$fhcApi.post(`/api/frontend/v1/LvPlan/getReservierungen/${t}`,{start_date:e,end_date:i})},getLvPlanReservierungen(t,e){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getReservierungen",{start_date:t,end_date:e})},getLehreinheitStudiensemester(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${t}`,{})},studiensemesterDateInterval(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${t}`,{})},LvPlanEvents(t,e,i){return this.$fhcApi.get("/api/frontend/v1/LvPlan/LvPlanEvents",{start_date:t,end_date:e,lv_id:i})}},F={verband:{get(){return this.$fhcApi.get("api/frontend/v1/stv/verband")},favorites:{get(){return this.$fhcApi.get("api/frontend/v1/stv/favorites")},set(t){return this.$fhcApi.post("api/frontend/v1/stv/favorites/set",{favorites:t})}}},students:{uid(t,e){let i="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/uid/"+encodeURIComponent(t);return this.$fhcApi.getUri(i)},prestudent(t,e){let i="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/prestudent/"+encodeURIComponent(t);return this.$fhcApi.getUri(i)},person(t,e){let i="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/person/"+encodeURIComponent(t);return this.$fhcApi.getUri(i)},verband(t){return this.$fhcApi.getUri("api/frontend/v1/stv/students/"+t)}},filter:{getStg(){return this.$fhcApi.get("api/frontend/v1/stv/filter/getStg")},setStg(t){return this.$fhcApi.post("api/frontend/v1/stv/filter/setStg",{studiengang_kz:t})}},konto:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/konto/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id),only_open:e.filter,studiengang_kz:e.studiengang_kz_intern?e.stg_kz:""}),t.ajaxRequestFunc=(t,e,i)=>this.$fhcApi.post(t,i,e),t.ajaxResponse=(t,e,i)=>i.data,t},checkDoubles(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/checkDoubles",e,{confirmErrorHandler:t=>!0})},insert(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/insert",e)},counter(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/counter",t)},edit(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/update",e)},delete(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/delete",{buchungsnr:t})},getBuchungstypen(){return this.$fhcApi.get("api/frontend/v1/stv/konto/getBuchungstypen")}},group:{getGruppen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/Gruppen/getGruppen/"+i.id)},deleteGroup(t){return this.$fhcApi.post("api/frontend/v1/stv/Gruppen/deleteGruppe/",t)}},kontakt:{getAdressen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressen/"+i.id)},addNewAddress(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewAddress/"+e,i)},loadAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadAddress/",{address_id:t})},updateAddress(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateAddress/"+e,i)},deleteAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteAddress/",{address_id:t})},getPlaces(t){return this.$fhcApi.get("api/frontend/v1/stv/address/getPlaces/"+t)},getFirmen(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getFirmen/"+t)},getNations(){return this.$fhcApi.get("api/frontend/v1/stv/address/getNations/")},getAdressentypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressentypen/")},getBankverbindung(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getBankverbindung/"+i.id)},addNewBankverbindung(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewBankverbindung/"+e,i)},loadBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadBankverbindung/",{bankverbindung_id:t})},updateBankverbindung(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateBankverbindung/"+e,i)},deleteBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteBankverbindung/",{bankverbindung_id:t})},getKontakte(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakte/"+i.id)},addNewContact(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewContact/"+e,i)},loadContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadContact/",{kontakt_id:t})},updateContact(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateContact/"+e,i)},deleteContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteContact/",{kontakt_id:t})},getStandorteByFirma(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getStandorteByFirma/"+t)},getKontakttypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakttypen/")}},prestudent:{get(t,e){return this.$fhcApi.post("api/frontend/v1/stv/prestudent/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e))},updatePrestudent(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/prestudent/updatePrestudent/"+e,i)},getBezeichnungZGV(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungZGV/")},getBezeichnungMZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungMZgv/")},getBezeichnungDZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungDZgv/")},getStgs(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStgs/")},getAusbildung(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAusbildung/")},getAufmerksamdurch(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAufmerksamdurch/")},getBerufstaetigkeit(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBerufstaetigkeit/")},getTypenStg(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getTypenStg/")},getBisstandort(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBisstandort/")},getHistoryPrestudent(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/status/getHistoryPrestudent/"+i.id)},getMaxSem(t){return this.$fhcApi.post("api/frontend/v1/stv/status/getMaxSemester/",{studiengang_kzs:t})},advanceStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/advanceStatus/"+t+"/"+e+"/"+i+"/"+r)},confirmStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/confirmStatus/"+t+"/"+e+"/"+i+"/"+r)},isLastStatus(t){return this.$fhcApi.get("api/frontend/v1/stv/status/isLastStatus/"+t)},deleteStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/deleteStatus/"+t+"/"+e+"/"+i+"/"+r)},getLastBismeldestichtag(){return this.$fhcApi.get("api/frontend/v1/stv/status/getLastBismeldestichtag/")},getHistoryPrestudents(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getHistoryPrestudents/"+i.id)}},status:{insertStatus(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/insertStatus/"+e,i)},loadStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/loadStatus/"+t+"/"+e+"/"+i+"/"+r)},updateStatus(t,{prestudent_id:e,status_kurzbz:i,studiensemester_kurzbz:r,ausbildungssemester:n},s){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/updateStatus/"+e+"/"+i+"/"+r+"/"+n,s)},getStudienplaene(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudienplaene/"+t)},getStudiengang(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudiengang/"+t)},getStatusgruende(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusgruende/")},getStati(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStati/")},addStudent(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/addStudent/"+t,e,{errorHeader:t})},changeStatus(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/changeStatus/"+t,e,{errorHeader:t})},getStatusarray(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusarray/")}},details:{get(t,e){let i="api/frontend/v1/stv/student/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e);return this.$fhcApi.post(i)},save(t,e,i,r){let n="api/frontend/v1/stv/student/save/"+encodeURIComponent(e)+"/"+encodeURIComponent(i);return this.$fhcApi.post(t,n,r)}},exam:{getPruefungen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getPruefungen/"+i.id)},loadPruefung(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/loadPruefung/"+t)},getTypenPruefungen(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getTypenPruefungen")},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/getAllLehreinheiten/",t)},getLvsByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsByStudent/"+t)},getLvsandLesByStudent(t,e){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsandLesByStudent/"+t+"/"+e)},getLvsAndMas(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsAndMas/"+t)},getMitarbeiterLv(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getMitarbeiterLv/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getNoten")},checkZeugnisnoteLv(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/",t)},addPruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/insertPruefung/",e)},updatePruefung(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/updatePruefung/"+e,i)},deletePruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/deletePruefung/"+t)}},abschlusspruefung:{getAbschlusspruefung(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/"+i.id)},addNewAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/",e)},loadAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/",{id:t})},updateAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/",e)},deleteAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/",{id:t})},getTypenAbschlusspruefung(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/")},getTypenAntritte(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/")},getBeurteilungen(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/")},getAkadGrade(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getAkadGrade/",{studiengang_kz:t})},getTypStudiengang(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/",{studiengang_kz:t})},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/"+t)},getPruefer(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getPruefer/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getNoten/")},checkForExistingExams(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/",{uids:t})}},grades:{list(){return this.$fhcApi.get("api/frontend/v1/stv/grades/list")},getCertificate(t,e){let i="api/frontend/v1/stv/grades/getCertificate/"+encodeURIComponent(t);return e&&(i=i+"/"+encodeURIComponent(e)),this.$fhcApi.get(i)},getTeacherProposal(t,e){let i="api/frontend/v1/stv/grades/getTeacherProposal/"+encodeURIComponent(t);return e&&(i=i+"/"+encodeURIComponent(e)),this.$fhcApi.get(i)},getRepeaterGrades(t,e){let i="api/frontend/v1/stv/grades/getRepeaterGrades/"+encodeURIComponent(t);return e&&(i=i+"/"+encodeURIComponent(e)),this.$fhcApi.get(i)},updateCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,note:r,lehrveranstaltung_bezeichnung:n}){return this.$fhcApi.post("api/frontend/v1/stv/grades/updateCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,note:r},{errorHeader:n})},deleteCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,lehrveranstaltung_bezeichnung:r}){return this.$fhcApi.post("api/frontend/v1/stv/grades/deleteCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i},{errorHeader:r})},copyTeacherProposalToCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,lehrveranstaltung_bezeichnung:r}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyTeacherProposalToCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i},{errorHeader:r})},copyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id:t,lv_bezeichnung:e}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate",{studierendenantrag_lehrveranstaltung_id:t},{errorHeader:e})},getGradeFromPoints(t,e,i,r){const n=r?{errorHandling:!1}:{};return this.$fhcApi.post("api/frontend/v1/stv/grades/getGradeFromPoints",{points:t,lehrveranstaltung_id:e,studiensemester_kurzbz:i},n)}},mobility:{getMobilitaeten(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getMobilitaeten/"+i.id)},getProgramsMobility(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getProgramsMobility/")},addNewMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/insertMobility/",e)},loadMobility(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/loadMobility/"+t)},updateMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/updateMobility/",e)},deleteMobility(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobility/"+t)},getLVList(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLVList/"+t)},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/getAllLehreinheiten/",t)},getLvsandLesByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLvsandLesByStudent/"+t)},getPurposes(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getPurposes/"+i.id)},getSupports(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getSupports/"+i.id)},getListPurposes(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListPurposes/")},getListSupports(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListSupports/")},deleteMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilityPurpose/"+t.bisio_id,t)},addMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilityPurpose/"+t.bisio_id,t)},deleteMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilitySupport/"+t.bisio_id,t)},addMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilitySupport/"+t.bisio_id,t)}},archiv:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/archiv/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id)}),t.ajaxRequestFunc=(t,e,i)=>this.$fhcApi.post(t,i,e),t.ajaxResponse=(t,e,i)=>i.data,t},getArchivVorlagen(){return this.$fhcApi.post("api/frontend/v1/stv/archiv/getArchivVorlagen")},archive(t){return this.$fhcApi.post("api/frontend/v1/documents/archive",t)},archiveSigned(t){return this.$fhcApi.post("api/frontend/v1/documents/archiveSigned",t)},update(t){return this.$fhcApi.post("api/frontend/v1/stv/archiv/update",t)},delete({akte_id:t,studiengang_kz:e}){return this.$fhcApi.post("api/frontend/v1/stv/archiv/delete",{akte_id:t,studiengang_kz:e})}},documents:{getDocumentsUnaccepted(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/"+i.id+"/"+i.studiengang_kz)},getDocumentsAccepted(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsAccepted/"+i.id+"/"+i.studiengang_kz)},deleteZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},createZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/createZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},loadAkte(t){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/loadAkte/"+t)},getDoktypen(){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDoktypen/")},updateFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/updateAkte/"+t,e)},deleteFile(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteAkte/"+t)},uploadFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/uploadDokument/"+t,e)}},exemptions:{getAnrechnungen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getAnrechnungen/"+i.id)},getLehrveranstaltungen(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/"+t)},getBegruendungen(){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getBegruendungen/")},getLvsKompatibel(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLvsKompatibel/"+t)},getLektoren(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLektoren/"+t)},addNewAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/insertAnrechnung/",e)},loadAnrechnung(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/loadAnrechnung/"+t)},editAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/updateAnrechnung/",e)},deleteAnrechnung(t){return this.$fhcApi.post("api/frontend/v1/stv/anrechnungen/deleteAnrechnung/"+t)}},jointstudies:{getStudies(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudien/"+i.id)},getTypenMobility(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/")},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/")},getStudyprograms(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/")},getListPartner(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/")},getStatiPrestudent(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/")},loadStudy(t){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/loadStudie/"+t)},insertStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/insertStudie/",e)},updateStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/updateStudie/",e)},deleteStudy(t){return this.$fhcApi.post("api/frontend/v1/stv/GemeinsameStudien/deleteStudie/"+t)}},courselist:{getCourselist(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStundenplan/"+i.student_uid+"/"+i.start_date+"/"+i.end_date+"/"+i.group_consecutiveHours+"/"+i.dbStundenplanTable)},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStudiensemester/")}},configStudent(){return this.$fhcApi.get("api/frontend/v1/stv/config/student")},configStudents(){return this.$fhcApi.get("api/frontend/v1/stv/config/students")}},z={person:{getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getUid/")},addNewNotiz(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/addNewNotiz/"+e,i)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/updateNotiz/"+e,i)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getMitarbeiter/"+t)},isBerechtigt(t,e){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/isBerechtigt/")}}},B={person:{getAllBetriebsmittel(t,e,i){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/"+i.type+"/"+i.id)},addNewBetriebsmittel(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/"+e,i)},loadBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/"+t)},updateBetriebsmittel(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/"+e,i)},deleteBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/"+t)},getTypenBetriebsmittel(){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/")},loadInventarliste(t){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/"+t)}}},M={updatePersonUnrulyStatus(t,e){try{const i={person_id:t,unruly:e},r="/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus";return this.$fhcApi.post(r,i,null)}catch(t){throw t}},filterPerson(t,e=""){try{const i=e+"/api/frontend/v1/checkperson/CheckPerson/filterPerson";return axios.post(i,t)}catch(t){throw t}}},H={getContentID(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/ContentID",{ort_kurzbz:t})},getRooms(t,e,i,r,n=0){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getRooms",{datum:t,von:e,bis:i,typ:r,personenanzahl:n})},getRoomTypes(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getTypes")}},I={content(t,e=null,i=null,r=null){return this.$fhcApi.get("/api/frontend/v1/Cms/content",{content_id:t,...e?{version:e}:{},...i?{sprache:i}:{},...r?{sichtbar:r}:{}})},getNews(t=1,e=10,i){return this.$fhcApi.get("/api/frontend/v1/Cms/getNews",{page:t,page_size:e,sprache:i})},news(t){return this.$fhcApi.get("/api/frontend/v1/Cms/news",{limit:t})},getNewsRowCount:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getNewsRowCount",{})},getNewsExtra:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getStudiengangInfoForNews",{})}},L={getStudentenMail(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Lehre/lvStudentenMail",{lehreinheit_id:t})},getLvInfo(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/LV/${t}/${e}`,{})},getStudentPruefungen(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/Pruefungen/${t}`,{})},getStudentProjektarbeiten(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/getStudentProjektarbeiten/${t}`,{})},getStudentProjektabgaben(t){return this.$fhcApi.get("/api/frontend/v1/Lehre/getStudentProjektabgaben",{projektarbeit_id:t.projektarbeit_id,student_uid:t.student_uid})},postStudentProjektarbeitEndupload(t){return this.$fhcApi.post("/api/frontend/v1/Lehre/postStudentProjektarbeitEndupload",t,{Headers:{"Content-Type":"multipart/form-data"}})},postStudentProjektarbeitZwischenabgabe(t){return this.$fhcApi.post("/api/frontend/v1/Lehre/postStudentProjektarbeitZwischenabgabe",t,{Headers:{"Content-Type":"multipart/form-data"}})},getStudentProjektarbeitAbgabeFile(t,e){const i=`/Cis/Abgabetool/getStudentProjektarbeitAbgabeFile?paabgabe_id=${t}&student_uid=${e}`;window.location=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+i},getMitarbeiterProjektarbeiten(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/getMitarbeiterProjektarbeiten?showall=${e}`,{})},postProjektarbeitAbgabe(t){const e={paabgabe_id:t.paabgabe_id,paabgabetyp_kurzbz:t.bezeichnung.paabgabetyp_kurzbz,datum:t.datum,fixtermin:t.fixtermin,insertvon:t.insertvon,kurzbz:t.kurzbz,projektarbeit_id:t.projektarbeit_id};return this.$fhcApi.post("/api/frontend/v1/Lehre/postProjektarbeitAbgabe",e,null)},deleteProjektarbeitAbgabe(t){const e={paabgabe_id:t};return this.$fhcApi.post("/api/frontend/v1/Lehre/deleteProjektarbeitAbgabe",e,null)},postSerientermin(t,e,i,r,n){const s={datum:t,paabgabetyp_kurzbz:e,bezeichnung:i,kurzbz:r,projektarbeit_ids:n};return this.$fhcApi.post("/api/frontend/v1/Lehre/postSerientermin",s,null)},fetchDeadlines(t){const e={person_id:t};return this.$fhcApi.post("/api/frontend/v1/Lehre/fetchDeadlines",e,null)}},J={getLvMenu(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/LvMenu/getLvMenu/${t}/${e}`,{})}},j={person:{getMessages(t,e,i){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessages/"+i.id+"/"+i.type+"/"+i.size+"/"+i.page)},getVorlagen(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getVorlagen/")},getMsgVarsLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/")},getMessageVarsPerson(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessageVarsPerson/"+t.id+"/"+t.type_id)},getMsgVarsPrestudent(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsPrestudent/"+t.id+"/"+t.type_id)},getPersonId(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getPersonId/"+t.id+"/"+t.type_id)},getUid(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getUid/"+t.id+"/"+t.type_id)},getDataVorlage(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getDataVorlage/"+t)},getNameOfDefaultRecipient(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getNameOfDefaultRecipient/"+t.id+"/"+t.type_id)},getPreviewText(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/getPreviewText/"+t.id+"/"+t.type_id,e)},getReplyData(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getReplyData/"+t)},sendMessageFromModalContext(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/messages/messages/sendMessage/"+e,i)},sendMessage(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/sendMessage/"+t,e)},deleteMessage(t){return this.$fhcApi.post("api/frontend/v1/messages/messages/deleteMessage/"+t)}}},U={getVorlagen(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagen/")},getVorlagenByLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/")}},G={getStudiensemester:function(){return this.$fhcApi.get("/components/Cis/Mylv/Studiensemester",{})},getAllStudienSemester:function(t=void 0,e=void 0,i=void 0,r=void 0){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienAllSemester",{studiensemester:t,studiengang:e,semester:i,studienplan:r})},getStudiengaengeForStudienSemester:function(t){return this.$fhcApi.get(`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${t}`,{})},getStudienplaeneBySemester:function(t,e){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienplaeneBySemester",{studiengang:t,studiensemester:e})},getLvPlanForStudiensemester:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${t}/${e}`,{})},getLvEvaluierungInfo:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/Studium/getLvEvaluierungInfo/${t}/${e}`,{})}},N={search:E,phrasen:k,navigation:P,dashboard:{async getViewData(){return this.$fhcApi.get("/api/frontend/v1/Cis4FhcApi/getViewData",null,null)}},filter:T,studstatus:x,profil:O,profilUpdate:D,lvPlan:R,bookmark:{getBookmarks:function(){return this.$fhcApi.get("/api/frontend/v1/Bookmark/getBookmarks",{})},delete:function(t){return this.$fhcApi.get(`/api/frontend/v1/Bookmark/delete/${t}`,{})},update:function({bookmark_id:t,url:e,title:i,tag:r=null}){return this.$fhcApi.post(`/api/frontend/v1/Bookmark/update/${t}`,{url:e,title:i})},insert:function({url:t,title:e,tag:i}){return this.$fhcApi.post("/api/frontend/v1/Bookmark/insert",{url:t,title:e,tag:i})}},stv:F,notiz:z,betriebsmittel:B,checkperson:M,ampeln:{open:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/open",{})},all:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/all",{})},confirm:function(t){return this.$fhcApi.get(`/api/frontend/v1/Ampeln/confirm/${t}`,{})}},ort:H,cms:I,lehre:L,addons:J,messages:j,vorlagen:U,addons:J,studiengang:{studiengangInformation:function(){return this.$fhcApi.get("/api/frontend/v1/Studgang/getStudiengangInfo",{})},getStudiengangByKz:function(t){return this.$fhcApi.get("/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz",{studiengang_kz:t})}},menu:{getMenu:function(){return this.$fhcApi.get("/api/frontend/v1/CisMenu/getMenu",{})}},authinfo:{getAuthUID(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthUID",{})},getAuthInfo(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthInfo",{})}},studium:G,language:{getAll(){return this.$fhcApi.get("/api/frontend/v1/language/get")}}},W={install:(t,e)=>{if(t.config.globalProperties.$fhcApi)return void(e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory.addEndpoints(e.factory)));function i(t,e,i,r){if("string"==typeof t&&void 0===r)[e,i,r]=[t,e,i],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===i&&void 0===r&&(r=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},r?r.form=t:r={form:t}}return[e,i,r]}function r(t){const e=t.data;return delete t.data,e.meta?e.meta.response=t:e.meta={response:t},e}FHC_JS_DATA_STORAGE_OBJECT.app_root,FHC_JS_DATA_STORAGE_OBJECT.ci_router;const n=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});n.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,i])=>{if(i instanceof FileList)for(const r of i)t.FormData.append(e+(i.length>1?"[]":""),r);else Array.isArray(i)?i.every(t=>!(t instanceof File))?t.jsondata[e]=i:i.forEach(r=>t.FormData.append(e+(i.length>1?"[]":""),r)):t.jsondata[e]=i;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),n.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(i=>(e.config[i.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[i.type])(i,e.config))),r(e)),e=>"ERR_CANCELED"==e.code?Promise.reject({handled:!0,...e}):"off"==e.config?.errorHandling||!1===e.config?.errorHandling||"success"==e.config?.errorHandling?Promise.reject(e):e.response?404==e.response.status?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL,!0),Promise.reject({handled:!0,...e})):(e.response.data.errors=e.response.data.errors.filter(i=>(e.config[i.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[i.type])(i,e.config)),e.response.data.errors.length?Promise.reject(e):Promise.reject({handled:!0,...e})):e.request?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL),Promise.reject({handled:!0,...e})):(t.config.globalProperties.$fhcAlert.alertError(e.message),Promise.reject({handled:!0,...e}))),t.config.globalProperties.$fhcApi={getUri:t=>(console.warn("$fhcApi.getUri is DEPRECATED! Use $api.getUri instead."),n.getUri({url:t})),get:(t,e,r,s)=>(console.warn("$fhcApi.get is DEPRECATED! Use $api.get instead."),[e,r,s]=i(t,e,r,s),r&&(s?s.params=r:s={params:r}),n.get(e,s)),post:(t,e,r,s)=>(console.warn("$fhcApi.post is DEPRECATED! Use $api.post instead."),[e,r,s]=i(t,e,r,s),n.post(e,r,s)),_defaultErrorHandlers:{validation(e,i){const r=t.config.globalProperties.$fhcAlert;return i?.form?(i.form.clearValidation(),i.form.setFeedback(!1,e.messages),!1):Array.isArray(e.messages)?(e.messages.forEach(r.alertError),!1):"object"!=typeof e.messages||(i?.errorHeader?Object.values(e.messages).forEach(e=>r.alertDefault("error",Array.isArray(i.errorHeader)?t.config.globalProperties.$p.t.apply(null,i.errorHeader):i.errorHeader,e,!0)):Object.entries(e.messages).forEach(([t,e])=>r.alertDefault("error",t,e,!0)),!1)},general(e,i){const r=t.config.globalProperties.$fhcAlert;i?.form?i.form.setFeedback(!1,e.message):i?.errorHeader?r.alertDefault("error",Array.isArray(i.errorHeader)?t.config.globalProperties.$p.t.apply(null,i.errorHeader):i.errorHeader,e.message,!0):r.alertError(e.message)},php(e){const i=t.config.globalProperties.$fhcAlert;var r="";switch(r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":i.alertDefault("warn","PHP "+e.severity,r,!0);break;case"Notice":case"User Notice":case"Runtime Notice":i.alertDefault("info","PHP "+e.severity,r,!0);break;default:r="Type: PHP "+e.severity+"\n\n"+r,i.alertSystemError(r)}},exception(e){const i=t.config.globalProperties.$fhcAlert;var r="";r+="Type: "+e.class+"\n\n",r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),i.alertSystemError(r)},db(e){const i=t.config.globalProperties.$fhcAlert;var r="";void 0!==e.heading&&(r+=e.heading+"\n\n"),void 0!==e.code&&(r+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(r+="SQL: "+e.sql+"\n\n"),void 0!==e.message?r+="Message: "+e.message+"\n\n":void 0!==e.messages&&(r+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(r+="Filename: "+e.filename+"\n"),void 0!==e.line&&(r+="Line Number: "+e.line+"\n"),i.alertSystemError(r)},auth(e,i){const r=t.config.globalProperties.$fhcAlert;var n="";n+="Controller name: "+e.controller+"\n",n+="Method name: "+e.method+"\n",n+="Required permissions: "+e.required_permissions,i?.errorHeader?r.alertDefault("error",Array.isArray(i.errorHeader)?t.config.globalProperties.$p.t.apply(null,i.errorHeader):i.errorHeader,e.message,!0):r.alertDefault("error",e.message,n)}}};class s{constructor(e,i){void 0===i?(this.$fhcApi={getUri:e=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.getUri(e)),get:(e,i,r,n)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.get(e,i,r,n)),post:(e,i,r,n)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.post(e,i,r,n))},Object.defineProperty(this.$fhcApi,"factory",{get:()=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory)}),t.config.globalProperties.$fhcApi.factory=this):Object.defineProperty(this,"$fhcApi",{get(){return(i||this).$fhcApi}}),this.addEndpoints(e,!0)}addEndpoints(t,e){Object.keys(t).forEach(e=>{Object.defineProperty(this,e,{get(){return"function"==typeof t[e]?t[e].bind(this):new s(t[e],this.$fhcApi.factory)}})}),e||console.warn("$fhcApi.factory.addEndpoints() is DEPRECATED!")}}const a=new s(N);e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),a.addEndpoints(e.factory)),t.config.globalProperties.$fhcApi.factory=a,t.provide("$fhcApi",t.config.globalProperties.$fhcApi)}};const q="error",V="retval",Z={get:function(t,e,i=null){return Z._axiosCall(t,e,"get",i)},post:function(t,e,i=null){return Z._axiosCall(t,e,"post",i)},isSuccess:function(t){return!("object"!=typeof t||!t.hasOwnProperty(q)||!t.hasOwnProperty(V)||0!=t.error)},isError:function(t){return!Z.isSuccess(t)},hasData:function(t){return!(!Z.isSuccess(t)||!("object"==typeof t[V]&&Object.keys(t[V]).length>0||"array"==typeof t[V]&&t[V].length>0||"string"==typeof t[V]&&""!=t[V].trim()||"number"==typeof t[V]))},getData:function(t){return Z.hasData(t)?t[V]:null},getError:function(t){return"object"==typeof t&&Object.keys(t).length>0&&t.hasOwnProperty(V)?t[V]:"Generic error"},getErrorCode:function(t){return"object"==typeof t&&t.hasOwnProperty(q)?t[q]:1},_generateRouterURI:function(t){var e=null;return"undefined"!=typeof FHC_JS_DATA_STORAGE_OBJECT&&(e=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"+t),e},_printDebug:function(t,e,i){},_axiosCall:function(t,e,i,r){let n={method:i,url:Z._generateRouterURI(t),timeout:5e3};if("get"==i?n.params=e:n.data=e,"object"==typeof r)for(var s in r)n[s]=r[s];return axios(n)}},K=document.createElement("div"),Y=Vue.createApp({name:"FhcAlertApp",components:{PvToast:e,PvConfirm:i},methods:{mailToUrl:t=>"mailto:"+FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto+"?subject=Meldung%20Systemfehler&body="+("\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method+"%0D%0A\n\t\t\t\tFehler Meldung: "+t.message.detail+"%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!"),openMessagecard(t){bootstrap.Collapse.getOrCreateInstance(t.target.getAttribute("href")).toggle()}},unmounted(){K.parentElement.removeChild(K)},computed:{showmaillink:function(){return""!==FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto}},template:'\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t'});Y.use(t),Y.use(r);const X=Y.mount(K);document.body.appendChild(K);var Q={install:(t,e)=>{t.config.globalProperties.$p||t.use(ot);const i={alertSuccess(t){if(Array.isArray(t))return t.forEach(this.alertSuccess);X.$refs.toast.add({severity:"success",summary:"Info",detail:t,life:1e3})},alertInfo(t){if(Array.isArray(t))return t.forEach(this.alertInfo);X.$refs.toast.add({severity:"info",summary:"Info",detail:t,life:3e3})},alertWarning(t){if(Array.isArray(t))return t.forEach(this.alertWarning);X.$refs.toast.add({severity:"warn",summary:"Achtung",detail:t})},alertError(t){if(Array.isArray(t))return t.forEach(this.alertError);X.$refs.toast.add({severity:"error",summary:"Achtung",detail:t})},alertSystemError(e){if(Array.isArray(e))return e.forEach(this.alertSystemError);X.$refs.alert.add({severity:"error",summary:Vue.computed(()=>t.config.globalProperties.$p.t("alert/systemerror")),detail:e})},confirmDelete:()=>new Promise((e,i)=>{X.$confirm.require({group:"fhcAlertConfirm",header:Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:Vue.computed(()=>t.config.globalProperties.$p.t("alert/confirm_delete")),acceptLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/loeschen")),acceptClass:"p-button-danger",rejectLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:"p-button-secondary",accept(){e(!0)},reject(){e(!1)}})}),confirm:e=>new Promise((i,r)=>{X.$confirm.require({group:e?.group??"fhcAlertConfirm",header:e?.header??Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:e?.message??"",acceptLabel:e?.acceptLabel??"Ok",acceptClass:e?.acceptClass??"btn btn-primary",rejectLabel:e?.rejectLabel??Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:e?.rejectClass??"btn btn-outline-secondary",accept(){i(!0)},reject(){i(!1)}})}),alertDefault(t,e,i,r=!1,n=!1){let s={severity:t,summary:e,detail:i,html:n};r||(s.life=3e3),X.$refs.toast.add(s)},alertMultiple(t,e="info",i="Info",r=!1,n=!1){return!!t.every(t=>"string"==typeof t)&&(t.forEach(t=>this.alertDefault(e,i,t,r,n)),!0)},handleSystemError(t){if(!t.hasOwnProperty("name")||t.name.toLowerCase()!=="AbortError".toLowerCase()){if("string"==typeof t)return i.alertSystemError(t);if(Array.isArray(t)&&t.every(t=>"string"==typeof t))return t.every(i.alertSystemError);if(!t.hasOwnProperty("handled")||!t.handled){if("object"==typeof t&&null!==t){let e="";return t.hasOwnProperty("response")&&t.response?.data?.retval?e+="Error Message: "+(t.response.data.retval.message||t.response.data.retval)+"\r\n":t.hasOwnProperty("message")&&(e+="Error Message: "+t.message.toUpperCase()+"\r\n"),t.hasOwnProperty("config")&&t.config.hasOwnProperty("url")&&(e+="Error ConfigURL: "+t.config.url+"\r\n"),t.hasOwnProperty("stack")&&(e+="Error Stack: "+t.stack+"\r\n"),""==e&&(e="Error Message: "+JSON.stringify(t)+"\r\n"),e+="Error Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,i.alertSystemError(e)}i.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method)}}},handleSystemMessage(t){if("string"==typeof t)return i.alertWarning(t);if(Array.isArray(t)){if(t.every(t=>"string"==typeof t))return t.every(i.alertWarning);if(t.every(t=>"object"==typeof t)&&null!==msg)return t.every(t=>{t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?i.alertWarning(JSON.stringify(t.data.retval)):i.alertSystemError(JSON.stringify(t))})}"object"!=typeof t||null===t?i.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method):t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?i.alertWarning(JSON.stringify(t.data.retval)):i.alertSystemError(JSON.stringify(t))},resetFormValidation(t){const e=new Event("fhc-form-reset");t.querySelectorAll(["[data-fhc-form-validate],[data-fhc-form-error]"]).forEach(t=>t.dispatchEvent(e))},handleFormValidation(t,e){if(void 0===e){if(t&&t.nodeType===Node.ELEMENT_NODE)return e=>i.handleFormValidation(e,t)}else if(400==t?.response?.status){let r=Z.getError(t.response.data);"object"!=typeof r&&(r=t.response.data),i.resetFormValidation(e);const n=Object.entries(r).filter(([t,i])=>{const r=e.querySelector('[data-fhc-form-validate="'+t+'"]');return!r||(r.dispatchEvent(new CustomEvent("fhc-form-invalidate",{detail:i})),!1)}).map(t=>t[1]),s=e.querySelector("[data-fhc-form-error]");return void(s&&n.length?s.dispatchEvent(new CustomEvent("fhc-form-error",{detail:n})):n.forEach(i.alertError))}if(400==t?.response?.status){let e=Z.getError(t.response.data);i.alertError("object"==typeof e?Object.values(e):e)}else i.handleSystemError(t)}};t.config.globalProperties.$fhcAlert=i,t.provide("$fhcAlert",t.config.globalProperties.$fhcAlert)}},tt={install:(t,e)=>{if(t.config.globalProperties.$api)return;function i(t,e){Array.isArray(t)?t.forEach(e):Object.entries(t).forEach(([t,i])=>i.forEach(i=>e(i,t)))}t.config.globalProperties.$fhcAlert||t.use(Q);let r={success:!0,fail:!0,combine:{form:["validation","general"],toast:["validation","general","not_found","site_failed"]},handler:{form(t,e){t.clearValidation(),e.forEach(e=>t.setFeedback(!1,e.messages||e.message))},async toast(e){const i=t.config.globalProperties.$p;if(!i)return Promise.reject("Phrasen plugin not loaded!");async function r(t){t=t.reduce((t,e)=>{switch(e.type){case"not_found":case"site_failed":e.message?t[e.message]=[e.url]:t._default=[e.url];break;case"general":t._default||(t._default=[]),t._default.push(e.message);break;case"validation":Object.entries(e.messages).forEach(([e,i])=>{t[e]||(t[e]=[]),Array.isArray(i)?t[e].push(...i):t[e].push(i)})}return t},{});let e=0;const r=await Promise.all(Object.entries(t).sort((t,e)=>["_default"].indexOf(e[0])-["_default"].indexOf(t[0])).map(async([t,r])=>{if("_default"==t){await i.loadCategory("dashboard");t='
'+i.t("dashboard/general")+"
"}else t="
"+t+"
";return e+=r.length,t+"
"+r.join("
")+"
"}));return{counter:e,msgs:r}}let n,s;Array.isArray(e)?({counter:n,msgs:s}=await r(e)):({counter:n,msgs:s}=await Object.entries(e).reduce(async(t,[e,i])=>{const n=await t,{counter:s,msgs:a}=await r(i);return n.counter+=s,n.msgs.push("
"+e+"
"+a.join("")+"
"),n},Promise.resolve({counter:0,msgs:[]}))),await i.loadCategory("ui");const a=i.t("ui/n_errors",{n:n});t.config.globalProperties.$fhcAlert.alertDefault("error",a,"
"+s.join("")+"
",!0,!0)},php(e){i(e,(e,i)=>{var r="";switch(r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":i?i+=": PHP "+e.severity:i="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("warn",i,r,!0);break;case"Notice":case"User Notice":case"Runtime Notice":i?i+=": PHP "+e.severity:i="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("info",i,r,!0);break;default:r="Type: PHP "+e.severity+"\n\n"+r,i&&(r=i+"\n\n"+r),t.config.globalProperties.$fhcAlert.alertSystemError(r)}})},exception(e){i(e,(e,i)=>{var r="";i&&(r+=i+"\n\n"),r+="Type: "+e.class+"\n\n",r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),t.config.globalProperties.$fhcAlert.alertSystemError(r)})},db(e){i(e,(e,i)=>{var r="";i&&(r+=i+"\n\n"),void 0!==e.heading&&(r+=e.heading+"\n\n"),void 0!==e.code&&(r+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(r+="SQL: "+e.sql+"\n\n"),void 0!==e.message?r+="Message: "+e.message+"\n\n":void 0!==e.messages&&(r+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(r+="Filename: "+e.filename+"\n"),void 0!==e.line&&(r+="Line Number: "+e.line+"\n"),t.config.globalProperties.$fhcAlert.alertSystemError(r)})},auth(e){i(e,(e,i)=>{i?i+=": "+e.message:i=e.message;var r="";r+="Controller name: "+e.controller+"\n",r+="Method name: "+e.method+"\n",r+="Required permissions: "+e.required_permissions,t.config.globalProperties.$fhcAlert.alertDefault("error",i,r,!0)})}}};function n(t,e,i,r){if("string"==typeof t&&void 0===r)[e,i,r]=[t,e,i],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===i&&void 0===r&&(r=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},r?r.form=t:r={form:t}}return[e,i,r]}function s(t){if("string"==typeof t.data||t.data instanceof String)return s({data:t});const e=t.data;return delete t.data,e?(e.meta?e.meta.response=t:e.meta={response:t},e):{meta:{response:t},data:null}}function a(t){if(!1===t||"off"===t)return{...r,success:!1,fail:!1};if(!t||!0===t)return{...r};if("success"===t)return{...r,fail:!1};if("fail"===t)return{...r,success:!1};const{success:e,fail:i,handler:n,combine:s}=t;return t={...r},Object.entries({fail:i,success:e}).forEach(([e,i])=>{void 0!==i&&(t[e]=i)}),Object.entries({handler:n,combine:s}).forEach(([e,i])=>{void 0!==i&&(t[e]={...t[e],...i})}),t}function o(t){const e=a(t?.errorHandling);if(t?.form){const i=e.handler.form;e.handler={...e.handler,form:e=>i(t.form,e)}}else e.combine={...e.combine,form:[]};return e}function d(t){return t.response?404==t.response.status?[{type:"not_found",message:t.message,url:t.request.responseURL}]:null==t.response.data.errors?[]:t.response.data.errors:t.request?[{type:"site_failed",message:t.message,url:t.request.responseURL}]:[{type:"script",message:t.message}]}function l(t,e){const i={},r=[];if(null==e)return{};for(;e.length;)r.push(e.pop());for(var n of r){let r=n.type,a=null;for(var s in t.combine){let e=t.combine[s].includes(r),i=t.handler[s];if(e&&i&&(a=s,"form"==a))break}a&&(r=a);t.handler[r]?(i[r]||(i[r]=[]),Array.isArray(n)?i[r].push(...n):i[r].push(n)):e.push(n)}return i}void 0!==e?.errorHandling&&(r=a(e.errorHandling));const p=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});p.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,i])=>{if(i instanceof FileList)for(const r of i)t.FormData.append(e+(i.length>1?"[]":""),r);else Array.isArray(i)?i.every(t=>!(t instanceof File))?t.jsondata[e]=i:i.forEach(r=>t.FormData.append(e+(i.length>1?"[]":""),r)):t.jsondata[e]=i;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),p.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(i=>(e.config[i.type+"ErrorHandler"]||t.config.globalProperties.$api._defaultErrorHandlers[i.type])(i,e.config))),s(e)),t=>{if("ERR_CANCELED"==t.code)return Promise.reject({handled:!0,...t});const e=o(t.config);if(!e.fail)return Promise.reject(t);const i=d(t),r=l(e,i);for(var n in r)e.handler[n](r[n]);return i.length?Promise.reject(t):Promise.reject({handled:!0,...t})}),t.config.globalProperties.$api={getUri:t=>p.getUri({url:t}),get:(t,e,i,r)=>([e,i,r]=n(t,e,i,r),i&&(r?r.params=i:r={params:i}),p.get(e,r)),post:(t,e,i,r)=>([e,i,r]=n(t,e,i,r),p.post(e,i,r)),call(e,i,r){if(Array.isArray(e)){const s=t.config.globalProperties.$api;return Promise.allSettled(e.map((t,e)=>(Array.isArray(t)||(t=["#"+e,t]),s.call(t[1],{errorHeader:t[0],errorHandling:!1})))).then(t=>{const[,,e]=n(r,void 0,void 0,i||{}),s=o(e);if(!s.success&&!s.fail)return t;const a={};for(var p of t){const[t,e]="fulfilled"===p.status?[s.success,p.value]:[s.fail,p.reason];if(!t)return;const i=l(s,d(e));for(var h in i)a[h]?a[h][e.config.errorHeader]=i[h]:a[h]={[e.config.errorHeader]:i[h]}}for(var c in a)s.handler[c](a[c]);return t})}let{method:s,url:a,params:p,config:h}=e;return void 0!==i&&(h=i),s||(s="get"),s.toLowerCase&&(s=s.toLowerCase()),"get"==s?this.get(r,a,p,h):"post"==s?this.post(r,a,p,h):void console.error("FhcApi: method not allowed:",s)},getErrorHandler:t=>o(t)},t.provide("$api",t.config.globalProperties.$api)}},et={loadCategory:t=>({method:"get",url:"/api/frontend/v1/phrasen/loadModule/"+t}),setLanguage:(t,e)=>({method:"post",url:"/api/frontend/v1/phrasen/setLanguage",params:{categories:t,language:e}}),getLanguage:()=>({method:"get",url:"/api/frontend/v1/phrasen/getLanguage"}),getActiveDbLanguages:()=>({method:"get",url:"/api/frontend/v1/phrasen/getAllLanguages"})};const it=Vue.reactive({}),rt={};let nt=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language),st=Vue.computed(()=>nt.value?FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(t=>t.sprache==nt.value).LC_Time:null);const at={user_language:nt,user_locale:st,setLanguage(t){const e=Object.keys(it);return this.config.globalProperties.$api.call(et.setLanguage(e,t)).then(e=>(e.data.forEach(t=>{it[t.category][t.phrase]=t.text}),nt.value=t,e))},loadCategory(t){return Array.isArray(t)?Promise.all(t.map(this.config.globalProperties.$p.loadCategory)):(rt[t]||(rt[t]=this.config.globalProperties.$api.call(et.loadCategory(t)).then(e=>e?.data?function(t,e){return t.filter(t=>t.category==e).reduce((t,e)=>(t[e.phrase]||(t[e.phrase]=e.text),t),{})}(e.data,t):{}).then(e=>{it[t]=e})),rt[t])},t_ref(t,e,i){return console.warn("deprecated"),Vue.computed(()=>this.t(t,e,i))},t(t,e,i){if(void 0===i&&(Array.isArray(t)&&2==t.length||t.split&&2==t.split("/").length)&&(i=e,[t,e]=t.split?t.split("/"):t),void 0===e)return console.error("invalid input",t,e,i),"";let r=Vue.computed(()=>it[t]?function(t,e,i){let r=it[t][e];return r?(i&&(r=r.replace(/\{([^}]*)\}/g,(t,e)=>void 0===i[e]?t:i[e])),r):"<< PHRASE "+e+">>"}(t,e,i):"");return it[t]||this.loadCategory(t),r.value}};var ot={install(t,e){t.config.globalProperties.$fhcApi||t.use(W),t.config.globalProperties.$api||t.use(tt),t.config.globalProperties.$p={t:at.t,loadCategory:e=>at.loadCategory.call(t,e),setLanguage:e=>at.setLanguage.call(t,e),user_language:nt,user_locale:st,t_ref:at.t_ref},t.provide("$p",t.config.globalProperties.$p)}},dt=Object.freeze({__proto__:null,default:ot,user_locale:st});const lt=Vue.createApp({name:"AdminApp",data:()=>({appSideMenuEntries:{}}),components:{CoreNavigationCmpt:a,DashboardAdmin:C}});lt.use(ot),lt.mount("#main"); //# sourceMappingURL=Admin.js.map diff --git a/public/dist/js/apps/Dashboard/Admin.js.map b/public/dist/js/apps/Dashboard/Admin.js.map index 8d9b555ce..b330b5db9 100644 --- a/public/dist/js/apps/Dashboard/Admin.js.map +++ b/public/dist/js/apps/Dashboard/Admin.js.map @@ -1 +1 @@ -{"version":3,"file":"Admin.js","sources":["../../../../js/components/Fetch.js","../../../../js/api/factory/navigation.js","../../../../js/components/navigation/Navigation.js","../../../../js/components/Bootstrap/Modal.js","../../../../js/components/Bootstrap/Alert.js","../../../../js/components/Bootstrap/Prompt.js","../../../../js/components/Bootstrap/Confirm.js","../../../../js/components/Dashboard/Admin/Edit.js","../../../../js/components/Dashboard/Admin/Widgets.js","../../../../js/components/Drop/Grid/Item.js","../../../../js/composables/GridLogic.js","../../../../js/components/Drop/Grid.js","../../../../js/composables/Dashboard/CachedWidgetLoader.js","../../../../js/components/Dashboard/Item.js","../../../../js/components/Tranistion/HeightTransition.js","../../../../js/components/Dashboard/Widget/WidgetIcon.js","../../../../js/components/Dashboard/Section.js","../../../../js/components/Dashboard/Widget/Picker.js","../../../../js/helpers/ObjectUtils.js","../../../../js/components/Dashboard/Admin.js","../../../../js/components/Dashboard/Admin/Presets.js","../../../../js/api/search.js","../../../../js/api/phrasen.js","../../../../js/api/navigation.js","../../../../js/api/filter.js","../../../../js/api/studstatus.js","../../../../js/api/profil.js","../../../../js/api/profilUpdate.js","../../../../js/api/lvPlan.js","../../../../js/api/stv.js","../../../../js/api/stv/verband.js","../../../../js/api/stv/students.js","../../../../js/api/stv/filter.js","../../../../js/api/stv/konto.js","../../../../js/api/stv/group.js","../../../../js/api/stv/kontakt.js","../../../../js/api/stv/prestudent.js","../../../../js/api/stv/status.js","../../../../js/api/stv/details.js","../../../../js/api/stv/exam.js","../../../../js/api/stv/abschlusspruefung.js","../../../../js/api/stv/grades.js","../../../../js/api/stv/mobility.js","../../../../js/api/stv/archiv.js","../../../../js/api/stv/documents.js","../../../../js/api/stv/exemptions.js","../../../../js/api/stv/jointstudies.js","../../../../js/api/stv/courselist.js","../../../../js/api/notiz.js","../../../../js/api/notiz/person.js","../../../../js/api/betriebsmittel.js","../../../../js/api/betriebsmittel/person.js","../../../../js/api/checkperson.js","../../../../js/api/ort.js","../../../../js/api/cms.js","../../../../js/api/lehre.js","../../../../js/api/addons.js","../../../../js/api/messages.js","../../../../js/api/messages/person.js","../../../../js/api/vorlagen.js","../../../../js/api/studium.js","../../../../js/api/fhcapifactory.js","../../../../js/api/dashboard.js","../../../../js/api/bookmark.js","../../../../js/api/ampeln.js","../../../../js/api/studiengang.js","../../../../js/api/menu.js","../../../../js/api/authinfo.js","../../../../js/api/language.js","../../../../js/plugin/OldFhcApi.js","../../../../js/RESTClient.js","../../../../js/plugins/FhcAlert.js","../../../../js/plugins/Api.js","../../../../js/api/factory/phrasen.js","../../../../js/plugins/Phrasen.js","../../../../js/apps/Dashboard/Admin.js"],"sourcesContent":["/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport const CoreFetchCmpt = {\n\temits: ['dataFetched'], // this component can emit the event dataFetched that it is catched by this component itself\n\tprops: {\n\t\trefresh: { // to refresh this component\n\t\t\ttype: Boolean\n\t\t},\n\t\tapiFunction: { // the function to call, must return a Promise\n\t\t\trequired: true,\n\t\t\ttype: Function\n\t\t},\n\t\tapiFunctionParameters: {} // parameters for the apiFunction, type mixed, optional\n\t},\n\twatch: {\n\t\t/**\n\t\t * If the refresh property is changed then call fetchData\n\t\t */\n\t\trefresh: function (newValue, oldValue) {\n\t\t\tthis.fetchData();\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tloading: false, // if in loading or not\n\t\t\terror: false, // if an error occurred while loading data\n\t\t\terrorMessage: null // the error message\n\t\t};\n\t},\n\tcreated: function() {\n\t\tthis.fetchData();\n\t},\n\tmethods: {\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchData: function() {\n\t\t\tthis.loading = true; // loader started\n\t\t\tthis.error = false;\n\t\t\tthis.errorMessage = null;\n\n\t\t\t// Checks if the apifunction is a callable function\n\t\t\tif (typeof this.apiFunction == \"function\")\n\t\t\t{\n\t\t\t\t// Call the function stored in apiFunction\n\t \t\tlet apiFunctionResult = this.apiFunction(this.apiFunctionParameters);\n\n\t\t\t\t// It is expected that the function returns a Promise\n\t\t\t\tif (apiFunctionResult instanceof Promise)\n\t\t\t\t{\n\t\t\t\t\tapiFunctionResult\n\t\t\t\t\t\t.then(this.successHandler) // on success\n\t\t\t\t\t\t.catch(this.errorHandler) // on error\n\t\t\t\t\t\t.finally(this.finallyHandler); // finally in any case\n\t\t\t\t}\n\t\t\t\telse // otherwise display an error\n\t\t\t\t{\n\t\t\t\t\tthis.setError(\"The called apiFunction does not return a Promise\");\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // otherwise display an error\n\t\t\t{\n\t\t\t\tthis.setError(\"Property apiFunction is not a function\");\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsetError: function(errorMessage) {\n\t\t\tthis.loading = false; // loading ended\n\t\t\tthis.error = true; // error occurred\n\t\t\tthis.errorMessage = errorMessage; // save the error message\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsuccessHandler: function(response) {\n\t\t\tthis.$emit('dataFetched', response ? response.data : undefined); // trigger the event dataFetched\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\terrorHandler: function(error) {\n\t\t\tif (error.response?.data?.retval)\n\t\t\t\tthis.setError(error.response.data.retval);\n\t\t\telse if (error.data?.message)\n\t\t\t\tthis.setError(error.data.message);\n\t\t\telse\n\t\t\t\tthis.setError(error.message);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfinallyHandler: function() {\n\t\t\tthis.loading = false; // loading ended\n\t\t}\n\t},\n\ttemplate: `\n\t\t\n\t\t\t
Loading...
\n\t\t
\n\t\t\n\t\t\t
{{ errorMessage }}
\n\t\t
\n\t\t\n\t`\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetHeader(navigation_page) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/navigation/header',\n\t\t\tparams: { navigation_page }\n\t\t};\n\t},\n\tgetMenu(navigation_page) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/navigation/menu',\n\t\t\tparams: { navigation_page }\n\t\t};\n\t}\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport {CoreFetchCmpt} from '../../components/Fetch.js';\nimport ApiNavigation from '../../api/factory/navigation.js';\n\n/**\n *\n */\nexport const CoreNavigationCmpt = {\n\tcomponents: {\n\t\tCoreFetchCmpt\n\t},\n\tprops: {\n\t\taddHeaderMenuEntries: Object, // property used to add new header menu entries from another app/component\n\t\taddSideMenuEntries: Object, // property used to add new side menu entries from another app/component\n\t\thideTopMenu: Boolean,\n\t\tleftNavCssClasses: {\n\t\t\ttype: String,\n\t\t\tdefault: 'navbar navbar-left-side'\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\theaderMenu: {}, // header menu entries\n\t\t\tsideMenu: {} // side menu entries\n\t\t};\n\t},\n\tcomputed: {\n\t\t/**\n\t\t *\n\t\t */\n\t\theaderMenuEntries() {\n\t\t\t//\n\t\t\tlet hm = this.headerMenu ? {...this.headerMenu} : {};\n\t\t\tif (this.headerMenu != null && this.addHeaderMenuEntries != null && Object.keys(this.addHeaderMenuEntries).length > 0)\n\t\t\t{\n\t\t\t\thm[this.addHeaderMenuEntries.description] = this.addHeaderMenuEntries;\n\t\t\t}\n\t\t\treturn hm;\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsideMenuEntries() {\n\t\t\t//\n\t\t\tlet sm = this.sideMenu ? {...this.sideMenu} : {};\n\t\t\tif (this.sideMenu != null && this.addSideMenuEntries != null && Object.keys(this.addSideMenuEntries).length > 0)\n\t\t\t{\n\t\t\t\tsm[this.addSideMenuEntries.description] = this.addSideMenuEntries;\n\t\t\t}\n\t\t\treturn sm;\n\t\t}\n\t},\n\tmethods: {\n\t\t/**\n\t\t *\n\t\t */\n\t\tgetNavigationPage() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.called_path + \"/\" + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchCmptApiFunctionHeader() {\n\t\t\treturn this.$api.call(ApiNavigation.getHeader(this.getNavigationPage()))\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchCmptApiFunctionSideMenu() {\n\t\t\treturn this.$api.call(ApiNavigation.getMenu(this.getNavigationPage()))\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchCmptDataFetchedHeader(data) {\n\t\t\tthis.headerMenu = data || {};\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchCmptDataFetchedMenu(data) {\n\t\t\tthis.sideMenu = data || {};\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tgetDataBsToggle(header) {\n\t\t\treturn !header.children ? null : 'dropdown';\n\t\t}\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t\t\n\t\t\n\n\t\t\n\t\t\n\n\t\t\n\t\t\n\t`\n};\n\n","//import Phrasen from '../../plugin/Phrasen.js';\n\nexport default {\n\tname: 'BootstrapModal',\n\tdata: () => ({\n\t\tmodal: null,\n\t\tfullscreen: false\n\t}),\n\tprops: {\n\t\tbackdrop: {\n\t\t\ttype: [Boolean,String],\n\t\t\tdefault: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['static', true, false].includes(value);\n\t\t\t}\n\t\t},\n\t\tfocus: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tkeyboard: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tnoCloseBtn: Boolean,\n\t\tdialogClass: [String,Array,Object],\n\t\theaderClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tbodyClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: 'px-4 py-5'\n\t\t},\n\t\tfooterClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tallowFullscreenExpand: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\temits: [\n\t\t\"hideBsModal\",\n\t\t\"hiddenBsModal\",\n\t\t\"hidePreventedBsModal\",\n\t\t\"showBsModal\",\n\t\t\"shownBsModal\"\n\t],\n\tmethods: {\n\t\tdispose() {\n\t\t\treturn this.modal.dispose();\n\t\t},\n\t\thandleUpdate() {\n\t\t\treturn this.modal.handleUpdate();\n\t\t},\n\t\thide() {\n\t\t\treturn this.modal.hide();\n\t\t},\n\t\tshow(relatedTarget) {\n\t\t\treturn this.modal.show(relatedTarget);\n\t\t},\n\t\ttoggle() {\n\t\t\treturn this.modal.toggle();\n\t\t},\n\t\ttoggleFullscreen() {\n\t\t\tthis.fullscreen = !this.fullscreen\n\t\t}\n\t},\n\tmounted() {\n\t\tif (this.$refs.modal)\n\t\t\tthis.modal = new bootstrap.Modal(this.$refs.modal, {\n\t\t\t\tbackdrop: this.backdrop,\n\t\t\t\tfocus: this.focus,\n\t\t\t\tkeyboard: this.keyboard\n\t\t\t});\n\t},\n\tpopup(body, options, title, footer) {\n\t\tconst BsModal = this,\n\t\t\tslots = {};\n\t\tif (body !== undefined)\n\t\t\tslots.default = () => body;\n\t\tif (title !== undefined)\n\t\t\tslots.title = () => title;\n\t\tif (footer !== undefined)\n\t\t\tslots.footer = () => footer;\n\n\t\t// little hack to check whether primevue is included in the app or not\n\t\tlet includedPrimevue = false;\n\t\tif(typeof primevue !== 'undefined'){\n\t\t\tincludedPrimevue = true;\n\t\t}\n\n\t\treturn new Promise((resolve,reject) => {\n\t\t\tconst instance = Vue.createApp({\n\t\t\t\tname: 'ModalTmpApp',\n\t\t\t\tsetup() {\n\t\t\t\t\treturn () => Vue.h(BsModal, {...{\n\t\t\t\t\t\tclass: 'fade'\n\t\t\t\t\t},...options, ...{\n\t\t\t\t\t\tref: 'modal',\n\t\t\t\t\t\t'onHidden.bs.modal': instance.unmount\n\t\t\t\t\t}}, slots);\n\t\t\t\t},\n\t\t\t\tmounted() {\n\t\t\t\t\tthis.$refs.modal.show();\n\t\t\t\t\t\n\t\t\t\t},\n\t\t\t\tbeforeUnmount() {\n\t\t\t\t\tif (this.$refs.modal)\n\t\t\t\t\t\tthis.$refs.modal.result !== false ? resolve(this.$refs.modal.result) : reject();\n\t\t\t\t},\n\t\t\t\tunmounted() {\n\t\t\t\t\twrapper.parentElement.removeChild(wrapper);\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst wrapper = document.createElement(\"div\");\n\t\t\t\n\t\t\t// if(primevue) --> won't work because primevue is not defined in this scope and promise would be rejected\n\t\t\tif (includedPrimevue){\n\t\t\t\tinstance.use(primevue.config.default, {zIndex: {overlay: 9999}})\n\t\t\t}\n\t\t\t\t \n\t\t\t//instance.use(Phrasen); // TODO(chris): find a more dynamic way\n\t\t\timport('../../plugins/Phrasen.js').then((Phrasen) => {\n\t\t\t\tinstance.use(Phrasen.default);\n\t\t\t\tinstance.mount(wrapper);\n\t\t\t\tdocument.body.appendChild(wrapper);\n\t\t\t});\n\t\t});\n\t},\n\ttemplate: `
\n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
`\n}\n","import BsModal from './Modal.js';\n\nexport default {\n\tname: 'BootstrapAlert',\n\tcomponents: {\n\t\tBsModal\n\t},\n\tmixins: [\n\t\tBsModal\n\t],\n\tprops: {\n\t\tdialogClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: 'modal-dialog-centered'\n\t\t},\n\t\t/*\n\t\t * NOTE(chris):\n\t\t * Hack to expose in \"emits\" declared events to $props which we use\n\t\t * in the v-bind directive to forward all events.\n\t\t * @see: https://github.com/vuejs/core/issues/3432\n\t\t*/\n\t\tonHideBsModal: Function,\n\t\tonHiddenBsModal: Function,\n\t\tonHidePreventedBsModal: Function,\n\t\tonShowBsModal: Function,\n\t\tonShownBsModal: Function\n\t},\n\tdata: () => ({\n\t\tresult: true\n\t}),\n\tmounted() {\n\t\tthis.modal = this.$refs.modalContainer.modal;\n\t},\n\tpopup(msg, options) {\n\t\treturn BsModal.popup.bind(this)(msg, options);\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t`\n}\n","import BsAlert from './Alert.js';\n\nexport default {\n\tname: 'BootstrapPrompt',\n\tmixins: [\n\t\tBsAlert\n\t],\n\tprops: {\n\t\tplaceholder: String,\n\t\tdefault: String\n\t},\n\tdata: () => ({\n\t\tvalue: '',\n\t\tresult: false\n\t}),\n\tcreated() {\n\t\tif (this.default)\n\t\t\tthis.value = this.default;\n\t},\n\tpopup(msg, options) {\n\t\tif (typeof options === 'string')\n\t\t\toptions = { default: options };\n\t\treturn BsAlert.popup.bind(this)(msg, options);\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t`\n}\n","import BsAlert from './Alert.js';\n\nexport default {\n\tname: 'BootstrapConfirm',\n\tmixins: [\n\t\tBsAlert\n\t],\n\tdata: () => ({\n\t\tresult: false\n\t}),\n\tpopup(msg, options) {\n\t\treturn BsAlert.popup.bind(this)(msg, options);\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t`\n}\n","import BsConfirm from '../../Bootstrap/Confirm.js';\n\nexport default {\n\temits: [\n\t\t\"change\",\n\t\t\"delete\"\n\t],\n\tprops: {\n\t\tdashboard_id: Number,\n\t\tdashboard_kurzbz: String,\n\t\tbeschreibung: String\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tkurzbz: this.dashboard_kurzbz,\n\t\t\tdesc: this.beschreibung\n\t\t}\n\t},\n\tmethods: {\n\t\tsendDelete() {\n\t\t\tBsConfirm.popup('Sure?').then(() => this.$emit('delete', this.dashboard_id)).catch();\n\t\t}\n\t},\n\ttemplate: `
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t
`\n}\n","export default {\n\temits: [\n\t\t\"change\",\n\t\t\"assignWidgets\"\n\t],\n\tprops: {\n\t\tdashboard_id: Number,\n\t\twidgets: Array\n\t},\n\tcomputed: {\n\t\tapiurl() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/dashboard';\n\t\t}\n\t},\n\tmethods: {\n\t\tsendChange(widget_id) {\n\t\t\tlet allow = !this.widgets.find(el => el.widget_id == widget_id).allowed;\n\t\t\taxios.post(this.apiurl + '/Widget/setAllowed', {\n\t\t\t\tdashboard_id: this.dashboard_id,\n\t\t\t\twidget_id,\n\t\t\t\taction: allow ? 'add' : 'delete'\n\t\t\t}).catch(err => console.error('ERROR: ' + err));\n\t\t}\n\t},\n\tcreated() {\n\t\taxios.get(this.apiurl + '/Widget/getAll', {\n\t\t\tparams:{\n\t\t\t\tdashboard_id: this.dashboard_id\n\t\t\t}\n\t\t}).then(\n\t\t\tresult => {\n\t\t\t\tthis.$emit('assignWidgets', result.data.retval.map(el => ({\n\t\t\t\t\t...el,\n\t\t\t\t\t...{setup:JSON.parse(el.setup),arguments:JSON.parse(el.arguments),allowed:!!el.allowed}\n\t\t\t\t})));\n\t\t\t}\n\t\t).catch(err => console.error('ERROR:', err));\n\t},\n\ttemplate: `\n\t
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t
`\n}\n","export default {\n\tname:'GridItem',\n\tcomponents: {\n\t},\n\tinject: {\n\t},\n\tprops: {\n\t\titem: Object,\n\t\tactive: Boolean\n\t},\n\temits: [\n\t\t\"mouseDown\",\n\t\t\"mouseUp\",\n\t\t\"startMove\",\n\t\t\"startResize\",\n\t\t\"dragging\",\n\t\t\"endDrag\",\n\t\t\"dropDrag\",\n\t\t\"item\",\n\t\t\"touchStart\",\n\t\t\"touchEnd\",\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tdragAction: '',\n\t\t\tdragging: false\n\t\t}\n\t},\n\tcomputed: {\n\t},\n\tmethods: {\n\t\tregisterDragAction(evt) {\n\t\t\tthis.$emit('mouseDown', evt);\n\t\t\tif (evt.target.hasAttribute('drag-action')) {\n\t\t\t\tthis.dragAction = evt.target.getAttribute('drag-action');\n\t\t\t} else {\n\t\t\t\tlet parent = evt.target.closest('[drag-action]');\n\t\t\t\tif (parent) {\n\t\t\t\t\tthis.dragAction = parent.getAttribute('drag-action');\n\t\t\t\t} else {\n\t\t\t\t\tthis.dragAction = '';\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttryDragStart(evt, item) {\n\t\t\tlet dragAction = this.dragAction || evt.target.getAttribute('drag-action');\n\t\t\tif (dragAction) {\n\t\t\t\tthis.dragging = true;\n\t\t\t\tif (dragAction == 'move')\n\t\t\t\t\treturn this.$emit('startMove', evt, item);\n\t\t\t\telse if (dragAction == 'resize')\n\t\t\t\t\treturn this.$emit('startResize', evt, item);\n\t\t\t}\n\t\t\t//evt.preventDefault();\n\t\t},\n\t\ttouchDragEnd(evt) {\n\t\t\tif (!this.dragging)\n\t\t\t\treturn;\n\t\t\tthis.dragging = false;\n\t\t\tthis.$emit('touchEnd', evt);\n\t\t},\n\t\ttouchStart(event){\n\t\t\tthis.$emit('touchStart', event); \n\t\t\tthis.registerDragAction(event); \n\t\t\tthis.tryDragStart(event, this.item);\n\t\t},\n\t\ttouchMove(event){\n\t\t\tif(this.dragging){\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.$emit('dragging', event);\n\t\t\t}\n\t\t}\n\t\t\n\t},\n\ttemplate: `\n\t
\n\t\t\n\t
`\n}\n","// TODO(chris): Comments\n\nconst DIR_UP = 0;\nconst DIR_LEFT = 1;\nconst DIR_RIGHT = 2;\nconst DIR_DOWN = 3;\n\nclass GridLogic {\n\tconstructor(w) {\n\t\tif (w.w) {\n\t\t\tthis.w = w.w;\n\t\t\tthis.h = w.h;\n\t\t\tthis.data = [...w.data];\n\t\t\tthis.grid = [...w.grid];\n\t\t} else {\n\t\t\tthis.w = w;\n\t\t\tthis.h = 1;\n\t\t\tthis.data = [];\n\t\t\tthis.grid = [];\n\t\t}\n\t}\n\tisFreeSlot(x, y) {\n\t\tconst i = y*this.w + x;\n\t\treturn !this.grid[i] && this.grid[i] !== 0;\n\t}\n\tgetMaxY(){\n\t\treturn this.data.reduce((acc, item) => { \n\t\t\tif (item?.y > acc) {\n\t\t\t\t acc = item.y; \n\t\t\t} \n\t\t\treturn acc; \n\t\t}, 0);\n\t}\n\tgetFreeSlots() {\n\t\tconst freeSlots = [];\n\t\tlet biggestY = this.getMaxY();\n\t\tlet totalSpaces = this.w * (biggestY+1);\n\t\tfor(let i=0; i < totalSpaces; i++){\n\t\t\tif (!this.grid[i] && this.grid[i] !== 0){\n\t\t\t\tthis.grid[i] = undefined;\n\t\t\t}\n\t\t}\n\t\tfor(let i =0; i < this.grid.length; i++){\n\t\t\tif (!this.grid[i] && this.grid[i] !== 0){\n\t\t\t\tlet x = i % this.w;\n\t\t\t\tlet y = Math.floor(i / this.w);\n\t\t\t\tfreeSlots.push({x, y});\n\t\t\t}\n\t\t}\n\t\treturn freeSlots;\n\t}\n\tadd(item, prefer) {\n\t\tlet occupiers = this.getItemsInFrame(item.frame);\n\t\tif (!occupiers.length) {\n\t\t\titem.frame.forEach(f => this.grid[f] = item.index);\n\t\t\tthis.data[item.index] = item;\n\t\t\tthis.h = Math.max(this.h, item.y + item.h);\n\t\t\treturn [];\n\t\t} else {\n\t\t\tconst intermGrid = new GridLogic(this);\n\t\t\t\n\t\t\titem.frame.forEach(f => intermGrid.grid[f] = -1);\n\n\t\t\tconst possiblities = intermGrid.tryMoving(occupiers, prefer);\n\t\t\tif (possiblities.length) {\n\t\t\t\tconst bestOption = possiblities.sort((a,b) => {\n\t\t\t\t\tif (a.cost === undefined)\n\t\t\t\t\t\ta.cost = a.moves.reduce((a, v) => a * v.cost, 1);\n\t\t\t\t\tif (b.cost === undefined)\n\t\t\t\t\t\tb.cost = b.moves.reduce((a, v) => a * v.cost, 1);\n\t\t\t\t\treturn a.cost > b.cost;\n\t\t\t\t});\n\t\t\t\tconst result = [];\n\t\t\t\tbestOption[0].moves.forEach(move => {\n\t\t\t\t\tconst currItem = {...this.data[move.index]};\n\t\t\t\t\tcurrItem.x += move.x;\n\t\t\t\t\tcurrItem.y += move.y;\n\t\t\t\t\tcurrItem.frame = this.getItemFrame(currItem);\n\t\t\t\t\tthis.h = Math.max(this.h, currItem.y + currItem.h);\n\t\t\t\t\tthis.remove(currItem);\n\t\t\t\t\tcurrItem.frame.forEach(f => this.grid[f] = currItem.index);\n\t\t\t\t\tthis.data[move.index] = currItem;\n\t\t\t\t\tresult[move.index] = {\n\t\t\t\t\t\tindex: currItem.index,\n\t\t\t\t\t\tx: currItem.x,\n\t\t\t\t\t\ty: currItem.y\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\titem.frame.forEach(f => this.grid[f] = item.index);\n\t\t\t\tthis.data[item.index] = item;\n\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\tconsole.error('FATAL', \"can't arrange item on grid\");\n\t\t\t}\n\t\t}\n\t}\n\tmove(item, x, y) {\n\t\tif (item.data.place[this.w]?.pinned)\n\t\t\treturn [];\n\t\tif (item.x == x && item.y == y)\n\t\t\treturn [];\n\t\t\n\t\tthis.remove(item);\n\n\t\tlet prefer = undefined;\n\t\tif (item.x == x) {\n\t\t\tif (y-item.y > 0)\n\t\t\t\tprefer = DIR_UP;\n\t\t\telse\n\t\t\t\tprefer = DIR_DOWN;\n\t\t} else if (item.y == y) {\n\t\t\tif (x-item.x > 0)\n\t\t\t\tprefer = DIR_LEFT;\n\t\t\telse\n\t\t\t\tprefer = DIR_RIGHT;\n\t\t}\n\n\t\tconst originalFrame = Array.isArray(item.frame) ? [...item.frame] : [item.frame];\n\n\t\tconst currItem = {...item};\n\t\tcurrItem.x = x;\n\t\tcurrItem.y = y;\n\t\tcurrItem.frame = this.getItemFrame(currItem);\n\t\tlet occupiers = this.getItemsInFrame(currItem.frame);\n\t\t\n\t\t// does not update if the target conatins pinned widgets\n\t\tif (occupiers.some(frame => this.data[frame]?.data.place[this.w]?.pinned)) {\n\t\t\treturn [];\n\t\t}\n\t\t\n\t\t// checks if target contains widget with the same high and width\n\t\tlet occupiersData = occupiers.map(occupier => this.data[occupier]);\n\t\tlet occupiersFrame = occupiersData.map(occupier => occupier.frame).flat();\n\t\tif (!occupiersFrame.some(frame => !currItem.frame.includes(frame)) && !occupiersFrame.some(frame => originalFrame.includes(frame))){\n\t\t\tlet replaceUpdate = [];\n\t\t\tlet newOccupierFrames = [];\n\t\t\tfor(let f of originalFrame){\n\t\t\t\tif(newOccupierFrames.includes(f)){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tlet occ = occupiersData.shift();\n\t\t\t\tif(occ){\n\t\t\t\t\tnewOccupierFrames = [...newOccupierFrames, ...this.getItemFrame({ ...occ, ...this.getSingleFramePosition(f) })];\n\t\t\t\t\treplaceUpdate[occ.index] = { index: occ.index, ...this.getSingleFramePosition(f)}\n\t\t\t\t}\n\t\t\t}\n\t\t\treplaceUpdate[item.index] = { index: item.index, x, y };\n\t\t\t\n\t\t\treturn replaceUpdate;\n\t\t}\n\t\t\n\t\tconst updates = this.add(currItem, prefer);\n\t\tupdates[item.index] = {index: item.index, x, y};\n\t\treturn updates;\n\t}\n\tresize(item, w, h) {\n\t\tif (item.w == w && item.h == h)\n\t\t\treturn [];\n\t\tthis.remove(item);\n\n\t\tconst currItem = {...item};\n\t\tcurrItem.w = w;\n\t\tcurrItem.h = h;\n\t\tcurrItem.frame = this.getItemFrame(currItem);\n\t\t\n\t\tconst updates = this.add(currItem);\n\t\tif(updates)\n\t\t\tupdates[item.index] = {index: item.index, w, h, x:item.x, y:item.y, resize:true};\n\n\t\treturn updates;\n\t}\n\ttryMoving(index, prefer) {\n\t\tif (Array.isArray(index)) {\n\t\t\tindex.forEach(i => this.remove({index:i}));\n\t\t\tlet possiblities = [{grid: this, moves: []}];\n\t\t\tindex.forEach(i => {\n\t\t\t\tlet newPoss = [];\n\t\t\t\tpossiblities.forEach(possiblity => {\n\t\t\t\t\tpossiblity.grid.tryMoving(i, prefer).forEach(p => {\n\t\t\t\t\t\tpossiblity.moves\n\t\t\t\t\t\tp.moves = [...p.moves, ...possiblity.moves];\n\t\t\t\t\t\tnewPoss.push(p)\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tpossiblities = newPoss;\n\t\t\t});\n\t\t\treturn possiblities;\n\t\t}\n\t\tconst directions = [DIR_UP, DIR_DOWN, DIR_LEFT, DIR_RIGHT];\n\n\t\tthis.remove({index});\n\n\t\tconst weight = 1 + .2*(this.data[index].weight || 0);\n\n\t\treturn directions.reduce((result, dir) => {\n\t\t\tlet res = this.tryMovingInDirection(dir, index, 1, (prefer === dir ? .5 : 1 + dir*.1) * weight);\n\t\t\tif (!res)\n\t\t\t\treturn result;\n\t\t\treturn [...result, ...res];\n\t\t}, []).filter(p => p);\n\t}\n\ttryMovingInDirection(dir, index, amount, cost) {\n\t\tconst move = {index, x:0, y: 0, cost: cost};\n\t\tlet targetframe;\n\t\tswitch(dir) {\n\t\t\tcase DIR_UP:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned || this.data[index].y - amount < 0)\n\t\t\t\t\treturn false;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i-this.w*amount);\n\t\t\t\tmove.y = -amount;\n\t\t\t\tbreak;\n\t\t\tcase DIR_DOWN:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned)\n\t\t\t\t\treturn false;\n\t\t\t\tif (this.data[index].y + this.data[index].h + amount > this.h)\n\t\t\t\t\tcost += .4;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i+this.w*amount);\n\t\t\t\tmove.y = amount;\n\t\t\t\tbreak;\n\t\t\tcase DIR_LEFT:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned || this.data[index].x - amount < 0)\n\t\t\t\t\treturn false;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i-amount);\n\t\t\t\tmove.x = -amount;\n\t\t\t\tbreak;\n\t\t\tcase DIR_RIGHT:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned || this.data[index].x + this.data[index].w + amount > this.w)\n\t\t\t\t\treturn false;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i+amount);\n\t\t\t\tmove.x = amount;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tconst occupiers = this.getItemsInFrame(targetframe);\n\t\tif (occupiers.includes(-1)) {\n\t\t\treturn this.tryMovingInDirection(dir, index, amount+1, cost);\n\t\t}\n\t\t\n\t\tconst intermGrid = new GridLogic(this);\n\t\ttargetframe.forEach(f => intermGrid.grid[f] = -1);\n\t\t\n\t\tif (!occupiers.length) {\n\t\t\treturn [{grid: intermGrid, moves: [move]}];\n\t\t}\n\t\tconst possiblities = intermGrid.tryMoving(occupiers).map(possiblity => possiblity.moves.unshift(move) && possiblity);\n\t\treturn possiblities.length ? possiblities : false;\n\t}\n\tclearWeights() {\n\t\tthis.data.forEach(item => item.weight = undefined);\n\t}\n\tgetItemsInFrame(frame) {\n\t\treturn frame.map(i => this.grid[i]).filter((v,i,a) => (v || v === 0) && a.indexOf(v) === i);\n\t}\n\tremove(item) {\n\t\tthis.grid = this.grid.map(i => i != item.index ? i : undefined);\n\t}\n\tgetItemFrame(item) {\n\t\tconst frame = [];\n\t\tfor (let i = 0; i < item.w; i++)\n\t\t\tfor (let j = 0; j < item.h; j++)\n\t\t\t\tframe.push(i + item.x + (j + item.y) * this.w);\n\t\treturn frame;\n\t}\n\tgetSingleFramePosition(frame){\n\t\treturn { x: frame % this.w, y: Math.floor(frame / this.w)};\n\t}\n\tdebug() {\n\t\treturn this.grid;\n\t}\n}\n\nexport default GridLogic;","// TODO(chris): Comments\n\nimport GridItem from './Grid/Item.js';\nimport GridLogic from '../../composables/GridLogic.js';\n\nconst MODE_IDLE = 0;\nconst MODE_MOVE = 1;\nconst MODE_RESIZE = 2;\nconst MODE_MOUSE_DOWN = 3;\n\nexport default {\n\tname: 'Grid',\n\tcomponents: {\n\t\tGridItem,\n\t},\n\tprops: {\n\t\tcols: Number,\n\t\titems: Array,\n\t\titemsSetup: Object,\n\t\tresizeLimit: Function,\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tmarginForExtraRow: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0\n\t\t},\n\t\tadditionalRow:{\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t}\n\t},\n\temits: [\n\t\t\"rearrangeItems\",\n\t\t\"newItem\",\n\t\t\"gridHeight\",\n\t\t\"draggedItem\",\n\t\t\"update:additionalRow\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tx: -1,\n\t\t\ty: -1,\n\t\t\tclientX:0,\n\t\t\tclientY: 0,\n\t\t\tmode: MODE_IDLE,\n\t\t\tgrid: null,\n\t\t\tdragGrid: null,\n\t\t\tpermUpdates: [],\n\t\t\tpositionUpdates: null,\n\t\t\tfixedPositionUpdates: null,\n\t\t\tdraggedOffset: [0,0],\n\t\t\tdraggedItem: null,\n\t\t\tdraggedNode: null,\n\t\t\treorderedItems:[],\n\t\t\tclonedWidget:null,\n\t\t}\n\t},\n\tinject:{\n\t\tsectionName: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tcomputed: {\n\t\tadditionalRowComputed: {\n\t\t\tget() {\n\t\t\t\treturn this.additionalRow;\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tthis.$emit('update:additionalRow', value);\n\t\t\t}\n\t\t},\n\t\titems_hashmap() {\n\t\t\tlet items = {};\n\t\t\tthis.items.forEach(item => {\n\t\t\t\tif (this.reorderedItems.length > 0 && this.needsReordering(item)){\n\t\t\t\t\t\tlet rearrangedPosition = this.reorderedItems.filter(widget => widget.data.widgetid == item.widgetid)?.pop();\n\t\t\t\t\t\tif (rearrangedPosition) {\t\t\t\n\t\t\t\t\t\t\titem.x = rearrangedPosition.x;\n\t\t\t\t\t\t\titem.y = rearrangedPosition.y;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\titems[`x${item.x}y${item.y}`] = item;\n\t\t\t});\t\n\t\t\treturn items\n\t\t},\n\t\titems_placeholders(){\n\t\t\tlet placeholders = [];\n\t\t\tlet col_max = this.cols;\n\t\t\tlet rows_max = this.rows;\n\n\t\t\t// occupied hashmap to keep track of the occupied cells\n\t\t\tlet occupied = {};\n\n\t\t\tfor (let y = 0; y < rows_max; y++) {\n\t\t\t\tfor (let x = 0; x < col_max; x++) {\n\t\t\t\t\t// skip current position if it was registered as occupied\n\t\t\t\t\tif (Object.keys(occupied).length && occupied[`x${x}y${y}`]) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tlet current_item = this.items_hashmap[`x${x}y${y}`];\n\t\t\t\t\tif (current_item) {\n\t\t\t\t\t\t//calculate the occupied cells from the width and the height from the items \n\t\t\t\t\t\tlet width = current_item.w;\n\t\t\t\t\t\tlet height = current_item.h;\n\t\t\t\t\t\tlet max_x = x + width - 1;\n\t\t\t\t\t\tlet max_y = y + height - 1;\n\t\t\t\t\t\tif(x != max_x || y != max_y){\n\t\t\t\t\t\t\tfor (let occupied_y = y; occupied_y <= max_y; occupied_y++) {\n\t\t\t\t\t\t\t\tfor (let occupied_x = x; occupied_x <= max_x; occupied_x++) {\n\t\t\t\t\t\t\t\t\tif (occupied_x != x || occupied_y != y) {\n\t\t\t\t\t\t\t\t\t\toccupied[`x${occupied_x}y${occupied_y}`]=true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tplaceholders.push({ x: x, y: y, w: 1, h: 1, placeholder: true, \n\t\t\t\t\t\t\tdata: { id: 'placeholder_' + String(placeholders.length).padStart(4, \"0\") } });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn placeholders;\n\t\t},\n\t\tplacedItems_withPlaceholders() {\n\t\t\treturn [...this.placedItems, ...this.items_placeholders];\n\t\t},\n\t\trows() {\n\t\t\tif (this.additionalRowComputed) {\n\t\t\t\t\treturn this.grid ? (this.grid.h+1) : 1;\n\t\t\t}\n\t\t\treturn this.grid ? this.grid.h : 1;\n\t\t\t\n\t\t},\n\t\tgridStyle() {\n\t\t\tconst addH = this.active ? this.marginForExtraRow : 0;\n\t\t\treturn {\n\t\t\t\t'--fhc-dg-row-height': 100/(this.rows + addH) + '%',\n\t\t\t\t'--fhc-dg-col-width': 100/this.cols + '%',\n\t\t\t\t'--fhc-dg-item-padding-horizontal': '0.25%',\n\t\t\t\t'--fhc-dg-item-padding-top': '0.5%',\n\t\t\t\t'padding-bottom': 100 * (this.rows + addH)/this.cols + '%'\n\t\t\t}\n\t\t},\n\t\tindexedItems() {\n\t\t\treturn this.items.map(\n\t\t\t\t(item, index) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\tx: item.x,\n\t\t\t\t\t\ty: item.y,\n\t\t\t\t\t\tw: item.w,\n\t\t\t\t\t\th: item.h,\n\t\t\t\t\t\tweight: item.weight || 0,\n\t\t\t\t\t\tdata: item\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\tprePlacedItems() {\n\t\t\tif (!this.fixedPositionUpdates)\n\t\t\t\treturn this.indexedItems;\n\t\t\treturn this.indexedItems.map(item => {\n\t\t\t\tif (!this.fixedPositionUpdates[item.index])\n\t\t\t\t\treturn item;\n\t\t\t\treturn {\n\t\t\t\t\tindex: item.index,\n\t\t\t\t\tweight: item.weight,\n\t\t\t\t\tdata: item.data,\n\t\t\t\t\tx: this.fixedPositionUpdates[item.index].x === undefined ? item.x : this.fixedPositionUpdates[item.index].x,\n\t\t\t\t\ty: this.fixedPositionUpdates[item.index].y === undefined ? item.y : this.fixedPositionUpdates[item.index].y,\n\t\t\t\t\tw: this.fixedPositionUpdates[item.index].w === undefined ? item.w : this.fixedPositionUpdates[item.index].w,\n\t\t\t\t\th: this.fixedPositionUpdates[item.index].h === undefined ? item.h : this.fixedPositionUpdates[item.index].h\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\tplacedItems() {\n\t\t\tif (!this.positionUpdates)\n\t\t\t\treturn this.prePlacedItems;\n\t\t\tlet mappedPlacedItems= this.prePlacedItems.map(item => {\n\t\t\t\tif (!this.positionUpdates[item.index] )\n\t\t\t\t\treturn item;\n\t\t\t\tlet height_diff = this.positionUpdates[item.index]?.h - item.h;\n\t\t\t\tlet width_diff = this.positionUpdates[item.index]?.w - item.w;\n\t\t\t\treturn {\n\t\t\t\t\tresize: this.positionUpdates[item.index]?.resize,\n\t\t\t\t\tindex: item.index,\n\t\t\t\t\tweight: item.weight,\n\t\t\t\t\tdata: item.data,\n\t\t\t\t\tx: this.positionUpdates[item.index].x === undefined ? item.x : this.positionUpdates[item.index].x,\n\t\t\t\t\ty: this.positionUpdates[item.index].y === undefined ? item.y : this.positionUpdates[item.index].y,\n\t\t\t\t\tw: width_diff>0?item.w:this.positionUpdates[item.index].w === undefined ? item.w : this.positionUpdates[item.index].w,\n\t\t\t\t\th: height_diff > 0 ?item.h:this.positionUpdates[item.index].h === undefined ? item.h : this.positionUpdates[item.index].h\n\t\t\t\t\t\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tlet temporaryResizeItems = [];\n\t\t\tmappedPlacedItems.forEach(item=>{\n\t\t\t\tif(item.resize){\n\t\t\t\t\tlet newItem = {\n\t\t\t\t\t\t...item,\n\t\t\t\t\t\tw:this.positionUpdates[item.index].w === undefined ? item.w : this.positionUpdates[item.index].w,\n\t\t\t\t\t\th:this.positionUpdates[item.index].h === undefined ? item.h : this.positionUpdates[item.index].h,\n\t\t\t\t\t\tresizeOverlay:true,\n\t\t\t\t\t\tblank:true,\n\t\t\t\t\t};\n\t\t\t\t\ttemporaryResizeItems.push(newItem)\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn [...mappedPlacedItems, ...temporaryResizeItems];\n\t\t},\n\t\tshowEmptyTileHover() {\n\t\t\tif (!this.active || !this.grid || this.mode != MODE_IDLE || this.x < 0 || this.y < 0 || this.x >= this.cols || this.y >= this.rows)\n\t\t\t\treturn false;\n\t\t\treturn this.grid.isFreeSlot(this.x, this.y);\n\t\t},\n\t\twidgetSetup(){\n\t\t\tif (!this.widgetsSetup)\n\t\t\t\treturn;\n\t\t\treturn this.widgetsSetup.reduce((acc, ele) => { \n\t\t\t\tacc[ele.widget_id] =ele;\n\t\t\t\treturn acc;\n\t\t\t} ,{});\n\t\t},\n\t},\n\twatch: {\n\t\tactive(active) {\n\t\t\tif (!active)\n\t\t\t\tthis.dragCancel();\n\t\t},\n\t\tcols() {\n\t\t\tthis.dragCancel();\n\t\t},\n\t rows: {\n\t\t\thandler(value) {\n\t\t\t\tthis.$emit('gridHeight', value);\n\t\t\t},\n\t\t\timmediate: true\n\t\t},\n\t\tindexedItems: {\n\t\t\thandler(value) {\n\t\t\t\tthis.dragCancel();\n\n\t\t\t\tconst updated = this.createNewGrid(value);\n\n\t\t\t\tthis.fixedPositionUpdates = updated;\n\t\t\t\tif (updated.length)\n\t\t\t\t\tthis.$emit('rearrangeItems', updated.filter(v => v));\n\t\t\t},\n\t\t\timmediate: true,\n\t\t\tdeep: true\n\t\t}\n\t},\n\tmethods: {\n\t\tneedsReordering(item){\n\t\t\tif (!item?.data?.place[this.cols]){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\ttoggleDraggedItemOverlay(condition){\n\t\t\tif(!this.draggedNode)\n\t\t\t\treturn;\n\t\t\tif(condition){\n\t\t\t\tthis.draggedNode.firstElementChild.classList.add(\"dashboard-item-overlay\");\n\t\t\t}else{\n\t\t\t\tthis.draggedNode.firstElementChild.classList.remove(\"dashboard-item-overlay\");\n\t\t\t}\n\t\t},\n\t\tdragging(event){\n\t\t\tif(this.mode == MODE_MOVE){\n\t\t\t\tthis.toggleDraggedItemOverlay(true);\n\t\t\t\t\n\t\t\t\tconst containerRect = this.$refs.container.getBoundingClientRect();\n\t\t\t\tconst clonedWidgetRect = this.clonedWidget.getBoundingClientRect();\n\t\t\t\t\n\t\t\t\tlet desiredTop = this.clientY - 20;\n\t\t\t\tlet desiredLeft = this.clientX - 15;\n\t\t\t\t\n\t\t\t\tconst minTop = 0;\n\t\t\t\tconst maxTop = containerRect.height - clonedWidgetRect.height;\n\t\t\t\tconst minLeft = 0;\n\t\t\t\tconst maxLeft = containerRect.width - clonedWidgetRect.width;\n\t\t\t\t\n\t\t\t\tconst constrainedTop = Math.max(minTop, Math.min(maxTop, desiredTop));\n\t\t\t\tconst constrainedLeft = Math.max(minLeft, Math.min(maxLeft, desiredLeft));\n\t\t\t\t\n\t\t\t\tthis.clonedWidget.style.top = `${constrainedTop}px`;\n\t\t\t\tthis.clonedWidget.style.left = `${constrainedLeft}px`;\n\t\t\t}\n\t\t},\n\t\tcreateNewGrid(items) {\n\t\t\tthis.grid = new GridLogic(this.cols);\n\t\t\tconst result = [];\n\t\t\tlet sortedItems = [...items].sort((a, b) => {\n\t\t\t\tif(this.needsReordering(a) && this.needsReordering(b)){\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\telse if(this.needsReordering(a)){\n\t\t\t\t\treturn 999;\n\t\t\t\t}\n\t\t\t\telse if(this.needsReordering(b)){\n\t\t\t\t\treturn -999;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn a.weight > b.weight;\n\t\t\t}); \n\t\t\tlet reorderedItems = [];\n\t\t\tsortedItems.forEach(item => {\n\t\t\t\tlet freeSlots = this.grid.getFreeSlots();\n\t\t\t\t\n\t\t\t\tif(this.needsReordering(item)){\n\t\t\t\t\tlet firstFreeSlot = freeSlots.shift();\n\t\t\t\t\tif (!firstFreeSlot) {\n\t\t\t\t\t\titem.x = 0;\n\t\t\t\t\t\titem.y = this.grid.h;\n\t\t\t\t\t}else{\n\t\t\t\t\t\titem.x = firstFreeSlot.x;\n\t\t\t\t\t\titem.y = firstFreeSlot.y;\n\t\t\t\t\t}\n\t\t\t\t\treorderedItems.push(item);\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tif (item.x + item.w > this.cols) {\n\t\t\t\t\tlet targetW = this.cols-item.x,\n\t\t\t\t\t\ttargetX = undefined;\n\t\t\t\t\tif (this.resizeLimit) {\n\t\t\t\t\t\t[targetW] = this.resizeLimit(item.data, targetW, item.h);\n\t\t\t\t\t}\n\t\t\t\t\tif (targetW < 1)\n\t\t\t\t\t\ttargetW = 1;\n\t\t\t\t\tif (targetW > this.cols)\n\t\t\t\t\t\ttargetW = this.cols;\n\t\t\t\t\tif (item.x + targetW > this.cols) {\n\t\t\t\t\t\ttargetX = this.cols - targetW;\n\t\t\t\t\t}\n\t\t\t\t\tif (targetW == item.w)\n\t\t\t\t\t\ttargetW = undefined;\n\t\t\t\t\tresult[item.index] = {\n\t\t\t\t\t\titem: item.data,\n\t\t\t\t\t\tx: targetX,\n\t\t\t\t\t\tw: targetW\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\titem.frame = this.grid.getItemFrame(item);\n\t\t\t\tthis.convertGridResultToUpdate(this.grid.add(item), result, items);\n\t\t\t});\n\t\t\tthis.reorderedItems = reorderedItems;\n\t\t\tthis.grid.clearWeights();\n\t\t\treturn result;\n\t\t},\n\t\tconvertGridResultToUpdate(input, output, baseArray) {\n\t\t\t\n\t\t\tif (!input)\n\t\t\t\treturn;\n\t\t\tif (!baseArray)\n\t\t\t\tbaseArray = this.indexedItems;\n\t\t\tinput.forEach(item => {\n\t\t\t\tlet result = {\n\t\t\t\t\titem: baseArray[item.index].data\n\t\t\t\t};\n\t\t\t\tif (item.x !== undefined)\n\t\t\t\t\tresult.x = item.x;\n\t\t\t\tif (item.y !== undefined)\n\t\t\t\t\tresult.y = item.y;\n\t\t\t\tif (item.w !== undefined)\n\t\t\t\t\tresult.w = item.w;\n\t\t\t\tif (item.h !== undefined)\n\t\t\t\t\tresult.h = item.h;\n\t\t\t\toutput[item.index] = result;\n\t\t\t});\n\t\t},\n\t\tmouseLeave() {\n\t\t\t/* if (this.mode == MODE_IDLE) {\n\t\t\t\tthis.x = -1;\n\t\t\t\tthis.y = -1;\n\t\t\t\t\n\t\t\t} */\n\t\t},\n\t\tupdateCursor(evt) {\n\t\t\tif (!this.active) {\n\t\t\t\tthis.x = this.y = -1;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst addH = this.active ? this.marginForExtraRow : 0;\n\t\t\tconst rect = this.$refs.container.getBoundingClientRect();\n\t\t\t\n\t\t\tif (!evt.clientX && !evt.clientY && evt.touches){\n\t\t\t\tevt.clientX = evt.touches[0].clientX;\n\t\t\t\tevt.clientY = evt.touches[0].clientY;\n\t\t\t}\n\n\t\t\tthis.clientX = (evt.clientX - rect.left);\n\t\t\tthis.clientY = (evt.clientY - rect.top);\n\t\t\tconst gridX = Math.floor(this.cols * (evt.clientX - rect.left) / this.$refs.container.clientWidth);\n\t\t\tconst gridY = Math.floor((this.rows + addH) * (evt.clientY - rect.top) / this.$refs.container.clientHeight);\n\t\t\t\n\t\t\tif (this.x == gridX && this.y == gridY)\n\t\t\t\treturn false;\n\t\t\t\n\t\t\tthis.x = gridX;\n\t\t\tthis.y = gridY;\n\n\t\t\treturn true;\n\t\t},\n\t\t_dragStart(evt, item) {\n\t\t\tif (evt.dataTransfer) {\n\t\t\t\tevt.dataTransfer.setDragImage(evt.target, -99999, -99999);\n\t\t\t\tevt.dataTransfer.dropEffect = 'move';\n\t\t\t\tevt.dataTransfer.effectAllowed = 'move';\n\t\t\t}\n\t\t},\n\t\tstartMove(evt, item) {\n\t\t\t\n\t\t\tif (!this.active)\n\t\t\t\treturn;\n\t\t\t\n\t\t\tthis.mode = MODE_MOVE;\n\t\t\t\n\t\t\tthis.draggedItem = item;\n\t\t\t\n\t\t\tthis.$emit('draggedItem', item);\n\t\t\t// workaround for chrome fireing event dragend when styles are manipulated during dragging\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.draggedNode = evt.target.closest(\".drop-grid-item\");\n\t\t\t\t//clones the widget for the drag Image\n\t\t\t\t\n\t\t\t\tlet clone = evt.target.closest(\".drop-grid-item\")?.cloneNode(true);\n\n\t\t\t\tclone.style.zIndex = 5;\n\t\t\t\tclone.classList.add(\"widgetClone\");\n\t\t\t\tthis.$refs.container.appendChild(clone);\n\t\t\t\tconst hiddenWidget = clone.querySelector(\"[style='display: none;']\");\n\t\t\t\thiddenWidget.style.removeProperty(\"display\");\n\t\t\t\tthis.clonedWidget = clone;\n\t\t\t}, 0);\n\n\t\t\tthis.draggedOffset = [item.x - this.x, item.y - this.y];\n\t\t\tthis._dragStart(evt, item);\n\t\t},\n\t\tstartResize(evt, item) {\n\t\t\tif (!this.active)\n\t\t\t\treturn;\n\t\t\tthis.mode = MODE_RESIZE;\n\t\t\tthis.draggedItem = item;\n\t\t\tthis.$emit('draggedItem', item);\n\t\t\tthis._dragStart(evt);\n\t\t},\n\t\tdragOver(evt) {\n\t\t\tif ((this.y + 1) > this.rows && (this.mode == MODE_MOVE || this.mode == MODE_RESIZE)) {\n\t\t\t\tthis.dragCancel();\n\t\t\t\t\n\t\t\t}\n\t\t\tif (!this.active)\n\t\t\t\treturn this.dragCancel();\n\t\t\tthis.checkPinnedWidgetAnimation();\n\t\t\tif(this.mode == MODE_RESIZE){\n\t\t\t\tthis.checkWidgetSizeLimitAnimation();\n\t\t\t}\n\t\t\tif (this.updateCursor(evt)) {\n\t\t\t\tswitch(this.mode) {\n\t\t\t\t\tcase MODE_MOVE: {\n\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\tthis.dragGrid = new GridLogic(this.grid);\n\t\t\t\t\t\tlet x = this.x + this.draggedOffset[0];\n\t\t\t\t\t\tlet y = this.y + this.draggedOffset[1];\n\t\t\t\t\t\tif (x < 0) {\n\t\t\t\t\t\t\tthis.draggedOffset[0] += x;\n\t\t\t\t\t\t\tx = 0;\n\t\t\t\t\t\t} else if (x + this.draggedItem.w > this.cols) {\n\t\t\t\t\t\t\tthis.draggedOffset[0] += this.cols - this.draggedItem.w - x;\n\t\t\t\t\t\t\tx = this.cols - this.draggedItem.w;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (y < 0) {\n\t\t\t\t\t\t\tthis.draggedOffset[1] += y;\n\t\t\t\t\t\t\ty = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.positionUpdates= this.dragGrid.move(this.draggedItem, x, y);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase MODE_RESIZE: {\n\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\tthis.dragGrid = new GridLogic(this.grid);\n\t\t\t\t\t\tlet w = Math.min(this.cols - this.draggedItem.x, Math.max(1, this.x - this.draggedItem.x + 1));\n\t\t\t\t\t\tlet h = Math.max(1, this.y - this.draggedItem.y + 1);\n\t\t\t\t\t\tif (this.resizeLimit)\n\t\t\t\t\t\t\t[w, h] = this.resizeLimit(this.draggedItem.data, w, h);\n\t\t\t\t\t\tthis.positionUpdates = this.dragGrid.resize(this.draggedItem, w, h);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdragCancel() {\n\t\t\tthis.removeWidgetClones();\n\t\t\tthis.additionalRowComputed = false;\n\t\t\tthis.toggleDraggedItemOverlay(false);\n\t\t\tthis.mode = MODE_IDLE;\n\t\t\tthis.positionUpdates = null;\n\t\t\tthis.draggedOffset = [0,0],\n\t\t\tthis.draggedItem = null;\n\t\t\tthis.$emit('draggedItem',null);\n\t\t\tthis.draggedNode = null;\n\t\t\t\n\t\t},\n\t\tdragEnd() {\n\t\t\tthis.removeWidgetClones();\n\t\t\tthis.toggleDraggedItemOverlay(false);\n\t\t\t\n\t\t\tif (this.mode == MODE_IDLE){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// clean up unused classes\n\t\t\tlet draggedItemNode = document.getElementById(this.draggedItem.data.widgetid);\n\t\t\tdraggedItemNode.classList.remove(\"border-danger\");\n\t\t\tArray.from(document.getElementsByClassName(\"denied-dragging-animation\"))?.forEach(ele => {\n\t\t\t\tele.classList.remove(\"denied-dragging-animation\");\n\t\t\t})\n\t\t\t\n\t\t\t//if (!this.active || this.x < 0 || this.y < 0 || this.x >= this.cols)\n\t\t\t\t//return this.dragCancel();\n\n\t\t\tthis.mode = MODE_IDLE;\n\t\t\tlet updated = [];\n\t\t\tthis.convertGridResultToUpdate(this.positionUpdates, updated);\n\t\t\tupdated = this._updateFixedPositions(updated);\n\t\t\tif (updated.length)\n\t\t\t\tthis.$emit('rearrangeItems', updated.filter(v => v));\n\n\t\t\tthis.draggedItem = null;\n\t\t\tthis.draggedNode = null;\n\t\t\tthis.$emit('draggedItem', null);\n\t\t},\n\t\t_updateFixedPositions(updated) {\n\t\t\tupdated.forEach((item, index) => {\n\t\t\t\tif (!this.fixedPositionUpdates[index])\n\t\t\t\t\tthis.fixedPositionUpdates[index] = item;\n\t\t\t\telse\n\t\t\t\t\tthis.fixedPositionUpdates[index] = {...this.fixedPositionUpdates[index], ...item};\n\t\t\t});\n\t\t\tlet additionalUpdates = this.createNewGrid(this.prePlacedItems);\n\t\t\tif (additionalUpdates.length) {\n\t\t\t\t// NOTE(chris): this should never happen but it's here for safety\n\t\t\t\tadditionalUpdates.forEach((item, index) => updated[index] = item);\n\t\t\t\treturn this._updateFixedPositions(updated);\n\t\t\t}\n\t\t\treturn updated;\n\t\t},\n\t\temptyTileClicked() {\n\t\t\tthis.additionalRowComputed = false;\n\t\t\tthis.$emit('newItem', this.x, this.y);\n\t\t},\n\t\tupdateCursorOnMouseMove(evt){\n\t\t\tif(this.mode == MODE_IDLE){\n\t\t\t\tthis.updateCursor(evt);\n\t\t\t}\n\t\t},\n\t\tcheckPinnedWidgetAnimation(){\n\t\t\tlet itemAtPosition=[];\n\t\t\tswitch(this.mode){\n\t\t\t\tcase MODE_RESIZE:\n\t\t\t\t\tfor (let x = this.draggedItem.x; x <= this.x; x++) {\n\t\t\t\t\t\tfor (let y = this.draggedItem.y; y <= this.y; y++) {\n\t\t\t\t\t\t\tthis.items.forEach(item => {\n\t\t\t\t\t\t\t\tif (item.x == x && item.y == y) {\n\t\t\t\t\t\t\t\t\titemAtPosition.push(item);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase MODE_MOVE:\n\t\t\t\t\titemAtPosition = this.items.filter(item=>item.x == this.x && item.y == this.y);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tArray.from(document.getElementsByClassName(\"denied-dragging-animation\"))?.forEach(ele => {\n\t\t\t\tele.classList.remove(\"denied-dragging-animation\");\n\t\t\t})\n\n\t\t\titemAtPosition.forEach(item=>{\n\t\t\t\tif (item.place[this.cols] && item.place[this.cols].pinned) {\n\t\t\t\t\tlet pinnedWidget = document.getElementById(item.widgetid);\n\t\t\t\t\tlet pinNode = pinnedWidget.querySelector(\"[pinned='true']\");\n\t\t\t\t\tif (!pinNode.classList.contains(\"denied-dragging-animation\")) {\n\t\t\t\t\t\tpinNode.classList.add(\"denied-dragging-animation\");\n\t\t\t\t\t}\n\t\t\t\t}\t\n\t\t\t})\n\t\t},\n\t\tcheckWidgetSizeLimitAnimation() {\n\n\t\t\tlet draggedItemSetup = this.itemsSetup[this.draggedItem.data.widget];\n\t\t\tlet draggedItemMaxWidth = draggedItemSetup.width.max ?? draggedItemSetup.width;\n\t\t\tlet draggedItemMinWidth = draggedItemSetup.width.min ?? draggedItemSetup.width;\n\t\t\tlet draggedItemMaxHeight = draggedItemSetup.height.max ?? draggedItemSetup.height;\n\t\t\tlet draggedItemMinHeight = draggedItemSetup.height.min ?? draggedItemSetup.height;\n\t\t\tlet draggedItemNode = document.getElementById(this.draggedItem.data.widgetid);\n\n\t\t\tlet width_after_resize = this.x - this.draggedItem.x + 1; \n\t\t\tlet height_after_resize = this.y - this.draggedItem.y + 1; \n\t\t\tif( \n\t\t\t\t(width_after_resize > 0 && (width_after_resize > draggedItemMaxWidth\n\t\t\t\t|| width_after_resize < draggedItemMinWidth)\n\t\t\t\t)\n\t\t\t\t||\n\t\t\t\t(height_after_resize > 0 && (height_after_resize > draggedItemMaxHeight\n\t\t\t\t|| height_after_resize < draggedItemMinHeight)\n\t\t\t\t)\n\t\t\t){\n\t\t\t\tdraggedItemNode.classList.add(\"border-danger\");\n\t\t\t}else{\n\t\t\t\tdraggedItemNode.classList.remove(\"border-danger\");\n\t\t\t}\n\t\t},\n\t\tremoveWidgetClones(){\n\t\t\tlet widgetClones = Array.from(document.getElementsByClassName(\"widgetClone\"));\n\t\t\tfor (let i = 0; i < widgetClones.length; i++) {\n\t\t\t\tthis.$refs.container.removeChild(widgetClones[i]);\n\t\t\t}\n\t\t},\n\t\tmouseDown(){\n\t\t\tthis.mode = MODE_MOUSE_DOWN;\n\t\t},\n\t\tmouseUp() {\n\t\t\tthis.mode = MODE_IDLE;\n\t\t},\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t
`\n}\n\n/*\nOLD VERSION - ON HOVER\n\n\t\n
\n*/","let __widgets = {};\nlet __widgetsStarted = {};\nlet __path = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/dashboard/Widget';\n\nexport default {\n\tgetWidget(id) {\n\t\treturn __widgets[id];\n\t},\n\tloadWidget(id) {\n\t\tif (__widgets[id])\n\t\t\treturn Promise.resolve(__widgets[id]);\n\t\tif (__widgetsStarted[id])\n\t\t\treturn __widgetsStarted[id];\n\t\tif (!__path)\n\t\t\treturn Promise.reject('Widget could not be loaded because there is no path yet!');\n\n\t\t__widgetsStarted[id] = new Promise((resolve, reject) => {\n\t\t\taxios.get(__path, {params:{id}}).then(res => {\n\t\t\t\tres.data.retval.arguments = JSON.parse(res.data.retval.arguments);\n\t\t\t\tres.data.retval.setup = JSON.parse(res.data.retval.setup);\n\t\t\t\t__widgets[id] = res.data.retval;\n\t\t\t\t__widgetsStarted[id] = undefined;\n\t\t\t\tresolve(__widgets[id]);\n\t\t\t}).catch(error => reject(error.response.data.retval.error));\n\t\t});\n\t\treturn __widgetsStarted[id];\n\t},\n\tsetPath(path) {\n\t\t__path = path;\n\t}\n}","import BsModal from \"../Bootstrap/Modal.js\";\nimport CachedWidgetLoader from \"../../composables/Dashboard/CachedWidgetLoader.js\";\nimport HeightTransition from \"../Tranistion/HeightTransition.js\";\n\nexport default {\n\tname: 'Item',\n\tcomponents: {\n\t\tBsModal,\n\t\tHeightTransition\n\t},\n\tdata: () => ({\n\t\tcomponent: \"\",\n\t\targuments: null,\n\t\ttarget: false,\n\t\twidget: null,\n\t\ttmpConfig: {},\n\t\tisLoading: false,\n\t\thasConfig: false,\n\t\tsharedData: null,\n\t}),\n\temits: [\n\t\t\"change\",\n\t\t\"remove\",\n\t\t\"dragstart\",\n\t\t\"resizestart\",\n\t\t\"configOpened\",\n\t\t\"configClosed\",\n\t\t\"pinItem\",\n\t\t\"unPinItem\"\n\t],\n\tprops: [\n\t\t\"id\",\n\t\t\"widgetID\",\n\t\t\"config\",\n\t\t\"width\",\n\t\t\"height\",\n\t\t\"custom\",\n\t\t\"hidden\",\n\t\t\"editMode\",\n\t\t\"loading\",\n\t\t\"item_data\",\n\t\t\"place\",\n\t\t\"setup\",\n\t\t\"dragstate\",\n\t\t\"resizeOverlay\",\n\t\t\"additionalRow\"\n\t],\n\tcomputed: {\n\t\tmaxHeight(){\n\t\t\treturn this.setup?.height?.max;\n\t\t},\n\t\tmaxWidth(){\n\t\t\tif (Object.prototype.toString.call(this.setup?.width) == \"[object Number]\"){\n\t\t\t\treturn this.setup?.width;\n\t\t\t}\n\t\t\treturn this.setup?.width?.max;\n\t\t},\n\t\tminHeight() {\n\t\t\treturn this.setup?.height?.min;\n\t\t},\n\t\tminWidth() {\n\t\t\treturn this.setup?.width?.min;\n\t\t},\n\t\tisResizeable(){\n\t\t\treturn this.maxWidth >1 || this.maxHeight >1;\n\t\t},\n\t\tisPinned(){\n\t\t\treturn this.place?.pinned ? true : false;\n\t\t},\n\t\tready() {\n\t\t\treturn this.component && this.arguments !== null;\n\t\t},\n\t},\n\tmethods: {\n\t\tunpin(){\n\t\t\t// Unpinning is only possible in edit mode\n\t\t\tif(!this.editMode)\n\t\t\t\treturn;\n\t\t\tlet result = { item: this.item_data, x: this.item_data.x, y: this.item_data.y };\n\t\t\tthis.$emit('unPinItem', [result]);\n\t\t},\n\t\tpinItem(){\n\t\t\tlet result = { item: this.item_data, x: this.item_data.x, y: this.item_data.y};\n\t\t\tthis.$emit('pinItem',[result]);\n\t\t},\n\t\tgetWidgetC4Link(widget) {\n\t\t\treturn (FHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router + widget.setup.cis4link)\n\t\t},\n\t\thandleShowBsModal() {\n\t\t\tthis.$emit('configOpened')\n\t\t},\n\t\thandleHideBsModal() {\n\t\t\tthis.$emit('configClosed')\n\t\t},\n\t\tmouseDown(e) {\n\t\t\tthis.target = e.target;\n\t\t},\n\t\tstartDrag(e) {\n\t\t\tif (this.$refs.dragHandle.contains(this.target)) {\n\t\t\t\tthis.$emit(\"dragstart\", e);\n\t\t\t} else if (\n\t\t\t\tthis.isResizeable &&\n\t\t\t\tthis.$refs.resizeHandle.contains(this.target)\n\t\t\t) {\n\t\t\t\tif (this.isResizeable) this.$emit(\"resizestart\", e);\n\t\t\t\telse e.preventDefault();\n\t\t\t} else {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\topenConfig() {\n\t\t\tthis.tmpConfig = { ...this.arguments };\n\t\t\tthis.$refs.config.show();\n\t\t},\n\t\tsetConfig(hasConfig) {\n\t\t\tthis.hasConfig = hasConfig;\n\t\t},\n\t\tchangeConfig() {\n\t\t\tthis.isLoading = true;\n\t\t\tlet config = { ...this.tmpConfig };\n\t\t\tthis.sendChangeConfig(config);\n\t\t},\n\t\tchangeConfigManually() {\n\t\t\tlet config = { ...this.arguments };\n\t\t\tthis.sendChangeConfig(config);\n\t\t},\n\t\tsendChangeConfig(config) {\n\t\t\tfor (var k in config) {\n\t\t\t\tif (this.widget.arguments[k] == config[k]) {\n\t\t\t\tdelete config[k];\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$emit(\"change\", config);\n\t\t},\n\t},\n\twatch: {\n\t\tconfig() {\n\t\t\tthis.arguments = { ...this.widget?.arguments, ...this.config };\n\t\t\tthis.tmpConfig = { ...this.arguments };\n\t\t\tthis.$refs.config && this.$refs.config.hide();\n\t\t\tthis.isLoading = false;\n\t\t},\n\t},\n\tasync created() {\n\t\tthis.widget = await CachedWidgetLoader.loadWidget(this.id);\n\t\tlet component = (await import(FHC_JS_DATA_STORAGE_OBJECT.app_root + this.widget.setup.file + '?' + FHC_JS_DATA_STORAGE_OBJECT.fhcomplete_build_version)).default;\n\t\tthis.$options.components[\"widget\" + this.widget.widget_id] = component;\n\t\tthis.component = \"widget\" + this.widget.widget_id;\n\t\tthis.arguments = { ...this.widget.arguments, ...this.config };\n\t\tthis.tmpConfig = { ...this.arguments };\n\t},\n\ttemplate: /*html*/ `\n\t
\n\t\t
\n\t\t\t\n\t\t
\n\t
\n\t
\n\t
\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{{ widget.setup.name }}\n\t\t\t\n\t\t\t\n\t\t\t\n \t\t\n \t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t\t
\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t
\n\t
`,\n};\n","export default {\n\tdata(){\n\t\treturn {\n\n\t\t}\n\t},\n\tmethods:{\n\t\tonEnter(el,done){\n\t\t\tel.style.height = '0';\n\t\t\tel.style.height = el.scrollHeight + 'px';\n\t\t},\n\t\tonLeave(el,done){\n\t\t\tel.style.height = el.scrollHeight + 'px';\n\t\t\tel.style.height = '0';\n\t\t}\n\t},\n\ttemplate:\n\t/*html*/`\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t`,\n};","export default {\n\tdata(){\n\t\treturn {\n\n\t\t}\n\t},\n\tprops:{\n\t\twidget:{\n\t\t\ttype:Object,\n\t\t\trequired:true,\n\t\t}\n\t},\n\tmethods:{\n\t\tpath(src) {\n\t\t\tif (src[0] == '/')\n\t\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + src;\n\t\t\treturn src;\n\t\t}\n\t},\n\temits:[\"select\"],\n\ttemplate: /*html */`\n\t
\n\t\t\n\t\t
\n\t\t\t
{{ widget.setup.name || widget.widget_kurzbz }}
\n\t\t\t

{{ widget.beschreibung }}

\n\t\t
\n\t
`,\n}","import BsConfirm from \"../Bootstrap/Confirm.js\";\nimport DropGrid from '../Drop/Grid.js'\nimport DashboardItem from \"./Item.js\";\nimport CachedWidgetLoader from \"../../composables/Dashboard/CachedWidgetLoader.js\";\nimport WidgetIcon from \"./Widget/WidgetIcon.js\"\n\nexport default {\n\tname: 'Section',\n\tcomponents: {\n\t\tDropGrid,\n\t\tDashboardItem,\n\t\tWidgetIcon,\n\t},\n\tinject: {\n\t\twidgetsSetup:{\n\t\t\ttype: Array,\n\t\t\tdefault: [],\n\t\t},\n\t\tadminMode: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\teditMode: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\tprops: [\n\t\t\"name\",\n\t\t\"widgets\"\n\t],\n\temits: [\n\t\t\"widgetAdd\",\n\t\t\"widgetUpdate\",\n\t\t\"widgetRemove\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tconfigOpened: false,\n\t\t\tgridWidth: 1,\n\t\t\tgridHeight: null,\n\t\t\tdraggedItem:null,\n\t\t\tadditionalRow:false,\n\t\t}\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\teditModeIsActive: Vue.computed(() =>\n\t\t\t\tthis.editModeIsActive\n\t\t\t),\t\n\t\t\tsectionName: Vue.computed(() => this.name),\t\n\t\t}\n\t},\n\tcomputed: {\n\t\tcomputedWidgetsSetup(){\n\t\t\tif(!this.widgetsSetup) return {};\n\t\t\treturn this.widgetsSetup.reduce((acc, setup)=>{\n\t\t\t\tacc[setup.widget_id] = setup.setup;\n\t\t\t\treturn acc;\n\t\t\t},{})\n\t\t},\n\t\teditModeIsActive() {\n\t\t\treturn (this.editMode || this.adminMode) && !this.configOpened\t\n\t\t},\n\t\tgetSectionStyle() {\n\t\t\treturn 'margin-bottom: 8px;';\n\t\t},\n\t\titems() {\n\t\t\t// reuses the nearest placement of the widget from another viewport \n\t\t\t/* const computeNearestPlace = (item, gridWidth) =>{\n\t\t\t\tlet place;\n\t\t\t\tif (Object.keys(item.place).length > 0) {\n\t\t\t\t\tconst nearestIndex = Object.keys(item.place)\n\t\t\t\t\t\t\t\t\t\t\t .sort((a, b) => Math.abs(a - gridWidth) - Math.abs(b - gridWidth))\n\t\t\t\t\t\t\t\t\t\t\t .shift();\n\t\t\t\t\tplace = item.place[nearestIndex];\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tplace = { x: 0, y: 0, w: 1, h: 1 };\n\t\t\t\t}\n\t\t\t\treturn place;\n\t\t\t} */\n\t\t\t\n\t\t\tlet placedItems = this.widgets.map(item => {\n\t\t\t\tif(!item?.widgetid && item?.id){\n\t\t\t\t\titem.widgetid = item.id;\n\t\t\t\t}\n\t\t\t\treturn { ...item, reorder: false, ...(item.place[this.gridWidth] || { reorder: true, ...{ x: 0, y: 0, w: 1, h: 1 } })};\n\t\t\t});\n\t\t\treturn placedItems;\n\t\t\t\n\t\t},\n\t\t\n\t},\n\tmethods: {\n\t\tsectionNameTranslation(){\n\t\t\tswitch(this.name){\n\t\t\t\tcase \"general\": \n\t\t\t\t\treturn this.$p.t('dashboard',this.name); \n\t\t\t\t\tbreak;\n\t\t\t\tcase \"custom\":\n\t\t\t\t\treturn this.$p.t('dashboard',this.name);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn this.name;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tshowSectionInformation(){\n\t\t\tif (this.name == \"general\"){\n\t\t\t\treturn this.$p.t('dashboard', 'dashboardGeneralSectionDescription'); \n\t\t\t}\n\t\t\telse if(this.name == \"custom\"){\n\t\t\t\treturn this.$p.t('dashboard', 'dashboardCustomSectionDescription');\n\t\t\t}\n\t\t\telse{\n\t\t\t\treturn this.$p.t('dashboard', 'dashboardSectionDescription', [this.name]);\n\t\t\t}\n\t\t},\n\t\thandleConfigOpened() {\n\t\t\tthis.configOpened = true\n\t\t},\n\t\thandleConfigClosed() {\n\t\t\tthis.configOpened = false\n\t\t},\n\t\tcheckResizeLimit(item, w, h) {\n\t\t\t// NOTE(chris): widgets needs to be loaded for this to work\n\t\t\tlet widget = CachedWidgetLoader.getWidget(item.widget);\n\t\t\tif (widget) {\n\t\t\t\tlet minmaxW = widget.setup.width;\n\t\t\t\tif (minmaxW.max)\n\t\t\t\t\tminmaxW.min = minmaxW.min || 1;\n\t\t\t\telse\n\t\t\t\t\tminmaxW = {min:minmaxW,max:minmaxW};\n\t\t\t\tif (w < minmaxW.min)\n\t\t\t\t\tw = minmaxW.min; \n\t\t\t\tif (w > minmaxW.max)\n\t\t\t\t\tw = minmaxW.max;\n\n\t\t\t\tlet minmaxH = widget.setup.height;\n\t\t\t\tif (minmaxH.max)\n\t\t\t\t\tminmaxH.min = minmaxH.min || 1;\n\t\t\t\telse\n\t\t\t\t\tminmaxH = {min:minmaxH,max:minmaxH};\n\t\t\t\tif (h < minmaxH.min)\n\t\t\t\t\th = minmaxH.min;\n\t\t\t\tif (h > minmaxH.max)\n\t\t\t\t\th = minmaxH.max;\n\t\t\t}\n\t\t\treturn [w, h];\n\t\t},\n\t\tremoveWidget(item, revert) {\n\t\t\tif (item.custom) {\n\t\t\t\tBsConfirm.popup('Are you sure you want to delete this widget?').then(() => this.$emit('widgetRemove', this.name, item.id));\n\t\t\t} else {\n\t\t\t\tlet update = {};\n\t\t\t\tupdate[item.id] = { hidden: !revert };\n\t\t\t\tthis.updatePreset(update);\n\t\t\t}\n\t\t},\n\t\tsaveConfig(config, item) {\n\t\t\tlet payload = {};\n\t\t\tpayload[item.id] = { config };\n\t\t\tthis.updatePreset(payload);\n\t\t},\n\t\tupdatePositions(updated, pinned=false) {\n\t\t\tlet result = {};\n\t\t\tupdated.forEach(update => {\n\t\t\t\t\n\t\t\t\tlet item = {...update.item};\n\t\t\t\tif (!item.placeholder) {\n\t\t\t\tif (!item.place[this.gridWidth])\n\t\t\t\t\titem.place[this.gridWidth] = {x: 0, y: 0, w: 1, h: 1};\n\t\t\t\tdelete item.x;\n\t\t\t\tdelete item.y;\n\t\t\t\tdelete item.w;\n\t\t\t\tdelete item.h;\n\t\t\t\tdelete item.place[this.gridWidth].pinned;\n\t\t\t\tif (update.x !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].x = update.x;\n\t\t\t\tif (update.y !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].y = update.y;\n\t\t\t\tif (update.w !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].w = update.w;\n\t\t\t\tif (update.h !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].h = update.h;\n\t\t\t\tif (pinned){\n\t\t\t\t\titem.place[this.gridWidth].pinned = true;\n\t\t\t\t}\n\n\t\t\t\tresult[item.id] = item;\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.updatePreset(result);\n\t\t},\n\t\tupdatePreset(update) {\n\t\t\tlet payload = {};\n\t\t\tpayload[this.name] = update;\n\t\t\tthis.$emit('widgetUpdate', this.name, payload);\n\t\t}\n\t},\n\tmounted() {\n\t\tlet self = this;\n\t\tlet cont = self.$refs.container;\n\t\tself.gridWidth = parseInt(window.getComputedStyle(cont).getPropertyValue('--fhc-dashboard-grid-size'));\n\t\t\n\t\twindow.addEventListener('resize', () => {\n\t\t\tself.gridWidth = parseInt(window.getComputedStyle(cont).getPropertyValue('--fhc-dashboard-grid-size'));\n\t\t});\n\t},\n\ttemplate: `\n\t
\n\t\t

\n\t\t\t\n\t\t\t{{sectionNameTranslation()}}:\n\t\t

\n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
`\n}\n\n/*\nOLD VERSION - ON HOVER\n\n*/","import BsModal from \"../../Bootstrap/Modal.js\";\nimport WidgetIcon from \"./WidgetIcon.js\";\n\nexport default {\n\tcomponents: {\n\t\tBsModal,\n\t\tWidgetIcon,\n\t},\n\tprops: [\n\t\t\"widgets\"\n\t],\n\tdata: () => ({\n\t\tcallbacks: {}\n\t}),\n\tmethods: {\n\t\tgetWidget() {\n\t\t\treturn new Promise((resolve,reject) => {\n\t\t\t\tthis.callbacks = {resolve,reject};\n\t\t\t\tthis.$refs.modal.show();\n\t\t\t});\n\t\t},\n\t\tclose() {\n\t\t\tif (this.callbacks.reject)\n\t\t\t\tthis.callbacks.reject();\n\t\t\tthis.callbacks = {};\n\t\t},\n\t\tpick(widget_id) {\n\t\t\tif (this.callbacks.resolve)\n\t\t\t\tthis.callbacks.resolve(widget_id);\n\t\t\tthis.callbacks = {};\n\t\t\tthis.$refs.modal.hide();\n\t\t},\n\t\t\n\t},\n\ttemplate: `
\n\t\t 0}\" @hiddenBsModal=\"close\">\n\t\t\t\n\t\t\t\n\t\t\n\t
`\n}\n","export default {\n\t/**\n\t* Performs a deep merge of objects and returns new object. Does not modify\n\t* objects (immutable) and merges arrays via concatenation.\n\t*\n\t* @param {...object} objects - Objects to merge\n\t* @returns {object} New object with merged key/values\n\t*/\n\tmergeDeep(...objects) {\n\t\tconst isObject = obj => obj && typeof obj === 'object';\n\t\t\n\t\treturn objects.reduce((prev, obj) => {\n\t\t\tObject.keys(obj).forEach(key => {\n\t\t\t\tconst pVal = prev[key];\n\t\t\t\tconst oVal = obj[key];\n\t\t\t\t\n\t\t\t\tif (Array.isArray(pVal) && Array.isArray(oVal)) {\n\t\t\t\t\tprev[key] = pVal.concat(...oVal);\n\t\t\t\t}\n\t\t\t\telse if (isObject(pVal) && isObject(oVal)) {\n\t\t\t\t\tprev[key] = this.mergeDeep(pVal, oVal);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tprev[key] = oVal;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\treturn prev;\n\t\t}, {});\n\t}\n}","import BsPrompt from \"../Bootstrap/Prompt.js\";\nimport DashboardAdminEdit from \"./Admin/Edit.js\";\nimport DashboardAdminWidgets from \"./Admin/Widgets.js\";\nimport DashboardAdminPresets from \"./Admin/Presets.js\";\n\nexport default {\n\tcomponents: {\n\t\tDashboardAdminEdit,\n\t\tDashboardAdminWidgets,\n\t\tDashboardAdminPresets\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tadminMode: true\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tdashboards: [],\n\t\t\tcurrent: -1,\n\t\t\twidgets: []\n\t\t};\n\t},\n\tcomputed: {\n\t\tapiurl() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/dashboard';\n\t\t},\n\t\tdashboard() {\n\t\t\treturn this.dashboards.find(el => el.dashboard_id == this.current);\n\t\t}\n\t},\n\tmethods: {\n\t\tdashboardAdd() {\n\t\t\tlet _name = '';\n\t\t\tBsPrompt.popup('New Dashboard name').then(\n\t\t\t\tname => {\n\t\t\t\t\t_name = name;\n\t\t\t\t\treturn axios.post(this.apiurl + '/Dashboard/create', {\n\t\t\t\t\t\tdashboard_kurzbz: name\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t).then(res => {\n\t\t\t\tlet newDashboard = {\n\t\t\t\t\tdashboard_id: res.data.retval,\n\t\t\t\t\tdashboard_kurzbz: _name,\n\t\t\t\t\tbeschreibung: ''\n\t\t\t\t};\n\t\t\t\tthis.dashboards.push(newDashboard);\n\t\t\t\tthis.current = newDashboard.dashboard_id;\n\t\t\t}).catch(err => err !== undefined ? console.error('ERROR:', err) : 0);\n\t\t},\n\t\tdashboardUpdate(dashboard) {\n\t\t\t// TODO(chris): Loading or message\n\t\t\taxios.post(this.apiurl + '/Dashboard/update', dashboard).then(() => {\n\t\t\t\tlet old = this.dashboards.find(el => el.dashboard_id == dashboard.dashboard_id);\n\t\t\t\told.dashboard_kurzbz = dashboard.dashboard_kurzbz;\n\t\t\t\told.beschreibung = dashboard.beschreibung;\n\t\t\t}).catch(err => console.error('ERROR:', err));\n\t\t},\n\t\tdashboardDelete(dashboard_id) {\n\t\t\taxios.post(this.apiurl + '/Dashboard/delete', {dashboard_id}).then(() => {\n\t\t\t\tthis.current = -1;\n\t\t\t\tthis.dashboards = this.dashboards.filter(el => el.dashboard_id != dashboard_id);\n\t\t\t}).catch(err => console.error('ERROR:', err));\n\t\t},\n\t\tassignWidgets(widgets) {\n\t\t\tthis.widgets = widgets;\n\t\t\t/*while (this.widgets.length)\n\t\t\t\tthis.widgets.pop();\n\t\t\tfor (var i in widgets)\n\t\t\t\tthis.widgets.push(widgets[i]);*/\n\t\t}\n\t},\n\tcreated() {\n\t\taxios.get(this.apiurl + '/Dashboard').then(res => {\n\t\t\tthis.dashboards = res.data.retval;\n\t\t}).catch(err => console.error('ERROR:', err));\n\t},\n\ttemplate: `
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t
    \n\t\t\t\t
  • \n\t\t\t\t\t\n\t\t\t\t
  • \n\t\t\t\t
  • \n\t\t\t\t\t\n\t\t\t\t
  • \n\t\t\t\t
  • \n\t\t\t\t\t\n\t\t\t\t
  • \n\t\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
`\n}\n","import DashboardSection from \"../Section.js\";\nimport DashboardWidgetPicker from \"../Widget/Picker.js\";\nimport ObjectUtils from \"../../../helpers/ObjectUtils.js\";\n\nexport default {\n\tcomponents: {\n\t\tDashboardSection,\n\t\tDashboardWidgetPicker\n\t},\n\tprops: {\n\t\tdashboard: String,\n\t\twidgets: Array\n\t},\n\tdata: () => ({\n\t\tfunktionen: {},\n\t\tsections: [],\n\t\ttmpLoading: ''\n\t}),\n\tcomputed: {\n\t\tapiurl() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/dashboard';\n\t\t},\n\t\tpickerWidgets() {\n\t\t\treturn this.widgets.filter(widget => widget.allowed);\n\t\t}\n\t},\n\tmethods: {\n\t\twidgetAdd(section_name, widget) {\n\t\t\tthis.$refs.widgetpicker.getWidget().then(widget_id => {\n\t\t\t\twidget.widget = widget_id;\n\t\t\t\tdelete widget.custom;\n\t\t\t\twidget.preset = 1;\n\t\t\t\tlet loading = {...widget};\n\t\t\t\tloading.loading = true;\n\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\tif (section.name == section_name)\n\t\t\t\t\t\tsection.widgets.push(loading);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\taxios.post(this.apiurl + '/Config/addWidgetsToPreset', {\n\t\t\t\t\tdb: this.dashboard,\n\t\t\t\t\tfunktion_kurzbz: section_name,\n\t\t\t\t\twidgets: [widget]\n\t\t\t\t}).then(result => {\n\t\t\t\t\tlet newId = Object.keys(result.data.retval.data[section_name].widgets).pop();\n\t\t\t\t\twidget.id = newId;\n\t\t\t\t\twidget.custom = 1;\n\t\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\t\tif (section.name == section_name) {\n\t\t\t\t\t\t\tsection.widgets.splice(section.widgets.indexOf(loading),1);\n\t\t\t\t\t\t\tsection.widgets.push(widget);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}).catch(error => {\n\t\t\t\t\tconsole.error('ERROR: ', error);\n\t\t\t\t\talert('ERROR: ' + error.response.data.retval);\n\t\t\t\t});\n\t\t\t}).catch(() => {});\n\t\t},\n\t\twidgetUpdate(section_name, payload) {\n\t\t\tpayload = payload[section_name];\n\t\t\tfor (var k in payload) {\n\t\t\t\tfor (var i in this.sections) {\n\t\t\t\t\tif (this.sections[i].name == section_name) {\n\t\t\t\t\t\tfor (var wid in this.sections[i].widgets) {\n\t\t\t\t\t\t\tif (this.sections[i].widgets[wid].id == k) {\n\t\t\t\t\t\t\t\tpayload[k] = ObjectUtils.mergeDeep(this.sections[i].widgets[wid], payload[k]);\n\t\t\t\t\t\t\t\t// NOTE(chris): remove internal props\n\t\t\t\t\t\t\t\tfor (var prop in {_x:1,_y:1,_w:1,_h:1,index:1,id:1})\n\t\t\t\t\t\t\t\t\tif (payload[k][prop])\n\t\t\t\t\t\t\t\t\t\tdelete payload[k][prop];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpayload[k].widgetid = k;\n\t\t\t\tdelete payload[k].custom;\n\t\t\t}\n\t\t\taxios.post(this.apiurl + '/Config/addWidgetsToPreset', {\n\t\t\t\tdb: this.dashboard,\n\t\t\t\tfunktion_kurzbz: section_name,\n\t\t\t\twidgets: payload\n\t\t\t}).then(() => {\n\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\tif (section.name == section_name) {\n\t\t\t\t\t\tsection.widgets.forEach((widget, i) => {\n\t\t\t\t\t\t\tif (payload[widget.id]) {\n\t\t\t\t\t\t\t\tpayload[widget.id].id = widget.id;\n\t\t\t\t\t\t\t\tpayload[widget.id].index = widget.index;\n\t\t\t\t\t\t\t\tsection.widgets[i] = payload[widget.id];\n\t\t\t\t\t\t\t\tsection.widgets[i].custom = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}).catch(error => {\n\t\t\t\t// TODO(chris): revert placement on failure\n\t\t\t\tconsole.error('ERROR: ', error);\n\t\t\t\talert('ERROR: ' + error.response.data.retval);\n\t\t\t});\n\t\t},\n\t\twidgetRemove(section_name, id) {\n\t\t\taxios.post(this.apiurl + '/Config/removeWidgetFromPreset', {\n\t\t\t\tdb: this.dashboard,\n\t\t\t\tfunktion_kurzbz: section_name,\n\t\t\t\twidgetid: id\n\t\t\t}).then(() => {\n\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\tif (section.name == section_name)\n\t\t\t\t\t\tsection.widgets = section.widgets.filter(widget => widget.id != id);\n\t\t\t\t});\n\t\t\t}).catch(error => {\n\t\t\t\tconsole.error('ERROR: ', error);\n\t\t\t\talert('ERROR: ' + error.response.data.retval);\n\t\t\t});\n\t\t},\n\t\tloadSections(evt) {\n\t\t\tlet funktionen = Array.from(evt.target.querySelectorAll(\"option:checked\"),e=>e.value);\n\t\t\tthis.sections = [];\n\t\t\tthis.tmpLoading = funktionen.join('###');\n\t\t\taxios.get(this.apiurl + '/Config/presetBatch', {params: {\n\t\t\t\tdb: this.dashboard,\n\t\t\t\tfunktionen\n\t\t\t}}).then(res => {\n\t\t\t\tif (this.tmpLoading !== funktionen.join('###'))\n\t\t\t\t\treturn; // NOTE(chris): prevent race condition\n\t\t\t\tfor (var section in res.data.retval) {\n\t\t\t\t\tlet widgets = [];\n\t\t\t\t\tfor (var wid in res.data.retval[section]) {\n\t\t\t\t\t\tres.data.retval[section][wid].id = wid;\n\t\t\t\t\t\tres.data.retval[section][wid].custom = 1;\n\t\t\t\t\t\twidgets.push(res.data.retval[section][wid]);\n\t\t\t\t\t}\n\t\t\t\t\tthis.sections.push({\n\t\t\t\t\t\tname: section,\n\t\t\t\t\t\twidgets\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}).catch(err => console.error('ERROR:', err));\n\t\t}\n\t},\n\tcreated() {\n\t\taxios.get(this.apiurl + '/Config/funktionen').then(res => {\n\t\t\tthis.funktionen = {general: 'GENERAL'};\n\t\t\tres.data.retval.forEach(funktion => {\n\t\t\t\tthis.funktionen[funktion.funktion_kurzbz] = funktion.beschreibung;\n\t\t\t});\n\t\t}).catch(err => console.error('ERROR:', err));\n\t},\n\twatch: {\n\t\tdashboard() {\n\t\t\t// TODO(chris): this should be done without a watcher\n\t\t\tthis.loadSections({target:this.$refs.funktionenList});\n\t\t}\n\t},\n\ttemplate: `
\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t\t\n\t
`\n}\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsearch(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/search';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchAdvanced(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/searchAdvanced';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchdummy(searchsettings) {\n\t\tconst url = 'public/js/apps/api/dummyapi.php/Search';\n\t\treturn this.$fhcApi.post(url, searchsettings);\n\t}\n};\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/loadModule/' + category);\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst payload = {categories, language}\n\t\treturn this.$fhcApi.post('/api/frontend/v1/phrasen/setLanguage', payload);\n\t},\n\tgetLanguage() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getLanguage', {});\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getAllLanguages', {});\n\t}\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetHeader(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/header',\n\t\t\t{ navigation_page }\n\t\t);\n\t},\n\tgetMenu: function(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/menu',\n\t\t\t{ navigation_page }\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/saveCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t);\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/applyFilterFields',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t);\n\t},\n\taddFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/addFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tgetFilter(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tabmeldung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/abmeldung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(stdsem, prestudent_id, grund) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/abmeldung/createAntrag', {\n\t\t\t\tstudiensemester: stdsem,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\tif (!Array.isArray(antrag_id))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t\t{ antrag_id }\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag_id.map(antrag => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t{ antrag_id: antrag.studierendenantrag_id },\n\t\t\t\t{ errorHeader: '#' + antrag.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t},\n\tunterbrechung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/unterbrechung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(studiensemester, prestudent_id, grund, datum_wiedereinstieg, attachment) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/createAntrag', {\n\t\t\t\tstudiensemester,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund,\n\t\t\t\tdatum_wiedereinstieg,\n\t\t\t\tattachment\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/cancelAntrag', {\n\t\t\t\tantrag_id\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t}\n\t},\n\twiederholung: {\n\t\tgetDetails(prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/' + prestudent_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tgetLvs(antrag_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getLvs/' + antrag_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tcreate(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/createAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/cancelAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tsaveLvs(forbiddenLvs, mandatoryLvs) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/saveLvs', {\n\t\t\t\tforbiddenLvs,\n\t\t\t\tmandatoryLvs\n\t\t\t});\n\t\t}\n\t},\n\tleitung: {\n\t\tgetStgs() {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getActiveStgs');\n\t\t},\n\t\tgetAntraege(url, config, params) {\n\t\t\treturn this.$fhcApi\n\t\t\t\t.get('/api/frontend/v1/studstatus/leitung/getAntraege/' + url)\n\t\t\t\t.then(res => res.data); // Return data for tabulator\n\t\t},\n\t\tgetHistory(antrag_id) {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getHistory/' + antrag_id)\n\t\t},\n\t\tgetPrestudents(query, signal) {\n\t\t\treturn this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/getPrestudents',\n\t\t\t\t{ query },\n\t\t\t\t{\n signal: signal,\n timeout: 30000\n }\n\t\t\t);\n\t\t},\n\t\tapprove(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treopen(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tunpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tobject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tapproveObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tdenyObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t}\n};","export default {\n\n getView: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getView/${uid}`,{}\n );\n },\n\n fotoSperre: function (value) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/fotoSperre/${value}`,\n {}\n );\n \n },\n\n isStudent: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isStudent`,\n {\n uid:uid,\n }\n );\n },\n\n isMitarbeiter: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isMitarbeiter/${uid}`,\n {}\n );\n },\n\n getZustellAdresse: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellAdresse`,{}\n );\n },\n\n getZustellKontakt: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellKontakt`,{}\n );\n },\n\n getGemeinden: function(nation,zip){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getGemeinden/${nation}/${zip}`,\n {}\n );\n \n },\n getAllNationen:function(){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Profil/getAllNationen\",{}\n );\n },\n}","export default {\n //! API calls for profil update requests\n \n getStatus: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getStatus`,{});\n },\n \n getTopic: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getTopic`,{});\n },\n \n acceptProfilRequest: function ({profil_update_id, uid, status_message, topic, requested_change}) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/acceptProfilRequest\",{profil_update_id, uid, status_message, topic, requested_change});\n },\n \n denyProfilRequest: function ({profil_update_id, uid, topic, status_message}) {\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/denyProfilRequest\",{profil_update_id,uid,topic,status_message});\n },\n \n insertFile: function (dms, replace = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n dms);\n\n },\n \n getProfilRequestFiles: function (requestID) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`,{});\n },\n \n selectProfilRequest: function (uid = null, id = null) {\n\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/selectProfilRequest`,\n {...(uid?{uid}:{}),\n ...(id?{id}:{})\n });\n },\n \n insertProfilRequest: function (topic, payload, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/insertProfilRequest\",\n {\n topic,\n payload,\n ...(fileID ? { fileID } : {}),\n });\n },\n \n updateProfilRequest: function (topic, payload, ID, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/updateProfilRequest`,\n {\n topic,\n payload,\n ID,\n ...(fileID ? { fileID: fileID } : {}),\n });\n },\n \n deleteProfilRequest: function (requestID) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/deleteProfilRequest`,\n {\n requestID,\n });\n },\n };\n ","\nexport default {\n\tgetRoomInfo(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getRoomplan',\n\t\t\t{ ort_kurzbz, start_date, end_date}\n\t\t);\n\t},\n\tgetStunden() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/Stunden',\n\t\t\t{}\n\t\t);\n\t},\n\tgetOrtReservierungen(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/LvPlan/getReservierungen/${ort_kurzbz}`,\n\t\t\t{ start_date, end_date}\n\t\t);\n\t},\n\tgetLvPlanReservierungen(start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getReservierungen',\n\t\t\t{ start_date, end_date }\n\t\t);\n\t},\n\tgetLehreinheitStudiensemester(lehreinheit_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${lehreinheit_id}`,\n\t\t\t{}\n\t\t);\n\t},\n\tstudiensemesterDateInterval(date) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${date}`,\n\t\t\t{}\n\t\t);\n\t},\n\tLvPlanEvents(start_date, end_date, lv_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/LvPlanEvents',\n\t\t\t{ start_date, end_date, lv_id }\n\t\t);\n\t},\n\t\n\t\n};","import verband from './stv/verband.js';\nimport students from './stv/students.js';\nimport filter from './stv/filter.js';\nimport konto from './stv/konto.js';\nimport group from './stv/group.js';\nimport kontakt from './stv/kontakt.js';\nimport prestudent from './stv/prestudent.js';\nimport status from './stv/status.js';\nimport details from './stv/details.js';\nimport exam from './stv/exam.js';\nimport abschlusspruefung from './stv/abschlusspruefung.js';\nimport grades from './stv/grades.js';\nimport mobility from './stv/mobility.js';\nimport archiv from './stv/archiv.js';\nimport documents from './stv/documents.js';\nimport exemptions from './stv/exemptions.js';\nimport jointstudies from \"./stv/jointstudies.js\";\nimport courselist from './stv/courselist.js';\n\nexport default {\n\tverband,\n\tstudents,\n\tfilter,\n\tkonto,\n\tgroup,\n\tkontakt,\n\tprestudent,\n\tstatus,\n\tdetails,\n\texam,\n\tabschlusspruefung,\n\tgrades,\n\tmobility,\n\tarchiv,\n\tdocuments,\n\texemptions,\n\tjointstudies,\n\tcourselist,\n\tconfigStudent() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/student');\n\t},\n\tconfigStudents() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/students');\n\t}\n};\n","export default {\n\tget() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/verband');\n\t},\n\tfavorites: {\n\t\tget() {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/stv/favorites');\n\t\t},\n\t\tset(favorites) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/stv/favorites/set', {\n\t\t\t\tfavorites\n\t\t\t});\n\t\t}\n\t}\n}","export default {\n\tuid(uid, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/uid/'\n\t\t\t+ encodeURIComponent(uid);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tprestudent(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/prestudent/'\n\t\t\t+ encodeURIComponent(prestudent_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tperson(person_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/person/'\n\t\t\t+ encodeURIComponent(person_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tverband(relative_path) {\n\t\treturn this.$fhcApi.getUri('api/frontend/v1/stv/students/' + relative_path);\n\t}\n}","export default {\n\tgetStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/filter/getStg');\n\t},\n\tsetStg(studiengang_kz) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/filter/setStg', {\n\t\t\tstudiengang_kz\n\t\t});\n\t}\n};","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/konto/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id),\n\t\t\t\tonly_open: self.filter,\n\t\t\t\tstudiengang_kz: self.studiengang_kz_intern ? self.stg_kz : ''\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tcheckDoubles(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/checkDoubles', data, {\n\t\t\tconfirmErrorHandler: error => true\n\t\t});\n\t},\n\tinsert(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/insert', data);\n\t},\n\tcounter(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/counter', data);\n\t},\n\tedit(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/update', data);\n\t},\n\tdelete(buchungsnr) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/delete', {buchungsnr});\n\t},\n\tgetBuchungstypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/konto/getBuchungstypen');\n\t}\n};","export default {\n\tgetGruppen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/Gruppen/getGruppen/' + params.id);\n\t},\n\tdeleteGroup(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/Gruppen/deleteGruppe/', params);\n\t}\n}","export default {\n\t//------------- address.js-----------\n\tgetAdressen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressen/' + params.id);\n\t},\n\taddNewAddress(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewAddress/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadAddress(address_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadAddress/', {address_id});\n\t},\n\tupdateAddress(form, address_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateAddress/' + address_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteAddress(address_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteAddress/', {address_id});\n\t},\n\tgetPlaces(plz) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getPlaces/' + plz);\n\t},\n\tgetFirmen(searchString) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getFirmen/' + searchString);\n\t},\n\tgetNations() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getNations/');\n\t},\n\tgetAdressentypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressentypen/');\n\t},\n\n\t//------------- bankverbindung.js-----------\n\tgetBankverbindung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getBankverbindung/' + params.id);\n\t},\n\taddNewBankverbindung(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewBankverbindung/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadBankverbindung(bankverbindung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadBankverbindung/', {bankverbindung_id});\n\t},\n\tupdateBankverbindung(form, bankverbindung_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateBankverbindung/' + bankverbindung_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteBankverbindung(bankverbindung_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteBankverbindung/', {bankverbindung_id});\n\t},\n\n\t//------------- contact.js-----------\n\tgetKontakte (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakte/' + params.id);\n\t},\n\taddNewContact(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewContact/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadContact(kontakt_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadContact/', {kontakt_id});\n\t},\n\tupdateContact(form, kontakt_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateContact/' + kontakt_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteContact(kontakt_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteContact/', {kontakt_id});\n\t},\n\tgetStandorteByFirma(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getStandorteByFirma/' + searchString);\n\t},\n\tgetKontakttypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakttypen/');\n\t}\n};","export default {\n\n//------------- Prestudent.js------------------------------------------------------\n\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\treturn \tthis.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/prestudent/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t);\n\t},\n\tupdatePrestudent(form, prestudent_id, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/prestudent/updatePrestudent/' + prestudent_id,\n\t\t\tdata\n\t\t);\n\t},\n\tgetBezeichnungZGV() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungZGV/');\n\t},\n\tgetBezeichnungMZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungMZgv/');\n\t},\n\tgetBezeichnungDZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungDZgv/');\n\t},\n\tgetStgs() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStgs/');\n\t},\n\tgetAusbildung() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAusbildung/');\n\t},\n\tgetAufmerksamdurch() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAufmerksamdurch/');\n\t},\n\tgetBerufstaetigkeit() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBerufstaetigkeit/');\n\t},\n\tgetTypenStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getTypenStg/');\n\t},\n\tgetBisstandort() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBisstandort/');\n\t},\n\n//------------- MultiStatus.js------------------------------------------------------\n\tgetHistoryPrestudent (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getHistoryPrestudent/' + params.id);\n\t},\n\tgetMaxSem(studiengang_kzs) {\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/status/getMaxSemester/', {studiengang_kzs});\n\t},\n\tadvanceStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/advanceStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tconfirmStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/confirmStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tisLastStatus(id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/isLastStatus/' + id);\n\t},\n\tdeleteStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/deleteStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tgetLastBismeldestichtag() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getLastBismeldestichtag/');\n\t},\n\n//------------- History.js------------------------------------------------------\n\tgetHistoryPrestudents (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getHistoryPrestudents/' + params.id);\n\t},\n\n}","export default {\n\n//------------- Modal.js------------------------------------------------------\n\n\tinsertStatus(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/status/insertStatus/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/status/loadStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tupdateStatus(form, {prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}, data) {\n\t\treturn this.$fhcApi.post(\n\t\t\tform,\n\t\t\t'api/frontend/v1/stv/status/updateStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester,\n\t\t\tdata\n\t\t);\n\t},\n\tgetStudienplaene(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudienplaene/' + prestudent_id);\n\t},\n\tgetStudiengang(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudiengang/' + prestudent_id);\n\t},\n\tgetStatusgruende() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusgruende/');\n\t},\n\tgetStati() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStati/');\n\t},\n\n//------------- Dropdown.js------------------------------------------------------\n\n\taddStudent(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/addStudent/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tchangeStatus(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/changeStatus/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tgetStatusarray() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusarray/');\n\t}\n}","export default {\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/student/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(url);\n\t},\n\tsave(form, prestudent_id, studiensemester_kurzbz, data) {\n\t\tlet url = 'api/frontend/v1/stv/student/save/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(form, url, data);\n\t},\n}\n","export default {\n\tgetPruefungen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getPruefungen/' + params.id);\n\t},\n\tloadPruefung(pruefung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/loadPruefung/' + pruefung_id);\n\t},\n\tgetTypenPruefungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getTypenPruefungen');\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/getAllLehreinheiten/', data)\n\t},\n\tgetLvsByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsByStudent/' + uid)\n\t},\n\tgetLvsandLesByStudent(uid, semester){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsandLesByStudent/' + uid + '/' + semester);\n\t},\n\tgetLvsAndMas(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsAndMas/' + uid)\n\t},\n\tgetMitarbeiterLv(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getMitarbeiterLv/' + id)\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getNoten');\n\t},\n\tcheckZeugnisnoteLv(data){\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/', data)\n\t},\n\taddPruefung(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/insertPruefung/', data);\n\t},\n\tupdatePruefung(form, id, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/updatePruefung/' + id, data);\n\t},\n\tdeletePruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/deletePruefung/' + id)\n\t}\n}","export default {\n\n\tgetAbschlusspruefung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/' + params.id);\n\t},\n\taddNewAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/', data\n\t\t);\n\t},\n\tloadAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/', {id});\n\t},\n\tupdateAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/', data\n\t\t);\n\t},\n\tdeleteAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/', {id});\n\t},\n\tgetTypenAbschlusspruefung(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/');\n\t},\n\tgetTypenAntritte(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/');\n\t},\n\tgetBeurteilungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/');\n\t},\n\tgetAkadGrade(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getAkadGrade/', {studiengang_kz});\n\t},\n\tgetTypStudiengang(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/', {studiengang_kz});\n\t},\n\tgetMitarbeiter(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/' + searchString);\n\t},\n\tgetPruefer(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getPruefer/' + searchString);\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getNoten/');\n\t},\n\tcheckForExistingExams(uids) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/', {uids}\n\t\t);\n\t}\n}","export default {\n\tlist() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/grades/list');\n\t},\n\tgetCertificate(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getCertificate/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetTeacherProposal(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getTeacherProposal/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetRepeaterGrades(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getRepeaterGrades/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tupdateCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, note, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/updateCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz,\n\t\t\t\tnote\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tdeleteCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/deleteCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyTeacherProposalToCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyTeacherProposalToCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id, lv_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate',\n\t\t\t{\n\t\t\t\tstudierendenantrag_lehrveranstaltung_id\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lv_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tgetGradeFromPoints(points, lehrveranstaltung_id, studiensemester_kurzbz, manualErrorHandling) {\n\t\tconst config = manualErrorHandling ? {errorHandling: false} : {};\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/grades/getGradeFromPoints',\n\t\t\t{\n\t\t\t\t\"points\": points,\n\t\t\t\t\"lehrveranstaltung_id\": lehrveranstaltung_id,\n\t\t\t\t\"studiensemester_kurzbz\": studiensemester_kurzbz\n\t\t\t},\n\t\t\tconfig\n\t\t\t);\n\t}\n}","export default {\n\tgetMobilitaeten (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getMobilitaeten/' + params.id);\n\t},\n\tgetProgramsMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getProgramsMobility/');\n\t},\n\taddNewMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/insertMobility/', data);\n\t},\n\tloadMobility(bisio_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/loadMobility/' + bisio_id);\n\t},\n\tupdateMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/updateMobility/', data);\n\t},\n\tdeleteMobility(bisio_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobility/' + bisio_id);\n\t},\n\tgetLVList(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLVList/' + studiengang_kz);\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/getAllLehreinheiten/', data)\n\t},\n\tgetLvsandLesByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLvsandLesByStudent/' + uid);\n\t},\n\tgetPurposes(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getPurposes/' + params.id);\n\t},\n\tgetSupports(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getSupports/' + params.id);\n\t},\n\tgetListPurposes() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListPurposes/');\n\t},\n\tgetListSupports() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListSupports/');\n\t},\n\tdeleteMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilityPurpose/' + params.bisio_id, params);\n\t},\n\taddMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilityPurpose/' + params.bisio_id, params);\n\t},\n\tdeleteMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilitySupport/' + params.bisio_id, params);\n\t},\n\taddMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilitySupport/' + params.bisio_id, params);\n\t},\n\n}","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/archiv/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id)\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tgetArchivVorlagen() {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/getArchivVorlagen');\n\t},\n\tarchive(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archive',\n\t\t\tdata\n\t\t);\n\t},\n\tarchiveSigned(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archiveSigned',\n\t\t\tdata\n\t\t);\n\t},\n\tupdate(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/update', data);\n\t},\n\tdelete({akte_id, studiengang_kz}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/delete', {akte_id, studiengang_kz});\n\t}\n};\n","export default {\n\tgetDocumentsUnaccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tgetDocumentsAccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsAccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tdeleteZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteZuordnung/' + params.prestudent_id + '/' + params.dokument_kurzbz);\n\t},\n\tcreateZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/createZuordnung/'\n\t\t\t+ params.prestudent_id + '/'\n\t\t\t+ params.dokument_kurzbz);\n\t},\n\tloadAkte(akte_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/loadAkte/' + akte_id);\n\t},\n\tgetDoktypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDoktypen/');\n\t},\n\tupdateFile(akte_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/updateAkte/' + akte_id,\n\t\t\tdata);\n\t},\n\tdeleteFile(akte_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteAkte/' + akte_id);\n\t},\n\tuploadFile(prestudent_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/uploadDokument/' + prestudent_id,\n\t\t\tdata);\n\t},\n}","export default {\n\tgetAnrechnungen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getAnrechnungen/' + params.id);\n\t},\n\tgetLehrveranstaltungen(prestudent_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/' + prestudent_id);\n\t},\n\tgetBegruendungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getBegruendungen/');\n\t},\n\tgetLvsKompatibel(lv_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLvsKompatibel/' + lv_id);\n\t},\n\tgetLektoren(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLektoren/' + studiengang_kz);\n\t},\n\taddNewAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/insertAnrechnung/', data);\n\t},\n\tloadAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/loadAnrechnung/' + anrechnung_id);\n\t},\n\teditAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/updateAnrechnung/', data);\n\t},\n\tdeleteAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/anrechnungen/deleteAnrechnung/' + anrechnung_id);\n\t},\n}","export default {\n\tgetStudies(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudien/' + params.id);\n\t},\n\tgetTypenMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/');\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/');\n\t},\n\tgetStudyprograms(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/');\n\t},\n\tgetListPartner(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/');\n\t},\n\tgetStatiPrestudent(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/');\n\t},\n\tloadStudy(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/loadStudie/' + id);\n\t},\n\tinsertStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/insertStudie/', data);\n\t},\n\tupdateStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/updateStudie/', data);\n\t},\n\tdeleteStudy(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/GemeinsameStudien/deleteStudie/' + id);\n\t},\n\n}","export default {\n\tgetCourselist(url, config, params) {\n\t\t//corresponding logic controller Stundenplan.php\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStundenplan/'\n\t\t\t+ params.student_uid + '/'\n\t\t\t+ params.start_date + '/'\n\t\t\t+ params.end_date + '/'\n\t\t\t+ params.group_consecutiveHours + '/'\n\t\t\t+ params.dbStundenplanTable\n\t\t);\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStudiensemester/');\n\t},\n}","import person from \"./notiz/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetNotizen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getUid/');\n\t},\n\taddNewNotiz(form, id, formData) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(form, notiz_id, formData){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getMitarbeiter/' + event);\n\t},\n\tisBerechtigt(id, type_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/isBerechtigt/');\n\t}\n}","import person from \"./betriebsmittel/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetAllBetriebsmittel(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/' + params.type + '/' + params.id);\n\t},\n\taddNewBetriebsmittel(form, person_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/' +\n\t\t\tperson_id, formData\n\t\t);\n\t},\n\tloadBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/' + betriebsmittelperson_id);\n\t},\n\tupdateBetriebsmittel(form, betriebsmittelperson_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/' + betriebsmittelperson_id,\n\t\t\tformData);\n\t},\n\tdeleteBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/' +\tbetriebsmittelperson_id);\n\t},\n\tgetTypenBetriebsmittel(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/');\n\t},\n\tloadInventarliste(query){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/' +\tquery);\n\t}\n}","export default {\n\tupdatePersonUnrulyStatus(person_id, unrulyParam) {\n\n\t\ttry {\n\t\t\tconst payload = {person_id, unruly: unrulyParam}\n\t\t\tconst url = '/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus';\n\t\t\treturn this.$fhcApi.post(url, payload, null);\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t},\n\tfilterPerson(payload, base = ''){\n\n\t\ttry {\n\t\t\tconst url = base + '/api/frontend/v1/checkperson/CheckPerson/filterPerson';\n\t\t\treturn axios.post(url, payload)\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t}\n}","export default {\n getContentID(ort_kurbz) {\n\t\treturn this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Ort/ContentID\",\n\t\t\t{ ort_kurzbz: ort_kurbz }\n\t\t);\n\t},\n\tgetRooms(datum, von, bis, typ, personenanzahl = 0) {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getRooms\",\n\t\t\t{ datum, von, bis, typ, personenanzahl }\n\t\t);\n\t},\n\tgetRoomTypes() {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getTypes\"\n\t\t);\n\t}\n}","export default {\n content(content_id, version=null, sprache=null, sichtbar=null) {\n return this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/content\",\n\t\t\t{ \n\t\t\t\tcontent_id: content_id,\n\t\t\t\t...(version?{version}:{}),\n\t\t\t\t...(sprache?{sprache}:{}),\n\t\t\t\t...(sichtbar?{sichtbar}:{}),\n }\n );\n },\n\t//api function used for the news View that renders the html\n\tgetNews(page = 1, page_size = 10, sprache) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNews\",\n\t\t\t{\n\t\t\t\tpage,\n\t\t\t\tpage_size,\n\t\t\t\tsprache,\n\t\t\t},\n\t\t);\n\t},\n\t//api function used for the widget component\n\tnews(limit) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/news\",\n\t\t\t{\n\t\t\t\tlimit: limit\n\t\t\t}\n\t\t);\n\t},\n\tgetNewsRowCount: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNewsRowCount\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetNewsExtra: function(){\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getStudiengangInfoForNews\",\n\t\t\t{}\n\t\t);\n\t}\n }","export default {\n getStudentenMail(lehreinheit_id) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Lehre/lvStudentenMail\",\n { lehreinheit_id: lehreinheit_id }\n );\n },\n\tgetLvInfo(studiensemester_kurzbz, lehrveranstaltung_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/LV/${studiensemester_kurzbz}/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentPruefungen(lehrveranstaltung_id){\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentProjektarbeiten(uid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getStudentProjektarbeiten/${uid}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentProjektabgaben(detail) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getStudentProjektabgaben`\n\t\t\t, {\n\t\t\t\tprojektarbeit_id: detail.projektarbeit_id,\n\t\t\t\tstudent_uid: detail.student_uid\n\t\t\t}\n\t\t);\n\t},\n\tpostStudentProjektarbeitEndupload(formData) {\n\t\tconst url = '/api/frontend/v1/Lehre/postStudentProjektarbeitEndupload';\n\t\tconst headers = {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\treturn this.$fhcApi.post(url, formData, headers)\n\t},\n\tpostStudentProjektarbeitZwischenabgabe(formData) {\n\t\tconst url = '/api/frontend/v1/Lehre/postStudentProjektarbeitZwischenabgabe';\n\t\tconst headers = {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\treturn this.$fhcApi.post(url, formData, headers)\n\t},\n\tgetStudentProjektarbeitAbgabeFile(paabgabe_id, student_uid) {\n\t\tconst url = `/Cis/Abgabetool/getStudentProjektarbeitAbgabeFile?paabgabe_id=${paabgabe_id}&student_uid=${student_uid}`;\n\n\t\twindow.location = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + url\n\t},\n\tgetMitarbeiterProjektarbeiten(uid, all) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getMitarbeiterProjektarbeiten?showall=${all}`\n\t\t\t, {}\n\t\t);\n\t},\n\tpostProjektarbeitAbgabe(termin) {\n\t\tconst payload = {\n\t\t\tpaabgabe_id: termin.paabgabe_id,\n\t\t\tpaabgabetyp_kurzbz: termin.bezeichnung.paabgabetyp_kurzbz,\n\t\t\tdatum: termin.datum,\n\t\t\tfixtermin: termin.fixtermin,\n\t\t\tinsertvon: termin.insertvon,\n\t\t\tkurzbz: termin.kurzbz,\n\t\t\tprojektarbeit_id: termin.projektarbeit_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/postProjektarbeitAbgabe';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t\t\n\t},\n\tdeleteProjektarbeitAbgabe(paabgabe_id) {\n\t\tconst payload = {\n\t\t\tpaabgabe_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/deleteProjektarbeitAbgabe';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t},\n\tpostSerientermin(datum, paabgabetyp_kurzbz, bezeichnung, kurzbz, projektarbeit_ids) {\n\t\tconst payload = {\n\t\t\tdatum, paabgabetyp_kurzbz, bezeichnung, kurzbz, projektarbeit_ids\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/postSerientermin';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t},\n\tfetchDeadlines(person_id) {\n\t\tconst payload = {\n\t\t\tperson_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/fetchDeadlines';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t}\n }","export default {\n getLvMenu(lvid, studiensemester_kurzbz) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/LvMenu/getLvMenu/${lvid}/${studiensemester_kurzbz}`,\n {}\n );\n },\n\n \n }","import person from \"./messages/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\t\tgetMessages(url, config, params) {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessages/' + params.id + '/' + params.type + '/' + params.size + '/' + params.page);\n\t\t},\n\t\tgetVorlagen(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagen/');\n\t\t},\n\t\tgetMsgVarsLoggedInUser(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/');\n\t\t},\n\t\tgetMessageVarsPerson(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessageVarsPerson/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetMsgVarsPrestudent(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsPrestudent/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPersonId(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getPersonId/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetUid(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getUid/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetVorlagentext(vorlage_kurzbz){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagentext/' + vorlage_kurzbz);\n\t\t},\n\t\tgetNameOfDefaultRecipient(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getNameOfDefaultRecipient/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPreviewText(params, data){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/getPreviewText/' + params.id + '/' + params.type_id,\n\t\t\t\tdata);\n\t\t},\n\t\tgetReplyData(messageId){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getReplyData/' + messageId);\n\t\t},\n\t\tsendMessageFromModalContext(form, id, data) {\n\t\t\treturn this.$fhcApi.post(form,'api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tsendMessage(id, data) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tdeleteMessage(messageId){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/deleteMessage/' + messageId);\n\t\t}\n}","export default {\n\tgetVorlagen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagen/');\n\t},\n\tgetVorlagenByLoggedInUser() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/');\n\t}\n}","export default {\n\n\tgetStudiensemester: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/components/Cis/Mylv/Studiensemester',\n\t\t\t{}\n\t\t);\n\t},\n\n\tgetAllStudienSemester: function (studiensemester=undefined, studiengang=undefined, semester=undefined, studienplan=undefined) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/Studium/getStudienAllSemester',\n\t\t\t{studiensemester, studiengang, semester, studienplan}\n\t\t);\n\t},\n\n\tgetStudiengaengeForStudienSemester: function (studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${studiensemester}`,\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudienplaeneBySemester: function (studiengang, studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudienplaeneBySemester`,\n\t\t\t{\n\t\t\t\tstudiengang,\n\t\t\t\tstudiensemester,\n\t\t\t}\n\t\t);\n\t},\n\tgetLvPlanForStudiensemester: function (studiensemester, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${studiensemester}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\tgetLvEvaluierungInfo: function (studiensemester_kurzbz, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getLvEvaluierungInfo/${studiensemester_kurzbz}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\t\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport search from \"./search.js\";\nimport phrasen from \"./phrasen.js\";\nimport navigation from \"./navigation.js\";\nimport filter from \"./filter.js\";\nimport studstatus from \"./studstatus.js\";\nimport profil from \"./profil.js\";\nimport profilUpdate from \"./profilUpdate.js\";\nimport lvPlan from \"./lvPlan.js\";\nimport bookmark from \"./bookmark.js\";\nimport stv from \"./stv.js\";\nimport notiz from \"./notiz.js\";\nimport betriebsmittel from \"./betriebsmittel.js\";\nimport checkperson from \"./checkperson.js\";\nimport ampeln from \"./ampeln.js\";\nimport ort from \"./ort.js\";\nimport cms from \"./cms.js\";\nimport lehre from \"./lehre.js\";\nimport addons from \"./addons.js\";\nimport messages from \"./messages.js\";\nimport vorlagen from \"./vorlagen.js\";\nimport studiengang from \"./studiengang.js\";\nimport menu from \"./menu.js\";\nimport dashboard from \"./dashboard.js\";\nimport authinfo from \"./authinfo.js\";\nimport studium from \"./studium.js\";\nimport language from \"./language.js\";\n\nexport default {\n search,\n phrasen,\n navigation,\n dashboard,\n filter,\n studstatus,\n profil,\n profilUpdate,\n lvPlan,\n bookmark,\n stv,\n notiz,\n betriebsmittel,\n checkperson,\n ampeln,\n ort,\n cms,\n lehre,\n addons,\n messages,\n vorlagen,\n addons,\n\tstudiengang,\n\tmenu,\n\tauthinfo,\n\tstudium,\n language\n};\n","export default {\n\tasync getViewData() {\n\t\tconst url = `/api/frontend/v1/Cis4FhcApi/getViewData`;\n\t\treturn this.$fhcApi.get(url, null, null)\n\t},\n}","export default {\n\n getBookmarks: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/getBookmarks`\n ,{}\n );\n },\n \n delete: function (bookmark_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/delete/${bookmark_id}`\n ,{}\n ); \n },\n\n\tupdate: function ({ bookmark_id, url, title, tag=null}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/Bookmark/update/${bookmark_id}`\n\t\t\t, {\n\t\t\t\turl: url,\n\t\t\t\ttitle: title\n\t\t\t}\n\t\t);\n\t},\n\n insert: function ({url, title, tag}) {\n return this.$fhcApi.post(\n `/api/frontend/v1/Bookmark/insert`\n ,{\n url: url,\n title: title,\n tag: tag\n }\n ); \n },\n}","export default {\n \n open: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/open`,{});\n },\n\n all: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/all`,{});\n },\n\n confirm: function (ampel_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/confirm/${ampel_id}`,{});\n },\n\n}","export default {\n\tstudiengangInformation: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Studgang/getStudiengangInfo\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudiengangByKz: function (studiengang_kz) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz\",\n\t\t\t{\n\t\t\t\t\"studiengang_kz\": studiengang_kz\n\t\t\t}\n\t\t);\n\t}\n}","export default {\n\tgetMenu: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/CisMenu/getMenu\",\n\t\t\t{}\n\t\t);\n\t}\n\n}","\nexport default {\n\tgetAuthUID() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthUID',\n\t\t\t{ }\n\t\t);\n\t},\n\tgetAuthInfo() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthInfo',\n\t\t\t{}\n\t\t);\n\t},\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAll() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/language/get');\n\t}\n};","/** TODO(chris):\n * when deleting this file be sure to\n * remove line 1 & 90 from ../plugins/Phrasen.js\n */\nimport FhcApiFactory from '../api/fhcapifactory.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$fhcApi) {\n\t\t\t/* Deprecated Code start */\n\t\t\tif (options?.factory) {\n\t\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\t\tapp.config.globalProperties.$fhcApi.factory.addEndpoints(options.factory);\n\t\t\t}\n\t\t\t/* Deprecated Code end */\n\t\t\treturn;\n\t\t}\n\n\t\tfunction _get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\n\t\tfunction _clean_return_value(response) {\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = {response};\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tconst baseURL = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\";\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(response => {\n\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\treturn _clean_return_value(response);\n\n\t\t\t// NOTE(chris): loop through errors\n\t\t\tif (response.data.errors)\n\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t);\n\n\t\t\treturn _clean_return_value(response);\n\t\t}, error => {\n\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\n\t\t\tif (error.config?.errorHandling == 'off'\n\t\t\t\t|| error.config?.errorHandling === false\n\t\t\t\t|| error.config?.errorHandling == 'success')\n\t\t\t\treturn Promise.reject(error);\n\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL, true);\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t\t}\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\terror.response.data.errors = error.response.data.errors.filter(\n\t\t\t\t\terr => (error.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, error.config)\n\t\t\t\t);\n\t\t\t\tif (!error.response.data.errors.length)\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else if (error.request) {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertError(error.message);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t}\n\n\t\t\treturn Promise.reject(error);\n\t\t});\n\n\t\tapp.config.globalProperties.$fhcApi = {\n\t\t\tgetUri(url) {\n\t\t\t\tconsole.warn('$fhcApi.getUri is DEPRECATED! Use $api.getUri instead.');\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\tconsole.warn('$fhcApi.get is DEPRECATED! Use $api.get instead.');\n\t\t\t\t[uri, params, config] = _get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\tconsole.warn('$fhcApi.post is DEPRECATED! Use $api.post instead.');\n\t\t\t\t[uri, data, config] = _get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\t_defaultErrorHandlers: {\n\t\t\t\tvalidation(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form) {\n\t\t\t\t\t\tconfig.form.clearValidation();\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.messages);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(error.messages)) {\n\t\t\t\t\t\terror.messages.forEach($fhcAlert.alertError);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (typeof error.messages == 'object') {\n\t\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t\tObject.values(error.messages).forEach(\n\t\t\t\t\t\t\t\tvalue => $fhcAlert.alertDefault(\n\t\t\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tObject.entries(error.messages).forEach(\n\t\t\t\t\t\t\t\t([key, value]) => $fhcAlert.alertDefault('error', key, value, true)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tgeneral(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form)\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.message);\n\t\t\t\t\telse if (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertError(error.message);\n\t\t\t\t},\n\t\t\t\tphp(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('warn', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('info', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\texception(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tdb(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tauth(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertDefault('error', error.message, message);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/* Deprecated Code start */\n\t\tclass FhcApiFactoryWrapper {\n\t\t\tconstructor(factorypart, root) {\n\t\t\t\tif (root === undefined) {\n\t\t\t\t\tthis.$fhcApi = {\n\t\t\t\t\t\tgetUri(url) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.getUri(url);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget(form, uri, params, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.get(form, uri, params, config);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpost(form, uri, data, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.post(form, uri, data, config);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tObject.defineProperty(this.$fhcApi, 'factory', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.factory;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tapp.config.globalProperties.$fhcApi.factory = this;\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty(this, '$fhcApi', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\treturn (root || this).$fhcApi;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.addEndpoints(factorypart, true)\n\t\t\t}\n\n\t\t\taddEndpoints(factorypart, noWarn) {\n\t\t\t\tObject.keys(factorypart).forEach(key => {\n\t\t\t\t\tObject.defineProperty(this, key, {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tif (typeof factorypart[key] == 'function')\n\t\t\t\t\t\t\t\treturn factorypart[key].bind(this);\n\t\t\t\t\t\t\treturn new FhcApiFactoryWrapper(factorypart[key], this.$fhcApi.factory);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tif (!noWarn) console.warn('$fhcApi.factory.addEndpoints() is DEPRECATED!');\n\t\t\t}\n\t\t}\n\n\t\tconst factory = new FhcApiFactoryWrapper(FhcApiFactory);\n\t\tif (options?.factory) {\n\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\tfactory.addEndpoints(options.factory);\n\t\t}\n\n\t\tapp.config.globalProperties.$fhcApi.factory = factory;\n\t\t/* Deprecated Code end */\n\t\t\n\t\tapp.provide('$fhcApi', app.config.globalProperties.$fhcApi);\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n//--------------------------------------------------------------------------------------------------------------------\n// Configs\n\n// To see debug messages into the browser console set this parameter as true\nconst CORE_REST_CLIENT_DEBUG = false;\n\n// Default timeout (milliseconds)\nconst CORE_REST_CLIENT_TIMEOUT = 5000;\n\n//--------------------------------------------------------------------------------------------------------------------\n// Constants\n\n// Success\nconst CORE_REST_CLIENT_SUCCESS = 0;\n\n// Properties present in a response\nconst CORE_REST_CLIENT_ERROR = \"error\";\nconst CORE_REST_CLIENT_RETVAL = \"retval\";\n\n// HTTP method parameters\nconst CRC_HTTP_GET_METHOD = \"get\";\nconst CRC_HTTP_POST_METHOD = \"post\";\n\n/**\n * Definition and initialization of the object CoreRESTClient\n */\nexport const CoreRESTClient = {\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Public methods\n\n\t/**\n\t * Performs a call using the HTTP GET method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tget: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_GET_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Performs a call using the HTTP POST method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tpost: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_POST_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Checks if the response is a success\n\t */\n\tisSuccess: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR)\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL) && response.error == CORE_REST_CLIENT_SUCCESS)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Checks if the response is an error\n\t */\n\tisError: function(response) {\n\t\treturn !CoreRESTClient.isSuccess(response);\n\t},\n\n\t/**\n\t * Checks if the response has data\n\t */\n\thasData: function(response) {\n\n\t\tif (CoreRESTClient.isSuccess(response))\n\t\t{\n\t\t\tif ((typeof response[CORE_REST_CLIENT_RETVAL] === \"object\" && Object.keys(response[CORE_REST_CLIENT_RETVAL]).length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"array\" && response[CORE_REST_CLIENT_RETVAL].length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"string\" && response[CORE_REST_CLIENT_RETVAL].trim() != \"\")\n\t\t\t\t|| typeof response[CORE_REST_CLIENT_RETVAL] === \"number\")\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Retrives data from response object\n\t */\n\tgetData: function(response) {\n\n\t\tif (CoreRESTClient.hasData(response))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Retrives error message from response object\n\t */\n\tgetError: function(response) {\n\n\t\tif (typeof response === \"object\"\n\t\t\t&& Object.keys(response).length > 0\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn \"Generic error\";\n\t},\n\n\t/**\n\t * Retrives code from response object\n\t */\n\tgetErrorCode: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_ERROR];\n\t\t}\n\n\t\treturn 1; // Generic error\n\t},\n\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Private methods\n\n\t/**\n\t * Generate the router URI using the connection parameters\n\t */\n\t_generateRouterURI: function(wsURL) {\n\t\tvar uri = null;\n\n\t\t// Checks if global JS object FHC_JS_DATA_STORAGE_OBJECT exists\n\t\tif (typeof FHC_JS_DATA_STORAGE_OBJECT !== \"undefined\")\n\t\t{\n\t\t\turi = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\" + wsURL;\n\t\t}\n\n\t\treturn uri;\n\t},\n\n\t/**\n\t * Method to print debug info after a controller has been called\n\t */\n\t_printDebug: function(parameters, response, errorThrown) {\n\n\t\tif (CORE_REST_CLIENT_DEBUG === true) // If global const CORE_REST_CLIENT_DEBUG is true, but really true!\n\t\t{\n\t\t\t// Print info about called controller\n\t\t\tconsole.log(\"Called controller: \" + parameters.remoteController);\n\t\t\tconsole.log(\"Call parameters:\"); // parameters given to this call\n\t\t\tconsole.log(parameters);\n\n\t\t\tif (response != null) // if there is a response...\n\t\t\t{\n\t\t\t\tconsole.log(\"Controller Response:\");\n\t\t\t\tconsole.log(response); // ...print it\n\t\t\t}\n\t\t\tif (errorThrown != null) // if there is a jQuery error...\n\t\t\t{\n\t\t\t\tconsole.log(\"jQuery error:\");\n\t\t\t\tconsole.log(errorThrown); // ...print it\n\t\t\t}\n\t\t\tconsole.log(\"--------------------------------------------------------------------------------------------\");\n\t\t}\n\t},\n\n\t/**\n\t * Performs a call to the server were the CI PHP layer is running\n\t * - wsURL: alias of the core controller to call\n\t * - wsParameters: parameters to give to the called controller\n\t * - type: POST or GET HTTP method\n\t * - axiosParameters: an object to configure the axios call\n\t */\n\t_axiosCall: function(wsURL, wsParameters, type, axiosParameters) {\n\n\t\t// Axios config object\n\t\tlet axiosCallObj = {\n\t\t\tmethod: type,\n\t\t\turl: CoreRESTClient._generateRouterURI(wsURL),\n\t\t\ttimeout: CORE_REST_CLIENT_TIMEOUT // default time out\n\t\t};\n\n\t\t// The ajax call is HTTP GET\n\t\tif (type == CRC_HTTP_GET_METHOD)\n\t\t{\n\t\t\taxiosCallObj.params = wsParameters;\n\t\t}\n\t\t// The ajax call is HTTP POST\n\t\telse\n\t\t{\n\t\t\taxiosCallObj.data = wsParameters;\n\t\t}\n\n\t\t// Check if axiosParameters is an object\n\t\tif (typeof axiosParameters === \"object\")\n\t\t{\n\t\t\t// And then copies the its properties into axiosCallObj\n\t\t\tfor (var prop in axiosParameters) axiosCallObj[prop] = axiosParameters[prop];\n\t\t}\n\n\t\t// Perform the ajax call via axios\n\t\treturn axios(axiosCallObj);\n\t}\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n * \n * @usage:\n * Preperations:\n * Be sure to have PrimeVue loaded with the toast and confirmdialog\n * components as primevue variable\n * Install:\n * Import this Plugin and install it with the app.use() function.\n * Use:\n * In your component you can call now the global property $fhcAlert\n * which has the following functions:\n * \n * alertSuccess\n * ------------\n * Displays a success message\n * @param string\tmessage\n * @return void\n * \n * alertInfo\n * ---------\n * Displays an info message\n * @param string\tmessage\n * @return void\n * \n * alertWarning\n * ------------\n * Displays a warning\n * @param string\tmessage\n * @return void\n * \n * alertError\n * ----------\n * Displays an error\n * @param string\tmessage\n * @return void\n * \n * alertSystemError\n * ----------------\n * Displays an alert with the error details and a button to mail\n * the error to the Support Team\n * @param string\tmessage\n * @return void\n * \n * confirmDelete\n * -------------\n * Displays a confirmation dialog and returns a Promise which resolves\n * with true or false depending und the pressed button.\n * @return Promise\n * \n * alertDefault\n * ------------\n * Displays an alert\n * @param string\tseverity\t\tcan be 'success', 'info', 'warning', 'error'\n * @param string\ttitle\n * @param string\tmessage\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * alertMultiple\n * -------------\n * Displays multiple alerts\n * @param array\t\tmessageArray\n * @param string\tseverity\t\t(optional) defaults to 'info'\n * @param string\ttitle\t\t\t(optional) defaults to 'Info'\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * handleSystemError\n * -----------------\n * Automatiticly determine how to display an system error and display it.\n * This would be used in a catch block of an ajax call.\n * @param mixed\t\terror\n * @return void\n * \n * handleSystemMessage\n * -------------------\n * Automatiticly determine how to display a message and display it.\n * @param mixed\t\tmessage\n * @return void\n */\nimport PvConfig from \"../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js\";\nimport PvToast from \"../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js\";\nimport PvConfirm from \"../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js\";\nimport PvConfirmationService from \"../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js\";\nimport FhcPhrasen from \"./Phrasen.js\";\n\nimport {CoreRESTClient} from '../RESTClient.js';\n\nconst helperAppContainer = document.createElement('div');\n\nconst helperApp = Vue.createApp({\n\tname: \"FhcAlertApp\",\n\tcomponents: {\n\t\tPvToast,\n\t\tPvConfirm\n\t},\n\tmethods: {\n\t\tmailToUrl(slotProps) {\n\t\t\tlet mailTo = FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto;\n\t\t\tlet subject = 'Meldung%20Systemfehler';\n\t\t\tlet body = `\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: ` + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method + `%0D%0A\n\t\t\t\tFehler Meldung: ` + slotProps.message.detail + `%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!`\n\n\t\t\treturn \"mailto:\" + mailTo + \"?subject=\" + subject + \"&body=\" + body;\n\t\t},\n\t\topenMessagecard(e) {\n\t\t\tbootstrap.Collapse.getOrCreateInstance(e.target.getAttribute('href')).toggle();\n\t\t}\n\t},\n\tunmounted() {\n\t\thelperAppContainer.parentElement.removeChild(helperAppContainer);\n\t},\n\tcomputed: {\n\t\tshowmaillink: function() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto !== '';\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t`\n});\n\nhelperApp.use(PvConfig);\nhelperApp.use(PvConfirmationService);\n//helperApp.use(FhcPhrasen);\n\nconst helperAppInstance = helperApp.mount(helperAppContainer);\n\ndocument.body.appendChild(helperAppContainer);\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (!app.config.globalProperties.$p)\n\t\t\tapp.use(FhcPhrasen);\n\n\t\tconst $fhcAlert = {\n\t\t\talertSuccess(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSuccess);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'success', summary: 'Info', detail: message, life: 1000});\n\t\t\t},\n\t\t\talertInfo(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertInfo);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'info', summary: 'Info', detail: message, life: 3000 });\n\t\t\t},\n\t\t\talertWarning(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertWarning);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'warn', summary: 'Achtung', detail: message});\n\t\t\t},\n\t\t\talertError(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertError);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'error', summary: 'Achtung', detail: message });\n\t\t\t},\n\t\t\talertSystemError(message) {\n\t\t\t\t//TODO(Manu) for translation of content of template: restructure in data\n\t\t\t\t//and update definitions with translations\n\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSystemError);\n\t\t\t\thelperAppInstance.$refs.alert.add({\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t\tsummary: Vue.computed(() => app.config.globalProperties.$p.t('alert/systemerror')),\n\t\t\t\t\tdetail: message});\n\t\t\t},\n\t\t\tconfirmDelete() {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: 'fhcAlertConfirm',\n\t\t\t\t\t\theader: Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: Vue.computed(() => app.config.globalProperties.$p.t('alert/confirm_delete')),\n\t\t\t\t\t\tacceptLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/loeschen')),\n\t\t\t\t\t\tacceptClass: 'p-button-danger',\n\t\t\t\t\t\trejectLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: 'p-button-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tconfirm(options) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: options?.group ?? 'fhcAlertConfirm',\n\t\t\t\t\t\theader: options?.header ?? Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: options?.message ?? '',\n\t\t\t\t\t\tacceptLabel: options?.acceptLabel ?? 'Ok',\n\t\t\t\t\t\tacceptClass: options?.acceptClass ?? 'btn btn-primary',\n\t\t\t\t\t\trejectLabel: options?.rejectLabel ?? Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: options?.rejectClass ?? 'btn btn-outline-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\talertDefault(severity, title, message, sticky = false, html = false) {\n\t\t\t\tlet options = { severity: severity, summary: title, detail: message, html };\n\t\t\t\t\n\t\t\t\tif (!sticky)\n\t\t\t\t\toptions.life = 3000;\n\n\t\t\t\thelperAppInstance.$refs.toast.add(options);\n\t\t\t},\n\t\t\talertMultiple(messageArray, severity = 'info', title = 'Info', sticky = false, html = false){\n\t\t\t\t// Check, if array has only string values\n\t\t\t\tif (messageArray.every(message => typeof message === 'string')) {\n\t\t\t\t\tmessageArray.forEach(message => this.alertDefault(severity, title, message, sticky, html));\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\thandleSystemError(error) {\n\t\t\t\t// don't show an error message to the user if the error was an aborted request\n\t\t\t\tif(error.hasOwnProperty('name') && error.name.toLowerCase() === \"AbortError\".toLowerCase())\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is string\n\t\t\t\tif (typeof error === 'string')\n\t\t\t\t\treturn $fhcAlert.alertSystemError(error);\n\n\t\t\t\t// Error is array of strings\n\t\t\t\tif (Array.isArray(error) && error.every(err => typeof err === 'string'))\n\t\t\t\t\treturn error.every($fhcAlert.alertSystemError);\n\n\t\t\t\t// Error has been handled already\n\t\t\t\tif (error.hasOwnProperty('handled') && error.handled)\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is object\n\t\t\t\tif (typeof error === 'object' && error !== null) {\n\t\t\t\t\tlet errMsg = '';\n\n\n\t\t\t\t\tif (error.hasOwnProperty('response') && error.response?.data?.retval)\n\t\t\t\t\t\terrMsg += 'Error Message: ' + (error.response.data.retval.message || error.response.data.retval) + '\\r\\n';\n\t\t\t\t\telse if (error.hasOwnProperty('message'))\n\t\t\t\t\t\terrMsg += 'Error Message: ' + error.message.toUpperCase() + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('config') && error.config.hasOwnProperty('url'))\n\t\t\t\t\t\terrMsg += 'Error ConfigURL: ' + error.config.url + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('stack'))\n\t\t\t\t\t\terrMsg += 'Error Stack: ' + error.stack + '\\r\\n';\n\t\t\t\t\t\n\t\t\t\t\t// Fallback object error message\n\t\t\t\t\tif (errMsg == '')\n\t\t\t\t\t\terrMsg = 'Error Message: ' + JSON.stringify(error) + '\\r\\n';\n\n\t\t\t\t\terrMsg += 'Error Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\n\t\t\t\t\treturn $fhcAlert.alertSystemError(errMsg);\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\thandleSystemMessage(message) {\n\t\t\t\t// Message is string\n\t\t\t\tif (typeof message === 'string')\n\t\t\t\t\treturn $fhcAlert.alertWarning(message);\n\n\t\t\t\t// Message is array of strings\n\t\t\t\tif (Array.isArray(message)) {\n\t\t\t\t\t// If Array has only Strings\n\t\t\t\t\tif (message.every(msg => typeof msg === 'string'))\n\t\t\t\t\t\treturn message.every($fhcAlert.alertWarning);\n\n\t\t\t\t\t// If Array has only Objects\n\t\t\t\t\tif (message.every(msg => typeof msg === 'object') && msg !== null) {\n\t\t\t\t\t\treturn message.every(msg => {\n\t\t\t\t\t\t\tif (msg.hasOwnProperty('data') && msg.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(msg.data.retval));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(msg));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Message is Object with data property\n\t\t\t\tif (typeof message === 'object' && message !== null){\n\t\t\t\t\tif (message.hasOwnProperty('data') && message.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t// NOTE(chris): changed: alertSystemError => alertWarning\n\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(message.data.retval));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(message));\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\tresetFormValidation(form) {\n\t\t\t\tconst event = new Event('fhc-form-reset');\n\t\t\t\tform.querySelectorAll(['[data-fhc-form-validate],[data-fhc-form-error]']).forEach(el => el.dispatchEvent(event));\n\t\t\t\t/*const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\tif (alert) {\n\t\t\t\t\talert.innerHTML = '';\n\t\t\t\t\talert.classList.add('d-none');\n\t\t\t\t}\n\t\t\t\tform.querySelectorAll('.invalid-feedback').forEach(n => n.remove());\n\t\t\t\tform.querySelectorAll('.is-invalid').forEach(n => n.classList.remove('is-invalid'));\n\t\t\t\tform.querySelectorAll('.is-valid').forEach(n => n.classList.remove('is-valid'));*/\n\t\t\t},\n\t\t\thandleFormValidation(error, form) {\n\t\t\t\tif (form === undefined) {\n\t\t\t\t\tif (error && error.nodeType === Node.ELEMENT_NODE)\n\t\t\t\t\t\treturn err => $fhcAlert.handleFormValidation(err, error);\n\t\t\t\t} else {\n\t\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t\tif (typeof errors !== \"object\")\n\t\t\t\t\t\t\terrors = error.response.data;\n\n\t\t\t\t\t\t// NOTE(chris): reset form validation\n\t\t\t\t\t\t$fhcAlert.resetFormValidation(form);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// NOTE(chris): set form input validation\n\t\t\t\t\t\tconst notFound = Object.entries(errors).filter(([key, detail]) => {\n\t\t\t\t\t\t\tconst input = form.querySelector('[data-fhc-form-validate=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\tinput.dispatchEvent(new CustomEvent('fhc-form-invalidate', {detail}));\n\n\t\t\t\t\t\t\t/*const input = form.querySelector('[name=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\tinput.classList.add('is-invalid');\n\t\t\t\t\t\t\tconst feedback = document.createElement('div');\n\t\t\t\t\t\t\tfeedback.classList.add('invalid-feedback');\n\t\t\t\t\t\t\tfeedback.innerHTML = detail;\n\t\t\t\t\t\t\tinput.after(feedback);*/\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}).map(arr => arr[1]);\n\n\n\t\t\t\t\t\t//const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\t\t\tconst alert = form.querySelector('[data-fhc-form-error]');\n\t\t\t\t\t\tif (alert && notFound.length) {\n\t\t\t\t\t\t\talert.dispatchEvent(new CustomEvent('fhc-form-error', {detail: notFound}));\n\t\t\t\t\t\t\t/*notFound.forEach(txt => {\n\t\t\t\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\t\t\t\tp.innerHTML = txt;\n\t\t\t\t\t\t\t\talert.append(p);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (notFound.length) {\n\t\t\t\t\t\t\t\talert.lastChild.classList.add('mb-0');\n\t\t\t\t\t\t\t\talert.classList.remove('d-none');\n\t\t\t\t\t\t\t}*/\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnotFound.forEach($fhcAlert.alertError);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t$fhcAlert.alertError((typeof errors === 'object') ? Object.values(errors) : errors);\n\t\t\t\t} else {\n\t\t\t\t\t$fhcAlert.handleSystemError(error);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tapp.config.globalProperties.$fhcAlert = $fhcAlert;\n\t\tapp.provide('$fhcAlert', app.config.globalProperties.$fhcAlert);\n\t}\n}","import FhcAlert from './FhcAlert.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$api) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!app.config.globalProperties.$fhcAlert)\n\t\t\tapp.use(FhcAlert);\n\n\t\tfunction _send_array_or_object(errors, func) {\n\t\t\tif (Array.isArray(errors))\n\t\t\t\terrors.forEach(func);\n\t\t\telse\n\t\t\t\tObject.entries(errors).forEach(\n\t\t\t\t\t([title, errs]) => errs.forEach(\n\t\t\t\t\t\terror => func(error, title)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t}\n\t\tlet DEFAULT_ERROR_CONFIG = {\n\t\t\tsuccess: true,\n\t\t\tfail: true,\n\t\t\tcombine: {\n\t\t\t\tform: ['validation', 'general'],\n\t\t\t\ttoast: ['validation', 'general', 'not_found', 'site_failed']\n\t\t\t},\n\t\t\thandler: {\n\t\t\t\tform(form, errors) {\n\t\t\t\t\tform.clearValidation();\n\t\t\t\t\terrors.forEach(err => form.setFeedback(\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\terr.messages || err.message\n\t\t\t\t\t));\n\t\t\t\t},\n\t\t\t\tasync toast(errors) {\n\t\t\t\t\tconst $p = app.config.globalProperties.$p;\n\t\t\t\t\tif (!$p)\n\t\t\t\t\t\treturn Promise.reject('Phrasen plugin not loaded!');\n\t\t\t\t\n\t\t\t\t\tasync function _format_toast(errors) {\n\t\t\t\t\t\terrors = errors.reduce((result, err) => {\n\t\t\t\t\t\t\tswitch (err.type) {\n\t\t\t\t\t\t\tcase 'not_found':\n\t\t\t\t\t\t\tcase 'site_failed':\n\t\t\t\t\t\t\t\tif (err.message)\n\t\t\t\t\t\t\t\t\tresult[err.message] = [err.url];\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tresult._default = [err.url];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'general':\n\t\t\t\t\t\t\t\tif (!result._default)\n\t\t\t\t\t\t\t\t\tresult._default = [];\n\t\t\t\t\t\t\t\tresult._default.push(err.message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'validation':\n\t\t\t\t\t\t\t\tObject.entries(err.messages)\n\t\t\t\t\t\t\t\t\t.forEach(([field, msg]) => {\n\t\t\t\t\t\t\t\t\t\tif (!result[field])\n\t\t\t\t\t\t\t\t\t\t\tresult[field] = [];\n\t\t\t\t\t\t\t\t\t\tif (Array.isArray(msg))\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(...msg);\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(msg);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}, {});\n\t\t\t\t\t\tlet counter = 0;\n\t\t\t\t\t\tconst msgs = await Promise.all(Object.entries(errors)\n\t\t\t\t\t\t\t.sort((a, b) => ['_default'].indexOf(b[0]) - ['_default'].indexOf(a[0])) // sort _default first\n\t\t\t\t\t\t\t.map(async ([field, msgs]) => {\n\t\t\t\t\t\t\t\tif (field == '_default') {\n\t\t\t\t\t\t\t\t\tawait $p.loadCategory('dashboard');\n\t\t\t\t\t\t\t\t\tconst general = $p.t('dashboard/general');\n\t\t\t\t\t\t\t\t\tfield = '
' + general + '
';\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfield = '
' + field + '
';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcounter += msgs.length;\n\t\t\t\t\t\t\t\treturn field\n\t\t\t\t\t\t\t\t\t+ '
'\n\t\t\t\t\t\t\t\t\t+ msgs.join('
')\n\t\t\t\t\t\t\t\t\t+ '
';\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcounter,\n\t\t\t\t\t\t\tmsgs\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet counter, msgs;\n\t\t\t\t\tif (Array.isArray(errors)) {\n\t\t\t\t\t\t({ counter, msgs } = await _format_toast(errors));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t({ counter, msgs } = await Object.entries(errors)\n\t\t\t\t\t\t\t.reduce(async (res, [title, errs]) => {\n\t\t\t\t\t\t\t\tconst result = await res;\n\t\t\t\t\t\t\t\tconst { counter, msgs } = await _format_toast(errs);\n\t\t\t\t\t\t\t\tresult.counter += counter;\n\t\t\t\t\t\t\t\tresult.msgs.push('
'\n\t\t\t\t\t\t\t\t\t+ title\n\t\t\t\t\t\t\t\t\t+ '
'\n\t\t\t\t\t\t\t\t\t+ msgs.join('')\n\t\t\t\t\t\t\t\t\t+ '
');\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}, Promise.resolve({ counter: 0, msgs: []})));\n\t\t\t\t\t}\n\n\t\t\t\t\tawait $p.loadCategory('ui');\n\t\t\t\t\tconst n_errors = $p.t('ui/n_errors', { n: counter });\n\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\tn_errors,\n\t\t\t\t\t\t'
' + msgs.join('') + '
',\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tphp(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('warn', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('info', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\tmessage = title + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\texception(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tdb(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tauth(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\ttitle += ': ' + error.message;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ttitle = error.message;\n\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (options?.errorHandling !== undefined)\n\t\t\tDEFAULT_ERROR_CONFIG = _merge_error_config(options.errorHandling);\n\t\t\n\t\tfunction get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\t\tfunction clean_return_value(response) {\n\t\t\tif (typeof response.data === 'string' || response.data instanceof String)\n\t\t\t\treturn clean_return_value({ data: response });\n\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result)\n\t\t\t\treturn {meta: {response}, data: null};\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = { response };\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tfunction _merge_error_config(config) {\n\t\t\tif (config === false || config === 'off')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false, fail: false };\n\t\t\t\n\t\t\tif (!config || config === true)\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tif (config === 'success')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, fail: false };\n\t\t\t\n\t\t\tif (config === 'fail')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false };\n\t\t\t\n\t\t\tconst { success, fail, handler, combine } = config;\n\t\t\t\n\t\t\tconfig = { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tObject.entries({ fail, success }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = value;\n\t\t\t});\n\t\t\tObject.entries({ handler, combine }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = { ...config[key], ...value };\n\t\t\t});\n\n\t\t\treturn config;\n\t\t}\n\t\tfunction get_error_handler(config) {\n\t\t\tconst result = _merge_error_config(config?.errorHandling);\n\n\t\t\tif (!config?.form) {\n\t\t\t\tresult.combine = { ...result.combine, form: [] };\n\t\t\t} else {\n\t\t\t\tconst formHandler = result.handler.form;\n\t\t\t\tresult.handler = { ...result.handler, form: errors => formHandler(config.form, errors) };\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t\tfunction get_error_list(error) {\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\treturn [{\n\t\t\t\t\t\ttype: 'not_found',\n\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t\t}];\n\t\t\t\t} else {\n\t\t\t\t\tif (error.response.data.errors == undefined) return [];\n\t\t\t\t\treturn error.response.data.errors;\n\t\t\t\t}\n\t\t\t} else if (error.request) {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'site_failed',\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t}];\n\t\t\t} else {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'script',\n\t\t\t\t\tmessage: error.message\n\t\t\t\t}];\n\t\t\t}\n\t\t}\n\t\tfunction popHandleableErrors(errorHandling, errors) {\n\t\t\tconst result = {};\n\t\t\tconst copy = [];\n\n\t\t\tif (errors == undefined) return {};\n\n\t\t\twhile (errors.length)\n\t\t\t\tcopy.push(errors.pop());\n\t\t\tfor (var error of copy) {\n\t\t\t\tlet type = error.type;\n\t\t\t\tlet newType = null;\n\t\t\t\tfor (var t in errorHandling.combine) {\n\t\t\t\t\tlet newTypeCombinesType = errorHandling\n\t\t\t\t\t\t.combine[t]\n\t\t\t\t\t\t.includes(type);\n\t\t\t\t\tlet newTypeHasHandler = errorHandling.handler[t];\n\t\t\t\t\tif (newTypeCombinesType && newTypeHasHandler) {\n\t\t\t\t\t\tnewType = t;\n\t\t\t\t\t\tif (newType == 'form')\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (newType)\n\t\t\t\t\ttype = newType;\n\t\t\t\tconst handler = errorHandling.handler[type];\n\t\t\t\tif (handler) {\n\t\t\t\t\tif (!result[type])\n\t\t\t\t\t\tresult[type] = [];\n\t\t\t\t\tif (Array.isArray(error))\n\t\t\t\t\t\tresult[type].push(...error);\n\t\t\t\t\telse\n\t\t\t\t\t\tresult[type].push(error);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\terrors.push(error);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t+ FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(\n\t\t\tresponse => {\n\t\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\t\treturn clean_return_value(response);\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\tif (response.data.errors)\n\t\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$api._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t\t);\n\n\t\t\t\treturn clean_return_value(response);\n\t\t\t},\n\t\t\terror => {\n\t\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\n\t\t\t\tconst errorConfig = get_error_handler(error.config);\n\n\t\t\t\tif (!errorConfig.fail)\n\t\t\t\t\treturn Promise.reject(error);\n\n\t\t\t\tconst remaining = get_error_list(error);\n\n\t\t\t\tconst errors = popHandleableErrors(errorConfig, remaining);\n\n\t\t\t\tfor (var type in errors) {\n\t\t\t\t\terrorConfig.handler[type](errors[type]);\n\t\t\t\t}\n\n\t\t\t\tif (remaining.length)\n\t\t\t\t\treturn Promise.reject(error);\n\t\t\t\t\n\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\t\t\t}\n\t\t);\n\n\t\tapp.config.globalProperties.$api = {\n\t\t\tgetUri(url) {\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\t[uri, params, config] = get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\t[uri, data, config] = get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\tcall(factory, configoverwrite, form) {\n\t\t\t\tif (Array.isArray(factory)) {\n\t\t\t\t\tconst $api = app.config.globalProperties.$api;\n\n\t\t\t\t\treturn Promise\n\t\t\t\t\t\t.allSettled(factory.map((config, index) => {\n\t\t\t\t\t\t\tif (!Array.isArray(config))\n\t\t\t\t\t\t\t\tconfig = ['#' + index, config];\n\t\t\t\t\t\t\treturn $api.call(config[1], {\n\t\t\t\t\t\t\t\terrorHeader: config[0],\n\t\t\t\t\t\t\t\terrorHandling: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}))\n\t\t\t\t\t\t.then(result => {\n\t\t\t\t\t\t\tconst [ , , config ] = get_config(form, undefined, undefined, configoverwrite || {});\n\t\t\t\t\t\t\tconst errorConfig = get_error_handler(config);\n\n\t\t\t\t\t\t\tif (!errorConfig.success && !errorConfig.fail) {\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst typedErrors = {};\n\t\t\t\t\t\t\tfor (var res of result) {\n\t\t\t\t\t\t\t\tconst [ allowed, item ] = res.status === 'fulfilled'\n\t\t\t\t\t\t\t\t\t? [ errorConfig.success, res.value ]\n\t\t\t\t\t\t\t\t\t: [ errorConfig.fail, res.reason ];\n\t\t\t\t\t\t\t\tif (!allowed)\n\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\tconst errors = popHandleableErrors(errorConfig, get_error_list(item));\n\n\t\t\t\t\t\t\t\tfor (var type in errors) {\n\t\t\t\t\t\t\t\t\tif (!typedErrors[type])\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type] = {\n\t\t\t\t\t\t\t\t\t\t\t[item.config.errorHeader]: errors[type]\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type][item.config.errorHeader] = errors[type];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfor (var errType in typedErrors) {\n\t\t\t\t\t\t\t\terrorConfig.handler[errType](typedErrors[errType]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tlet { method, url, params, config } = factory;\n\t\t\t\tif (configoverwrite !== undefined) {\n\t\t\t\t\tconfig = configoverwrite;\n\t\t\t\t}\n\t\t\t\tif (!method) {\n\t\t\t\t\tmethod = 'get';\n\t\t\t\t}\n\t\t\t\tif (method.toLowerCase)\n\t\t\t\t\tmethod = method.toLowerCase();\n\t\t\t\tif (method == 'get') {\n\t\t\t\t\treturn this.get(form, url, params, config);\n\t\t\t\t} else if (method == 'post') {\n\t\t\t\t\treturn this.post(form, url, params, config);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"FhcApi: method not allowed:\", method);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tapp.provide('$api', app.config.globalProperties.$api);\n\t}\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/loadModule/' + category\n\t\t};\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst params = {categories, language}\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/phrasen/setLanguage',\n\t\t\tparams\n\t\t};\n\t},\n\tgetLanguage() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getLanguage'\n\t\t};\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getAllLanguages'\n\t\t};\n\t}\n};","import OldFhcApi from '../plugin/OldFhcApi.js'; // TODO(chris): remove at some point\nimport PluginsApi from './Api.js';\nimport ApiPhrasen from '../api/factory/phrasen.js';\n\nconst categories = Vue.reactive({});\nconst loadingModules = {};\nlet user_language = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language);\nexport let user_locale = Vue.computed(()=>{\n\tif(!user_language.value) return null;\n\treturn FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(language => language.sprache == user_language.value).LC_Time;\n});\n\nfunction extractCategory(obj, category) {\n\treturn obj.filter(e => e.category == category).reduce((res, elem) => {\n\t\tif (!res[elem.phrase])\n\t\t\tres[elem.phrase] = elem.text;\n\t\treturn res;\n\t}, {});\n}\nfunction getValueForLoadedPhrase(category, phrase, params) {\n\tlet result = categories[category][phrase];\n\tif (!result)\n\t\treturn '<< PHRASE ' + phrase + '>>';\n\tif (params)\n\t\tresult = result.replace(/\\{([^}]*)\\}/g, (match, p1) => params[p1] === undefined ? match : params[p1]);\n\treturn result;\n}\n\nconst phrasen = {\n\tuser_language,\n\tuser_locale,\n\tsetLanguage(language) {\n\t\tconst catArray = Object.keys(categories)\n\t\treturn this.config.globalProperties.$api\n\t\t\t.call(ApiPhrasen.setLanguage(catArray, language))\n\t\t\t.then(res => {\n\t\t\t\tres.data.forEach(row => {\n\t\t\t\t\tcategories[row.category][row.phrase] = row.text\n\t\t\t\t})\n\n\t\t\t\t// update the reactive data that holds the current active user_language\n\t\t\t\tuser_language.value = language;\n\n\t\t\t\treturn res\n\t\t\t})\n\t},\n\tloadCategory(category) {\n\t\tif (Array.isArray(category))\n\t\t\treturn Promise.all(category.map(this.config.globalProperties\n\t\t\t\t.$p.loadCategory));\n\n\t\tif (!loadingModules[category])\n\t\t\tloadingModules[category] = this.config.globalProperties.$api\n\t\t\t\t.call(ApiPhrasen.loadCategory(category))\n\t\t\t\t.then(res => res?.data ? extractCategory(res.data, category) : {})\n\t\t\t\t.then(res => {\n\t\t\t\t\tcategories[category] = res;\n\t\t\t\t});\n\t\treturn loadingModules[category];\n\t},\n\tt_ref(category, phrase, params) {\n\t\tconsole.warn('deprecated');\n\t\treturn Vue.computed(() => this.t(category, phrase, params));\n\t},\n\tt(category, phrase, params) {\n\t\tif (params === undefined && (\n\t\t\t(Array.isArray(category) && category.length == 2) ||\n\t\t\t(category.split && category.split('/').length == 2))\n\t\t\t) {\n\t\t\tparams = phrase;\n\t\t\t[category, phrase] = category.split ? category.split('/') : category;\n\t\t}\n\t\tif (phrase === undefined) {\n\t\t\tconsole.error('invalid input', category, phrase, params);\n\t\t\treturn '';\n\t\t}\n\t\tlet val = Vue.computed(() => {\n\t\t\tif (!categories[category])\n\t\t\t\treturn '';\n\t\t\treturn getValueForLoadedPhrase(category, phrase, params);\n\t\t});\n\t\tif (!categories[category])\n\t\t\tthis.loadCategory(category);\n\t\treturn val.value;\n\t}\n};\n\nexport default {\n\tinstall(app, options) {\n\t\tif (!app.config.globalProperties.$fhcApi)\n\t\t\tapp.use(OldFhcApi); // TODO(chris): remove at some point\n\t\tif (!app.config.globalProperties.$api)\n\t\t\tapp.use(PluginsApi);\n\t\tapp.config.globalProperties.$p = {\n\t\t\tt: phrasen.t,\n\t\t\tloadCategory: cat => phrasen.loadCategory.call(app, cat),\n\t\t\tsetLanguage: lang => phrasen.setLanguage.call(app, lang),\n\t\t\tuser_language: user_language,\n\t\t\tuser_locale,\n\t\t\tt_ref: phrasen.t_ref\n\t\t};\n\t\tapp.provide('$p', app.config.globalProperties.$p);\n\t}\n}","import {CoreNavigationCmpt} from '../../components/navigation/Navigation.js';\nimport DashboardAdmin from '../../components/Dashboard/Admin.js';\nimport PluginsPhrasen from '../../plugins/Phrasen.js';\n\nconst app = Vue.createApp({\n name: 'AdminApp',\n data: () => ({\n appSideMenuEntries: {}\n }),\n components: {\n CoreNavigationCmpt,\n DashboardAdmin\n }\n});\napp.use(PluginsPhrasen);\napp.mount('#main');"],"names":["CoreFetchCmpt","emits","props","refresh","type","Boolean","apiFunction","required","Function","apiFunctionParameters","watch","newValue","oldValue","this","fetchData","data","loading","error","errorMessage","created","methods","apiFunctionResult","Promise","then","successHandler","catch","errorHandler","finally","finallyHandler","setError","response","$emit","undefined","retval","message","template","ApiNavigation","getHeader","navigation_page","method","url","params","getMenu","CoreNavigationCmpt","components","addHeaderMenuEntries","Object","addSideMenuEntries","hideTopMenu","leftNavCssClasses","String","default","headerMenu","sideMenu","computed","headerMenuEntries","hm","keys","length","description","sideMenuEntries","sm","getNavigationPage","FHC_JS_DATA_STORAGE_OBJECT","called_path","called_method","fetchCmptApiFunctionHeader","$api","call","fetchCmptApiFunctionSideMenu","fetchCmptDataFetchedHeader","fetchCmptDataFetchedMenu","getDataBsToggle","header","children","BsModal","name","modal","fullscreen","backdrop","validator","value","includes","focus","keyboard","noCloseBtn","dialogClass","Array","headerClass","bodyClass","footerClass","allowFullscreenExpand","dispose","handleUpdate","hide","show","relatedTarget","toggle","toggleFullscreen","mounted","$refs","bootstrap","Modal","popup","body","options","title","footer","slots","includedPrimevue","primevue","resolve","reject","instance","Vue","createApp","setup","h","class","ref","unmount","beforeUnmount","result","unmounted","wrapper","parentElement","removeChild","document","createElement","use","config","zIndex","overlay","Phrasen","mount","appendChild","BsAlert","mixins","onHideBsModal","onHiddenBsModal","onHidePreventedBsModal","onShowBsModal","onShownBsModal","modalContainer","msg","bind","BsPrompt","placeholder","BsConfirm","DashboardAdminEdit","dashboard_id","Number","dashboard_kurzbz","beschreibung","kurzbz","desc","sendDelete","DashboardAdminWidgets","widgets","apiurl","app_root","ci_router","sendChange","widget_id","allow","find","el","allowed","axios","post","action","err","console","get","map","JSON","parse","arguments","GridItem","inject","item","active","dragAction","dragging","registerDragAction","evt","target","hasAttribute","getAttribute","parent","closest","tryDragStart","touchDragEnd","touchStart","event","touchMove","preventDefault","GridLogic","constructor","w","grid","isFreeSlot","x","y","i","getMaxY","reduce","acc","getFreeSlots","freeSlots","biggestY","totalSpaces","Math","floor","push","add","prefer","occupiers","getItemsInFrame","frame","forEach","f","index","max","intermGrid","possiblities","tryMoving","bestOption","sort","a","b","cost","moves","v","move","currItem","getItemFrame","remove","place","pinned","originalFrame","isArray","some","occupiersData","occupier","occupiersFrame","flat","replaceUpdate","newOccupierFrames","occ","shift","getSingleFramePosition","updates","resize","newPoss","possiblity","p","directions","weight","dir","res","tryMovingInDirection","filter","amount","targetframe","unshift","clearWeights","indexOf","j","debug","DropGrid","cols","items","itemsSetup","resizeLimit","marginForExtraRow","additionalRow","clientX","clientY","mode","dragGrid","permUpdates","positionUpdates","fixedPositionUpdates","draggedOffset","draggedItem","draggedNode","reorderedItems","clonedWidget","sectionName","additionalRowComputed","set","items_hashmap","needsReordering","rearrangedPosition","widget","widgetid","pop","items_placeholders","placeholders","col_max","rows_max","rows","occupied","current_item","max_x","max_y","occupied_y","occupied_x","id","padStart","placedItems_withPlaceholders","placedItems","gridStyle","addH","indexedItems","prePlacedItems","mappedPlacedItems","height_diff","width_diff","temporaryResizeItems","newItem","resizeOverlay","blank","showEmptyTileHover","widgetSetup","widgetsSetup","ele","dragCancel","handler","immediate","updated","createNewGrid","deep","toggleDraggedItemOverlay","condition","firstElementChild","classList","containerRect","container","getBoundingClientRect","clonedWidgetRect","desiredTop","desiredLeft","minTop","maxTop","height","minLeft","maxLeft","width","constrainedTop","min","constrainedLeft","style","top","left","sortedItems","firstFreeSlot","targetX","targetW","convertGridResultToUpdate","input","output","baseArray","mouseLeave","updateCursor","rect","touches","gridX","clientWidth","gridY","clientHeight","_dragStart","dataTransfer","setDragImage","dropEffect","effectAllowed","startMove","setTimeout","clone","cloneNode","querySelector","removeProperty","startResize","dragOver","checkPinnedWidgetAnimation","checkWidgetSizeLimitAnimation","removeWidgetClones","dragEnd","getElementById","from","getElementsByClassName","_updateFixedPositions","additionalUpdates","emptyTileClicked","updateCursorOnMouseMove","itemAtPosition","pinNode","contains","draggedItemSetup","draggedItemMaxWidth","draggedItemMinWidth","draggedItemMaxHeight","draggedItemMinHeight","draggedItemNode","width_after_resize","height_after_resize","widgetClones","mouseDown","mouseUp","__widgets","__widgetsStarted","__path","CachedWidgetLoader","getWidget","loadWidget","setPath","path","DashboardItem","HeightTransition","onEnter","done","scrollHeight","onLeave","component","tmpConfig","isLoading","hasConfig","sharedData","maxHeight","maxWidth","prototype","toString","minHeight","minWidth","isResizeable","isPinned","ready","unpin","editMode","item_data","pinItem","getWidgetC4Link","cis4link","handleShowBsModal","handleHideBsModal","e","startDrag","dragHandle","resizeHandle","openConfig","setConfig","changeConfig","sendChangeConfig","changeConfigManually","k","import","file","fhcomplete_build_version","$options","WidgetIcon","src","DashboardSection","adminMode","configOpened","gridWidth","gridHeight","provide","editModeIsActive","computedWidgetsSetup","getSectionStyle","reorder","sectionNameTranslation","$p","t","showSectionInformation","handleConfigOpened","handleConfigClosed","checkResizeLimit","minmaxW","minmaxH","removeWidget","revert","custom","update","hidden","updatePreset","saveConfig","payload","updatePositions","self","cont","parseInt","window","getComputedStyle","getPropertyValue","addEventListener","DashboardWidgetPicker","callbacks","close","pick","ObjectUtils","mergeDeep","objects","isObject","obj","prev","key","pVal","oVal","concat","DashboardAdmin","DashboardAdminPresets","dashboard","funktionen","sections","tmpLoading","pickerWidgets","widgetAdd","section_name","widgetpicker","preset","section","db","funktion_kurzbz","newId","splice","alert","widgetUpdate","wid","prop","_x","_y","_w","_h","widgetRemove","loadSections","querySelectorAll","join","general","funktion","funktionenList","dashboards","current","dashboardAdd","_name","newDashboard","dashboardUpdate","old","dashboardDelete","assignWidgets","search","searchsettings","$fhcApi","searchAdvanced","searchdummy","phrasen$1","loadCategory","category","setLanguage","categories","language","getLanguage","getActiveDbLanguages","navigation","filter$1","saveCustomFilter","wsParams","filterUniqueId","filterType","customFilterName","removeCustomFilter","filterId","applyFilterFields","filterFields","addFilterField","filterField","removeFilterField","getFilterById","getFilter","studstatus","abmeldung","getDetails","antrag_id","prestudent_id","create","stdsem","grund","studiensemester","errorHandling","cancel","allSettled","antrag","studierendenantrag_id","errorHeader","unterbrechung","datum_wiedereinstieg","attachment","wiederholung","getLvs","saveLvs","forbiddenLvs","mandatoryLvs","leitung","getStgs","getAntraege","getHistory","getPrestudents","query","signal","timeout","approve","reopen","pause","unpause","object","approveObjection","denyObjection","profil","getView","uid","fotoSperre","isStudent","isMitarbeiter","getZustellAdresse","getZustellKontakt","getGemeinden","nation","zip","getAllNationen","profilUpdate","getStatus","getTopic","acceptProfilRequest","profil_update_id","status_message","topic","requested_change","denyProfilRequest","insertFile","dms","replace","getProfilRequestFiles","requestID","selectProfilRequest","insertProfilRequest","fileID","updateProfilRequest","ID","deleteProfilRequest","lvPlan","getRoomInfo","ort_kurzbz","start_date","end_date","getStunden","getOrtReservierungen","getLvPlanReservierungen","getLehreinheitStudiensemester","lehreinheit_id","studiensemesterDateInterval","date","LvPlanEvents","lv_id","stv","verband","favorites","students","studiensemester_kurzbz","encodeURIComponent","getUri","prestudent","person","person_id","relative_path","getStg","setStg","studiengang_kz","konto","tabulatorConfig","ajaxURL","ajaxParams","modelValue","only_open","studiengang_kz_intern","stg_kz","ajaxRequestFunc","ajaxResponse","checkDoubles","form","confirmErrorHandler","insert","counter","edit","delete","buchungsnr","getBuchungstypen","group","getGruppen","deleteGroup","kontakt","getAdressen","addNewAddress","loadAddress","address_id","updateAddress","deleteAddress","getPlaces","plz","getFirmen","searchString","getNations","getAdressentypen","getBankverbindung","addNewBankverbindung","loadBankverbindung","bankverbindung_id","updateBankverbindung","deleteBankverbindung","getKontakte","addNewContact","loadContact","kontakt_id","updateContact","deleteContact","getStandorteByFirma","getKontakttypen","updatePrestudent","getBezeichnungZGV","getBezeichnungMZgv","getBezeichnungDZgv","getAusbildung","getAufmerksamdurch","getBerufstaetigkeit","getTypenStg","getBisstandort","getHistoryPrestudent","getMaxSem","studiengang_kzs","advanceStatus","status_kurzbz","ausbildungssemester","confirmStatus","isLastStatus","deleteStatus","getLastBismeldestichtag","getHistoryPrestudents","status","insertStatus","loadStatus","updateStatus","getStudienplaene","getStudiengang","getStatusgruende","getStati","addStudent","changeStatus","getStatusarray","details","save","exam","getPruefungen","loadPruefung","pruefung_id","getTypenPruefungen","getAllLehreinheiten","getLvsByStudent","getLvsandLesByStudent","semester","getLvsAndMas","getMitarbeiterLv","getNoten","checkZeugnisnoteLv","addPruefung","updatePruefung","deletePruefung","abschlusspruefung","getAbschlusspruefung","addNewAbschlusspruefung","loadAbschlusspruefung","updateAbschlusspruefung","deleteAbschlusspruefung","getTypenAbschlusspruefung","getTypenAntritte","getBeurteilungen","getAkadGrade","getTypStudiengang","getMitarbeiter","getPruefer","checkForExistingExams","uids","grades","list","getCertificate","getTeacherProposal","getRepeaterGrades","updateCertificate","lehrveranstaltung_id","student_uid","note","lehrveranstaltung_bezeichnung","deleteCertificate","copyTeacherProposalToCertificate","copyRepeaterGradeToCertificate","studierendenantrag_lehrveranstaltung_id","lv_bezeichnung","getGradeFromPoints","points","manualErrorHandling","mobility","getMobilitaeten","getProgramsMobility","addNewMobility","loadMobility","bisio_id","updateMobility","deleteMobility","getLVList","getPurposes","getSupports","getListPurposes","getListSupports","deleteMobilityPurpose","addMobilityPurpose","deleteMobilitySupport","addMobilitySupport","archiv","getArchivVorlagen","archive","archiveSigned","akte_id","documents","getDocumentsUnaccepted","getDocumentsAccepted","deleteZuordnung","dokument_kurzbz","createZuordnung","loadAkte","getDoktypen","updateFile","deleteFile","uploadFile","exemptions","getAnrechnungen","getLehrveranstaltungen","getBegruendungen","getLvsKompatibel","getLektoren","addNewAnrechnung","loadAnrechnung","anrechnung_id","editAnrechnung","deleteAnrechnung","jointstudies","getStudies","getTypenMobility","getStudiensemester","getStudyprograms","getListPartner","getStatiPrestudent","loadStudy","insertStudy","updateStudy","deleteStudy","courselist","getCourselist","group_consecutiveHours","dbStundenplanTable","configStudent","configStudents","notiz","getNotizen","getUid","addNewNotiz","formData","loadNotiz","notiz_id","loadDokumente","deleteNotiz","type_id","updateNotiz","isBerechtigt","betriebsmittel","getAllBetriebsmittel","addNewBetriebsmittel","loadBetriebsmittel","betriebsmittelperson_id","updateBetriebsmittel","deleteBetriebsmittel","getTypenBetriebsmittel","loadInventarliste","checkperson","updatePersonUnrulyStatus","unrulyParam","unruly","filterPerson","base","ort","getContentID","ort_kurbz","getRooms","datum","von","bis","typ","personenanzahl","getRoomTypes","cms","content","content_id","version","sprache","sichtbar","getNews","page","page_size","news","limit","getNewsRowCount","getNewsExtra","lehre","getStudentenMail","getLvInfo","getStudentPruefungen","getStudentProjektarbeiten","getStudentProjektabgaben","detail","projektarbeit_id","postStudentProjektarbeitEndupload","Headers","postStudentProjektarbeitZwischenabgabe","getStudentProjektarbeitAbgabeFile","paabgabe_id","location","getMitarbeiterProjektarbeiten","all","postProjektarbeitAbgabe","termin","paabgabetyp_kurzbz","bezeichnung","fixtermin","insertvon","deleteProjektarbeitAbgabe","postSerientermin","projektarbeit_ids","fetchDeadlines","addons","getLvMenu","lvid","messages","getMessages","size","getVorlagen","getMsgVarsLoggedInUser","getMessageVarsPerson","getMsgVarsPrestudent","getPersonId","getVorlagentext","vorlage_kurzbz","getNameOfDefaultRecipient","getPreviewText","getReplyData","messageId","sendMessageFromModalContext","sendMessage","deleteMessage","vorlagen","getVorlagenByLoggedInUser","studium","getAllStudienSemester","studiengang","studienplan","getStudiengaengeForStudienSemester","getStudienplaeneBySemester","getLvPlanForStudiensemester","getLvEvaluierungInfo","FhcApiFactory","phrasen","getViewData","bookmark","getBookmarks","bookmark_id","tag","ampeln","open","confirm","ampel_id","studiengangInformation","getStudiengangByKz","menu","authinfo","getAuthUID","getAuthInfo","getAll","OldFhcApi","install","app","globalProperties","factory","warn","addEndpoints","_get_config","uri","TypeError","clearValidation","setFeedback","_clean_return_value","meta","fhcApiAxios","baseURL","interceptors","request","FormData","values","every","FileList","File","newData","entries","nd","append","jsondata","stringify","errors","_defaultErrorHandlers","code","handled","$fhcAlert","alertDefault","responseURL","alertError","validation","apply","php","filename","line","backtrace","function","severity","alertSystemError","exception","heading","sql","auth","controller","required_permissions","FhcApiFactoryWrapper","factorypart","root","defineProperty","noWarn","CORE_REST_CLIENT_ERROR","CORE_REST_CLIENT_RETVAL","CoreRESTClient","wsURL","wsParameters","axiosParameters","_axiosCall","isSuccess","hasOwnProperty","isError","hasData","trim","getData","getError","getErrorCode","_generateRouterURI","_printDebug","parameters","errorThrown","axiosCallObj","helperAppContainer","helperApp","PvToast","PvConfirm","mailToUrl","slotProps","systemerror_mailto","openMessagecard","Collapse","getOrCreateInstance","showmaillink","PvConfig","PvConfirmationService","helperAppInstance","FhcAlert","FhcPhrasen","alertSuccess","toast","summary","life","alertInfo","alertWarning","confirmDelete","$confirm","require","acceptLabel","acceptClass","rejectLabel","rejectClass","accept","sticky","html","alertMultiple","messageArray","handleSystemError","toLowerCase","errMsg","toUpperCase","stack","handleSystemMessage","resetFormValidation","Event","dispatchEvent","handleFormValidation","nodeType","Node","ELEMENT_NODE","notFound","CustomEvent","arr","PluginsApi","_send_array_or_object","func","errs","DEFAULT_ERROR_CONFIG","success","fail","combine","async","_format_toast","_default","field","msgs","n_errors","n","get_config","clean_return_value","_merge_error_config","get_error_handler","formHandler","get_error_list","popHandleableErrors","copy","newType","newTypeCombinesType","newTypeHasHandler","errorConfig","remaining","configoverwrite","typedErrors","reason","errType","ApiPhrasen","reactive","loadingModules","user_language","user_locale","server_languages","LC_Time","catArray","row","phrase","text","elem","extractCategory","t_ref","split","val","match","p1","getValueForLoadedPhrase","PluginsPhrasen","cat","lang","appSideMenuEntries"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Admin.js","sources":["../../../../js/components/Fetch.js","../../../../js/api/factory/navigation.js","../../../../js/components/navigation/Navigation.js","../../../../js/components/Bootstrap/Modal.js","../../../../js/components/Bootstrap/Alert.js","../../../../js/components/Bootstrap/Prompt.js","../../../../js/components/Bootstrap/Confirm.js","../../../../js/components/Dashboard/Admin/Edit.js","../../../../js/components/Dashboard/Admin/Widgets.js","../../../../js/components/Drop/Grid/Item.js","../../../../js/composables/GridLogic.js","../../../../js/components/Drop/Grid.js","../../../../js/composables/Dashboard/CachedWidgetLoader.js","../../../../js/components/Dashboard/Item.js","../../../../js/components/Tranistion/HeightTransition.js","../../../../js/components/Dashboard/Widget/WidgetIcon.js","../../../../js/components/Dashboard/Section.js","../../../../js/components/Dashboard/Widget/Picker.js","../../../../js/helpers/ObjectUtils.js","../../../../js/components/Dashboard/Admin.js","../../../../js/components/Dashboard/Admin/Presets.js","../../../../js/api/search.js","../../../../js/api/phrasen.js","../../../../js/api/navigation.js","../../../../js/api/filter.js","../../../../js/api/studstatus.js","../../../../js/api/profil.js","../../../../js/api/profilUpdate.js","../../../../js/api/lvPlan.js","../../../../js/api/stv.js","../../../../js/api/stv/verband.js","../../../../js/api/stv/students.js","../../../../js/api/stv/filter.js","../../../../js/api/stv/konto.js","../../../../js/api/stv/group.js","../../../../js/api/stv/kontakt.js","../../../../js/api/stv/prestudent.js","../../../../js/api/stv/status.js","../../../../js/api/stv/details.js","../../../../js/api/stv/exam.js","../../../../js/api/stv/abschlusspruefung.js","../../../../js/api/stv/grades.js","../../../../js/api/stv/mobility.js","../../../../js/api/stv/archiv.js","../../../../js/api/stv/documents.js","../../../../js/api/stv/exemptions.js","../../../../js/api/stv/jointstudies.js","../../../../js/api/stv/courselist.js","../../../../js/api/notiz.js","../../../../js/api/notiz/person.js","../../../../js/api/betriebsmittel.js","../../../../js/api/betriebsmittel/person.js","../../../../js/api/checkperson.js","../../../../js/api/ort.js","../../../../js/api/cms.js","../../../../js/api/lehre.js","../../../../js/api/addons.js","../../../../js/api/messages.js","../../../../js/api/messages/person.js","../../../../js/api/vorlagen.js","../../../../js/api/studium.js","../../../../js/api/fhcapifactory.js","../../../../js/api/dashboard.js","../../../../js/api/bookmark.js","../../../../js/api/ampeln.js","../../../../js/api/studiengang.js","../../../../js/api/menu.js","../../../../js/api/authinfo.js","../../../../js/api/language.js","../../../../js/plugin/OldFhcApi.js","../../../../js/RESTClient.js","../../../../js/plugins/FhcAlert.js","../../../../js/plugins/Api.js","../../../../js/api/factory/phrasen.js","../../../../js/plugins/Phrasen.js","../../../../js/apps/Dashboard/Admin.js"],"sourcesContent":["/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport const CoreFetchCmpt = {\n\temits: ['dataFetched'], // this component can emit the event dataFetched that it is catched by this component itself\n\tprops: {\n\t\trefresh: { // to refresh this component\n\t\t\ttype: Boolean\n\t\t},\n\t\tapiFunction: { // the function to call, must return a Promise\n\t\t\trequired: true,\n\t\t\ttype: Function\n\t\t},\n\t\tapiFunctionParameters: {} // parameters for the apiFunction, type mixed, optional\n\t},\n\twatch: {\n\t\t/**\n\t\t * If the refresh property is changed then call fetchData\n\t\t */\n\t\trefresh: function (newValue, oldValue) {\n\t\t\tthis.fetchData();\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tloading: false, // if in loading or not\n\t\t\terror: false, // if an error occurred while loading data\n\t\t\terrorMessage: null // the error message\n\t\t};\n\t},\n\tcreated: function() {\n\t\tthis.fetchData();\n\t},\n\tmethods: {\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchData: function() {\n\t\t\tthis.loading = true; // loader started\n\t\t\tthis.error = false;\n\t\t\tthis.errorMessage = null;\n\n\t\t\t// Checks if the apifunction is a callable function\n\t\t\tif (typeof this.apiFunction == \"function\")\n\t\t\t{\n\t\t\t\t// Call the function stored in apiFunction\n\t \t\tlet apiFunctionResult = this.apiFunction(this.apiFunctionParameters);\n\n\t\t\t\t// It is expected that the function returns a Promise\n\t\t\t\tif (apiFunctionResult instanceof Promise)\n\t\t\t\t{\n\t\t\t\t\tapiFunctionResult\n\t\t\t\t\t\t.then(this.successHandler) // on success\n\t\t\t\t\t\t.catch(this.errorHandler) // on error\n\t\t\t\t\t\t.finally(this.finallyHandler); // finally in any case\n\t\t\t\t}\n\t\t\t\telse // otherwise display an error\n\t\t\t\t{\n\t\t\t\t\tthis.setError(\"The called apiFunction does not return a Promise\");\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // otherwise display an error\n\t\t\t{\n\t\t\t\tthis.setError(\"Property apiFunction is not a function\");\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsetError: function(errorMessage) {\n\t\t\tthis.loading = false; // loading ended\n\t\t\tthis.error = true; // error occurred\n\t\t\tthis.errorMessage = errorMessage; // save the error message\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsuccessHandler: function(response) {\n\t\t\tthis.$emit('dataFetched', response ? response.data : undefined); // trigger the event dataFetched\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\terrorHandler: function(error) {\n\t\t\tif (error.response?.data?.retval)\n\t\t\t\tthis.setError(error.response.data.retval);\n\t\t\telse if (error.data?.message)\n\t\t\t\tthis.setError(error.data.message);\n\t\t\telse\n\t\t\t\tthis.setError(error.message);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfinallyHandler: function() {\n\t\t\tthis.loading = false; // loading ended\n\t\t}\n\t},\n\ttemplate: `\n\t\t\n\t\t\t
Loading...
\n\t\t
\n\t\t\n\t\t\t
{{ errorMessage }}
\n\t\t
\n\t\t\n\t`\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetHeader(navigation_page) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/navigation/header',\n\t\t\tparams: { navigation_page }\n\t\t};\n\t},\n\tgetMenu(navigation_page) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/navigation/menu',\n\t\t\tparams: { navigation_page }\n\t\t};\n\t}\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport {CoreFetchCmpt} from '../../components/Fetch.js';\nimport ApiNavigation from '../../api/factory/navigation.js';\n\n/**\n *\n */\nexport const CoreNavigationCmpt = {\n\tcomponents: {\n\t\tCoreFetchCmpt\n\t},\n\tprops: {\n\t\taddHeaderMenuEntries: Object, // property used to add new header menu entries from another app/component\n\t\taddSideMenuEntries: Object, // property used to add new side menu entries from another app/component\n\t\thideTopMenu: Boolean,\n\t\tleftNavCssClasses: {\n\t\t\ttype: String,\n\t\t\tdefault: 'navbar navbar-left-side'\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\theaderMenu: {}, // header menu entries\n\t\t\tsideMenu: {} // side menu entries\n\t\t};\n\t},\n\tcomputed: {\n\t\t/**\n\t\t *\n\t\t */\n\t\theaderMenuEntries() {\n\t\t\t//\n\t\t\tlet hm = this.headerMenu ? {...this.headerMenu} : {};\n\t\t\tif (this.headerMenu != null && this.addHeaderMenuEntries != null && Object.keys(this.addHeaderMenuEntries).length > 0)\n\t\t\t{\n\t\t\t\thm[this.addHeaderMenuEntries.description] = this.addHeaderMenuEntries;\n\t\t\t}\n\t\t\treturn hm;\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsideMenuEntries() {\n\t\t\t//\n\t\t\tlet sm = this.sideMenu ? {...this.sideMenu} : {};\n\t\t\tif (this.sideMenu != null && this.addSideMenuEntries != null && Object.keys(this.addSideMenuEntries).length > 0)\n\t\t\t{\n\t\t\t\tsm[this.addSideMenuEntries.description] = this.addSideMenuEntries;\n\t\t\t}\n\t\t\treturn sm;\n\t\t}\n\t},\n\tmethods: {\n\t\t/**\n\t\t *\n\t\t */\n\t\tgetNavigationPage() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.called_path + \"/\" + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchCmptApiFunctionHeader() {\n\t\t\treturn this.$api.call(ApiNavigation.getHeader(this.getNavigationPage()))\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchCmptApiFunctionSideMenu() {\n\t\t\treturn this.$api.call(ApiNavigation.getMenu(this.getNavigationPage()))\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchCmptDataFetchedHeader(data) {\n\t\t\tthis.headerMenu = data || {};\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchCmptDataFetchedMenu(data) {\n\t\t\tthis.sideMenu = data || {};\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tgetDataBsToggle(header) {\n\t\t\treturn !header.children ? null : 'dropdown';\n\t\t}\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t\t\n\t\t\n\n\t\t\n\t\t\n\n\t\t\n\t\t\n\t`\n};\n\n","//import Phrasen from '../../plugin/Phrasen.js';\n\nexport default {\n\tname: 'BootstrapModal',\n\tdata: () => ({\n\t\tmodal: null,\n\t\tfullscreen: false\n\t}),\n\tprops: {\n\t\tbackdrop: {\n\t\t\ttype: [Boolean,String],\n\t\t\tdefault: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['static', true, false].includes(value);\n\t\t\t}\n\t\t},\n\t\tfocus: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tkeyboard: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tnoCloseBtn: Boolean,\n\t\tdialogClass: [String,Array,Object],\n\t\theaderClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tbodyClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: 'px-4 py-5'\n\t\t},\n\t\tfooterClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tallowFullscreenExpand: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\temits: [\n\t\t\"hideBsModal\",\n\t\t\"hiddenBsModal\",\n\t\t\"hidePreventedBsModal\",\n\t\t\"showBsModal\",\n\t\t\"shownBsModal\"\n\t],\n\tmethods: {\n\t\tdispose() {\n\t\t\treturn this.modal.dispose();\n\t\t},\n\t\thandleUpdate() {\n\t\t\treturn this.modal.handleUpdate();\n\t\t},\n\t\thide() {\n\t\t\treturn this.modal.hide();\n\t\t},\n\t\tshow(relatedTarget) {\n\t\t\treturn this.modal.show(relatedTarget);\n\t\t},\n\t\ttoggle() {\n\t\t\treturn this.modal.toggle();\n\t\t},\n\t\ttoggleFullscreen() {\n\t\t\tthis.fullscreen = !this.fullscreen\n\t\t}\n\t},\n\tmounted() {\n\t\tif (this.$refs.modal)\n\t\t\tthis.modal = new bootstrap.Modal(this.$refs.modal, {\n\t\t\t\tbackdrop: this.backdrop,\n\t\t\t\tfocus: this.focus,\n\t\t\t\tkeyboard: this.keyboard\n\t\t\t});\n\t},\n\tpopup(body, options, title, footer) {\n\t\tconst BsModal = this,\n\t\t\tslots = {};\n\t\tif (body !== undefined)\n\t\t\tslots.default = () => body;\n\t\tif (title !== undefined)\n\t\t\tslots.title = () => title;\n\t\tif (footer !== undefined)\n\t\t\tslots.footer = () => footer;\n\n\t\t// little hack to check whether primevue is included in the app or not\n\t\tlet includedPrimevue = false;\n\t\tif(typeof primevue !== 'undefined'){\n\t\t\tincludedPrimevue = true;\n\t\t}\n\n\t\treturn new Promise((resolve,reject) => {\n\t\t\tconst instance = Vue.createApp({\n\t\t\t\tname: 'ModalTmpApp',\n\t\t\t\tsetup() {\n\t\t\t\t\treturn () => Vue.h(BsModal, {...{\n\t\t\t\t\t\tclass: 'fade'\n\t\t\t\t\t},...options, ...{\n\t\t\t\t\t\tref: 'modal',\n\t\t\t\t\t\t'onHidden.bs.modal': instance.unmount\n\t\t\t\t\t}}, slots);\n\t\t\t\t},\n\t\t\t\tmounted() {\n\t\t\t\t\tthis.$refs.modal.show();\n\t\t\t\t\t\n\t\t\t\t},\n\t\t\t\tbeforeUnmount() {\n\t\t\t\t\tif (this.$refs.modal)\n\t\t\t\t\t\tthis.$refs.modal.result !== false ? resolve(this.$refs.modal.result) : reject();\n\t\t\t\t},\n\t\t\t\tunmounted() {\n\t\t\t\t\twrapper.parentElement.removeChild(wrapper);\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst wrapper = document.createElement(\"div\");\n\t\t\t\n\t\t\t// if(primevue) --> won't work because primevue is not defined in this scope and promise would be rejected\n\t\t\tif (includedPrimevue){\n\t\t\t\tinstance.use(primevue.config.default, {zIndex: {overlay: 9999}})\n\t\t\t}\n\t\t\t\t \n\t\t\t//instance.use(Phrasen); // TODO(chris): find a more dynamic way\n\t\t\timport('../../plugins/Phrasen.js').then((Phrasen) => {\n\t\t\t\tinstance.use(Phrasen.default);\n\t\t\t\tinstance.mount(wrapper);\n\t\t\t\tdocument.body.appendChild(wrapper);\n\t\t\t});\n\t\t});\n\t},\n\ttemplate: `
\n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
`\n}\n","import BsModal from './Modal.js';\n\nexport default {\n\tname: 'BootstrapAlert',\n\tcomponents: {\n\t\tBsModal\n\t},\n\tmixins: [\n\t\tBsModal\n\t],\n\tprops: {\n\t\tdialogClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: 'modal-dialog-centered'\n\t\t},\n\t\t/*\n\t\t * NOTE(chris):\n\t\t * Hack to expose in \"emits\" declared events to $props which we use\n\t\t * in the v-bind directive to forward all events.\n\t\t * @see: https://github.com/vuejs/core/issues/3432\n\t\t*/\n\t\tonHideBsModal: Function,\n\t\tonHiddenBsModal: Function,\n\t\tonHidePreventedBsModal: Function,\n\t\tonShowBsModal: Function,\n\t\tonShownBsModal: Function\n\t},\n\tdata: () => ({\n\t\tresult: true\n\t}),\n\tmounted() {\n\t\tthis.modal = this.$refs.modalContainer.modal;\n\t},\n\tpopup(msg, options) {\n\t\treturn BsModal.popup.bind(this)(msg, options);\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t`\n}\n","import BsAlert from './Alert.js';\n\nexport default {\n\tname: 'BootstrapPrompt',\n\tmixins: [\n\t\tBsAlert\n\t],\n\tprops: {\n\t\tplaceholder: String,\n\t\tdefault: String\n\t},\n\tdata: () => ({\n\t\tvalue: '',\n\t\tresult: false\n\t}),\n\tcreated() {\n\t\tif (this.default)\n\t\t\tthis.value = this.default;\n\t},\n\tpopup(msg, options) {\n\t\tif (typeof options === 'string')\n\t\t\toptions = { default: options };\n\t\treturn BsAlert.popup.bind(this)(msg, options);\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t`\n}\n","import BsAlert from './Alert.js';\n\nexport default {\n\tname: 'BootstrapConfirm',\n\tmixins: [\n\t\tBsAlert\n\t],\n\tdata: () => ({\n\t\tresult: false\n\t}),\n\tpopup(msg, options) {\n\t\treturn BsAlert.popup.bind(this)(msg, options);\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t`\n}\n","import BsConfirm from '../../Bootstrap/Confirm.js';\n\nexport default {\n\temits: [\n\t\t\"change\",\n\t\t\"delete\"\n\t],\n\tprops: {\n\t\tdashboard_id: Number,\n\t\tdashboard_kurzbz: String,\n\t\tbeschreibung: String\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tkurzbz: this.dashboard_kurzbz,\n\t\t\tdesc: this.beschreibung\n\t\t}\n\t},\n\tmethods: {\n\t\tsendDelete() {\n\t\t\tBsConfirm.popup('Sure?').then(() => this.$emit('delete', this.dashboard_id)).catch();\n\t\t}\n\t},\n\ttemplate: `
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t
`\n}\n","export default {\n\temits: [\n\t\t\"change\",\n\t\t\"assignWidgets\"\n\t],\n\tprops: {\n\t\tdashboard_id: Number,\n\t\twidgets: Array\n\t},\n\tcomputed: {\n\t\tapiurl() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/dashboard';\n\t\t}\n\t},\n\tmethods: {\n\t\tsendChange(widget_id) {\n\t\t\tlet allow = !this.widgets.find(el => el.widget_id == widget_id).allowed;\n\t\t\taxios.post(this.apiurl + '/Widget/setAllowed', {\n\t\t\t\tdashboard_id: this.dashboard_id,\n\t\t\t\twidget_id,\n\t\t\t\taction: allow ? 'add' : 'delete'\n\t\t\t}).catch(err => console.error('ERROR: ' + err));\n\t\t}\n\t},\n\tcreated() {\n\t\taxios.get(this.apiurl + '/Widget/getAll', {\n\t\t\tparams:{\n\t\t\t\tdashboard_id: this.dashboard_id\n\t\t\t}\n\t\t}).then(\n\t\t\tresult => {\n\t\t\t\tthis.$emit('assignWidgets', result.data.retval.map(el => ({\n\t\t\t\t\t...el,\n\t\t\t\t\t...{setup:JSON.parse(el.setup),arguments:JSON.parse(el.arguments),allowed:!!el.allowed}\n\t\t\t\t})));\n\t\t\t}\n\t\t).catch(err => console.error('ERROR:', err));\n\t},\n\ttemplate: `\n\t
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t
`\n}\n","export default {\n\tname:'GridItem',\n\tcomponents: {\n\t},\n\tinject: {\n\t},\n\tprops: {\n\t\titem: Object,\n\t\tactive: Boolean\n\t},\n\temits: [\n\t\t\"mouseDown\",\n\t\t\"mouseUp\",\n\t\t\"startMove\",\n\t\t\"startResize\",\n\t\t\"dragging\",\n\t\t\"endDrag\",\n\t\t\"dropDrag\",\n\t\t\"item\",\n\t\t\"touchStart\",\n\t\t\"touchEnd\",\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tdragAction: '',\n\t\t\tdragging: false\n\t\t}\n\t},\n\tcomputed: {\n\t},\n\tmethods: {\n\t\tregisterDragAction(evt) {\n\t\t\tthis.$emit('mouseDown', evt);\n\t\t\tif (evt.target.hasAttribute('drag-action')) {\n\t\t\t\tthis.dragAction = evt.target.getAttribute('drag-action');\n\t\t\t} else {\n\t\t\t\tlet parent = evt.target.closest('[drag-action]');\n\t\t\t\tif (parent) {\n\t\t\t\t\tthis.dragAction = parent.getAttribute('drag-action');\n\t\t\t\t} else {\n\t\t\t\t\tthis.dragAction = '';\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttryDragStart(evt, item) {\n\t\t\tlet dragAction = this.dragAction || evt.target.getAttribute('drag-action');\n\t\t\tif (dragAction) {\n\t\t\t\tthis.dragging = true;\n\t\t\t\tif (dragAction == 'move')\n\t\t\t\t\treturn this.$emit('startMove', evt, item);\n\t\t\t\telse if (dragAction == 'resize')\n\t\t\t\t\treturn this.$emit('startResize', evt, item);\n\t\t\t}\n\t\t\t//evt.preventDefault();\n\t\t},\n\t\ttouchDragEnd(evt) {\n\t\t\tif (!this.dragging)\n\t\t\t\treturn;\n\t\t\tthis.dragging = false;\n\t\t\tthis.$emit('touchEnd', evt);\n\t\t},\n\t\ttouchStart(event){\n\t\t\tthis.$emit('touchStart', event); \n\t\t\tthis.registerDragAction(event); \n\t\t\tthis.tryDragStart(event, this.item);\n\t\t},\n\t\ttouchMove(event){\n\t\t\tif(this.dragging){\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.$emit('dragging', event);\n\t\t\t}\n\t\t}\n\t\t\n\t},\n\ttemplate: `\n\t
\n\t\t\n\t
`\n}\n","// TODO(chris): Comments\n\nconst DIR_UP = 0;\nconst DIR_LEFT = 1;\nconst DIR_RIGHT = 2;\nconst DIR_DOWN = 3;\n\nclass GridLogic {\n\tconstructor(w) {\n\t\tif (w.w) {\n\t\t\tthis.w = w.w;\n\t\t\tthis.h = w.h;\n\t\t\tthis.data = [...w.data];\n\t\t\tthis.grid = [...w.grid];\n\t\t} else {\n\t\t\tthis.w = w;\n\t\t\tthis.h = 1;\n\t\t\tthis.data = [];\n\t\t\tthis.grid = [];\n\t\t}\n\t}\n\tisFreeSlot(x, y) {\n\t\tconst i = y*this.w + x;\n\t\treturn !this.grid[i] && this.grid[i] !== 0;\n\t}\n\tgetMaxY(){\n\t\treturn this.data.reduce((acc, item) => { \n\t\t\tif (item?.y > acc) {\n\t\t\t\t acc = item.y; \n\t\t\t} \n\t\t\treturn acc; \n\t\t}, 0);\n\t}\n\tgetFreeSlots() {\n\t\tconst freeSlots = [];\n\t\tlet biggestY = this.getMaxY();\n\t\tlet totalSpaces = this.w * (biggestY+1);\n\t\tfor(let i=0; i < totalSpaces; i++){\n\t\t\tif (!this.grid[i] && this.grid[i] !== 0){\n\t\t\t\tthis.grid[i] = undefined;\n\t\t\t}\n\t\t}\n\t\tfor(let i =0; i < this.grid.length; i++){\n\t\t\tif (!this.grid[i] && this.grid[i] !== 0){\n\t\t\t\tlet x = i % this.w;\n\t\t\t\tlet y = Math.floor(i / this.w);\n\t\t\t\tfreeSlots.push({x, y});\n\t\t\t}\n\t\t}\n\t\treturn freeSlots;\n\t}\n\tadd(item, prefer) {\n\t\tlet occupiers = this.getItemsInFrame(item.frame);\n\t\tif (!occupiers.length) {\n\t\t\titem.frame.forEach(f => this.grid[f] = item.index);\n\t\t\tthis.data[item.index] = item;\n\t\t\tthis.h = Math.max(this.h, item.y + item.h);\n\t\t\treturn [];\n\t\t} else {\n\t\t\tconst intermGrid = new GridLogic(this);\n\t\t\t\n\t\t\titem.frame.forEach(f => intermGrid.grid[f] = -1);\n\n\t\t\tconst possiblities = intermGrid.tryMoving(occupiers, prefer);\n\t\t\tif (possiblities.length) {\n\t\t\t\tconst bestOption = possiblities.sort((a,b) => {\n\t\t\t\t\tif (a.cost === undefined)\n\t\t\t\t\t\ta.cost = a.moves.reduce((a, v) => a * v.cost, 1);\n\t\t\t\t\tif (b.cost === undefined)\n\t\t\t\t\t\tb.cost = b.moves.reduce((a, v) => a * v.cost, 1);\n\t\t\t\t\treturn a.cost > b.cost;\n\t\t\t\t});\n\t\t\t\tconst result = [];\n\t\t\t\tbestOption[0].moves.forEach(move => {\n\t\t\t\t\tconst currItem = {...this.data[move.index]};\n\t\t\t\t\tcurrItem.x += move.x;\n\t\t\t\t\tcurrItem.y += move.y;\n\t\t\t\t\tcurrItem.frame = this.getItemFrame(currItem);\n\t\t\t\t\tthis.h = Math.max(this.h, currItem.y + currItem.h);\n\t\t\t\t\tthis.remove(currItem);\n\t\t\t\t\tcurrItem.frame.forEach(f => this.grid[f] = currItem.index);\n\t\t\t\t\tthis.data[move.index] = currItem;\n\t\t\t\t\tresult[move.index] = {\n\t\t\t\t\t\tindex: currItem.index,\n\t\t\t\t\t\tx: currItem.x,\n\t\t\t\t\t\ty: currItem.y\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\titem.frame.forEach(f => this.grid[f] = item.index);\n\t\t\t\tthis.data[item.index] = item;\n\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\tconsole.error('FATAL', \"can't arrange item on grid\");\n\t\t\t}\n\t\t}\n\t}\n\tmove(item, x, y) {\n\t\tif (item.data.place[this.w]?.pinned)\n\t\t\treturn [];\n\t\tif (item.x == x && item.y == y)\n\t\t\treturn [];\n\t\t\n\t\tthis.remove(item);\n\n\t\tlet prefer = undefined;\n\t\tif (item.x == x) {\n\t\t\tif (y-item.y > 0)\n\t\t\t\tprefer = DIR_UP;\n\t\t\telse\n\t\t\t\tprefer = DIR_DOWN;\n\t\t} else if (item.y == y) {\n\t\t\tif (x-item.x > 0)\n\t\t\t\tprefer = DIR_LEFT;\n\t\t\telse\n\t\t\t\tprefer = DIR_RIGHT;\n\t\t}\n\n\t\tconst originalFrame = Array.isArray(item.frame) ? [...item.frame] : [item.frame];\n\n\t\tconst currItem = {...item};\n\t\tcurrItem.x = x;\n\t\tcurrItem.y = y;\n\t\tcurrItem.frame = this.getItemFrame(currItem);\n\t\tlet occupiers = this.getItemsInFrame(currItem.frame);\n\t\t\n\t\t// does not update if the target conatins pinned widgets\n\t\tif (occupiers.some(frame => this.data[frame]?.data.place[this.w]?.pinned)) {\n\t\t\treturn [];\n\t\t}\n\t\t\n\t\t// checks if target contains widget with the same high and width\n\t\tlet occupiersData = occupiers.map(occupier => this.data[occupier]);\n\t\tlet occupiersFrame = occupiersData.map(occupier => occupier.frame).flat();\n\t\tif (!occupiersFrame.some(frame => !currItem.frame.includes(frame)) && !occupiersFrame.some(frame => originalFrame.includes(frame))){\n\t\t\tlet replaceUpdate = [];\n\t\t\tlet newOccupierFrames = [];\n\t\t\tfor(let f of originalFrame){\n\t\t\t\tif(newOccupierFrames.includes(f)){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tlet occ = occupiersData.shift();\n\t\t\t\tif(occ){\n\t\t\t\t\tnewOccupierFrames = [...newOccupierFrames, ...this.getItemFrame({ ...occ, ...this.getSingleFramePosition(f) })];\n\t\t\t\t\treplaceUpdate[occ.index] = { index: occ.index, ...this.getSingleFramePosition(f)}\n\t\t\t\t}\n\t\t\t}\n\t\t\treplaceUpdate[item.index] = { index: item.index, x, y };\n\t\t\t\n\t\t\treturn replaceUpdate;\n\t\t}\n\t\t\n\t\tconst updates = this.add(currItem, prefer);\n\t\tupdates[item.index] = {index: item.index, x, y};\n\t\treturn updates;\n\t}\n\tresize(item, w, h) {\n\t\tif (item.w == w && item.h == h)\n\t\t\treturn [];\n\t\tthis.remove(item);\n\n\t\tconst currItem = {...item};\n\t\tcurrItem.w = w;\n\t\tcurrItem.h = h;\n\t\tcurrItem.frame = this.getItemFrame(currItem);\n\t\t\n\t\tconst updates = this.add(currItem);\n\t\tif(updates)\n\t\t\tupdates[item.index] = {index: item.index, w, h, x:item.x, y:item.y, resize:true};\n\n\t\treturn updates;\n\t}\n\ttryMoving(index, prefer) {\n\t\tif (Array.isArray(index)) {\n\t\t\tindex.forEach(i => this.remove({index:i}));\n\t\t\tlet possiblities = [{grid: this, moves: []}];\n\t\t\tindex.forEach(i => {\n\t\t\t\tlet newPoss = [];\n\t\t\t\tpossiblities.forEach(possiblity => {\n\t\t\t\t\tpossiblity.grid.tryMoving(i, prefer).forEach(p => {\n\t\t\t\t\t\tpossiblity.moves\n\t\t\t\t\t\tp.moves = [...p.moves, ...possiblity.moves];\n\t\t\t\t\t\tnewPoss.push(p)\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tpossiblities = newPoss;\n\t\t\t});\n\t\t\treturn possiblities;\n\t\t}\n\t\tconst directions = [DIR_UP, DIR_DOWN, DIR_LEFT, DIR_RIGHT];\n\n\t\tthis.remove({index});\n\n\t\tconst weight = 1 + .2*(this.data[index].weight || 0);\n\n\t\treturn directions.reduce((result, dir) => {\n\t\t\tlet res = this.tryMovingInDirection(dir, index, 1, (prefer === dir ? .5 : 1 + dir*.1) * weight);\n\t\t\tif (!res)\n\t\t\t\treturn result;\n\t\t\treturn [...result, ...res];\n\t\t}, []).filter(p => p);\n\t}\n\ttryMovingInDirection(dir, index, amount, cost) {\n\t\tconst move = {index, x:0, y: 0, cost: cost};\n\t\tlet targetframe;\n\t\tswitch(dir) {\n\t\t\tcase DIR_UP:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned || this.data[index].y - amount < 0)\n\t\t\t\t\treturn false;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i-this.w*amount);\n\t\t\t\tmove.y = -amount;\n\t\t\t\tbreak;\n\t\t\tcase DIR_DOWN:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned)\n\t\t\t\t\treturn false;\n\t\t\t\tif (this.data[index].y + this.data[index].h + amount > this.h)\n\t\t\t\t\tcost += .4;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i+this.w*amount);\n\t\t\t\tmove.y = amount;\n\t\t\t\tbreak;\n\t\t\tcase DIR_LEFT:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned || this.data[index].x - amount < 0)\n\t\t\t\t\treturn false;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i-amount);\n\t\t\t\tmove.x = -amount;\n\t\t\t\tbreak;\n\t\t\tcase DIR_RIGHT:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned || this.data[index].x + this.data[index].w + amount > this.w)\n\t\t\t\t\treturn false;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i+amount);\n\t\t\t\tmove.x = amount;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tconst occupiers = this.getItemsInFrame(targetframe);\n\t\tif (occupiers.includes(-1)) {\n\t\t\treturn this.tryMovingInDirection(dir, index, amount+1, cost);\n\t\t}\n\t\t\n\t\tconst intermGrid = new GridLogic(this);\n\t\ttargetframe.forEach(f => intermGrid.grid[f] = -1);\n\t\t\n\t\tif (!occupiers.length) {\n\t\t\treturn [{grid: intermGrid, moves: [move]}];\n\t\t}\n\t\tconst possiblities = intermGrid.tryMoving(occupiers).map(possiblity => possiblity.moves.unshift(move) && possiblity);\n\t\treturn possiblities.length ? possiblities : false;\n\t}\n\tclearWeights() {\n\t\tthis.data.forEach(item => item.weight = undefined);\n\t}\n\tgetItemsInFrame(frame) {\n\t\treturn frame.map(i => this.grid[i]).filter((v,i,a) => (v || v === 0) && a.indexOf(v) === i);\n\t}\n\tremove(item) {\n\t\tthis.grid = this.grid.map(i => i != item.index ? i : undefined);\n\t}\n\tgetItemFrame(item) {\n\t\tconst frame = [];\n\t\tfor (let i = 0; i < item.w; i++)\n\t\t\tfor (let j = 0; j < item.h; j++)\n\t\t\t\tframe.push(i + item.x + (j + item.y) * this.w);\n\t\treturn frame;\n\t}\n\tgetSingleFramePosition(frame){\n\t\treturn { x: frame % this.w, y: Math.floor(frame / this.w)};\n\t}\n\tdebug() {\n\t\treturn this.grid;\n\t}\n}\n\nexport default GridLogic;","// TODO(chris): Comments\n\nimport GridItem from './Grid/Item.js';\nimport GridLogic from '../../composables/GridLogic.js';\n\nconst MODE_IDLE = 0;\nconst MODE_MOVE = 1;\nconst MODE_RESIZE = 2;\nconst MODE_MOUSE_DOWN = 3;\n\nexport default {\n\tname: 'Grid',\n\tcomponents: {\n\t\tGridItem,\n\t},\n\tprops: {\n\t\tcols: Number,\n\t\titems: Array,\n\t\titemsSetup: Object,\n\t\tresizeLimit: Function,\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tmarginForExtraRow: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0\n\t\t},\n\t\tadditionalRow:{\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t}\n\t},\n\temits: [\n\t\t\"rearrangeItems\",\n\t\t\"newItem\",\n\t\t\"gridHeight\",\n\t\t\"draggedItem\",\n\t\t\"update:additionalRow\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tx: -1,\n\t\t\ty: -1,\n\t\t\tclientX:0,\n\t\t\tclientY: 0,\n\t\t\tmode: MODE_IDLE,\n\t\t\tgrid: null,\n\t\t\tdragGrid: null,\n\t\t\tpermUpdates: [],\n\t\t\tpositionUpdates: null,\n\t\t\tfixedPositionUpdates: null,\n\t\t\tdraggedOffset: [0,0],\n\t\t\tdraggedItem: null,\n\t\t\tdraggedNode: null,\n\t\t\treorderedItems:[],\n\t\t\tclonedWidget:null,\n\t\t}\n\t},\n\tinject:{\n\t\tsectionName: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tcomputed: {\n\t\tadditionalRowComputed: {\n\t\t\tget() {\n\t\t\t\treturn this.additionalRow;\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tthis.$emit('update:additionalRow', value);\n\t\t\t}\n\t\t},\n\t\titems_hashmap() {\n\t\t\tlet items = {};\n\t\t\tthis.items.forEach(item => {\n\t\t\t\tif (this.reorderedItems.length > 0 && this.needsReordering(item)){\n\t\t\t\t\t\tlet rearrangedPosition = this.reorderedItems.filter(widget => widget.data.widgetid == item.widgetid)?.pop();\n\t\t\t\t\t\tif (rearrangedPosition) {\t\t\t\n\t\t\t\t\t\t\titem.x = rearrangedPosition.x;\n\t\t\t\t\t\t\titem.y = rearrangedPosition.y;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\titems[`x${item.x}y${item.y}`] = item;\n\t\t\t});\t\n\t\t\treturn items\n\t\t},\n\t\titems_placeholders(){\n\t\t\tlet placeholders = [];\n\t\t\tlet col_max = this.cols;\n\t\t\tlet rows_max = this.rows;\n\n\t\t\t// occupied hashmap to keep track of the occupied cells\n\t\t\tlet occupied = {};\n\n\t\t\tfor (let y = 0; y < rows_max; y++) {\n\t\t\t\tfor (let x = 0; x < col_max; x++) {\n\t\t\t\t\t// skip current position if it was registered as occupied\n\t\t\t\t\tif (Object.keys(occupied).length && occupied[`x${x}y${y}`]) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tlet current_item = this.items_hashmap[`x${x}y${y}`];\n\t\t\t\t\tif (current_item) {\n\t\t\t\t\t\t//calculate the occupied cells from the width and the height from the items \n\t\t\t\t\t\tlet width = current_item.w;\n\t\t\t\t\t\tlet height = current_item.h;\n\t\t\t\t\t\tlet max_x = x + width - 1;\n\t\t\t\t\t\tlet max_y = y + height - 1;\n\t\t\t\t\t\tif(x != max_x || y != max_y){\n\t\t\t\t\t\t\tfor (let occupied_y = y; occupied_y <= max_y; occupied_y++) {\n\t\t\t\t\t\t\t\tfor (let occupied_x = x; occupied_x <= max_x; occupied_x++) {\n\t\t\t\t\t\t\t\t\tif (occupied_x != x || occupied_y != y) {\n\t\t\t\t\t\t\t\t\t\toccupied[`x${occupied_x}y${occupied_y}`]=true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tplaceholders.push({ x: x, y: y, w: 1, h: 1, placeholder: true, \n\t\t\t\t\t\t\tdata: { id: 'placeholder_' + String(placeholders.length).padStart(4, \"0\") } });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn placeholders;\n\t\t},\n\t\tplacedItems_withPlaceholders() {\n\t\t\treturn [...this.placedItems, ...this.items_placeholders];\n\t\t},\n\t\trows() {\n\t\t\tif (this.additionalRowComputed) {\n\t\t\t\t\treturn this.grid ? (this.grid.h+1) : 1;\n\t\t\t}\n\t\t\treturn this.grid ? this.grid.h : 1;\n\t\t\t\n\t\t},\n\t\tgridStyle() {\n\t\t\tconst addH = this.active ? this.marginForExtraRow : 0;\n\t\t\treturn {\n\t\t\t\t'--fhc-dg-row-height': 100/(this.rows + addH) + '%',\n\t\t\t\t'--fhc-dg-col-width': 100/this.cols + '%',\n\t\t\t\t'--fhc-dg-item-padding-horizontal': '0.25%',\n\t\t\t\t'--fhc-dg-item-padding-top': '0.5%',\n\t\t\t\t'padding-bottom': 100 * (this.rows + addH)/this.cols + '%'\n\t\t\t}\n\t\t},\n\t\tindexedItems() {\n\t\t\treturn this.items.map(\n\t\t\t\t(item, index) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\tx: item.x,\n\t\t\t\t\t\ty: item.y,\n\t\t\t\t\t\tw: item.w,\n\t\t\t\t\t\th: item.h,\n\t\t\t\t\t\tweight: item.weight || 0,\n\t\t\t\t\t\tdata: item\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\tprePlacedItems() {\n\t\t\tif (!this.fixedPositionUpdates)\n\t\t\t\treturn this.indexedItems;\n\t\t\treturn this.indexedItems.map(item => {\n\t\t\t\tif (!this.fixedPositionUpdates[item.index])\n\t\t\t\t\treturn item;\n\t\t\t\treturn {\n\t\t\t\t\tindex: item.index,\n\t\t\t\t\tweight: item.weight,\n\t\t\t\t\tdata: item.data,\n\t\t\t\t\tx: this.fixedPositionUpdates[item.index].x === undefined ? item.x : this.fixedPositionUpdates[item.index].x,\n\t\t\t\t\ty: this.fixedPositionUpdates[item.index].y === undefined ? item.y : this.fixedPositionUpdates[item.index].y,\n\t\t\t\t\tw: this.fixedPositionUpdates[item.index].w === undefined ? item.w : this.fixedPositionUpdates[item.index].w,\n\t\t\t\t\th: this.fixedPositionUpdates[item.index].h === undefined ? item.h : this.fixedPositionUpdates[item.index].h\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\tplacedItems() {\n\t\t\tif (!this.positionUpdates)\n\t\t\t\treturn this.prePlacedItems;\n\t\t\tlet mappedPlacedItems= this.prePlacedItems.map(item => {\n\t\t\t\tif (!this.positionUpdates[item.index] )\n\t\t\t\t\treturn item;\n\t\t\t\tlet height_diff = this.positionUpdates[item.index]?.h - item.h;\n\t\t\t\tlet width_diff = this.positionUpdates[item.index]?.w - item.w;\n\t\t\t\treturn {\n\t\t\t\t\tresize: this.positionUpdates[item.index]?.resize,\n\t\t\t\t\tindex: item.index,\n\t\t\t\t\tweight: item.weight,\n\t\t\t\t\tdata: item.data,\n\t\t\t\t\tx: this.positionUpdates[item.index].x === undefined ? item.x : this.positionUpdates[item.index].x,\n\t\t\t\t\ty: this.positionUpdates[item.index].y === undefined ? item.y : this.positionUpdates[item.index].y,\n\t\t\t\t\tw: width_diff>0?item.w:this.positionUpdates[item.index].w === undefined ? item.w : this.positionUpdates[item.index].w,\n\t\t\t\t\th: height_diff > 0 ?item.h:this.positionUpdates[item.index].h === undefined ? item.h : this.positionUpdates[item.index].h\n\t\t\t\t\t\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tlet temporaryResizeItems = [];\n\t\t\tmappedPlacedItems.forEach(item=>{\n\t\t\t\tif(item.resize){\n\t\t\t\t\tlet newItem = {\n\t\t\t\t\t\t...item,\n\t\t\t\t\t\tw:this.positionUpdates[item.index].w === undefined ? item.w : this.positionUpdates[item.index].w,\n\t\t\t\t\t\th:this.positionUpdates[item.index].h === undefined ? item.h : this.positionUpdates[item.index].h,\n\t\t\t\t\t\tresizeOverlay:true,\n\t\t\t\t\t\tblank:true,\n\t\t\t\t\t};\n\t\t\t\t\ttemporaryResizeItems.push(newItem)\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn [...mappedPlacedItems, ...temporaryResizeItems];\n\t\t},\n\t\tshowEmptyTileHover() {\n\t\t\tif (!this.active || !this.grid || this.mode != MODE_IDLE || this.x < 0 || this.y < 0 || this.x >= this.cols || this.y >= this.rows)\n\t\t\t\treturn false;\n\t\t\treturn this.grid.isFreeSlot(this.x, this.y);\n\t\t},\n\t\twidgetSetup(){\n\t\t\tif (!this.widgetsSetup)\n\t\t\t\treturn;\n\t\t\treturn this.widgetsSetup.reduce((acc, ele) => { \n\t\t\t\tacc[ele.widget_id] =ele;\n\t\t\t\treturn acc;\n\t\t\t} ,{});\n\t\t},\n\t},\n\twatch: {\n\t\tactive(active) {\n\t\t\tif (!active)\n\t\t\t\tthis.dragCancel();\n\t\t},\n\t\tcols() {\n\t\t\tthis.dragCancel();\n\t\t},\n\t rows: {\n\t\t\thandler(value) {\n\t\t\t\tthis.$emit('gridHeight', value);\n\t\t\t},\n\t\t\timmediate: true\n\t\t},\n\t\tindexedItems: {\n\t\t\thandler(value) {\n\t\t\t\tthis.dragCancel();\n\n\t\t\t\tconst updated = this.createNewGrid(value);\n\n\t\t\t\tthis.fixedPositionUpdates = updated;\n\t\t\t\tif (updated.length)\n\t\t\t\t\tthis.$emit('rearrangeItems', updated.filter(v => v));\n\t\t\t},\n\t\t\timmediate: true,\n\t\t\tdeep: true\n\t\t}\n\t},\n\tmethods: {\n\t\tneedsReordering(item){\n\t\t\tif (!item?.data?.place[this.cols]){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\ttoggleDraggedItemOverlay(condition){\n\t\t\tif(!this.draggedNode)\n\t\t\t\treturn;\n\t\t\tif(condition){\n\t\t\t\tthis.draggedNode.firstElementChild.classList.add(\"dashboard-item-overlay\");\n\t\t\t}else{\n\t\t\t\tthis.draggedNode.firstElementChild.classList.remove(\"dashboard-item-overlay\");\n\t\t\t}\n\t\t},\n\t\tdragging(event){\n\t\t\tif(this.mode == MODE_MOVE){\n\t\t\t\tthis.toggleDraggedItemOverlay(true);\n\t\t\t\t\n\t\t\t\tconst containerRect = this.$refs.container.getBoundingClientRect();\n\t\t\t\tconst clonedWidgetRect = this.clonedWidget.getBoundingClientRect();\n\t\t\t\t\n\t\t\t\tlet desiredTop = this.clientY - 20;\n\t\t\t\tlet desiredLeft = this.clientX - 15;\n\t\t\t\t\n\t\t\t\tconst minTop = 0;\n\t\t\t\tconst maxTop = containerRect.height - clonedWidgetRect.height;\n\t\t\t\tconst minLeft = 0;\n\t\t\t\tconst maxLeft = containerRect.width - clonedWidgetRect.width;\n\t\t\t\t\n\t\t\t\tconst constrainedTop = Math.max(minTop, Math.min(maxTop, desiredTop));\n\t\t\t\tconst constrainedLeft = Math.max(minLeft, Math.min(maxLeft, desiredLeft));\n\t\t\t\t\n\t\t\t\tthis.clonedWidget.style.top = `${constrainedTop}px`;\n\t\t\t\tthis.clonedWidget.style.left = `${constrainedLeft}px`;\n\t\t\t}\n\t\t},\n\t\tcreateNewGrid(items) {\n\t\t\tthis.grid = new GridLogic(this.cols);\n\t\t\tconst result = [];\n\t\t\tlet sortedItems = [...items].sort((a, b) => {\n\t\t\t\tif(this.needsReordering(a) && this.needsReordering(b)){\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\telse if(this.needsReordering(a)){\n\t\t\t\t\treturn 999;\n\t\t\t\t}\n\t\t\t\telse if(this.needsReordering(b)){\n\t\t\t\t\treturn -999;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn a.weight > b.weight;\n\t\t\t}); \n\t\t\tlet reorderedItems = [];\n\t\t\tsortedItems.forEach(item => {\n\t\t\t\tlet freeSlots = this.grid.getFreeSlots();\n\t\t\t\t\n\t\t\t\tif(this.needsReordering(item)){\n\t\t\t\t\tlet firstFreeSlot = freeSlots.shift();\n\t\t\t\t\tif (!firstFreeSlot) {\n\t\t\t\t\t\titem.x = 0;\n\t\t\t\t\t\titem.y = this.grid.h;\n\t\t\t\t\t}else{\n\t\t\t\t\t\titem.x = firstFreeSlot.x;\n\t\t\t\t\t\titem.y = firstFreeSlot.y;\n\t\t\t\t\t}\n\t\t\t\t\treorderedItems.push(item);\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tif (item.x + item.w > this.cols) {\n\t\t\t\t\tlet targetW = this.cols-item.x,\n\t\t\t\t\t\ttargetX = undefined;\n\t\t\t\t\tif (this.resizeLimit) {\n\t\t\t\t\t\t[targetW] = this.resizeLimit(item.data, targetW, item.h);\n\t\t\t\t\t}\n\t\t\t\t\tif (targetW < 1)\n\t\t\t\t\t\ttargetW = 1;\n\t\t\t\t\tif (targetW > this.cols)\n\t\t\t\t\t\ttargetW = this.cols;\n\t\t\t\t\tif (item.x + targetW > this.cols) {\n\t\t\t\t\t\ttargetX = this.cols - targetW;\n\t\t\t\t\t}\n\t\t\t\t\tif (targetW == item.w)\n\t\t\t\t\t\ttargetW = undefined;\n\t\t\t\t\tresult[item.index] = {\n\t\t\t\t\t\titem: item.data,\n\t\t\t\t\t\tx: targetX,\n\t\t\t\t\t\tw: targetW\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\titem.frame = this.grid.getItemFrame(item);\n\t\t\t\tthis.convertGridResultToUpdate(this.grid.add(item), result, items);\n\t\t\t});\n\t\t\tthis.reorderedItems = reorderedItems;\n\t\t\tthis.grid.clearWeights();\n\t\t\treturn result;\n\t\t},\n\t\tconvertGridResultToUpdate(input, output, baseArray) {\n\t\t\t\n\t\t\tif (!input)\n\t\t\t\treturn;\n\t\t\tif (!baseArray)\n\t\t\t\tbaseArray = this.indexedItems;\n\t\t\tinput.forEach(item => {\n\t\t\t\tlet result = {\n\t\t\t\t\titem: baseArray[item.index].data\n\t\t\t\t};\n\t\t\t\tif (item.x !== undefined)\n\t\t\t\t\tresult.x = item.x;\n\t\t\t\tif (item.y !== undefined)\n\t\t\t\t\tresult.y = item.y;\n\t\t\t\tif (item.w !== undefined)\n\t\t\t\t\tresult.w = item.w;\n\t\t\t\tif (item.h !== undefined)\n\t\t\t\t\tresult.h = item.h;\n\t\t\t\toutput[item.index] = result;\n\t\t\t});\n\t\t},\n\t\tmouseLeave() {\n\t\t\t/* if (this.mode == MODE_IDLE) {\n\t\t\t\tthis.x = -1;\n\t\t\t\tthis.y = -1;\n\t\t\t\t\n\t\t\t} */\n\t\t},\n\t\tupdateCursor(evt) {\n\t\t\tif (!this.active) {\n\t\t\t\tthis.x = this.y = -1;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst addH = this.active ? this.marginForExtraRow : 0;\n\t\t\tconst rect = this.$refs.container.getBoundingClientRect();\n\t\t\t\n\t\t\tif (!evt.clientX && !evt.clientY && evt.touches){\n\t\t\t\tevt.clientX = evt.touches[0].clientX;\n\t\t\t\tevt.clientY = evt.touches[0].clientY;\n\t\t\t}\n\n\t\t\tthis.clientX = (evt.clientX - rect.left);\n\t\t\tthis.clientY = (evt.clientY - rect.top);\n\t\t\tconst gridX = Math.floor(this.cols * (evt.clientX - rect.left) / this.$refs.container.clientWidth);\n\t\t\tconst gridY = Math.floor((this.rows + addH) * (evt.clientY - rect.top) / this.$refs.container.clientHeight);\n\t\t\t\n\t\t\tif (this.x == gridX && this.y == gridY)\n\t\t\t\treturn false;\n\t\t\t\n\t\t\tthis.x = gridX;\n\t\t\tthis.y = gridY;\n\n\t\t\treturn true;\n\t\t},\n\t\t_dragStart(evt, item) {\n\t\t\tif (evt.dataTransfer) {\n\t\t\t\tevt.dataTransfer.setDragImage(evt.target, -99999, -99999);\n\t\t\t\tevt.dataTransfer.dropEffect = 'move';\n\t\t\t\tevt.dataTransfer.effectAllowed = 'move';\n\t\t\t}\n\t\t},\n\t\tstartMove(evt, item) {\n\t\t\t\n\t\t\tif (!this.active)\n\t\t\t\treturn;\n\t\t\t\n\t\t\tthis.mode = MODE_MOVE;\n\t\t\t\n\t\t\tthis.draggedItem = item;\n\t\t\t\n\t\t\tthis.$emit('draggedItem', item);\n\t\t\t// workaround for chrome fireing event dragend when styles are manipulated during dragging\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.draggedNode = evt.target.closest(\".drop-grid-item\");\n\t\t\t\t//clones the widget for the drag Image\n\t\t\t\t\n\t\t\t\tlet clone = evt.target.closest(\".drop-grid-item\")?.cloneNode(true);\n\n\t\t\t\tclone.style.zIndex = 5;\n\t\t\t\tclone.classList.add(\"widgetClone\");\n\t\t\t\tthis.$refs.container.appendChild(clone);\n\t\t\t\tconst hiddenWidget = clone.querySelector(\"[style='display: none;']\");\n\t\t\t\thiddenWidget.style.removeProperty(\"display\");\n\t\t\t\tthis.clonedWidget = clone;\n\t\t\t}, 0);\n\n\t\t\tthis.draggedOffset = [item.x - this.x, item.y - this.y];\n\t\t\tthis._dragStart(evt, item);\n\t\t},\n\t\tstartResize(evt, item) {\n\t\t\tif (!this.active)\n\t\t\t\treturn;\n\t\t\tthis.mode = MODE_RESIZE;\n\t\t\tthis.draggedItem = item;\n\t\t\tthis.$emit('draggedItem', item);\n\t\t\tthis._dragStart(evt);\n\t\t},\n\t\tdragOver(evt) {\n\t\t\tif ((this.y + 1) > this.rows && (this.mode == MODE_MOVE || this.mode == MODE_RESIZE)) {\n\t\t\t\tthis.dragCancel();\n\t\t\t\t\n\t\t\t}\n\t\t\tif (!this.active)\n\t\t\t\treturn this.dragCancel();\n\t\t\tthis.checkPinnedWidgetAnimation();\n\t\t\tif(this.mode == MODE_RESIZE){\n\t\t\t\tthis.checkWidgetSizeLimitAnimation();\n\t\t\t}\n\t\t\tif (this.updateCursor(evt)) {\n\t\t\t\tswitch(this.mode) {\n\t\t\t\t\tcase MODE_MOVE: {\n\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\tthis.dragGrid = new GridLogic(this.grid);\n\t\t\t\t\t\tlet x = this.x + this.draggedOffset[0];\n\t\t\t\t\t\tlet y = this.y + this.draggedOffset[1];\n\t\t\t\t\t\tif (x < 0) {\n\t\t\t\t\t\t\tthis.draggedOffset[0] += x;\n\t\t\t\t\t\t\tx = 0;\n\t\t\t\t\t\t} else if (x + this.draggedItem.w > this.cols) {\n\t\t\t\t\t\t\tthis.draggedOffset[0] += this.cols - this.draggedItem.w - x;\n\t\t\t\t\t\t\tx = this.cols - this.draggedItem.w;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (y < 0) {\n\t\t\t\t\t\t\tthis.draggedOffset[1] += y;\n\t\t\t\t\t\t\ty = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.positionUpdates= this.dragGrid.move(this.draggedItem, x, y);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase MODE_RESIZE: {\n\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\tthis.dragGrid = new GridLogic(this.grid);\n\t\t\t\t\t\tlet w = Math.min(this.cols - this.draggedItem.x, Math.max(1, this.x - this.draggedItem.x + 1));\n\t\t\t\t\t\tlet h = Math.max(1, this.y - this.draggedItem.y + 1);\n\t\t\t\t\t\tif (this.resizeLimit)\n\t\t\t\t\t\t\t[w, h] = this.resizeLimit(this.draggedItem.data, w, h);\n\t\t\t\t\t\tthis.positionUpdates = this.dragGrid.resize(this.draggedItem, w, h);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdragCancel() {\n\t\t\tthis.removeWidgetClones();\n\t\t\tthis.additionalRowComputed = false;\n\t\t\tthis.toggleDraggedItemOverlay(false);\n\t\t\tthis.mode = MODE_IDLE;\n\t\t\tthis.positionUpdates = null;\n\t\t\tthis.draggedOffset = [0,0],\n\t\t\tthis.draggedItem = null;\n\t\t\tthis.$emit('draggedItem',null);\n\t\t\tthis.draggedNode = null;\n\t\t\t\n\t\t},\n\t\tdragEnd() {\n\t\t\tthis.removeWidgetClones();\n\t\t\tthis.toggleDraggedItemOverlay(false);\n\t\t\t\n\t\t\tif (this.mode == MODE_IDLE){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// clean up unused classes\n\t\t\tlet draggedItemNode = document.getElementById(this.draggedItem.data.widgetid);\n\t\t\tdraggedItemNode.classList.remove(\"border-danger\");\n\t\t\tArray.from(document.getElementsByClassName(\"denied-dragging-animation\"))?.forEach(ele => {\n\t\t\t\tele.classList.remove(\"denied-dragging-animation\");\n\t\t\t})\n\t\t\t\n\t\t\t//if (!this.active || this.x < 0 || this.y < 0 || this.x >= this.cols)\n\t\t\t\t//return this.dragCancel();\n\n\t\t\tthis.mode = MODE_IDLE;\n\t\t\tlet updated = [];\n\t\t\tthis.convertGridResultToUpdate(this.positionUpdates, updated);\n\t\t\tupdated = this._updateFixedPositions(updated);\n\t\t\tif (updated.length)\n\t\t\t\tthis.$emit('rearrangeItems', updated.filter(v => v));\n\n\t\t\tthis.draggedItem = null;\n\t\t\tthis.draggedNode = null;\n\t\t\tthis.$emit('draggedItem', null);\n\t\t},\n\t\t_updateFixedPositions(updated) {\n\t\t\tupdated.forEach((item, index) => {\n\t\t\t\tif (!this.fixedPositionUpdates[index])\n\t\t\t\t\tthis.fixedPositionUpdates[index] = item;\n\t\t\t\telse\n\t\t\t\t\tthis.fixedPositionUpdates[index] = {...this.fixedPositionUpdates[index], ...item};\n\t\t\t});\n\t\t\tlet additionalUpdates = this.createNewGrid(this.prePlacedItems);\n\t\t\tif (additionalUpdates.length) {\n\t\t\t\t// NOTE(chris): this should never happen but it's here for safety\n\t\t\t\tadditionalUpdates.forEach((item, index) => updated[index] = item);\n\t\t\t\treturn this._updateFixedPositions(updated);\n\t\t\t}\n\t\t\treturn updated;\n\t\t},\n\t\temptyTileClicked() {\n\t\t\tthis.additionalRowComputed = false;\n\t\t\tthis.$emit('newItem', this.x, this.y);\n\t\t},\n\t\tupdateCursorOnMouseMove(evt){\n\t\t\tif(this.mode == MODE_IDLE){\n\t\t\t\tthis.updateCursor(evt);\n\t\t\t}\n\t\t},\n\t\tcheckPinnedWidgetAnimation(){\n\t\t\tlet itemAtPosition=[];\n\t\t\tswitch(this.mode){\n\t\t\t\tcase MODE_RESIZE:\n\t\t\t\t\tfor (let x = this.draggedItem.x; x <= this.x; x++) {\n\t\t\t\t\t\tfor (let y = this.draggedItem.y; y <= this.y; y++) {\n\t\t\t\t\t\t\tthis.items.forEach(item => {\n\t\t\t\t\t\t\t\tif (item.x == x && item.y == y) {\n\t\t\t\t\t\t\t\t\titemAtPosition.push(item);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase MODE_MOVE:\n\t\t\t\t\titemAtPosition = this.items.filter(item=>item.x == this.x && item.y == this.y);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tArray.from(document.getElementsByClassName(\"denied-dragging-animation\"))?.forEach(ele => {\n\t\t\t\tele.classList.remove(\"denied-dragging-animation\");\n\t\t\t})\n\n\t\t\titemAtPosition.forEach(item=>{\n\t\t\t\tif (item.place[this.cols] && item.place[this.cols].pinned) {\n\t\t\t\t\tlet pinnedWidget = document.getElementById(item.widgetid);\n\t\t\t\t\tlet pinNode = pinnedWidget.querySelector(\"[pinned='true']\");\n\t\t\t\t\tif (!pinNode.classList.contains(\"denied-dragging-animation\")) {\n\t\t\t\t\t\tpinNode.classList.add(\"denied-dragging-animation\");\n\t\t\t\t\t}\n\t\t\t\t}\t\n\t\t\t})\n\t\t},\n\t\tcheckWidgetSizeLimitAnimation() {\n\n\t\t\tlet draggedItemSetup = this.itemsSetup[this.draggedItem.data.widget];\n\t\t\tlet draggedItemMaxWidth = draggedItemSetup.width.max ?? draggedItemSetup.width;\n\t\t\tlet draggedItemMinWidth = draggedItemSetup.width.min ?? draggedItemSetup.width;\n\t\t\tlet draggedItemMaxHeight = draggedItemSetup.height.max ?? draggedItemSetup.height;\n\t\t\tlet draggedItemMinHeight = draggedItemSetup.height.min ?? draggedItemSetup.height;\n\t\t\tlet draggedItemNode = document.getElementById(this.draggedItem.data.widgetid);\n\n\t\t\tlet width_after_resize = this.x - this.draggedItem.x + 1; \n\t\t\tlet height_after_resize = this.y - this.draggedItem.y + 1; \n\t\t\tif( \n\t\t\t\t(width_after_resize > 0 && (width_after_resize > draggedItemMaxWidth\n\t\t\t\t|| width_after_resize < draggedItemMinWidth)\n\t\t\t\t)\n\t\t\t\t||\n\t\t\t\t(height_after_resize > 0 && (height_after_resize > draggedItemMaxHeight\n\t\t\t\t|| height_after_resize < draggedItemMinHeight)\n\t\t\t\t)\n\t\t\t){\n\t\t\t\tdraggedItemNode.classList.add(\"border-danger\");\n\t\t\t}else{\n\t\t\t\tdraggedItemNode.classList.remove(\"border-danger\");\n\t\t\t}\n\t\t},\n\t\tremoveWidgetClones(){\n\t\t\tlet widgetClones = Array.from(document.getElementsByClassName(\"widgetClone\"));\n\t\t\tfor (let i = 0; i < widgetClones.length; i++) {\n\t\t\t\tthis.$refs.container.removeChild(widgetClones[i]);\n\t\t\t}\n\t\t},\n\t\tmouseDown(){\n\t\t\tthis.mode = MODE_MOUSE_DOWN;\n\t\t},\n\t\tmouseUp() {\n\t\t\tthis.mode = MODE_IDLE;\n\t\t},\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t
`\n}\n\n/*\nOLD VERSION - ON HOVER\n\n\t\n
\n*/","let __widgets = {};\nlet __widgetsStarted = {};\nlet __path = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/dashboard/Widget';\n\nexport default {\n\tgetWidget(id) {\n\t\treturn __widgets[id];\n\t},\n\tloadWidget(id) {\n\t\tif (__widgets[id])\n\t\t\treturn Promise.resolve(__widgets[id]);\n\t\tif (__widgetsStarted[id])\n\t\t\treturn __widgetsStarted[id];\n\t\tif (!__path)\n\t\t\treturn Promise.reject('Widget could not be loaded because there is no path yet!');\n\n\t\t__widgetsStarted[id] = new Promise((resolve, reject) => {\n\t\t\taxios.get(__path, {params:{id}}).then(res => {\n\t\t\t\tres.data.retval.arguments = JSON.parse(res.data.retval.arguments);\n\t\t\t\tres.data.retval.setup = JSON.parse(res.data.retval.setup);\n\t\t\t\t__widgets[id] = res.data.retval;\n\t\t\t\t__widgetsStarted[id] = undefined;\n\t\t\t\tresolve(__widgets[id]);\n\t\t\t}).catch(error => reject(error.response.data.retval.error));\n\t\t});\n\t\treturn __widgetsStarted[id];\n\t},\n\tsetPath(path) {\n\t\t__path = path;\n\t}\n}","import BsModal from \"../Bootstrap/Modal.js\";\nimport CachedWidgetLoader from \"../../composables/Dashboard/CachedWidgetLoader.js\";\nimport HeightTransition from \"../Tranistion/HeightTransition.js\";\n\nexport default {\n\tname: 'Item',\n\tcomponents: {\n\t\tBsModal,\n\t\tHeightTransition\n\t},\n\tdata: () => ({\n\t\tcomponent: \"\",\n\t\targuments: null,\n\t\ttarget: false,\n\t\twidget: null,\n\t\ttmpConfig: {},\n\t\tisLoading: false,\n\t\thasConfig: false,\n\t\tsharedData: null,\n\t}),\n\temits: [\n\t\t\"change\",\n\t\t\"remove\",\n\t\t\"dragstart\",\n\t\t\"resizestart\",\n\t\t\"configOpened\",\n\t\t\"configClosed\",\n\t\t\"pinItem\",\n\t\t\"unPinItem\"\n\t],\n\tprops: [\n\t\t\"id\",\n\t\t\"widgetID\",\n\t\t\"config\",\n\t\t\"width\",\n\t\t\"height\",\n\t\t\"custom\",\n\t\t\"hidden\",\n\t\t\"editMode\",\n\t\t\"loading\",\n\t\t\"item_data\",\n\t\t\"place\",\n\t\t\"setup\",\n\t\t\"dragstate\",\n\t\t\"resizeOverlay\",\n\t\t\"additionalRow\"\n\t],\n\tcomputed: {\n\t\tmaxHeight(){\n\t\t\treturn this.setup?.height?.max;\n\t\t},\n\t\tmaxWidth(){\n\t\t\tif (Object.prototype.toString.call(this.setup?.width) == \"[object Number]\"){\n\t\t\t\treturn this.setup?.width;\n\t\t\t}\n\t\t\treturn this.setup?.width?.max;\n\t\t},\n\t\tminHeight() {\n\t\t\treturn this.setup?.height?.min;\n\t\t},\n\t\tminWidth() {\n\t\t\treturn this.setup?.width?.min;\n\t\t},\n\t\tisResizeable(){\n\t\t\treturn this.maxWidth >1 || this.maxHeight >1;\n\t\t},\n\t\tisPinned(){\n\t\t\treturn this.place?.pinned ? true : false;\n\t\t},\n\t\tready() {\n\t\t\treturn this.component && this.arguments !== null;\n\t\t},\n\t},\n\tmethods: {\n\t\tunpin(){\n\t\t\t// Unpinning is only possible in edit mode\n\t\t\tif(!this.editMode)\n\t\t\t\treturn;\n\t\t\tlet result = { item: this.item_data, x: this.item_data.x, y: this.item_data.y };\n\t\t\tthis.$emit('unPinItem', [result]);\n\t\t},\n\t\tpinItem(){\n\t\t\tlet result = { item: this.item_data, x: this.item_data.x, y: this.item_data.y};\n\t\t\tthis.$emit('pinItem',[result]);\n\t\t},\n\t\tgetWidgetC4Link(widget) {\n\t\t\treturn (FHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router + widget.setup.cis4link)\n\t\t},\n\t\thandleShowBsModal() {\n\t\t\tthis.$emit('configOpened')\n\t\t},\n\t\thandleHideBsModal() {\n\t\t\tthis.$emit('configClosed')\n\t\t},\n\t\tmouseDown(e) {\n\t\t\tthis.target = e.target;\n\t\t},\n\t\tstartDrag(e) {\n\t\t\tif (this.$refs.dragHandle.contains(this.target)) {\n\t\t\t\tthis.$emit(\"dragstart\", e);\n\t\t\t} else if (\n\t\t\t\tthis.isResizeable &&\n\t\t\t\tthis.$refs.resizeHandle.contains(this.target)\n\t\t\t) {\n\t\t\t\tif (this.isResizeable) this.$emit(\"resizestart\", e);\n\t\t\t\telse e.preventDefault();\n\t\t\t} else {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\topenConfig() {\n\t\t\tthis.tmpConfig = { ...this.arguments };\n\t\t\tthis.$refs.config.show();\n\t\t},\n\t\tsetConfig(hasConfig) {\n\t\t\tthis.hasConfig = hasConfig;\n\t\t},\n\t\tchangeConfig() {\n\t\t\tthis.isLoading = true;\n\t\t\tlet config = { ...this.tmpConfig };\n\t\t\tthis.sendChangeConfig(config);\n\t\t},\n\t\tchangeConfigManually() {\n\t\t\tlet config = { ...this.arguments };\n\t\t\tthis.sendChangeConfig(config);\n\t\t},\n\t\tsendChangeConfig(config) {\n\t\t\tfor (var k in config) {\n\t\t\t\tif (this.widget.arguments[k] == config[k]) {\n\t\t\t\tdelete config[k];\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$emit(\"change\", config);\n\t\t},\n\t},\n\twatch: {\n\t\tconfig() {\n\t\t\tthis.arguments = { ...this.widget?.arguments, ...this.config };\n\t\t\tthis.tmpConfig = { ...this.arguments };\n\t\t\tthis.$refs.config && this.$refs.config.hide();\n\t\t\tthis.isLoading = false;\n\t\t},\n\t},\n\tasync created() {\n\t\tthis.widget = await CachedWidgetLoader.loadWidget(this.id);\n\t\tlet component = (await import(FHC_JS_DATA_STORAGE_OBJECT.app_root + this.widget.setup.file + '?' + FHC_JS_DATA_STORAGE_OBJECT.fhcomplete_build_version)).default;\n\t\tthis.$options.components[\"widget\" + this.widget.widget_id] = component;\n\t\tthis.component = \"widget\" + this.widget.widget_id;\n\t\tthis.arguments = { ...this.widget.arguments, ...this.config };\n\t\tthis.tmpConfig = { ...this.arguments };\n\t},\n\ttemplate: /*html*/ `\n\t
\n\t\t
\n\t\t\t\n\t\t
\n\t
\n\t
\n\t
\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{{ widget.setup.name }}\n\t\t\t\n\t\t\t\n\t\t\t\n \t\t\n \t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t\t
\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t
\n\t
`,\n};\n","export default {\n\tdata(){\n\t\treturn {\n\n\t\t}\n\t},\n\tmethods:{\n\t\tonEnter(el,done){\n\t\t\tel.style.height = '0';\n\t\t\tel.style.height = el.scrollHeight + 'px';\n\t\t},\n\t\tonLeave(el,done){\n\t\t\tel.style.height = el.scrollHeight + 'px';\n\t\t\tel.style.height = '0';\n\t\t}\n\t},\n\ttemplate:\n\t/*html*/`\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t`,\n};","export default {\n\tdata(){\n\t\treturn {\n\n\t\t}\n\t},\n\tprops:{\n\t\twidget:{\n\t\t\ttype:Object,\n\t\t\trequired:true,\n\t\t}\n\t},\n\tmethods:{\n\t\tpath(src) {\n\t\t\tif (src[0] == '/')\n\t\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + src;\n\t\t\treturn src;\n\t\t}\n\t},\n\temits:[\"select\"],\n\ttemplate: /*html */`\n\t
\n\t\t\n\t\t
\n\t\t\t
{{ widget.setup.name || widget.widget_kurzbz }}
\n\t\t\t

{{ widget.beschreibung }}

\n\t\t
\n\t
`,\n}","import BsConfirm from \"../Bootstrap/Confirm.js\";\nimport DropGrid from '../Drop/Grid.js'\nimport DashboardItem from \"./Item.js\";\nimport CachedWidgetLoader from \"../../composables/Dashboard/CachedWidgetLoader.js\";\nimport WidgetIcon from \"./Widget/WidgetIcon.js\"\n\nexport default {\n\tname: 'Section',\n\tcomponents: {\n\t\tDropGrid,\n\t\tDashboardItem,\n\t\tWidgetIcon,\n\t},\n\tinject: {\n\t\twidgetsSetup:{\n\t\t\ttype: Array,\n\t\t\tdefault: [],\n\t\t},\n\t\tadminMode: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\teditMode: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\tprops: [\n\t\t\"name\",\n\t\t\"widgets\"\n\t],\n\temits: [\n\t\t\"widgetAdd\",\n\t\t\"widgetUpdate\",\n\t\t\"widgetRemove\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tconfigOpened: false,\n\t\t\tgridWidth: 1,\n\t\t\tgridHeight: null,\n\t\t\tdraggedItem:null,\n\t\t\tadditionalRow:false,\n\t\t}\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\teditModeIsActive: Vue.computed(() =>\n\t\t\t\tthis.editModeIsActive\n\t\t\t),\t\n\t\t\tsectionName: Vue.computed(() => this.name),\t\n\t\t}\n\t},\n\tcomputed: {\n\t\tcomputedWidgetsSetup(){\n\t\t\tif(!this.widgetsSetup) return {};\n\t\t\treturn this.widgetsSetup.reduce((acc, setup)=>{\n\t\t\t\tacc[setup.widget_id] = setup.setup;\n\t\t\t\treturn acc;\n\t\t\t},{})\n\t\t},\n\t\teditModeIsActive() {\n\t\t\treturn (this.editMode || this.adminMode) && !this.configOpened\t\n\t\t},\n\t\tgetSectionStyle() {\n\t\t\treturn 'margin-bottom: 8px;';\n\t\t},\n\t\titems() {\n\t\t\t// reuses the nearest placement of the widget from another viewport \n\t\t\t/* const computeNearestPlace = (item, gridWidth) =>{\n\t\t\t\tlet place;\n\t\t\t\tif (Object.keys(item.place).length > 0) {\n\t\t\t\t\tconst nearestIndex = Object.keys(item.place)\n\t\t\t\t\t\t\t\t\t\t\t .sort((a, b) => Math.abs(a - gridWidth) - Math.abs(b - gridWidth))\n\t\t\t\t\t\t\t\t\t\t\t .shift();\n\t\t\t\t\tplace = item.place[nearestIndex];\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tplace = { x: 0, y: 0, w: 1, h: 1 };\n\t\t\t\t}\n\t\t\t\treturn place;\n\t\t\t} */\n\t\t\t\n\t\t\tlet placedItems = this.widgets.map(item => {\n\t\t\t\tif(!item?.widgetid && item?.id){\n\t\t\t\t\titem.widgetid = item.id;\n\t\t\t\t}\n\t\t\t\treturn { ...item, reorder: false, ...(item.place[this.gridWidth] || { reorder: true, ...{ x: 0, y: 0, w: 1, h: 1 } })};\n\t\t\t});\n\t\t\treturn placedItems;\n\t\t\t\n\t\t},\n\t\t\n\t},\n\tmethods: {\n\t\tsectionNameTranslation(){\n\t\t\tswitch(this.name){\n\t\t\t\tcase \"general\": \n\t\t\t\t\treturn this.$p.t('dashboard',this.name); \n\t\t\t\t\tbreak;\n\t\t\t\tcase \"custom\":\n\t\t\t\t\treturn this.$p.t('dashboard',this.name);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn this.name;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tshowSectionInformation(){\n\t\t\tif (this.name == \"general\"){\n\t\t\t\treturn this.$p.t('dashboard', 'dashboardGeneralSectionDescription'); \n\t\t\t}\n\t\t\telse if(this.name == \"custom\"){\n\t\t\t\treturn this.$p.t('dashboard', 'dashboardCustomSectionDescription');\n\t\t\t}\n\t\t\telse{\n\t\t\t\treturn this.$p.t('dashboard', 'dashboardSectionDescription', [this.name]);\n\t\t\t}\n\t\t},\n\t\thandleConfigOpened() {\n\t\t\tthis.configOpened = true\n\t\t},\n\t\thandleConfigClosed() {\n\t\t\tthis.configOpened = false\n\t\t},\n\t\tcheckResizeLimit(item, w, h) {\n\t\t\t// NOTE(chris): widgets needs to be loaded for this to work\n\t\t\tlet widget = CachedWidgetLoader.getWidget(item.widget);\n\t\t\tif (widget) {\n\t\t\t\tlet minmaxW = widget.setup.width;\n\t\t\t\tif (minmaxW.max)\n\t\t\t\t\tminmaxW.min = minmaxW.min || 1;\n\t\t\t\telse\n\t\t\t\t\tminmaxW = {min:minmaxW,max:minmaxW};\n\t\t\t\tif (w < minmaxW.min)\n\t\t\t\t\tw = minmaxW.min; \n\t\t\t\tif (w > minmaxW.max)\n\t\t\t\t\tw = minmaxW.max;\n\n\t\t\t\tlet minmaxH = widget.setup.height;\n\t\t\t\tif (minmaxH.max)\n\t\t\t\t\tminmaxH.min = minmaxH.min || 1;\n\t\t\t\telse\n\t\t\t\t\tminmaxH = {min:minmaxH,max:minmaxH};\n\t\t\t\tif (h < minmaxH.min)\n\t\t\t\t\th = minmaxH.min;\n\t\t\t\tif (h > minmaxH.max)\n\t\t\t\t\th = minmaxH.max;\n\t\t\t}\n\t\t\treturn [w, h];\n\t\t},\n\t\tremoveWidget(item, revert) {\n\t\t\tif (item.custom) {\n\t\t\t\tBsConfirm.popup('Are you sure you want to delete this widget?').then(() => this.$emit('widgetRemove', this.name, item.id));\n\t\t\t} else {\n\t\t\t\tlet update = {};\n\t\t\t\tupdate[item.id] = { hidden: !revert };\n\t\t\t\tthis.updatePreset(update);\n\t\t\t}\n\t\t},\n\t\tsaveConfig(config, item) {\n\t\t\tlet payload = {};\n\t\t\tpayload[item.id] = { config };\n\t\t\tthis.updatePreset(payload);\n\t\t},\n\t\tupdatePositions(updated, pinned=false) {\n\t\t\tlet result = {};\n\t\t\tupdated.forEach(update => {\n\t\t\t\t\n\t\t\t\tlet item = {...update.item};\n\t\t\t\tif (!item.placeholder) {\n\t\t\t\tif (!item.place[this.gridWidth])\n\t\t\t\t\titem.place[this.gridWidth] = {x: 0, y: 0, w: 1, h: 1};\n\t\t\t\tdelete item.x;\n\t\t\t\tdelete item.y;\n\t\t\t\tdelete item.w;\n\t\t\t\tdelete item.h;\n\t\t\t\tdelete item.place[this.gridWidth].pinned;\n\t\t\t\tif (update.x !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].x = update.x;\n\t\t\t\tif (update.y !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].y = update.y;\n\t\t\t\tif (update.w !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].w = update.w;\n\t\t\t\tif (update.h !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].h = update.h;\n\t\t\t\tif (pinned){\n\t\t\t\t\titem.place[this.gridWidth].pinned = true;\n\t\t\t\t}\n\n\t\t\t\tresult[item.id] = item;\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.updatePreset(result);\n\t\t},\n\t\tupdatePreset(update) {\n\t\t\tlet payload = {};\n\t\t\tpayload[this.name] = update;\n\t\t\tthis.$emit('widgetUpdate', this.name, payload);\n\t\t}\n\t},\n\tmounted() {\n\t\tlet self = this;\n\t\tlet cont = self.$refs.container;\n\t\tself.gridWidth = parseInt(window.getComputedStyle(cont).getPropertyValue('--fhc-dashboard-grid-size'));\n\t\t\n\t\twindow.addEventListener('resize', () => {\n\t\t\tself.gridWidth = parseInt(window.getComputedStyle(cont).getPropertyValue('--fhc-dashboard-grid-size'));\n\t\t});\n\t},\n\ttemplate: `\n\t
\n\t\t

\n\t\t\t\n\t\t\t{{sectionNameTranslation()}}:\n\t\t

\n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
`\n}\n\n/*\nOLD VERSION - ON HOVER\n\n*/","import BsModal from \"../../Bootstrap/Modal.js\";\nimport WidgetIcon from \"./WidgetIcon.js\";\n\nexport default {\n\tcomponents: {\n\t\tBsModal,\n\t\tWidgetIcon,\n\t},\n\tprops: [\n\t\t\"widgets\"\n\t],\n\tdata: () => ({\n\t\tcallbacks: {}\n\t}),\n\tmethods: {\n\t\tgetWidget() {\n\t\t\treturn new Promise((resolve,reject) => {\n\t\t\t\tthis.callbacks = {resolve,reject};\n\t\t\t\tthis.$refs.modal.show();\n\t\t\t});\n\t\t},\n\t\tclose() {\n\t\t\tif (this.callbacks.reject)\n\t\t\t\tthis.callbacks.reject();\n\t\t\tthis.callbacks = {};\n\t\t},\n\t\tpick(widget_id) {\n\t\t\tif (this.callbacks.resolve)\n\t\t\t\tthis.callbacks.resolve(widget_id);\n\t\t\tthis.callbacks = {};\n\t\t\tthis.$refs.modal.hide();\n\t\t},\n\t\t\n\t},\n\ttemplate: `
\n\t\t 0}\" @hiddenBsModal=\"close\">\n\t\t\t\n\t\t\t\n\t\t\n\t
`\n}\n","export default {\n\t/**\n\t* Performs a deep merge of objects and returns new object. Does not modify\n\t* objects (immutable) and merges arrays via concatenation.\n\t*\n\t* @param {...object} objects - Objects to merge\n\t* @returns {object} New object with merged key/values\n\t*/\n\tmergeDeep(...objects) {\n\t\tconst isObject = obj => obj && typeof obj === 'object';\n\t\t\n\t\treturn objects.reduce((prev, obj) => {\n\t\t\tObject.keys(obj).forEach(key => {\n\t\t\t\tconst pVal = prev[key];\n\t\t\t\tconst oVal = obj[key];\n\t\t\t\t\n\t\t\t\tif (Array.isArray(pVal) && Array.isArray(oVal)) {\n\t\t\t\t\tprev[key] = pVal.concat(...oVal);\n\t\t\t\t}\n\t\t\t\telse if (isObject(pVal) && isObject(oVal)) {\n\t\t\t\t\tprev[key] = this.mergeDeep(pVal, oVal);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tprev[key] = oVal;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\treturn prev;\n\t\t}, {});\n\t}\n}","import BsPrompt from \"../Bootstrap/Prompt.js\";\nimport DashboardAdminEdit from \"./Admin/Edit.js\";\nimport DashboardAdminWidgets from \"./Admin/Widgets.js\";\nimport DashboardAdminPresets from \"./Admin/Presets.js\";\n\nexport default {\n\tcomponents: {\n\t\tDashboardAdminEdit,\n\t\tDashboardAdminWidgets,\n\t\tDashboardAdminPresets\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tadminMode: true\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tdashboards: [],\n\t\t\tcurrent: -1,\n\t\t\twidgets: []\n\t\t};\n\t},\n\tcomputed: {\n\t\tapiurl() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/dashboard';\n\t\t},\n\t\tdashboard() {\n\t\t\treturn this.dashboards.find(el => el.dashboard_id == this.current);\n\t\t}\n\t},\n\tmethods: {\n\t\tdashboardAdd() {\n\t\t\tlet _name = '';\n\t\t\tBsPrompt.popup('New Dashboard name').then(\n\t\t\t\tname => {\n\t\t\t\t\t_name = name;\n\t\t\t\t\treturn axios.post(this.apiurl + '/Dashboard/create', {\n\t\t\t\t\t\tdashboard_kurzbz: name\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t).then(res => {\n\t\t\t\tlet newDashboard = {\n\t\t\t\t\tdashboard_id: res.data.retval,\n\t\t\t\t\tdashboard_kurzbz: _name,\n\t\t\t\t\tbeschreibung: ''\n\t\t\t\t};\n\t\t\t\tthis.dashboards.push(newDashboard);\n\t\t\t\tthis.current = newDashboard.dashboard_id;\n\t\t\t}).catch(err => err !== undefined ? console.error('ERROR:', err) : 0);\n\t\t},\n\t\tdashboardUpdate(dashboard) {\n\t\t\t// TODO(chris): Loading or message\n\t\t\taxios.post(this.apiurl + '/Dashboard/update', dashboard).then(() => {\n\t\t\t\tlet old = this.dashboards.find(el => el.dashboard_id == dashboard.dashboard_id);\n\t\t\t\told.dashboard_kurzbz = dashboard.dashboard_kurzbz;\n\t\t\t\told.beschreibung = dashboard.beschreibung;\n\t\t\t}).catch(err => console.error('ERROR:', err));\n\t\t},\n\t\tdashboardDelete(dashboard_id) {\n\t\t\taxios.post(this.apiurl + '/Dashboard/delete', {dashboard_id}).then(() => {\n\t\t\t\tthis.current = -1;\n\t\t\t\tthis.dashboards = this.dashboards.filter(el => el.dashboard_id != dashboard_id);\n\t\t\t}).catch(err => console.error('ERROR:', err));\n\t\t},\n\t\tassignWidgets(widgets) {\n\t\t\tthis.widgets = widgets;\n\t\t\t/*while (this.widgets.length)\n\t\t\t\tthis.widgets.pop();\n\t\t\tfor (var i in widgets)\n\t\t\t\tthis.widgets.push(widgets[i]);*/\n\t\t}\n\t},\n\tcreated() {\n\t\taxios.get(this.apiurl + '/Dashboard').then(res => {\n\t\t\tthis.dashboards = res.data.retval;\n\t\t}).catch(err => console.error('ERROR:', err));\n\t},\n\ttemplate: `
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t
    \n\t\t\t\t
  • \n\t\t\t\t\t\n\t\t\t\t
  • \n\t\t\t\t
  • \n\t\t\t\t\t\n\t\t\t\t
  • \n\t\t\t\t
  • \n\t\t\t\t\t\n\t\t\t\t
  • \n\t\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
`\n}\n","import DashboardSection from \"../Section.js\";\nimport DashboardWidgetPicker from \"../Widget/Picker.js\";\nimport ObjectUtils from \"../../../helpers/ObjectUtils.js\";\n\nexport default {\n\tcomponents: {\n\t\tDashboardSection,\n\t\tDashboardWidgetPicker\n\t},\n\tprops: {\n\t\tdashboard: String,\n\t\twidgets: Array\n\t},\n\tdata: () => ({\n\t\tfunktionen: {},\n\t\tsections: [],\n\t\ttmpLoading: ''\n\t}),\n\tcomputed: {\n\t\tapiurl() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/dashboard';\n\t\t},\n\t\tpickerWidgets() {\n\t\t\treturn this.widgets.filter(widget => widget.allowed);\n\t\t}\n\t},\n\tmethods: {\n\t\twidgetAdd(section_name, widget) {\n\t\t\tthis.$refs.widgetpicker.getWidget().then(widget_id => {\n\t\t\t\twidget.widget = widget_id;\n\t\t\t\tdelete widget.custom;\n\t\t\t\twidget.preset = 1;\n\t\t\t\tlet loading = {...widget};\n\t\t\t\tloading.loading = true;\n\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\tif (section.name == section_name)\n\t\t\t\t\t\tsection.widgets.push(loading);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\taxios.post(this.apiurl + '/Config/addWidgetsToPreset', {\n\t\t\t\t\tdb: this.dashboard,\n\t\t\t\t\tfunktion_kurzbz: section_name,\n\t\t\t\t\twidgets: [widget]\n\t\t\t\t}).then(result => {\n\t\t\t\t\tlet newId = Object.keys(result.data.retval.data[section_name].widgets).pop();\n\t\t\t\t\twidget.id = newId;\n\t\t\t\t\twidget.custom = 1;\n\t\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\t\tif (section.name == section_name) {\n\t\t\t\t\t\t\tsection.widgets.splice(section.widgets.indexOf(loading),1);\n\t\t\t\t\t\t\tsection.widgets.push(widget);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}).catch(error => {\n\t\t\t\t\tconsole.error('ERROR: ', error);\n\t\t\t\t\talert('ERROR: ' + error.response.data.retval);\n\t\t\t\t});\n\t\t\t}).catch(() => {});\n\t\t},\n\t\twidgetUpdate(section_name, payload) {\n\t\t\tpayload = payload[section_name];\n\t\t\tfor (var k in payload) {\n\t\t\t\tfor (var i in this.sections) {\n\t\t\t\t\tif (this.sections[i].name == section_name) {\n\t\t\t\t\t\tfor (var wid in this.sections[i].widgets) {\n\t\t\t\t\t\t\tif (this.sections[i].widgets[wid].id == k) {\n\t\t\t\t\t\t\t\tpayload[k] = ObjectUtils.mergeDeep(this.sections[i].widgets[wid], payload[k]);\n\t\t\t\t\t\t\t\t// NOTE(chris): remove internal props\n\t\t\t\t\t\t\t\tfor (var prop in {_x:1,_y:1,_w:1,_h:1,index:1,id:1})\n\t\t\t\t\t\t\t\t\tif (payload[k][prop])\n\t\t\t\t\t\t\t\t\t\tdelete payload[k][prop];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpayload[k].widgetid = k;\n\t\t\t\tdelete payload[k].custom;\n\t\t\t}\n\t\t\taxios.post(this.apiurl + '/Config/addWidgetsToPreset', {\n\t\t\t\tdb: this.dashboard,\n\t\t\t\tfunktion_kurzbz: section_name,\n\t\t\t\twidgets: payload\n\t\t\t}).then(() => {\n\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\tif (section.name == section_name) {\n\t\t\t\t\t\tsection.widgets.forEach((widget, i) => {\n\t\t\t\t\t\t\tif (payload[widget.id]) {\n\t\t\t\t\t\t\t\tpayload[widget.id].id = widget.id;\n\t\t\t\t\t\t\t\tpayload[widget.id].index = widget.index;\n\t\t\t\t\t\t\t\tsection.widgets[i] = payload[widget.id];\n\t\t\t\t\t\t\t\tsection.widgets[i].custom = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}).catch(error => {\n\t\t\t\t// TODO(chris): revert placement on failure\n\t\t\t\tconsole.error('ERROR: ', error);\n\t\t\t\talert('ERROR: ' + error.response.data.retval);\n\t\t\t});\n\t\t},\n\t\twidgetRemove(section_name, id) {\n\t\t\taxios.post(this.apiurl + '/Config/removeWidgetFromPreset', {\n\t\t\t\tdb: this.dashboard,\n\t\t\t\tfunktion_kurzbz: section_name,\n\t\t\t\twidgetid: id\n\t\t\t}).then(() => {\n\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\tif (section.name == section_name)\n\t\t\t\t\t\tsection.widgets = section.widgets.filter(widget => widget.id != id);\n\t\t\t\t});\n\t\t\t}).catch(error => {\n\t\t\t\tconsole.error('ERROR: ', error);\n\t\t\t\talert('ERROR: ' + error.response.data.retval);\n\t\t\t});\n\t\t},\n\t\tloadSections(evt) {\n\t\t\tlet funktionen = Array.from(evt.target.querySelectorAll(\"option:checked\"),e=>e.value);\n\t\t\tthis.sections = [];\n\t\t\tthis.tmpLoading = funktionen.join('###');\n\t\t\taxios.get(this.apiurl + '/Config/presetBatch', {params: {\n\t\t\t\tdb: this.dashboard,\n\t\t\t\tfunktionen\n\t\t\t}}).then(res => {\n\t\t\t\tif (this.tmpLoading !== funktionen.join('###'))\n\t\t\t\t\treturn; // NOTE(chris): prevent race condition\n\t\t\t\tfor (var section in res.data.retval) {\n\t\t\t\t\tlet widgets = [];\n\t\t\t\t\tfor (var wid in res.data.retval[section]) {\n\t\t\t\t\t\tres.data.retval[section][wid].id = wid;\n\t\t\t\t\t\tres.data.retval[section][wid].custom = 1;\n\t\t\t\t\t\twidgets.push(res.data.retval[section][wid]);\n\t\t\t\t\t}\n\t\t\t\t\tthis.sections.push({\n\t\t\t\t\t\tname: section,\n\t\t\t\t\t\twidgets\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}).catch(err => console.error('ERROR:', err));\n\t\t}\n\t},\n\tcreated() {\n\t\taxios.get(this.apiurl + '/Config/funktionen').then(res => {\n\t\t\tthis.funktionen = {general: 'GENERAL'};\n\t\t\tres.data.retval.forEach(funktion => {\n\t\t\t\tthis.funktionen[funktion.funktion_kurzbz] = funktion.beschreibung;\n\t\t\t});\n\t\t}).catch(err => console.error('ERROR:', err));\n\t},\n\twatch: {\n\t\tdashboard() {\n\t\t\t// TODO(chris): this should be done without a watcher\n\t\t\tthis.loadSections({target:this.$refs.funktionenList});\n\t\t}\n\t},\n\ttemplate: `
\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t\t\n\t
`\n}\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsearch(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/search';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchAdvanced(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/searchAdvanced';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchdummy(searchsettings) {\n\t\tconst url = 'public/js/apps/api/dummyapi.php/Search';\n\t\treturn this.$fhcApi.post(url, searchsettings);\n\t}\n};\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/loadModule/' + category);\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst payload = {categories, language}\n\t\treturn this.$fhcApi.post('/api/frontend/v1/phrasen/setLanguage', payload);\n\t},\n\tgetLanguage() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getLanguage', {});\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getAllLanguages', {});\n\t}\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetHeader(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/header',\n\t\t\t{ navigation_page }\n\t\t);\n\t},\n\tgetMenu: function(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/menu',\n\t\t\t{ navigation_page }\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/saveCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t);\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/applyFilterFields',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t);\n\t},\n\taddFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/addFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tgetFilter(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tabmeldung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/abmeldung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(stdsem, prestudent_id, grund) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/abmeldung/createAntrag', {\n\t\t\t\tstudiensemester: stdsem,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\tif (!Array.isArray(antrag_id))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t\t{ antrag_id }\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag_id.map(antrag => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t{ antrag_id: antrag.studierendenantrag_id },\n\t\t\t\t{ errorHeader: '#' + antrag.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t},\n\tunterbrechung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/unterbrechung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(studiensemester, prestudent_id, grund, datum_wiedereinstieg, attachment) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/createAntrag', {\n\t\t\t\tstudiensemester,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund,\n\t\t\t\tdatum_wiedereinstieg,\n\t\t\t\tattachment\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/cancelAntrag', {\n\t\t\t\tantrag_id\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t}\n\t},\n\twiederholung: {\n\t\tgetDetails(prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/' + prestudent_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tgetLvs(antrag_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getLvs/' + antrag_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tcreate(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/createAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/cancelAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tsaveLvs(forbiddenLvs, mandatoryLvs) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/saveLvs', {\n\t\t\t\tforbiddenLvs,\n\t\t\t\tmandatoryLvs\n\t\t\t});\n\t\t}\n\t},\n\tleitung: {\n\t\tgetStgs() {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getActiveStgs');\n\t\t},\n\t\tgetAntraege(url, config, params) {\n\t\t\treturn this.$fhcApi\n\t\t\t\t.get('/api/frontend/v1/studstatus/leitung/getAntraege/' + url)\n\t\t\t\t.then(res => res.data); // Return data for tabulator\n\t\t},\n\t\tgetHistory(antrag_id) {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getHistory/' + antrag_id)\n\t\t},\n\t\tgetPrestudents(query, signal) {\n\t\t\treturn this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/getPrestudents',\n\t\t\t\t{ query },\n\t\t\t\t{\n signal: signal,\n timeout: 30000\n }\n\t\t\t);\n\t\t},\n\t\tapprove(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treopen(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tunpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tobject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tapproveObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tdenyObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t}\n};","export default {\n\n getView: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getView/${uid}`,{}\n );\n },\n\n fotoSperre: function (value) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/fotoSperre/${value}`,\n {}\n );\n \n },\n\n isStudent: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isStudent`,\n {\n uid:uid,\n }\n );\n },\n\n isMitarbeiter: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isMitarbeiter/${uid}`,\n {}\n );\n },\n\n getZustellAdresse: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellAdresse`,{}\n );\n },\n\n getZustellKontakt: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellKontakt`,{}\n );\n },\n\n getGemeinden: function(nation,zip){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getGemeinden/${nation}/${zip}`,\n {}\n );\n \n },\n getAllNationen:function(){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Profil/getAllNationen\",{}\n );\n },\n}","export default {\n //! API calls for profil update requests\n \n getStatus: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getStatus`,{});\n },\n \n getTopic: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getTopic`,{});\n },\n \n acceptProfilRequest: function ({profil_update_id, uid, status_message, topic, requested_change}) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/acceptProfilRequest\",{profil_update_id, uid, status_message, topic, requested_change});\n },\n \n denyProfilRequest: function ({profil_update_id, uid, topic, status_message}) {\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/denyProfilRequest\",{profil_update_id,uid,topic,status_message});\n },\n \n insertFile: function (dms, replace = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n dms);\n\n },\n \n getProfilRequestFiles: function (requestID) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`,{});\n },\n \n selectProfilRequest: function (uid = null, id = null) {\n\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/selectProfilRequest`,\n {...(uid?{uid}:{}),\n ...(id?{id}:{})\n });\n },\n \n insertProfilRequest: function (topic, payload, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/insertProfilRequest\",\n {\n topic,\n payload,\n ...(fileID ? { fileID } : {}),\n });\n },\n \n updateProfilRequest: function (topic, payload, ID, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/updateProfilRequest`,\n {\n topic,\n payload,\n ID,\n ...(fileID ? { fileID: fileID } : {}),\n });\n },\n \n deleteProfilRequest: function (requestID) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/deleteProfilRequest`,\n {\n requestID,\n });\n },\n };\n ","\nexport default {\n\tgetRoomInfo(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getRoomplan',\n\t\t\t{ ort_kurzbz, start_date, end_date}\n\t\t);\n\t},\n\tgetStunden() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/Stunden',\n\t\t\t{}\n\t\t);\n\t},\n\tgetOrtReservierungen(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/LvPlan/getReservierungen/${ort_kurzbz}`,\n\t\t\t{ start_date, end_date}\n\t\t);\n\t},\n\tgetLvPlanReservierungen(start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getReservierungen',\n\t\t\t{ start_date, end_date }\n\t\t);\n\t},\n\tgetLehreinheitStudiensemester(lehreinheit_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${lehreinheit_id}`,\n\t\t\t{}\n\t\t);\n\t},\n\tstudiensemesterDateInterval(date) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${date}`,\n\t\t\t{}\n\t\t);\n\t},\n\tLvPlanEvents(start_date, end_date, lv_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/LvPlanEvents',\n\t\t\t{ start_date, end_date, lv_id }\n\t\t);\n\t},\n\t\n\t\n};","import verband from './stv/verband.js';\nimport students from './stv/students.js';\nimport filter from './stv/filter.js';\nimport konto from './stv/konto.js';\nimport group from './stv/group.js';\nimport kontakt from './stv/kontakt.js';\nimport prestudent from './stv/prestudent.js';\nimport status from './stv/status.js';\nimport details from './stv/details.js';\nimport exam from './stv/exam.js';\nimport abschlusspruefung from './stv/abschlusspruefung.js';\nimport grades from './stv/grades.js';\nimport mobility from './stv/mobility.js';\nimport archiv from './stv/archiv.js';\nimport documents from './stv/documents.js';\nimport exemptions from './stv/exemptions.js';\nimport jointstudies from \"./stv/jointstudies.js\";\nimport courselist from './stv/courselist.js';\n\nexport default {\n\tverband,\n\tstudents,\n\tfilter,\n\tkonto,\n\tgroup,\n\tkontakt,\n\tprestudent,\n\tstatus,\n\tdetails,\n\texam,\n\tabschlusspruefung,\n\tgrades,\n\tmobility,\n\tarchiv,\n\tdocuments,\n\texemptions,\n\tjointstudies,\n\tcourselist,\n\tconfigStudent() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/student');\n\t},\n\tconfigStudents() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/students');\n\t}\n};\n","export default {\n\tget() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/verband');\n\t},\n\tfavorites: {\n\t\tget() {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/stv/favorites');\n\t\t},\n\t\tset(favorites) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/stv/favorites/set', {\n\t\t\t\tfavorites\n\t\t\t});\n\t\t}\n\t}\n}","export default {\n\tuid(uid, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/uid/'\n\t\t\t+ encodeURIComponent(uid);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tprestudent(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/prestudent/'\n\t\t\t+ encodeURIComponent(prestudent_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tperson(person_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/person/'\n\t\t\t+ encodeURIComponent(person_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tverband(relative_path) {\n\t\treturn this.$fhcApi.getUri('api/frontend/v1/stv/students/' + relative_path);\n\t}\n}","export default {\n\tgetStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/filter/getStg');\n\t},\n\tsetStg(studiengang_kz) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/filter/setStg', {\n\t\t\tstudiengang_kz\n\t\t});\n\t}\n};","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/konto/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id),\n\t\t\t\tonly_open: self.filter,\n\t\t\t\tstudiengang_kz: self.studiengang_kz_intern ? self.stg_kz : ''\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tcheckDoubles(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/checkDoubles', data, {\n\t\t\tconfirmErrorHandler: error => true\n\t\t});\n\t},\n\tinsert(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/insert', data);\n\t},\n\tcounter(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/counter', data);\n\t},\n\tedit(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/update', data);\n\t},\n\tdelete(buchungsnr) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/delete', {buchungsnr});\n\t},\n\tgetBuchungstypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/konto/getBuchungstypen');\n\t}\n};","export default {\n\tgetGruppen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/Gruppen/getGruppen/' + params.id);\n\t},\n\tdeleteGroup(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/Gruppen/deleteGruppe/', params);\n\t}\n}","export default {\n\t//------------- address.js-----------\n\tgetAdressen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressen/' + params.id);\n\t},\n\taddNewAddress(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewAddress/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadAddress(address_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadAddress/', {address_id});\n\t},\n\tupdateAddress(form, address_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateAddress/' + address_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteAddress(address_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteAddress/', {address_id});\n\t},\n\tgetPlaces(plz) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getPlaces/' + plz);\n\t},\n\tgetFirmen(searchString) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getFirmen/' + searchString);\n\t},\n\tgetNations() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getNations/');\n\t},\n\tgetAdressentypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressentypen/');\n\t},\n\n\t//------------- bankverbindung.js-----------\n\tgetBankverbindung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getBankverbindung/' + params.id);\n\t},\n\taddNewBankverbindung(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewBankverbindung/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadBankverbindung(bankverbindung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadBankverbindung/', {bankverbindung_id});\n\t},\n\tupdateBankverbindung(form, bankverbindung_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateBankverbindung/' + bankverbindung_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteBankverbindung(bankverbindung_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteBankverbindung/', {bankverbindung_id});\n\t},\n\n\t//------------- contact.js-----------\n\tgetKontakte (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakte/' + params.id);\n\t},\n\taddNewContact(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewContact/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadContact(kontakt_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadContact/', {kontakt_id});\n\t},\n\tupdateContact(form, kontakt_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateContact/' + kontakt_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteContact(kontakt_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteContact/', {kontakt_id});\n\t},\n\tgetStandorteByFirma(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getStandorteByFirma/' + searchString);\n\t},\n\tgetKontakttypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakttypen/');\n\t}\n};","export default {\n\n//------------- Prestudent.js------------------------------------------------------\n\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\treturn \tthis.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/prestudent/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t);\n\t},\n\tupdatePrestudent(form, prestudent_id, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/prestudent/updatePrestudent/' + prestudent_id,\n\t\t\tdata\n\t\t);\n\t},\n\tgetBezeichnungZGV() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungZGV/');\n\t},\n\tgetBezeichnungMZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungMZgv/');\n\t},\n\tgetBezeichnungDZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungDZgv/');\n\t},\n\tgetStgs() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStgs/');\n\t},\n\tgetAusbildung() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAusbildung/');\n\t},\n\tgetAufmerksamdurch() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAufmerksamdurch/');\n\t},\n\tgetBerufstaetigkeit() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBerufstaetigkeit/');\n\t},\n\tgetTypenStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getTypenStg/');\n\t},\n\tgetBisstandort() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBisstandort/');\n\t},\n\n//------------- MultiStatus.js------------------------------------------------------\n\tgetHistoryPrestudent (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getHistoryPrestudent/' + params.id);\n\t},\n\tgetMaxSem(studiengang_kzs) {\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/status/getMaxSemester/', {studiengang_kzs});\n\t},\n\tadvanceStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/advanceStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tconfirmStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/confirmStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tisLastStatus(id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/isLastStatus/' + id);\n\t},\n\tdeleteStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/deleteStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tgetLastBismeldestichtag() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getLastBismeldestichtag/');\n\t},\n\n//------------- History.js------------------------------------------------------\n\tgetHistoryPrestudents (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getHistoryPrestudents/' + params.id);\n\t},\n\n}","export default {\n\n//------------- Modal.js------------------------------------------------------\n\n\tinsertStatus(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/status/insertStatus/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/status/loadStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tupdateStatus(form, {prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}, data) {\n\t\treturn this.$fhcApi.post(\n\t\t\tform,\n\t\t\t'api/frontend/v1/stv/status/updateStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester,\n\t\t\tdata\n\t\t);\n\t},\n\tgetStudienplaene(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudienplaene/' + prestudent_id);\n\t},\n\tgetStudiengang(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudiengang/' + prestudent_id);\n\t},\n\tgetStatusgruende() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusgruende/');\n\t},\n\tgetStati() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStati/');\n\t},\n\n//------------- Dropdown.js------------------------------------------------------\n\n\taddStudent(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/addStudent/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tchangeStatus(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/changeStatus/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tgetStatusarray() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusarray/');\n\t}\n}","export default {\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/student/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(url);\n\t},\n\tsave(form, prestudent_id, studiensemester_kurzbz, data) {\n\t\tlet url = 'api/frontend/v1/stv/student/save/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(form, url, data);\n\t},\n}\n","export default {\n\tgetPruefungen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getPruefungen/' + params.id);\n\t},\n\tloadPruefung(pruefung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/loadPruefung/' + pruefung_id);\n\t},\n\tgetTypenPruefungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getTypenPruefungen');\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/getAllLehreinheiten/', data)\n\t},\n\tgetLvsByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsByStudent/' + uid)\n\t},\n\tgetLvsandLesByStudent(uid, semester){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsandLesByStudent/' + uid + '/' + semester);\n\t},\n\tgetLvsAndMas(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsAndMas/' + uid)\n\t},\n\tgetMitarbeiterLv(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getMitarbeiterLv/' + id)\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getNoten');\n\t},\n\tcheckZeugnisnoteLv(data){\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/', data)\n\t},\n\taddPruefung(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/insertPruefung/', data);\n\t},\n\tupdatePruefung(form, id, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/updatePruefung/' + id, data);\n\t},\n\tdeletePruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/deletePruefung/' + id)\n\t}\n}","export default {\n\n\tgetAbschlusspruefung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/' + params.id);\n\t},\n\taddNewAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/', data\n\t\t);\n\t},\n\tloadAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/', {id});\n\t},\n\tupdateAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/', data\n\t\t);\n\t},\n\tdeleteAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/', {id});\n\t},\n\tgetTypenAbschlusspruefung(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/');\n\t},\n\tgetTypenAntritte(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/');\n\t},\n\tgetBeurteilungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/');\n\t},\n\tgetAkadGrade(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getAkadGrade/', {studiengang_kz});\n\t},\n\tgetTypStudiengang(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/', {studiengang_kz});\n\t},\n\tgetMitarbeiter(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/' + searchString);\n\t},\n\tgetPruefer(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getPruefer/' + searchString);\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getNoten/');\n\t},\n\tcheckForExistingExams(uids) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/', {uids}\n\t\t);\n\t}\n}","export default {\n\tlist() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/grades/list');\n\t},\n\tgetCertificate(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getCertificate/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetTeacherProposal(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getTeacherProposal/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetRepeaterGrades(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getRepeaterGrades/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tupdateCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, note, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/updateCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz,\n\t\t\t\tnote\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tdeleteCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/deleteCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyTeacherProposalToCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyTeacherProposalToCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id, lv_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate',\n\t\t\t{\n\t\t\t\tstudierendenantrag_lehrveranstaltung_id\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lv_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tgetGradeFromPoints(points, lehrveranstaltung_id, studiensemester_kurzbz, manualErrorHandling) {\n\t\tconst config = manualErrorHandling ? {errorHandling: false} : {};\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/grades/getGradeFromPoints',\n\t\t\t{\n\t\t\t\t\"points\": points,\n\t\t\t\t\"lehrveranstaltung_id\": lehrveranstaltung_id,\n\t\t\t\t\"studiensemester_kurzbz\": studiensemester_kurzbz\n\t\t\t},\n\t\t\tconfig\n\t\t\t);\n\t}\n}","export default {\n\tgetMobilitaeten (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getMobilitaeten/' + params.id);\n\t},\n\tgetProgramsMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getProgramsMobility/');\n\t},\n\taddNewMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/insertMobility/', data);\n\t},\n\tloadMobility(bisio_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/loadMobility/' + bisio_id);\n\t},\n\tupdateMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/updateMobility/', data);\n\t},\n\tdeleteMobility(bisio_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobility/' + bisio_id);\n\t},\n\tgetLVList(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLVList/' + studiengang_kz);\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/getAllLehreinheiten/', data)\n\t},\n\tgetLvsandLesByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLvsandLesByStudent/' + uid);\n\t},\n\tgetPurposes(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getPurposes/' + params.id);\n\t},\n\tgetSupports(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getSupports/' + params.id);\n\t},\n\tgetListPurposes() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListPurposes/');\n\t},\n\tgetListSupports() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListSupports/');\n\t},\n\tdeleteMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilityPurpose/' + params.bisio_id, params);\n\t},\n\taddMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilityPurpose/' + params.bisio_id, params);\n\t},\n\tdeleteMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilitySupport/' + params.bisio_id, params);\n\t},\n\taddMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilitySupport/' + params.bisio_id, params);\n\t},\n\n}","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/archiv/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id)\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tgetArchivVorlagen() {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/getArchivVorlagen');\n\t},\n\tarchive(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archive',\n\t\t\tdata\n\t\t);\n\t},\n\tarchiveSigned(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archiveSigned',\n\t\t\tdata\n\t\t);\n\t},\n\tupdate(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/update', data);\n\t},\n\tdelete({akte_id, studiengang_kz}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/delete', {akte_id, studiengang_kz});\n\t}\n};\n","export default {\n\tgetDocumentsUnaccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tgetDocumentsAccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsAccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tdeleteZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteZuordnung/' + params.prestudent_id + '/' + params.dokument_kurzbz);\n\t},\n\tcreateZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/createZuordnung/'\n\t\t\t+ params.prestudent_id + '/'\n\t\t\t+ params.dokument_kurzbz);\n\t},\n\tloadAkte(akte_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/loadAkte/' + akte_id);\n\t},\n\tgetDoktypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDoktypen/');\n\t},\n\tupdateFile(akte_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/updateAkte/' + akte_id,\n\t\t\tdata);\n\t},\n\tdeleteFile(akte_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteAkte/' + akte_id);\n\t},\n\tuploadFile(prestudent_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/uploadDokument/' + prestudent_id,\n\t\t\tdata);\n\t},\n}","export default {\n\tgetAnrechnungen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getAnrechnungen/' + params.id);\n\t},\n\tgetLehrveranstaltungen(prestudent_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/' + prestudent_id);\n\t},\n\tgetBegruendungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getBegruendungen/');\n\t},\n\tgetLvsKompatibel(lv_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLvsKompatibel/' + lv_id);\n\t},\n\tgetLektoren(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLektoren/' + studiengang_kz);\n\t},\n\taddNewAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/insertAnrechnung/', data);\n\t},\n\tloadAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/loadAnrechnung/' + anrechnung_id);\n\t},\n\teditAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/updateAnrechnung/', data);\n\t},\n\tdeleteAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/anrechnungen/deleteAnrechnung/' + anrechnung_id);\n\t},\n}","export default {\n\tgetStudies(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudien/' + params.id);\n\t},\n\tgetTypenMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/');\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/');\n\t},\n\tgetStudyprograms(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/');\n\t},\n\tgetListPartner(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/');\n\t},\n\tgetStatiPrestudent(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/');\n\t},\n\tloadStudy(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/loadStudie/' + id);\n\t},\n\tinsertStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/insertStudie/', data);\n\t},\n\tupdateStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/updateStudie/', data);\n\t},\n\tdeleteStudy(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/GemeinsameStudien/deleteStudie/' + id);\n\t},\n\n}","export default {\n\tgetCourselist(url, config, params) {\n\t\t//corresponding logic controller Stundenplan.php\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStundenplan/'\n\t\t\t+ params.student_uid + '/'\n\t\t\t+ params.start_date + '/'\n\t\t\t+ params.end_date + '/'\n\t\t\t+ params.group_consecutiveHours + '/'\n\t\t\t+ params.dbStundenplanTable\n\t\t);\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStudiensemester/');\n\t},\n}","import person from \"./notiz/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetNotizen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getUid/');\n\t},\n\taddNewNotiz(form, id, formData) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(form, notiz_id, formData){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getMitarbeiter/' + event);\n\t},\n\tisBerechtigt(id, type_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/isBerechtigt/');\n\t}\n}","import person from \"./betriebsmittel/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetAllBetriebsmittel(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/' + params.type + '/' + params.id);\n\t},\n\taddNewBetriebsmittel(form, person_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/' +\n\t\t\tperson_id, formData\n\t\t);\n\t},\n\tloadBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/' + betriebsmittelperson_id);\n\t},\n\tupdateBetriebsmittel(form, betriebsmittelperson_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/' + betriebsmittelperson_id,\n\t\t\tformData);\n\t},\n\tdeleteBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/' +\tbetriebsmittelperson_id);\n\t},\n\tgetTypenBetriebsmittel(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/');\n\t},\n\tloadInventarliste(query){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/' +\tquery);\n\t}\n}","export default {\n\tupdatePersonUnrulyStatus(person_id, unrulyParam) {\n\n\t\ttry {\n\t\t\tconst payload = {person_id, unruly: unrulyParam}\n\t\t\tconst url = '/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus';\n\t\t\treturn this.$fhcApi.post(url, payload, null);\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t},\n\tfilterPerson(payload, base = ''){\n\n\t\ttry {\n\t\t\tconst url = base + '/api/frontend/v1/checkperson/CheckPerson/filterPerson';\n\t\t\treturn axios.post(url, payload)\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t}\n}","export default {\n getContentID(ort_kurbz) {\n\t\treturn this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Ort/ContentID\",\n\t\t\t{ ort_kurzbz: ort_kurbz }\n\t\t);\n\t},\n\tgetRooms(datum, von, bis, typ, personenanzahl = 0) {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getRooms\",\n\t\t\t{ datum, von, bis, typ, personenanzahl }\n\t\t);\n\t},\n\tgetRoomTypes() {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getTypes\"\n\t\t);\n\t}\n}","export default {\n content(content_id, version=null, sprache=null, sichtbar=null) {\n return this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/content\",\n\t\t\t{ \n\t\t\t\tcontent_id: content_id,\n\t\t\t\t...(version?{version}:{}),\n\t\t\t\t...(sprache?{sprache}:{}),\n\t\t\t\t...(sichtbar?{sichtbar}:{}),\n }\n );\n },\n\t//api function used for the news View that renders the html\n\tgetNews(page = 1, page_size = 10, sprache) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNews\",\n\t\t\t{\n\t\t\t\tpage,\n\t\t\t\tpage_size,\n\t\t\t\tsprache,\n\t\t\t},\n\t\t);\n\t},\n\t//api function used for the widget component\n\tnews(limit) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/news\",\n\t\t\t{\n\t\t\t\tlimit: limit\n\t\t\t}\n\t\t);\n\t},\n\tgetNewsRowCount: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNewsRowCount\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetNewsExtra: function(){\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getStudiengangInfoForNews\",\n\t\t\t{}\n\t\t);\n\t}\n }","export default {\n getStudentenMail(lehreinheit_id) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Lehre/lvStudentenMail\",\n { lehreinheit_id: lehreinheit_id }\n );\n },\n\tgetLvInfo(studiensemester_kurzbz, lehrveranstaltung_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/LV/${studiensemester_kurzbz}/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentPruefungen(lehrveranstaltung_id){\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentProjektarbeiten(uid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getStudentProjektarbeiten/${uid}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentProjektabgaben(detail) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getStudentProjektabgaben`\n\t\t\t, {\n\t\t\t\tprojektarbeit_id: detail.projektarbeit_id,\n\t\t\t\tstudent_uid: detail.student_uid\n\t\t\t}\n\t\t);\n\t},\n\tpostStudentProjektarbeitEndupload(formData) {\n\t\tconst url = '/api/frontend/v1/Lehre/postStudentProjektarbeitEndupload';\n\t\tconst headers = {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\treturn this.$fhcApi.post(url, formData, headers)\n\t},\n\tpostStudentProjektarbeitZwischenabgabe(formData) {\n\t\tconst url = '/api/frontend/v1/Lehre/postStudentProjektarbeitZwischenabgabe';\n\t\tconst headers = {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\treturn this.$fhcApi.post(url, formData, headers)\n\t},\n\tgetStudentProjektarbeitAbgabeFile(paabgabe_id, student_uid) {\n\t\tconst url = `/Cis/Abgabetool/getStudentProjektarbeitAbgabeFile?paabgabe_id=${paabgabe_id}&student_uid=${student_uid}`;\n\n\t\twindow.location = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + url\n\t},\n\tgetMitarbeiterProjektarbeiten(uid, all) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getMitarbeiterProjektarbeiten?showall=${all}`\n\t\t\t, {}\n\t\t);\n\t},\n\tpostProjektarbeitAbgabe(termin) {\n\t\tconst payload = {\n\t\t\tpaabgabe_id: termin.paabgabe_id,\n\t\t\tpaabgabetyp_kurzbz: termin.bezeichnung.paabgabetyp_kurzbz,\n\t\t\tdatum: termin.datum,\n\t\t\tfixtermin: termin.fixtermin,\n\t\t\tinsertvon: termin.insertvon,\n\t\t\tkurzbz: termin.kurzbz,\n\t\t\tprojektarbeit_id: termin.projektarbeit_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/postProjektarbeitAbgabe';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t\t\n\t},\n\tdeleteProjektarbeitAbgabe(paabgabe_id) {\n\t\tconst payload = {\n\t\t\tpaabgabe_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/deleteProjektarbeitAbgabe';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t},\n\tpostSerientermin(datum, paabgabetyp_kurzbz, bezeichnung, kurzbz, projektarbeit_ids) {\n\t\tconst payload = {\n\t\t\tdatum, paabgabetyp_kurzbz, bezeichnung, kurzbz, projektarbeit_ids\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/postSerientermin';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t},\n\tfetchDeadlines(person_id) {\n\t\tconst payload = {\n\t\t\tperson_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/fetchDeadlines';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t}\n }","export default {\n getLvMenu(lvid, studiensemester_kurzbz) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/LvMenu/getLvMenu/${lvid}/${studiensemester_kurzbz}`,\n {}\n );\n },\n\n \n }","import person from \"./messages/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\t\tgetMessages(url, config, params) {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessages/' + params.id + '/' + params.type + '/' + params.size + '/' + params.page);\n\t\t},\n\t\tgetVorlagen(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagen/');\n\t\t},\n\t\tgetMsgVarsLoggedInUser(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/');\n\t\t},\n\t\tgetMessageVarsPerson(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessageVarsPerson/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetMsgVarsPrestudent(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsPrestudent/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPersonId(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getPersonId/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetUid(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getUid/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetDataVorlage(vorlage_kurzbz){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getDataVorlage/' + vorlage_kurzbz);\n\t\t},\n\t\tgetNameOfDefaultRecipient(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getNameOfDefaultRecipient/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPreviewText(params, data){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/getPreviewText/' + params.id + '/' + params.type_id,\n\t\t\t\tdata);\n\t\t},\n\t\tgetReplyData(messageId){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getReplyData/' + messageId);\n\t\t},\n\t\tsendMessageFromModalContext(form, id, data) {\n\t\t\treturn this.$fhcApi.post(form,'api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tsendMessage(id, data) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tdeleteMessage(messageId){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/deleteMessage/' + messageId);\n\t\t}\n}","export default {\n\tgetVorlagen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagen/');\n\t},\n\tgetVorlagenByLoggedInUser() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/');\n\t}\n}","export default {\n\n\tgetStudiensemester: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/components/Cis/Mylv/Studiensemester',\n\t\t\t{}\n\t\t);\n\t},\n\n\tgetAllStudienSemester: function (studiensemester=undefined, studiengang=undefined, semester=undefined, studienplan=undefined) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/Studium/getStudienAllSemester',\n\t\t\t{studiensemester, studiengang, semester, studienplan}\n\t\t);\n\t},\n\n\tgetStudiengaengeForStudienSemester: function (studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${studiensemester}`,\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudienplaeneBySemester: function (studiengang, studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudienplaeneBySemester`,\n\t\t\t{\n\t\t\t\tstudiengang,\n\t\t\t\tstudiensemester,\n\t\t\t}\n\t\t);\n\t},\n\tgetLvPlanForStudiensemester: function (studiensemester, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${studiensemester}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\tgetLvEvaluierungInfo: function (studiensemester_kurzbz, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getLvEvaluierungInfo/${studiensemester_kurzbz}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\t\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport search from \"./search.js\";\nimport phrasen from \"./phrasen.js\";\nimport navigation from \"./navigation.js\";\nimport filter from \"./filter.js\";\nimport studstatus from \"./studstatus.js\";\nimport profil from \"./profil.js\";\nimport profilUpdate from \"./profilUpdate.js\";\nimport lvPlan from \"./lvPlan.js\";\nimport bookmark from \"./bookmark.js\";\nimport stv from \"./stv.js\";\nimport notiz from \"./notiz.js\";\nimport betriebsmittel from \"./betriebsmittel.js\";\nimport checkperson from \"./checkperson.js\";\nimport ampeln from \"./ampeln.js\";\nimport ort from \"./ort.js\";\nimport cms from \"./cms.js\";\nimport lehre from \"./lehre.js\";\nimport addons from \"./addons.js\";\nimport messages from \"./messages.js\";\nimport vorlagen from \"./vorlagen.js\";\nimport studiengang from \"./studiengang.js\";\nimport menu from \"./menu.js\";\nimport dashboard from \"./dashboard.js\";\nimport authinfo from \"./authinfo.js\";\nimport studium from \"./studium.js\";\nimport language from \"./language.js\";\n\nexport default {\n search,\n phrasen,\n navigation,\n dashboard,\n filter,\n studstatus,\n profil,\n profilUpdate,\n lvPlan,\n bookmark,\n stv,\n notiz,\n betriebsmittel,\n checkperson,\n ampeln,\n ort,\n cms,\n lehre,\n addons,\n messages,\n vorlagen,\n addons,\n\tstudiengang,\n\tmenu,\n\tauthinfo,\n\tstudium,\n language\n};\n","export default {\n\tasync getViewData() {\n\t\tconst url = `/api/frontend/v1/Cis4FhcApi/getViewData`;\n\t\treturn this.$fhcApi.get(url, null, null)\n\t},\n}","export default {\n\n getBookmarks: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/getBookmarks`\n ,{}\n );\n },\n \n delete: function (bookmark_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/delete/${bookmark_id}`\n ,{}\n ); \n },\n\n\tupdate: function ({ bookmark_id, url, title, tag=null}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/Bookmark/update/${bookmark_id}`\n\t\t\t, {\n\t\t\t\turl: url,\n\t\t\t\ttitle: title\n\t\t\t}\n\t\t);\n\t},\n\n insert: function ({url, title, tag}) {\n return this.$fhcApi.post(\n `/api/frontend/v1/Bookmark/insert`\n ,{\n url: url,\n title: title,\n tag: tag\n }\n ); \n },\n}","export default {\n \n open: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/open`,{});\n },\n\n all: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/all`,{});\n },\n\n confirm: function (ampel_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/confirm/${ampel_id}`,{});\n },\n\n}","export default {\n\tstudiengangInformation: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Studgang/getStudiengangInfo\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudiengangByKz: function (studiengang_kz) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz\",\n\t\t\t{\n\t\t\t\t\"studiengang_kz\": studiengang_kz\n\t\t\t}\n\t\t);\n\t}\n}","export default {\n\tgetMenu: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/CisMenu/getMenu\",\n\t\t\t{}\n\t\t);\n\t}\n\n}","\nexport default {\n\tgetAuthUID() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthUID',\n\t\t\t{ }\n\t\t);\n\t},\n\tgetAuthInfo() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthInfo',\n\t\t\t{}\n\t\t);\n\t},\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAll() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/language/get');\n\t}\n};","/** TODO(chris):\n * when deleting this file be sure to\n * remove line 1 & 90 from ../plugins/Phrasen.js\n */\nimport FhcApiFactory from '../api/fhcapifactory.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$fhcApi) {\n\t\t\t/* Deprecated Code start */\n\t\t\tif (options?.factory) {\n\t\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\t\tapp.config.globalProperties.$fhcApi.factory.addEndpoints(options.factory);\n\t\t\t}\n\t\t\t/* Deprecated Code end */\n\t\t\treturn;\n\t\t}\n\n\t\tfunction _get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\n\t\tfunction _clean_return_value(response) {\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = {response};\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tconst baseURL = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\";\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(response => {\n\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\treturn _clean_return_value(response);\n\n\t\t\t// NOTE(chris): loop through errors\n\t\t\tif (response.data.errors)\n\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t);\n\n\t\t\treturn _clean_return_value(response);\n\t\t}, error => {\n\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\n\t\t\tif (error.config?.errorHandling == 'off'\n\t\t\t\t|| error.config?.errorHandling === false\n\t\t\t\t|| error.config?.errorHandling == 'success')\n\t\t\t\treturn Promise.reject(error);\n\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL, true);\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t\t}\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\terror.response.data.errors = error.response.data.errors.filter(\n\t\t\t\t\terr => (error.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, error.config)\n\t\t\t\t);\n\t\t\t\tif (!error.response.data.errors.length)\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else if (error.request) {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertError(error.message);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t}\n\n\t\t\treturn Promise.reject(error);\n\t\t});\n\n\t\tapp.config.globalProperties.$fhcApi = {\n\t\t\tgetUri(url) {\n\t\t\t\tconsole.warn('$fhcApi.getUri is DEPRECATED! Use $api.getUri instead.');\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\tconsole.warn('$fhcApi.get is DEPRECATED! Use $api.get instead.');\n\t\t\t\t[uri, params, config] = _get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\tconsole.warn('$fhcApi.post is DEPRECATED! Use $api.post instead.');\n\t\t\t\t[uri, data, config] = _get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\t_defaultErrorHandlers: {\n\t\t\t\tvalidation(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form) {\n\t\t\t\t\t\tconfig.form.clearValidation();\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.messages);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(error.messages)) {\n\t\t\t\t\t\terror.messages.forEach($fhcAlert.alertError);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (typeof error.messages == 'object') {\n\t\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t\tObject.values(error.messages).forEach(\n\t\t\t\t\t\t\t\tvalue => $fhcAlert.alertDefault(\n\t\t\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tObject.entries(error.messages).forEach(\n\t\t\t\t\t\t\t\t([key, value]) => $fhcAlert.alertDefault('error', key, value, true)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tgeneral(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form)\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.message);\n\t\t\t\t\telse if (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertError(error.message);\n\t\t\t\t},\n\t\t\t\tphp(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('warn', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('info', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\texception(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tdb(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tauth(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertDefault('error', error.message, message);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/* Deprecated Code start */\n\t\tclass FhcApiFactoryWrapper {\n\t\t\tconstructor(factorypart, root) {\n\t\t\t\tif (root === undefined) {\n\t\t\t\t\tthis.$fhcApi = {\n\t\t\t\t\t\tgetUri(url) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.getUri(url);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget(form, uri, params, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.get(form, uri, params, config);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpost(form, uri, data, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.post(form, uri, data, config);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tObject.defineProperty(this.$fhcApi, 'factory', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.factory;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tapp.config.globalProperties.$fhcApi.factory = this;\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty(this, '$fhcApi', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\treturn (root || this).$fhcApi;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.addEndpoints(factorypart, true)\n\t\t\t}\n\n\t\t\taddEndpoints(factorypart, noWarn) {\n\t\t\t\tObject.keys(factorypart).forEach(key => {\n\t\t\t\t\tObject.defineProperty(this, key, {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tif (typeof factorypart[key] == 'function')\n\t\t\t\t\t\t\t\treturn factorypart[key].bind(this);\n\t\t\t\t\t\t\treturn new FhcApiFactoryWrapper(factorypart[key], this.$fhcApi.factory);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tif (!noWarn) console.warn('$fhcApi.factory.addEndpoints() is DEPRECATED!');\n\t\t\t}\n\t\t}\n\n\t\tconst factory = new FhcApiFactoryWrapper(FhcApiFactory);\n\t\tif (options?.factory) {\n\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\tfactory.addEndpoints(options.factory);\n\t\t}\n\n\t\tapp.config.globalProperties.$fhcApi.factory = factory;\n\t\t/* Deprecated Code end */\n\t\t\n\t\tapp.provide('$fhcApi', app.config.globalProperties.$fhcApi);\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n//--------------------------------------------------------------------------------------------------------------------\n// Configs\n\n// To see debug messages into the browser console set this parameter as true\nconst CORE_REST_CLIENT_DEBUG = false;\n\n// Default timeout (milliseconds)\nconst CORE_REST_CLIENT_TIMEOUT = 5000;\n\n//--------------------------------------------------------------------------------------------------------------------\n// Constants\n\n// Success\nconst CORE_REST_CLIENT_SUCCESS = 0;\n\n// Properties present in a response\nconst CORE_REST_CLIENT_ERROR = \"error\";\nconst CORE_REST_CLIENT_RETVAL = \"retval\";\n\n// HTTP method parameters\nconst CRC_HTTP_GET_METHOD = \"get\";\nconst CRC_HTTP_POST_METHOD = \"post\";\n\n/**\n * Definition and initialization of the object CoreRESTClient\n */\nexport const CoreRESTClient = {\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Public methods\n\n\t/**\n\t * Performs a call using the HTTP GET method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tget: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_GET_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Performs a call using the HTTP POST method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tpost: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_POST_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Checks if the response is a success\n\t */\n\tisSuccess: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR)\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL) && response.error == CORE_REST_CLIENT_SUCCESS)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Checks if the response is an error\n\t */\n\tisError: function(response) {\n\t\treturn !CoreRESTClient.isSuccess(response);\n\t},\n\n\t/**\n\t * Checks if the response has data\n\t */\n\thasData: function(response) {\n\n\t\tif (CoreRESTClient.isSuccess(response))\n\t\t{\n\t\t\tif ((typeof response[CORE_REST_CLIENT_RETVAL] === \"object\" && Object.keys(response[CORE_REST_CLIENT_RETVAL]).length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"array\" && response[CORE_REST_CLIENT_RETVAL].length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"string\" && response[CORE_REST_CLIENT_RETVAL].trim() != \"\")\n\t\t\t\t|| typeof response[CORE_REST_CLIENT_RETVAL] === \"number\")\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Retrives data from response object\n\t */\n\tgetData: function(response) {\n\n\t\tif (CoreRESTClient.hasData(response))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Retrives error message from response object\n\t */\n\tgetError: function(response) {\n\n\t\tif (typeof response === \"object\"\n\t\t\t&& Object.keys(response).length > 0\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn \"Generic error\";\n\t},\n\n\t/**\n\t * Retrives code from response object\n\t */\n\tgetErrorCode: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_ERROR];\n\t\t}\n\n\t\treturn 1; // Generic error\n\t},\n\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Private methods\n\n\t/**\n\t * Generate the router URI using the connection parameters\n\t */\n\t_generateRouterURI: function(wsURL) {\n\t\tvar uri = null;\n\n\t\t// Checks if global JS object FHC_JS_DATA_STORAGE_OBJECT exists\n\t\tif (typeof FHC_JS_DATA_STORAGE_OBJECT !== \"undefined\")\n\t\t{\n\t\t\turi = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\" + wsURL;\n\t\t}\n\n\t\treturn uri;\n\t},\n\n\t/**\n\t * Method to print debug info after a controller has been called\n\t */\n\t_printDebug: function(parameters, response, errorThrown) {\n\n\t\tif (CORE_REST_CLIENT_DEBUG === true) // If global const CORE_REST_CLIENT_DEBUG is true, but really true!\n\t\t{\n\t\t\t// Print info about called controller\n\t\t\tconsole.log(\"Called controller: \" + parameters.remoteController);\n\t\t\tconsole.log(\"Call parameters:\"); // parameters given to this call\n\t\t\tconsole.log(parameters);\n\n\t\t\tif (response != null) // if there is a response...\n\t\t\t{\n\t\t\t\tconsole.log(\"Controller Response:\");\n\t\t\t\tconsole.log(response); // ...print it\n\t\t\t}\n\t\t\tif (errorThrown != null) // if there is a jQuery error...\n\t\t\t{\n\t\t\t\tconsole.log(\"jQuery error:\");\n\t\t\t\tconsole.log(errorThrown); // ...print it\n\t\t\t}\n\t\t\tconsole.log(\"--------------------------------------------------------------------------------------------\");\n\t\t}\n\t},\n\n\t/**\n\t * Performs a call to the server were the CI PHP layer is running\n\t * - wsURL: alias of the core controller to call\n\t * - wsParameters: parameters to give to the called controller\n\t * - type: POST or GET HTTP method\n\t * - axiosParameters: an object to configure the axios call\n\t */\n\t_axiosCall: function(wsURL, wsParameters, type, axiosParameters) {\n\n\t\t// Axios config object\n\t\tlet axiosCallObj = {\n\t\t\tmethod: type,\n\t\t\turl: CoreRESTClient._generateRouterURI(wsURL),\n\t\t\ttimeout: CORE_REST_CLIENT_TIMEOUT // default time out\n\t\t};\n\n\t\t// The ajax call is HTTP GET\n\t\tif (type == CRC_HTTP_GET_METHOD)\n\t\t{\n\t\t\taxiosCallObj.params = wsParameters;\n\t\t}\n\t\t// The ajax call is HTTP POST\n\t\telse\n\t\t{\n\t\t\taxiosCallObj.data = wsParameters;\n\t\t}\n\n\t\t// Check if axiosParameters is an object\n\t\tif (typeof axiosParameters === \"object\")\n\t\t{\n\t\t\t// And then copies the its properties into axiosCallObj\n\t\t\tfor (var prop in axiosParameters) axiosCallObj[prop] = axiosParameters[prop];\n\t\t}\n\n\t\t// Perform the ajax call via axios\n\t\treturn axios(axiosCallObj);\n\t}\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n * \n * @usage:\n * Preperations:\n * Be sure to have PrimeVue loaded with the toast and confirmdialog\n * components as primevue variable\n * Install:\n * Import this Plugin and install it with the app.use() function.\n * Use:\n * In your component you can call now the global property $fhcAlert\n * which has the following functions:\n * \n * alertSuccess\n * ------------\n * Displays a success message\n * @param string\tmessage\n * @return void\n * \n * alertInfo\n * ---------\n * Displays an info message\n * @param string\tmessage\n * @return void\n * \n * alertWarning\n * ------------\n * Displays a warning\n * @param string\tmessage\n * @return void\n * \n * alertError\n * ----------\n * Displays an error\n * @param string\tmessage\n * @return void\n * \n * alertSystemError\n * ----------------\n * Displays an alert with the error details and a button to mail\n * the error to the Support Team\n * @param string\tmessage\n * @return void\n * \n * confirmDelete\n * -------------\n * Displays a confirmation dialog and returns a Promise which resolves\n * with true or false depending und the pressed button.\n * @return Promise\n * \n * alertDefault\n * ------------\n * Displays an alert\n * @param string\tseverity\t\tcan be 'success', 'info', 'warning', 'error'\n * @param string\ttitle\n * @param string\tmessage\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * alertMultiple\n * -------------\n * Displays multiple alerts\n * @param array\t\tmessageArray\n * @param string\tseverity\t\t(optional) defaults to 'info'\n * @param string\ttitle\t\t\t(optional) defaults to 'Info'\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * handleSystemError\n * -----------------\n * Automatiticly determine how to display an system error and display it.\n * This would be used in a catch block of an ajax call.\n * @param mixed\t\terror\n * @return void\n * \n * handleSystemMessage\n * -------------------\n * Automatiticly determine how to display a message and display it.\n * @param mixed\t\tmessage\n * @return void\n */\nimport PvConfig from \"../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js\";\nimport PvToast from \"../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js\";\nimport PvConfirm from \"../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js\";\nimport PvConfirmationService from \"../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js\";\nimport FhcPhrasen from \"./Phrasen.js\";\n\nimport {CoreRESTClient} from '../RESTClient.js';\n\nconst helperAppContainer = document.createElement('div');\n\nconst helperApp = Vue.createApp({\n\tname: \"FhcAlertApp\",\n\tcomponents: {\n\t\tPvToast,\n\t\tPvConfirm\n\t},\n\tmethods: {\n\t\tmailToUrl(slotProps) {\n\t\t\tlet mailTo = FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto;\n\t\t\tlet subject = 'Meldung%20Systemfehler';\n\t\t\tlet body = `\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: ` + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method + `%0D%0A\n\t\t\t\tFehler Meldung: ` + slotProps.message.detail + `%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!`\n\n\t\t\treturn \"mailto:\" + mailTo + \"?subject=\" + subject + \"&body=\" + body;\n\t\t},\n\t\topenMessagecard(e) {\n\t\t\tbootstrap.Collapse.getOrCreateInstance(e.target.getAttribute('href')).toggle();\n\t\t}\n\t},\n\tunmounted() {\n\t\thelperAppContainer.parentElement.removeChild(helperAppContainer);\n\t},\n\tcomputed: {\n\t\tshowmaillink: function() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto !== '';\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t`\n});\n\nhelperApp.use(PvConfig);\nhelperApp.use(PvConfirmationService);\n//helperApp.use(FhcPhrasen);\n\nconst helperAppInstance = helperApp.mount(helperAppContainer);\n\ndocument.body.appendChild(helperAppContainer);\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (!app.config.globalProperties.$p)\n\t\t\tapp.use(FhcPhrasen);\n\n\t\tconst $fhcAlert = {\n\t\t\talertSuccess(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSuccess);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'success', summary: 'Info', detail: message, life: 1000});\n\t\t\t},\n\t\t\talertInfo(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertInfo);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'info', summary: 'Info', detail: message, life: 3000 });\n\t\t\t},\n\t\t\talertWarning(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertWarning);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'warn', summary: 'Achtung', detail: message});\n\t\t\t},\n\t\t\talertError(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertError);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'error', summary: 'Achtung', detail: message });\n\t\t\t},\n\t\t\talertSystemError(message) {\n\t\t\t\t//TODO(Manu) for translation of content of template: restructure in data\n\t\t\t\t//and update definitions with translations\n\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSystemError);\n\t\t\t\thelperAppInstance.$refs.alert.add({\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t\tsummary: Vue.computed(() => app.config.globalProperties.$p.t('alert/systemerror')),\n\t\t\t\t\tdetail: message});\n\t\t\t},\n\t\t\tconfirmDelete() {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: 'fhcAlertConfirm',\n\t\t\t\t\t\theader: Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: Vue.computed(() => app.config.globalProperties.$p.t('alert/confirm_delete')),\n\t\t\t\t\t\tacceptLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/loeschen')),\n\t\t\t\t\t\tacceptClass: 'p-button-danger',\n\t\t\t\t\t\trejectLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: 'p-button-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tconfirm(options) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: options?.group ?? 'fhcAlertConfirm',\n\t\t\t\t\t\theader: options?.header ?? Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: options?.message ?? '',\n\t\t\t\t\t\tacceptLabel: options?.acceptLabel ?? 'Ok',\n\t\t\t\t\t\tacceptClass: options?.acceptClass ?? 'btn btn-primary',\n\t\t\t\t\t\trejectLabel: options?.rejectLabel ?? Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: options?.rejectClass ?? 'btn btn-outline-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\talertDefault(severity, title, message, sticky = false, html = false) {\n\t\t\t\tlet options = { severity: severity, summary: title, detail: message, html };\n\t\t\t\t\n\t\t\t\tif (!sticky)\n\t\t\t\t\toptions.life = 3000;\n\n\t\t\t\thelperAppInstance.$refs.toast.add(options);\n\t\t\t},\n\t\t\talertMultiple(messageArray, severity = 'info', title = 'Info', sticky = false, html = false){\n\t\t\t\t// Check, if array has only string values\n\t\t\t\tif (messageArray.every(message => typeof message === 'string')) {\n\t\t\t\t\tmessageArray.forEach(message => this.alertDefault(severity, title, message, sticky, html));\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\thandleSystemError(error) {\n\t\t\t\t// don't show an error message to the user if the error was an aborted request\n\t\t\t\tif(error.hasOwnProperty('name') && error.name.toLowerCase() === \"AbortError\".toLowerCase())\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is string\n\t\t\t\tif (typeof error === 'string')\n\t\t\t\t\treturn $fhcAlert.alertSystemError(error);\n\n\t\t\t\t// Error is array of strings\n\t\t\t\tif (Array.isArray(error) && error.every(err => typeof err === 'string'))\n\t\t\t\t\treturn error.every($fhcAlert.alertSystemError);\n\n\t\t\t\t// Error has been handled already\n\t\t\t\tif (error.hasOwnProperty('handled') && error.handled)\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is object\n\t\t\t\tif (typeof error === 'object' && error !== null) {\n\t\t\t\t\tlet errMsg = '';\n\n\n\t\t\t\t\tif (error.hasOwnProperty('response') && error.response?.data?.retval)\n\t\t\t\t\t\terrMsg += 'Error Message: ' + (error.response.data.retval.message || error.response.data.retval) + '\\r\\n';\n\t\t\t\t\telse if (error.hasOwnProperty('message'))\n\t\t\t\t\t\terrMsg += 'Error Message: ' + error.message.toUpperCase() + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('config') && error.config.hasOwnProperty('url'))\n\t\t\t\t\t\terrMsg += 'Error ConfigURL: ' + error.config.url + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('stack'))\n\t\t\t\t\t\terrMsg += 'Error Stack: ' + error.stack + '\\r\\n';\n\t\t\t\t\t\n\t\t\t\t\t// Fallback object error message\n\t\t\t\t\tif (errMsg == '')\n\t\t\t\t\t\terrMsg = 'Error Message: ' + JSON.stringify(error) + '\\r\\n';\n\n\t\t\t\t\terrMsg += 'Error Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\n\t\t\t\t\treturn $fhcAlert.alertSystemError(errMsg);\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\thandleSystemMessage(message) {\n\t\t\t\t// Message is string\n\t\t\t\tif (typeof message === 'string')\n\t\t\t\t\treturn $fhcAlert.alertWarning(message);\n\n\t\t\t\t// Message is array of strings\n\t\t\t\tif (Array.isArray(message)) {\n\t\t\t\t\t// If Array has only Strings\n\t\t\t\t\tif (message.every(msg => typeof msg === 'string'))\n\t\t\t\t\t\treturn message.every($fhcAlert.alertWarning);\n\n\t\t\t\t\t// If Array has only Objects\n\t\t\t\t\tif (message.every(msg => typeof msg === 'object') && msg !== null) {\n\t\t\t\t\t\treturn message.every(msg => {\n\t\t\t\t\t\t\tif (msg.hasOwnProperty('data') && msg.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(msg.data.retval));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(msg));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Message is Object with data property\n\t\t\t\tif (typeof message === 'object' && message !== null){\n\t\t\t\t\tif (message.hasOwnProperty('data') && message.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t// NOTE(chris): changed: alertSystemError => alertWarning\n\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(message.data.retval));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(message));\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\tresetFormValidation(form) {\n\t\t\t\tconst event = new Event('fhc-form-reset');\n\t\t\t\tform.querySelectorAll(['[data-fhc-form-validate],[data-fhc-form-error]']).forEach(el => el.dispatchEvent(event));\n\t\t\t\t/*const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\tif (alert) {\n\t\t\t\t\talert.innerHTML = '';\n\t\t\t\t\talert.classList.add('d-none');\n\t\t\t\t}\n\t\t\t\tform.querySelectorAll('.invalid-feedback').forEach(n => n.remove());\n\t\t\t\tform.querySelectorAll('.is-invalid').forEach(n => n.classList.remove('is-invalid'));\n\t\t\t\tform.querySelectorAll('.is-valid').forEach(n => n.classList.remove('is-valid'));*/\n\t\t\t},\n\t\t\thandleFormValidation(error, form) {\n\t\t\t\tif (form === undefined) {\n\t\t\t\t\tif (error && error.nodeType === Node.ELEMENT_NODE)\n\t\t\t\t\t\treturn err => $fhcAlert.handleFormValidation(err, error);\n\t\t\t\t} else {\n\t\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t\tif (typeof errors !== \"object\")\n\t\t\t\t\t\t\terrors = error.response.data;\n\n\t\t\t\t\t\t// NOTE(chris): reset form validation\n\t\t\t\t\t\t$fhcAlert.resetFormValidation(form);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// NOTE(chris): set form input validation\n\t\t\t\t\t\tconst notFound = Object.entries(errors).filter(([key, detail]) => {\n\t\t\t\t\t\t\tconst input = form.querySelector('[data-fhc-form-validate=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\tinput.dispatchEvent(new CustomEvent('fhc-form-invalidate', {detail}));\n\n\t\t\t\t\t\t\t/*const input = form.querySelector('[name=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\tinput.classList.add('is-invalid');\n\t\t\t\t\t\t\tconst feedback = document.createElement('div');\n\t\t\t\t\t\t\tfeedback.classList.add('invalid-feedback');\n\t\t\t\t\t\t\tfeedback.innerHTML = detail;\n\t\t\t\t\t\t\tinput.after(feedback);*/\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}).map(arr => arr[1]);\n\n\n\t\t\t\t\t\t//const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\t\t\tconst alert = form.querySelector('[data-fhc-form-error]');\n\t\t\t\t\t\tif (alert && notFound.length) {\n\t\t\t\t\t\t\talert.dispatchEvent(new CustomEvent('fhc-form-error', {detail: notFound}));\n\t\t\t\t\t\t\t/*notFound.forEach(txt => {\n\t\t\t\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\t\t\t\tp.innerHTML = txt;\n\t\t\t\t\t\t\t\talert.append(p);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (notFound.length) {\n\t\t\t\t\t\t\t\talert.lastChild.classList.add('mb-0');\n\t\t\t\t\t\t\t\talert.classList.remove('d-none');\n\t\t\t\t\t\t\t}*/\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnotFound.forEach($fhcAlert.alertError);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t$fhcAlert.alertError((typeof errors === 'object') ? Object.values(errors) : errors);\n\t\t\t\t} else {\n\t\t\t\t\t$fhcAlert.handleSystemError(error);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tapp.config.globalProperties.$fhcAlert = $fhcAlert;\n\t\tapp.provide('$fhcAlert', app.config.globalProperties.$fhcAlert);\n\t}\n}","import FhcAlert from './FhcAlert.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$api) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!app.config.globalProperties.$fhcAlert)\n\t\t\tapp.use(FhcAlert);\n\n\t\tfunction _send_array_or_object(errors, func) {\n\t\t\tif (Array.isArray(errors))\n\t\t\t\terrors.forEach(func);\n\t\t\telse\n\t\t\t\tObject.entries(errors).forEach(\n\t\t\t\t\t([title, errs]) => errs.forEach(\n\t\t\t\t\t\terror => func(error, title)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t}\n\t\tlet DEFAULT_ERROR_CONFIG = {\n\t\t\tsuccess: true,\n\t\t\tfail: true,\n\t\t\tcombine: {\n\t\t\t\tform: ['validation', 'general'],\n\t\t\t\ttoast: ['validation', 'general', 'not_found', 'site_failed']\n\t\t\t},\n\t\t\thandler: {\n\t\t\t\tform(form, errors) {\n\t\t\t\t\tform.clearValidation();\n\t\t\t\t\terrors.forEach(err => form.setFeedback(\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\terr.messages || err.message\n\t\t\t\t\t));\n\t\t\t\t},\n\t\t\t\tasync toast(errors) {\n\t\t\t\t\tconst $p = app.config.globalProperties.$p;\n\t\t\t\t\tif (!$p)\n\t\t\t\t\t\treturn Promise.reject('Phrasen plugin not loaded!');\n\t\t\t\t\n\t\t\t\t\tasync function _format_toast(errors) {\n\t\t\t\t\t\terrors = errors.reduce((result, err) => {\n\t\t\t\t\t\t\tswitch (err.type) {\n\t\t\t\t\t\t\tcase 'not_found':\n\t\t\t\t\t\t\tcase 'site_failed':\n\t\t\t\t\t\t\t\tif (err.message)\n\t\t\t\t\t\t\t\t\tresult[err.message] = [err.url];\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tresult._default = [err.url];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'general':\n\t\t\t\t\t\t\t\tif (!result._default)\n\t\t\t\t\t\t\t\t\tresult._default = [];\n\t\t\t\t\t\t\t\tresult._default.push(err.message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'validation':\n\t\t\t\t\t\t\t\tObject.entries(err.messages)\n\t\t\t\t\t\t\t\t\t.forEach(([field, msg]) => {\n\t\t\t\t\t\t\t\t\t\tif (!result[field])\n\t\t\t\t\t\t\t\t\t\t\tresult[field] = [];\n\t\t\t\t\t\t\t\t\t\tif (Array.isArray(msg))\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(...msg);\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(msg);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}, {});\n\t\t\t\t\t\tlet counter = 0;\n\t\t\t\t\t\tconst msgs = await Promise.all(Object.entries(errors)\n\t\t\t\t\t\t\t.sort((a, b) => ['_default'].indexOf(b[0]) - ['_default'].indexOf(a[0])) // sort _default first\n\t\t\t\t\t\t\t.map(async ([field, msgs]) => {\n\t\t\t\t\t\t\t\tif (field == '_default') {\n\t\t\t\t\t\t\t\t\tawait $p.loadCategory('dashboard');\n\t\t\t\t\t\t\t\t\tconst general = $p.t('dashboard/general');\n\t\t\t\t\t\t\t\t\tfield = '
' + general + '
';\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfield = '
' + field + '
';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcounter += msgs.length;\n\t\t\t\t\t\t\t\treturn field\n\t\t\t\t\t\t\t\t\t+ '
'\n\t\t\t\t\t\t\t\t\t+ msgs.join('
')\n\t\t\t\t\t\t\t\t\t+ '
';\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcounter,\n\t\t\t\t\t\t\tmsgs\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet counter, msgs;\n\t\t\t\t\tif (Array.isArray(errors)) {\n\t\t\t\t\t\t({ counter, msgs } = await _format_toast(errors));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t({ counter, msgs } = await Object.entries(errors)\n\t\t\t\t\t\t\t.reduce(async (res, [title, errs]) => {\n\t\t\t\t\t\t\t\tconst result = await res;\n\t\t\t\t\t\t\t\tconst { counter, msgs } = await _format_toast(errs);\n\t\t\t\t\t\t\t\tresult.counter += counter;\n\t\t\t\t\t\t\t\tresult.msgs.push('
'\n\t\t\t\t\t\t\t\t\t+ title\n\t\t\t\t\t\t\t\t\t+ '
'\n\t\t\t\t\t\t\t\t\t+ msgs.join('')\n\t\t\t\t\t\t\t\t\t+ '
');\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}, Promise.resolve({ counter: 0, msgs: []})));\n\t\t\t\t\t}\n\n\t\t\t\t\tawait $p.loadCategory('ui');\n\t\t\t\t\tconst n_errors = $p.t('ui/n_errors', { n: counter });\n\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\tn_errors,\n\t\t\t\t\t\t'
' + msgs.join('') + '
',\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tphp(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('warn', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('info', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\tmessage = title + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\texception(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tdb(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tauth(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\ttitle += ': ' + error.message;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ttitle = error.message;\n\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (options?.errorHandling !== undefined)\n\t\t\tDEFAULT_ERROR_CONFIG = _merge_error_config(options.errorHandling);\n\t\t\n\t\tfunction get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\t\tfunction clean_return_value(response) {\n\t\t\tif (typeof response.data === 'string' || response.data instanceof String)\n\t\t\t\treturn clean_return_value({ data: response });\n\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result)\n\t\t\t\treturn {meta: {response}, data: null};\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = { response };\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tfunction _merge_error_config(config) {\n\t\t\tif (config === false || config === 'off')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false, fail: false };\n\t\t\t\n\t\t\tif (!config || config === true)\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tif (config === 'success')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, fail: false };\n\t\t\t\n\t\t\tif (config === 'fail')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false };\n\t\t\t\n\t\t\tconst { success, fail, handler, combine } = config;\n\t\t\t\n\t\t\tconfig = { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tObject.entries({ fail, success }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = value;\n\t\t\t});\n\t\t\tObject.entries({ handler, combine }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = { ...config[key], ...value };\n\t\t\t});\n\n\t\t\treturn config;\n\t\t}\n\t\tfunction get_error_handler(config) {\n\t\t\tconst result = _merge_error_config(config?.errorHandling);\n\n\t\t\tif (!config?.form) {\n\t\t\t\tresult.combine = { ...result.combine, form: [] };\n\t\t\t} else {\n\t\t\t\tconst formHandler = result.handler.form;\n\t\t\t\tresult.handler = { ...result.handler, form: errors => formHandler(config.form, errors) };\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t\tfunction get_error_list(error) {\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\treturn [{\n\t\t\t\t\t\ttype: 'not_found',\n\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t\t}];\n\t\t\t\t} else {\n\t\t\t\t\tif (error.response.data.errors == undefined) return [];\n\t\t\t\t\treturn error.response.data.errors;\n\t\t\t\t}\n\t\t\t} else if (error.request) {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'site_failed',\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t}];\n\t\t\t} else {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'script',\n\t\t\t\t\tmessage: error.message\n\t\t\t\t}];\n\t\t\t}\n\t\t}\n\t\tfunction popHandleableErrors(errorHandling, errors) {\n\t\t\tconst result = {};\n\t\t\tconst copy = [];\n\n\t\t\tif (errors == undefined) return {};\n\n\t\t\twhile (errors.length)\n\t\t\t\tcopy.push(errors.pop());\n\t\t\tfor (var error of copy) {\n\t\t\t\tlet type = error.type;\n\t\t\t\tlet newType = null;\n\t\t\t\tfor (var t in errorHandling.combine) {\n\t\t\t\t\tlet newTypeCombinesType = errorHandling\n\t\t\t\t\t\t.combine[t]\n\t\t\t\t\t\t.includes(type);\n\t\t\t\t\tlet newTypeHasHandler = errorHandling.handler[t];\n\t\t\t\t\tif (newTypeCombinesType && newTypeHasHandler) {\n\t\t\t\t\t\tnewType = t;\n\t\t\t\t\t\tif (newType == 'form')\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (newType)\n\t\t\t\t\ttype = newType;\n\t\t\t\tconst handler = errorHandling.handler[type];\n\t\t\t\tif (handler) {\n\t\t\t\t\tif (!result[type])\n\t\t\t\t\t\tresult[type] = [];\n\t\t\t\t\tif (Array.isArray(error))\n\t\t\t\t\t\tresult[type].push(...error);\n\t\t\t\t\telse\n\t\t\t\t\t\tresult[type].push(error);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\terrors.push(error);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t+ FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(\n\t\t\tresponse => {\n\t\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\t\treturn clean_return_value(response);\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\tif (response.data.errors)\n\t\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$api._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t\t);\n\n\t\t\t\treturn clean_return_value(response);\n\t\t\t},\n\t\t\terror => {\n\t\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\n\t\t\t\tconst errorConfig = get_error_handler(error.config);\n\n\t\t\t\tif (!errorConfig.fail)\n\t\t\t\t\treturn Promise.reject(error);\n\n\t\t\t\tconst remaining = get_error_list(error);\n\n\t\t\t\tconst errors = popHandleableErrors(errorConfig, remaining);\n\n\t\t\t\tfor (var type in errors) {\n\t\t\t\t\terrorConfig.handler[type](errors[type]);\n\t\t\t\t}\n\n\t\t\t\tif (remaining.length)\n\t\t\t\t\treturn Promise.reject(error);\n\t\t\t\t\n\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\t\t\t}\n\t\t);\n\n\t\tapp.config.globalProperties.$api = {\n\t\t\tgetUri(url) {\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\t[uri, params, config] = get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\t[uri, data, config] = get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\tcall(factory, configoverwrite, form) {\n\t\t\t\tif (Array.isArray(factory)) {\n\t\t\t\t\tconst $api = app.config.globalProperties.$api;\n\n\t\t\t\t\treturn Promise\n\t\t\t\t\t\t.allSettled(factory.map((config, index) => {\n\t\t\t\t\t\t\tif (!Array.isArray(config))\n\t\t\t\t\t\t\t\tconfig = ['#' + index, config];\n\t\t\t\t\t\t\treturn $api.call(config[1], {\n\t\t\t\t\t\t\t\terrorHeader: config[0],\n\t\t\t\t\t\t\t\terrorHandling: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}))\n\t\t\t\t\t\t.then(result => {\n\t\t\t\t\t\t\tconst [ , , config ] = get_config(form, undefined, undefined, configoverwrite || {});\n\t\t\t\t\t\t\tconst errorConfig = get_error_handler(config);\n\n\t\t\t\t\t\t\tif (!errorConfig.success && !errorConfig.fail) {\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst typedErrors = {};\n\t\t\t\t\t\t\tfor (var res of result) {\n\t\t\t\t\t\t\t\tconst [ allowed, item ] = res.status === 'fulfilled'\n\t\t\t\t\t\t\t\t\t? [ errorConfig.success, res.value ]\n\t\t\t\t\t\t\t\t\t: [ errorConfig.fail, res.reason ];\n\t\t\t\t\t\t\t\tif (!allowed)\n\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\tconst errors = popHandleableErrors(errorConfig, get_error_list(item));\n\n\t\t\t\t\t\t\t\tfor (var type in errors) {\n\t\t\t\t\t\t\t\t\tif (!typedErrors[type])\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type] = {\n\t\t\t\t\t\t\t\t\t\t\t[item.config.errorHeader]: errors[type]\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type][item.config.errorHeader] = errors[type];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfor (var errType in typedErrors) {\n\t\t\t\t\t\t\t\terrorConfig.handler[errType](typedErrors[errType]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tlet { method, url, params, config } = factory;\n\t\t\t\tif (configoverwrite !== undefined) {\n\t\t\t\t\tconfig = configoverwrite;\n\t\t\t\t}\n\t\t\t\tif (!method) {\n\t\t\t\t\tmethod = 'get';\n\t\t\t\t}\n\t\t\t\tif (method.toLowerCase)\n\t\t\t\t\tmethod = method.toLowerCase();\n\t\t\t\tif (method == 'get') {\n\t\t\t\t\treturn this.get(form, url, params, config);\n\t\t\t\t} else if (method == 'post') {\n\t\t\t\t\treturn this.post(form, url, params, config);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"FhcApi: method not allowed:\", method);\n\t\t\t\t}\n\t\t\t},\n\t\t\tgetErrorHandler(config) {\n\t\t\t\treturn get_error_handler(config);\n\t\t\t}\n\t\t};\n\n\t\tapp.provide('$api', app.config.globalProperties.$api);\n\t}\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/loadModule/' + category\n\t\t};\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst params = {categories, language}\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/phrasen/setLanguage',\n\t\t\tparams\n\t\t};\n\t},\n\tgetLanguage() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getLanguage'\n\t\t};\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getAllLanguages'\n\t\t};\n\t}\n};","import OldFhcApi from '../plugin/OldFhcApi.js'; // TODO(chris): remove at some point\nimport PluginsApi from './Api.js';\nimport ApiPhrasen from '../api/factory/phrasen.js';\n\nconst categories = Vue.reactive({});\nconst loadingModules = {};\nlet user_language = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language);\nexport let user_locale = Vue.computed(()=>{\n\tif(!user_language.value) return null;\n\treturn FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(language => language.sprache == user_language.value).LC_Time;\n});\n\nfunction extractCategory(obj, category) {\n\treturn obj.filter(e => e.category == category).reduce((res, elem) => {\n\t\tif (!res[elem.phrase])\n\t\t\tres[elem.phrase] = elem.text;\n\t\treturn res;\n\t}, {});\n}\nfunction getValueForLoadedPhrase(category, phrase, params) {\n\tlet result = categories[category][phrase];\n\tif (!result)\n\t\treturn '<< PHRASE ' + phrase + '>>';\n\tif (params)\n\t\tresult = result.replace(/\\{([^}]*)\\}/g, (match, p1) => params[p1] === undefined ? match : params[p1]);\n\treturn result;\n}\n\nconst phrasen = {\n\tuser_language,\n\tuser_locale,\n\tsetLanguage(language) {\n\t\tconst catArray = Object.keys(categories)\n\t\treturn this.config.globalProperties.$api\n\t\t\t.call(ApiPhrasen.setLanguage(catArray, language))\n\t\t\t.then(res => {\n\t\t\t\tres.data.forEach(row => {\n\t\t\t\t\tcategories[row.category][row.phrase] = row.text\n\t\t\t\t})\n\n\t\t\t\t// update the reactive data that holds the current active user_language\n\t\t\t\tuser_language.value = language;\n\n\t\t\t\treturn res\n\t\t\t})\n\t},\n\tloadCategory(category) {\n\t\tif (Array.isArray(category))\n\t\t\treturn Promise.all(category.map(this.config.globalProperties\n\t\t\t\t.$p.loadCategory));\n\n\t\tif (!loadingModules[category])\n\t\t\tloadingModules[category] = this.config.globalProperties.$api\n\t\t\t\t.call(ApiPhrasen.loadCategory(category))\n\t\t\t\t.then(res => res?.data ? extractCategory(res.data, category) : {})\n\t\t\t\t.then(res => {\n\t\t\t\t\tcategories[category] = res;\n\t\t\t\t});\n\t\treturn loadingModules[category];\n\t},\n\tt_ref(category, phrase, params) {\n\t\tconsole.warn('deprecated');\n\t\treturn Vue.computed(() => this.t(category, phrase, params));\n\t},\n\tt(category, phrase, params) {\n\t\tif (params === undefined && (\n\t\t\t(Array.isArray(category) && category.length == 2) ||\n\t\t\t(category.split && category.split('/').length == 2))\n\t\t\t) {\n\t\t\tparams = phrase;\n\t\t\t[category, phrase] = category.split ? category.split('/') : category;\n\t\t}\n\t\tif (phrase === undefined) {\n\t\t\tconsole.error('invalid input', category, phrase, params);\n\t\t\treturn '';\n\t\t}\n\t\tlet val = Vue.computed(() => {\n\t\t\tif (!categories[category])\n\t\t\t\treturn '';\n\t\t\treturn getValueForLoadedPhrase(category, phrase, params);\n\t\t});\n\t\tif (!categories[category])\n\t\t\tthis.loadCategory(category);\n\t\treturn val.value;\n\t}\n};\n\nexport default {\n\tinstall(app, options) {\n\t\tif (!app.config.globalProperties.$fhcApi)\n\t\t\tapp.use(OldFhcApi); // TODO(chris): remove at some point\n\t\tif (!app.config.globalProperties.$api)\n\t\t\tapp.use(PluginsApi);\n\t\tapp.config.globalProperties.$p = {\n\t\t\tt: phrasen.t,\n\t\t\tloadCategory: cat => phrasen.loadCategory.call(app, cat),\n\t\t\tsetLanguage: lang => phrasen.setLanguage.call(app, lang),\n\t\t\tuser_language: user_language,\n\t\t\tuser_locale,\n\t\t\tt_ref: phrasen.t_ref\n\t\t};\n\t\tapp.provide('$p', app.config.globalProperties.$p);\n\t}\n}","import {CoreNavigationCmpt} from '../../components/navigation/Navigation.js';\nimport DashboardAdmin from '../../components/Dashboard/Admin.js';\nimport PluginsPhrasen from '../../plugins/Phrasen.js';\n\nconst app = Vue.createApp({\n name: 'AdminApp',\n data: () => ({\n appSideMenuEntries: {}\n }),\n components: {\n CoreNavigationCmpt,\n DashboardAdmin\n }\n});\napp.use(PluginsPhrasen);\napp.mount('#main');"],"names":["CoreFetchCmpt","emits","props","refresh","type","Boolean","apiFunction","required","Function","apiFunctionParameters","watch","newValue","oldValue","this","fetchData","data","loading","error","errorMessage","created","methods","apiFunctionResult","Promise","then","successHandler","catch","errorHandler","finally","finallyHandler","setError","response","$emit","undefined","retval","message","template","ApiNavigation","getHeader","navigation_page","method","url","params","getMenu","CoreNavigationCmpt","components","addHeaderMenuEntries","Object","addSideMenuEntries","hideTopMenu","leftNavCssClasses","String","default","headerMenu","sideMenu","computed","headerMenuEntries","hm","keys","length","description","sideMenuEntries","sm","getNavigationPage","FHC_JS_DATA_STORAGE_OBJECT","called_path","called_method","fetchCmptApiFunctionHeader","$api","call","fetchCmptApiFunctionSideMenu","fetchCmptDataFetchedHeader","fetchCmptDataFetchedMenu","getDataBsToggle","header","children","BsModal","name","modal","fullscreen","backdrop","validator","value","includes","focus","keyboard","noCloseBtn","dialogClass","Array","headerClass","bodyClass","footerClass","allowFullscreenExpand","dispose","handleUpdate","hide","show","relatedTarget","toggle","toggleFullscreen","mounted","$refs","bootstrap","Modal","popup","body","options","title","footer","slots","includedPrimevue","primevue","resolve","reject","instance","Vue","createApp","setup","h","class","ref","unmount","beforeUnmount","result","unmounted","wrapper","parentElement","removeChild","document","createElement","use","config","zIndex","overlay","Phrasen","mount","appendChild","BsAlert","mixins","onHideBsModal","onHiddenBsModal","onHidePreventedBsModal","onShowBsModal","onShownBsModal","modalContainer","msg","bind","BsPrompt","placeholder","BsConfirm","DashboardAdminEdit","dashboard_id","Number","dashboard_kurzbz","beschreibung","kurzbz","desc","sendDelete","DashboardAdminWidgets","widgets","apiurl","app_root","ci_router","sendChange","widget_id","allow","find","el","allowed","axios","post","action","err","console","get","map","JSON","parse","arguments","GridItem","inject","item","active","dragAction","dragging","registerDragAction","evt","target","hasAttribute","getAttribute","parent","closest","tryDragStart","touchDragEnd","touchStart","event","touchMove","preventDefault","GridLogic","constructor","w","grid","isFreeSlot","x","y","i","getMaxY","reduce","acc","getFreeSlots","freeSlots","biggestY","totalSpaces","Math","floor","push","add","prefer","occupiers","getItemsInFrame","frame","forEach","f","index","max","intermGrid","possiblities","tryMoving","bestOption","sort","a","b","cost","moves","v","move","currItem","getItemFrame","remove","place","pinned","originalFrame","isArray","some","occupiersData","occupier","occupiersFrame","flat","replaceUpdate","newOccupierFrames","occ","shift","getSingleFramePosition","updates","resize","newPoss","possiblity","p","directions","weight","dir","res","tryMovingInDirection","filter","amount","targetframe","unshift","clearWeights","indexOf","j","debug","DropGrid","cols","items","itemsSetup","resizeLimit","marginForExtraRow","additionalRow","clientX","clientY","mode","dragGrid","permUpdates","positionUpdates","fixedPositionUpdates","draggedOffset","draggedItem","draggedNode","reorderedItems","clonedWidget","sectionName","additionalRowComputed","set","items_hashmap","needsReordering","rearrangedPosition","widget","widgetid","pop","items_placeholders","placeholders","col_max","rows_max","rows","occupied","current_item","max_x","max_y","occupied_y","occupied_x","id","padStart","placedItems_withPlaceholders","placedItems","gridStyle","addH","indexedItems","prePlacedItems","mappedPlacedItems","height_diff","width_diff","temporaryResizeItems","newItem","resizeOverlay","blank","showEmptyTileHover","widgetSetup","widgetsSetup","ele","dragCancel","handler","immediate","updated","createNewGrid","deep","toggleDraggedItemOverlay","condition","firstElementChild","classList","containerRect","container","getBoundingClientRect","clonedWidgetRect","desiredTop","desiredLeft","minTop","maxTop","height","minLeft","maxLeft","width","constrainedTop","min","constrainedLeft","style","top","left","sortedItems","firstFreeSlot","targetX","targetW","convertGridResultToUpdate","input","output","baseArray","mouseLeave","updateCursor","rect","touches","gridX","clientWidth","gridY","clientHeight","_dragStart","dataTransfer","setDragImage","dropEffect","effectAllowed","startMove","setTimeout","clone","cloneNode","querySelector","removeProperty","startResize","dragOver","checkPinnedWidgetAnimation","checkWidgetSizeLimitAnimation","removeWidgetClones","dragEnd","getElementById","from","getElementsByClassName","_updateFixedPositions","additionalUpdates","emptyTileClicked","updateCursorOnMouseMove","itemAtPosition","pinNode","contains","draggedItemSetup","draggedItemMaxWidth","draggedItemMinWidth","draggedItemMaxHeight","draggedItemMinHeight","draggedItemNode","width_after_resize","height_after_resize","widgetClones","mouseDown","mouseUp","__widgets","__widgetsStarted","__path","CachedWidgetLoader","getWidget","loadWidget","setPath","path","DashboardItem","HeightTransition","onEnter","done","scrollHeight","onLeave","component","tmpConfig","isLoading","hasConfig","sharedData","maxHeight","maxWidth","prototype","toString","minHeight","minWidth","isResizeable","isPinned","ready","unpin","editMode","item_data","pinItem","getWidgetC4Link","cis4link","handleShowBsModal","handleHideBsModal","e","startDrag","dragHandle","resizeHandle","openConfig","setConfig","changeConfig","sendChangeConfig","changeConfigManually","k","import","file","fhcomplete_build_version","$options","WidgetIcon","src","DashboardSection","adminMode","configOpened","gridWidth","gridHeight","provide","editModeIsActive","computedWidgetsSetup","getSectionStyle","reorder","sectionNameTranslation","$p","t","showSectionInformation","handleConfigOpened","handleConfigClosed","checkResizeLimit","minmaxW","minmaxH","removeWidget","revert","custom","update","hidden","updatePreset","saveConfig","payload","updatePositions","self","cont","parseInt","window","getComputedStyle","getPropertyValue","addEventListener","DashboardWidgetPicker","callbacks","close","pick","ObjectUtils","mergeDeep","objects","isObject","obj","prev","key","pVal","oVal","concat","DashboardAdmin","DashboardAdminPresets","dashboard","funktionen","sections","tmpLoading","pickerWidgets","widgetAdd","section_name","widgetpicker","preset","section","db","funktion_kurzbz","newId","splice","alert","widgetUpdate","wid","prop","_x","_y","_w","_h","widgetRemove","loadSections","querySelectorAll","join","general","funktion","funktionenList","dashboards","current","dashboardAdd","_name","newDashboard","dashboardUpdate","old","dashboardDelete","assignWidgets","search","searchsettings","$fhcApi","searchAdvanced","searchdummy","phrasen$1","loadCategory","category","setLanguage","categories","language","getLanguage","getActiveDbLanguages","navigation","filter$1","saveCustomFilter","wsParams","filterUniqueId","filterType","customFilterName","removeCustomFilter","filterId","applyFilterFields","filterFields","addFilterField","filterField","removeFilterField","getFilterById","getFilter","studstatus","abmeldung","getDetails","antrag_id","prestudent_id","create","stdsem","grund","studiensemester","errorHandling","cancel","allSettled","antrag","studierendenantrag_id","errorHeader","unterbrechung","datum_wiedereinstieg","attachment","wiederholung","getLvs","saveLvs","forbiddenLvs","mandatoryLvs","leitung","getStgs","getAntraege","getHistory","getPrestudents","query","signal","timeout","approve","reopen","pause","unpause","object","approveObjection","denyObjection","profil","getView","uid","fotoSperre","isStudent","isMitarbeiter","getZustellAdresse","getZustellKontakt","getGemeinden","nation","zip","getAllNationen","profilUpdate","getStatus","getTopic","acceptProfilRequest","profil_update_id","status_message","topic","requested_change","denyProfilRequest","insertFile","dms","replace","getProfilRequestFiles","requestID","selectProfilRequest","insertProfilRequest","fileID","updateProfilRequest","ID","deleteProfilRequest","lvPlan","getRoomInfo","ort_kurzbz","start_date","end_date","getStunden","getOrtReservierungen","getLvPlanReservierungen","getLehreinheitStudiensemester","lehreinheit_id","studiensemesterDateInterval","date","LvPlanEvents","lv_id","stv","verband","favorites","students","studiensemester_kurzbz","encodeURIComponent","getUri","prestudent","person","person_id","relative_path","getStg","setStg","studiengang_kz","konto","tabulatorConfig","ajaxURL","ajaxParams","modelValue","only_open","studiengang_kz_intern","stg_kz","ajaxRequestFunc","ajaxResponse","checkDoubles","form","confirmErrorHandler","insert","counter","edit","delete","buchungsnr","getBuchungstypen","group","getGruppen","deleteGroup","kontakt","getAdressen","addNewAddress","loadAddress","address_id","updateAddress","deleteAddress","getPlaces","plz","getFirmen","searchString","getNations","getAdressentypen","getBankverbindung","addNewBankverbindung","loadBankverbindung","bankverbindung_id","updateBankverbindung","deleteBankverbindung","getKontakte","addNewContact","loadContact","kontakt_id","updateContact","deleteContact","getStandorteByFirma","getKontakttypen","updatePrestudent","getBezeichnungZGV","getBezeichnungMZgv","getBezeichnungDZgv","getAusbildung","getAufmerksamdurch","getBerufstaetigkeit","getTypenStg","getBisstandort","getHistoryPrestudent","getMaxSem","studiengang_kzs","advanceStatus","status_kurzbz","ausbildungssemester","confirmStatus","isLastStatus","deleteStatus","getLastBismeldestichtag","getHistoryPrestudents","status","insertStatus","loadStatus","updateStatus","getStudienplaene","getStudiengang","getStatusgruende","getStati","addStudent","changeStatus","getStatusarray","details","save","exam","getPruefungen","loadPruefung","pruefung_id","getTypenPruefungen","getAllLehreinheiten","getLvsByStudent","getLvsandLesByStudent","semester","getLvsAndMas","getMitarbeiterLv","getNoten","checkZeugnisnoteLv","addPruefung","updatePruefung","deletePruefung","abschlusspruefung","getAbschlusspruefung","addNewAbschlusspruefung","loadAbschlusspruefung","updateAbschlusspruefung","deleteAbschlusspruefung","getTypenAbschlusspruefung","getTypenAntritte","getBeurteilungen","getAkadGrade","getTypStudiengang","getMitarbeiter","getPruefer","checkForExistingExams","uids","grades","list","getCertificate","getTeacherProposal","getRepeaterGrades","updateCertificate","lehrveranstaltung_id","student_uid","note","lehrveranstaltung_bezeichnung","deleteCertificate","copyTeacherProposalToCertificate","copyRepeaterGradeToCertificate","studierendenantrag_lehrveranstaltung_id","lv_bezeichnung","getGradeFromPoints","points","manualErrorHandling","mobility","getMobilitaeten","getProgramsMobility","addNewMobility","loadMobility","bisio_id","updateMobility","deleteMobility","getLVList","getPurposes","getSupports","getListPurposes","getListSupports","deleteMobilityPurpose","addMobilityPurpose","deleteMobilitySupport","addMobilitySupport","archiv","getArchivVorlagen","archive","archiveSigned","akte_id","documents","getDocumentsUnaccepted","getDocumentsAccepted","deleteZuordnung","dokument_kurzbz","createZuordnung","loadAkte","getDoktypen","updateFile","deleteFile","uploadFile","exemptions","getAnrechnungen","getLehrveranstaltungen","getBegruendungen","getLvsKompatibel","getLektoren","addNewAnrechnung","loadAnrechnung","anrechnung_id","editAnrechnung","deleteAnrechnung","jointstudies","getStudies","getTypenMobility","getStudiensemester","getStudyprograms","getListPartner","getStatiPrestudent","loadStudy","insertStudy","updateStudy","deleteStudy","courselist","getCourselist","group_consecutiveHours","dbStundenplanTable","configStudent","configStudents","notiz","getNotizen","getUid","addNewNotiz","formData","loadNotiz","notiz_id","loadDokumente","deleteNotiz","type_id","updateNotiz","isBerechtigt","betriebsmittel","getAllBetriebsmittel","addNewBetriebsmittel","loadBetriebsmittel","betriebsmittelperson_id","updateBetriebsmittel","deleteBetriebsmittel","getTypenBetriebsmittel","loadInventarliste","checkperson","updatePersonUnrulyStatus","unrulyParam","unruly","filterPerson","base","ort","getContentID","ort_kurbz","getRooms","datum","von","bis","typ","personenanzahl","getRoomTypes","cms","content","content_id","version","sprache","sichtbar","getNews","page","page_size","news","limit","getNewsRowCount","getNewsExtra","lehre","getStudentenMail","getLvInfo","getStudentPruefungen","getStudentProjektarbeiten","getStudentProjektabgaben","detail","projektarbeit_id","postStudentProjektarbeitEndupload","Headers","postStudentProjektarbeitZwischenabgabe","getStudentProjektarbeitAbgabeFile","paabgabe_id","location","getMitarbeiterProjektarbeiten","all","postProjektarbeitAbgabe","termin","paabgabetyp_kurzbz","bezeichnung","fixtermin","insertvon","deleteProjektarbeitAbgabe","postSerientermin","projektarbeit_ids","fetchDeadlines","addons","getLvMenu","lvid","messages","getMessages","size","getVorlagen","getMsgVarsLoggedInUser","getMessageVarsPerson","getMsgVarsPrestudent","getPersonId","getDataVorlage","vorlage_kurzbz","getNameOfDefaultRecipient","getPreviewText","getReplyData","messageId","sendMessageFromModalContext","sendMessage","deleteMessage","vorlagen","getVorlagenByLoggedInUser","studium","getAllStudienSemester","studiengang","studienplan","getStudiengaengeForStudienSemester","getStudienplaeneBySemester","getLvPlanForStudiensemester","getLvEvaluierungInfo","FhcApiFactory","phrasen","getViewData","bookmark","getBookmarks","bookmark_id","tag","ampeln","open","confirm","ampel_id","studiengangInformation","getStudiengangByKz","menu","authinfo","getAuthUID","getAuthInfo","getAll","OldFhcApi","install","app","globalProperties","factory","warn","addEndpoints","_get_config","uri","TypeError","clearValidation","setFeedback","_clean_return_value","meta","fhcApiAxios","baseURL","interceptors","request","FormData","values","every","FileList","File","newData","entries","nd","append","jsondata","stringify","errors","_defaultErrorHandlers","code","handled","$fhcAlert","alertDefault","responseURL","alertError","validation","apply","php","filename","line","backtrace","function","severity","alertSystemError","exception","heading","sql","auth","controller","required_permissions","FhcApiFactoryWrapper","factorypart","root","defineProperty","noWarn","CORE_REST_CLIENT_ERROR","CORE_REST_CLIENT_RETVAL","CoreRESTClient","wsURL","wsParameters","axiosParameters","_axiosCall","isSuccess","hasOwnProperty","isError","hasData","trim","getData","getError","getErrorCode","_generateRouterURI","_printDebug","parameters","errorThrown","axiosCallObj","helperAppContainer","helperApp","PvToast","PvConfirm","mailToUrl","slotProps","systemerror_mailto","openMessagecard","Collapse","getOrCreateInstance","showmaillink","PvConfig","PvConfirmationService","helperAppInstance","FhcAlert","FhcPhrasen","alertSuccess","toast","summary","life","alertInfo","alertWarning","confirmDelete","$confirm","require","acceptLabel","acceptClass","rejectLabel","rejectClass","accept","sticky","html","alertMultiple","messageArray","handleSystemError","toLowerCase","errMsg","toUpperCase","stack","handleSystemMessage","resetFormValidation","Event","dispatchEvent","handleFormValidation","nodeType","Node","ELEMENT_NODE","notFound","CustomEvent","arr","PluginsApi","_send_array_or_object","func","errs","DEFAULT_ERROR_CONFIG","success","fail","combine","async","_format_toast","_default","field","msgs","n_errors","n","get_config","clean_return_value","_merge_error_config","get_error_handler","formHandler","get_error_list","popHandleableErrors","copy","newType","newTypeCombinesType","newTypeHasHandler","errorConfig","remaining","configoverwrite","typedErrors","reason","errType","getErrorHandler","ApiPhrasen","reactive","loadingModules","user_language","user_locale","server_languages","LC_Time","catArray","row","phrase","text","elem","extractCategory","t_ref","split","val","match","p1","getValueForLoadedPhrase","PluginsPhrasen","cat","lang","appSideMenuEntries"],"mappings":"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"} \ No newline at end of file diff --git a/public/dist/js/apps/Dashboard/Fhc.js b/public/dist/js/apps/Dashboard/Fhc.js index 46ee61911..aa9315bfd 100644 --- a/public/dist/js/apps/Dashboard/Fhc.js +++ b/public/dist/js/apps/Dashboard/Fhc.js @@ -1,6 +1,6 @@ -import t from"../../../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js?2025102901";import e from"../../../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js?2025102901";import n from"../../../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js?2025102901";import i from"../../../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js?2025102901";import a from"../../../../js/components/vueDatepicker.js.php?2025102901";var s={name:"BootstrapModal",data:()=>({modal:null,fullscreen:!1}),props:{backdrop:{type:[Boolean,String],default:!0,validator:t=>["static",!0,!1].includes(t)},focus:{type:Boolean,default:!0},keyboard:{type:Boolean,default:!0},noCloseBtn:Boolean,dialogClass:[String,Array,Object],headerClass:{type:[String,Array,Object],default:""},bodyClass:{type:[String,Array,Object],default:"px-4 py-5"},footerClass:{type:[String,Array,Object],default:""},allowFullscreenExpand:{type:Boolean,default:!1}},emits:["hideBsModal","hiddenBsModal","hidePreventedBsModal","showBsModal","shownBsModal"],methods:{dispose(){return this.modal.dispose()},handleUpdate(){return this.modal.handleUpdate()},hide(){return this.modal.hide()},show(t){return this.modal.show(t)},toggle(){return this.modal.toggle()},toggleFullscreen(){this.fullscreen=!this.fullscreen}},mounted(){this.$refs.modal&&(this.modal=new bootstrap.Modal(this.$refs.modal,{backdrop:this.backdrop,focus:this.focus,keyboard:this.keyboard}))},popup(t,e,n,i){const a=this,s={};void 0!==t&&(s.default=()=>t),void 0!==n&&(s.title=()=>n),void 0!==i&&(s.footer=()=>i);let r=!1;return"undefined"!=typeof primevue&&(r=!0),new Promise((t,n)=>{const i=Vue.createApp({name:"ModalTmpApp",setup:()=>()=>Vue.h(a,{class:"fade",...e,ref:"modal","onHidden.bs.modal":i.unmount},s),mounted(){this.$refs.modal.show()},beforeUnmount(){this.$refs.modal&&(!1!==this.$refs.modal.result?t(this.$refs.modal.result):n())},unmounted(){o.parentElement.removeChild(o)}}),o=document.createElement("div");r&&i.use(primevue.config.default,{zIndex:{overlay:9999}}),Promise.resolve().then(function(){return at}).then(t=>{i.use(t.default),i.mount(o),document.body.appendChild(o)})})},template:''},r={name:"BootstrapAlert",components:{BsModal:s},mixins:[s],props:{dialogClass:{type:[String,Array,Object],default:"modal-dialog-centered"},onHideBsModal:Function,onHiddenBsModal:Function,onHidePreventedBsModal:Function,onShowBsModal:Function,onShownBsModal:Function},data:()=>({result:!0}),mounted(){this.modal=this.$refs.modalContainer.modal},popup(t,e){return s.popup.bind(this)(t,e)},template:'\n\t\t\n\t\t\n\t'},o={name:"BootstrapConfirm",mixins:[r],data:()=>({result:!1}),popup(t,e){return r.popup.bind(this)(t,e)},template:'\n\t\t\n\t\t\n\t'},l={name:"GridItem",components:{},inject:{},props:{item:Object,active:Boolean},emits:["mouseDown","mouseUp","startMove","startResize","dragging","endDrag","dropDrag","item","touchStart","touchEnd"],data:()=>({dragAction:"",dragging:!1}),computed:{},methods:{registerDragAction(t){if(this.$emit("mouseDown",t),t.target.hasAttribute("drag-action"))this.dragAction=t.target.getAttribute("drag-action");else{let e=t.target.closest("[drag-action]");this.dragAction=e?e.getAttribute("drag-action"):""}},tryDragStart(t,e){let n=this.dragAction||t.target.getAttribute("drag-action");if(n){if(this.dragging=!0,"move"==n)return this.$emit("startMove",t,e);if("resize"==n)return this.$emit("startResize",t,e)}},touchDragEnd(t){this.dragging&&(this.dragging=!1,this.$emit("touchEnd",t))},touchStart(t){this.$emit("touchStart",t),this.registerDragAction(t),this.tryDragStart(t,this.item)},touchMove(t){this.dragging&&(t.preventDefault(),this.$emit("dragging",t))}},template:'\n\t
\n\t\t\n\t
'};class d{constructor(t){t.w?(this.w=t.w,this.h=t.h,this.data=[...t.data],this.grid=[...t.grid]):(this.w=t,this.h=1,this.data=[],this.grid=[])}isFreeSlot(t,e){const n=e*this.w+t;return!this.grid[n]&&0!==this.grid[n]}getMaxY(){return this.data.reduce((t,e)=>(e?.y>t&&(t=e.y),t),0)}getFreeSlots(){const t=[];let e=this.getMaxY(),n=this.w*(e+1);for(let t=0;tthis.grid[e]=t.index),this.data[t.index]=t,this.h=Math.max(this.h,t.y+t.h),[];{const i=new d(this);t.frame.forEach(t=>i.grid[t]=-1);const a=i.tryMoving(n,e);if(a.length){const e=a.sort((t,e)=>(void 0===t.cost&&(t.cost=t.moves.reduce((t,e)=>t*e.cost,1)),void 0===e.cost&&(e.cost=e.moves.reduce((t,e)=>t*e.cost,1)),t.cost>e.cost)),n=[];return e[0].moves.forEach(t=>{const e={...this.data[t.index]};e.x+=t.x,e.y+=t.y,e.frame=this.getItemFrame(e),this.h=Math.max(this.h,e.y+e.h),this.remove(e),e.frame.forEach(t=>this.grid[t]=e.index),this.data[t.index]=e,n[t.index]={index:e.index,x:e.x,y:e.y}}),t.frame.forEach(e=>this.grid[e]=t.index),this.data[t.index]=t,n}console.error("FATAL","can't arrange item on grid")}}move(t,e,n){if(t.data.place[this.w]?.pinned)return[];if(t.x==e&&t.y==n)return[];let i;this.remove(t),t.x==e?i=n-t.y>0?0:3:t.y==n&&(i=e-t.x>0?1:2);const a=Array.isArray(t.frame)?[...t.frame]:[t.frame],s={...t};s.x=e,s.y=n,s.frame=this.getItemFrame(s);let r=this.getItemsInFrame(s.frame);if(r.some(t=>this.data[t]?.data.place[this.w]?.pinned))return[];let o=r.map(t=>this.data[t]),l=o.map(t=>t.frame).flat();if(!l.some(t=>!s.frame.includes(t))&&!l.some(t=>a.includes(t))){let i=[],s=[];for(let t of a){if(s.includes(t))continue;let e=o.shift();e&&(s=[...s,...this.getItemFrame({...e,...this.getSingleFramePosition(t)})],i[e.index]={index:e.index,...this.getSingleFramePosition(t)})}return i[t.index]={index:t.index,x:e,y:n},i}const d=this.add(s,i);return d[t.index]={index:t.index,x:e,y:n},d}resize(t,e,n){if(t.w==e&&t.h==n)return[];this.remove(t);const i={...t};i.w=e,i.h=n,i.frame=this.getItemFrame(i);const a=this.add(i);return a&&(a[t.index]={index:t.index,w:e,h:n,x:t.x,y:t.y,resize:!0}),a}tryMoving(t,e){if(Array.isArray(t)){t.forEach(t=>this.remove({index:t}));let n=[{grid:this,moves:[]}];return t.forEach(t=>{let i=[];n.forEach(n=>{n.grid.tryMoving(t,e).forEach(t=>{n.moves,t.moves=[...t.moves,...n.moves],i.push(t)})}),n=i}),n}const n=[0,3,1,2];this.remove({index:t});const i=1+.2*(this.data[t].weight||0);return n.reduce((n,a)=>{let s=this.tryMovingInDirection(a,t,1,(e===a?.5:1+.1*a)*i);return s?[...n,...s]:n},[]).filter(t=>t)}tryMovingInDirection(t,e,n,i){const a={index:e,x:0,y:0,cost:i};let s;switch(t){case 0:if(this.data[e].data?.place[this.w]?.pinned||this.data[e].y-n<0)return!1;s=this.data[e].frame.map(t=>t-this.w*n),a.y=-n;break;case 3:if(this.data[e].data?.place[this.w]?.pinned)return!1;this.data[e].y+this.data[e].h+n>this.h&&(i+=.4),s=this.data[e].frame.map(t=>t+this.w*n),a.y=n;break;case 1:if(this.data[e].data?.place[this.w]?.pinned||this.data[e].x-n<0)return!1;s=this.data[e].frame.map(t=>t-n),a.x=-n;break;case 2:if(this.data[e].data?.place[this.w]?.pinned||this.data[e].x+this.data[e].w+n>this.w)return!1;s=this.data[e].frame.map(t=>t+n),a.x=n}const r=this.getItemsInFrame(s);if(r.includes(-1))return this.tryMovingInDirection(t,e,n+1,i);const o=new d(this);if(s.forEach(t=>o.grid[t]=-1),!r.length)return[{grid:o,moves:[a]}];const l=o.tryMoving(r).map(t=>t.moves.unshift(a)&&t);return!!l.length&&l}clearWeights(){this.data.forEach(t=>t.weight=void 0)}getItemsInFrame(t){return t.map(t=>this.grid[t]).filter((t,e,n)=>(t||0===t)&&n.indexOf(t)===e)}remove(t){this.grid=this.grid.map(e=>e!=t.index?e:void 0)}getItemFrame(t){const e=[];for(let n=0;n({x:-1,y:-1,clientX:0,clientY:0,mode:0,grid:null,dragGrid:null,permUpdates:[],positionUpdates:null,fixedPositionUpdates:null,draggedOffset:[0,0],draggedItem:null,draggedNode:null,reorderedItems:[],clonedWidget:null}),inject:{sectionName:{type:String,default:""}},computed:{additionalRowComputed:{get(){return this.additionalRow},set(t){this.$emit("update:additionalRow",t)}},items_hashmap(){let t={};return this.items.forEach(e=>{if(this.reorderedItems.length>0&&this.needsReordering(e)){let t=this.reorderedItems.filter(t=>t.data.widgetid==e.widgetid)?.pop();t&&(e.x=t.x,e.y=t.y)}t[`x${e.x}y${e.y}`]=e}),t},items_placeholders(){let t=[],e=this.cols,n=this.rows,i={};for(let a=0;a({index:e,x:t.x,y:t.y,w:t.w,h:t.h,weight:t.weight||0,data:t}))},prePlacedItems(){return this.fixedPositionUpdates?this.indexedItems.map(t=>this.fixedPositionUpdates[t.index]?{index:t.index,weight:t.weight,data:t.data,x:void 0===this.fixedPositionUpdates[t.index].x?t.x:this.fixedPositionUpdates[t.index].x,y:void 0===this.fixedPositionUpdates[t.index].y?t.y:this.fixedPositionUpdates[t.index].y,w:void 0===this.fixedPositionUpdates[t.index].w?t.w:this.fixedPositionUpdates[t.index].w,h:void 0===this.fixedPositionUpdates[t.index].h?t.h:this.fixedPositionUpdates[t.index].h}:t):this.indexedItems},placedItems(){if(!this.positionUpdates)return this.prePlacedItems;let t=this.prePlacedItems.map(t=>{if(!this.positionUpdates[t.index])return t;let e=this.positionUpdates[t.index]?.h-t.h,n=this.positionUpdates[t.index]?.w-t.w;return{resize:this.positionUpdates[t.index]?.resize,index:t.index,weight:t.weight,data:t.data,x:void 0===this.positionUpdates[t.index].x?t.x:this.positionUpdates[t.index].x,y:void 0===this.positionUpdates[t.index].y?t.y:this.positionUpdates[t.index].y,w:n>0||void 0===this.positionUpdates[t.index].w?t.w:this.positionUpdates[t.index].w,h:e>0||void 0===this.positionUpdates[t.index].h?t.h:this.positionUpdates[t.index].h}}),e=[];return t.forEach(t=>{if(t.resize){let n={...t,w:void 0===this.positionUpdates[t.index].w?t.w:this.positionUpdates[t.index].w,h:void 0===this.positionUpdates[t.index].h?t.h:this.positionUpdates[t.index].h,resizeOverlay:!0,blank:!0};e.push(n)}}),[...t,...e]},showEmptyTileHover(){return!(!this.active||!this.grid||0!=this.mode||this.x<0||this.y<0||this.x>=this.cols||this.y>=this.rows)&&this.grid.isFreeSlot(this.x,this.y)},widgetSetup(){if(this.widgetsSetup)return this.widgetsSetup.reduce((t,e)=>(t[e.widget_id]=e,t),{})}},watch:{active(t){t||this.dragCancel()},cols(){this.dragCancel()},rows:{handler(t){this.$emit("gridHeight",t)},immediate:!0},indexedItems:{handler(t){this.dragCancel();const e=this.createNewGrid(t);this.fixedPositionUpdates=e,e.length&&this.$emit("rearrangeItems",e.filter(t=>t))},immediate:!0,deep:!0}},methods:{needsReordering(t){return!t?.data?.place[this.cols]},toggleDraggedItemOverlay(t){this.draggedNode&&(t?this.draggedNode.firstElementChild.classList.add("dashboard-item-overlay"):this.draggedNode.firstElementChild.classList.remove("dashboard-item-overlay"))},dragging(t){if(1==this.mode){this.toggleDraggedItemOverlay(!0);const t=this.$refs.container.getBoundingClientRect(),e=this.clonedWidget.getBoundingClientRect();let n=this.clientY-20,i=this.clientX-15;const a=0,s=t.height-e.height,r=0,o=t.width-e.width,l=Math.max(a,Math.min(s,n)),d=Math.max(r,Math.min(o,i));this.clonedWidget.style.top=`${l}px`,this.clonedWidget.style.left=`${d}px`}},createNewGrid(t){this.grid=new d(this.cols);const e=[];let n=[...t].sort((t,e)=>this.needsReordering(t)&&this.needsReordering(e)?0:this.needsReordering(t)?999:this.needsReordering(e)?-999:t.weight>e.weight),i=[];return n.forEach(n=>{let a=this.grid.getFreeSlots();if(this.needsReordering(n)){let t=a.shift();t?(n.x=t.x,n.y=t.y):(n.x=0,n.y=this.grid.h),i.push(n)}if(n.x+n.w>this.cols){let t,i=this.cols-n.x;this.resizeLimit&&([i]=this.resizeLimit(n.data,i,n.h)),i<1&&(i=1),i>this.cols&&(i=this.cols),n.x+i>this.cols&&(t=this.cols-i),i==n.w&&(i=void 0),e[n.index]={item:n.data,x:t,w:i}}n.frame=this.grid.getItemFrame(n),this.convertGridResultToUpdate(this.grid.add(n),e,t)}),this.reorderedItems=i,this.grid.clearWeights(),e},convertGridResultToUpdate(t,e,n){t&&(n||(n=this.indexedItems),t.forEach(t=>{let i={item:n[t.index].data};void 0!==t.x&&(i.x=t.x),void 0!==t.y&&(i.y=t.y),void 0!==t.w&&(i.w=t.w),void 0!==t.h&&(i.h=t.h),e[t.index]=i}))},mouseLeave(){},updateCursor(t){if(!this.active)return this.x=this.y=-1,!1;const e=this.active?this.marginForExtraRow:0,n=this.$refs.container.getBoundingClientRect();t.clientX||t.clientY||!t.touches||(t.clientX=t.touches[0].clientX,t.clientY=t.touches[0].clientY),this.clientX=t.clientX-n.left,this.clientY=t.clientY-n.top;const i=Math.floor(this.cols*(t.clientX-n.left)/this.$refs.container.clientWidth),a=Math.floor((this.rows+e)*(t.clientY-n.top)/this.$refs.container.clientHeight);return(this.x!=i||this.y!=a)&&(this.x=i,this.y=a,!0)},_dragStart(t,e){t.dataTransfer&&(t.dataTransfer.setDragImage(t.target,-99999,-99999),t.dataTransfer.dropEffect="move",t.dataTransfer.effectAllowed="move")},startMove(t,e){this.active&&(this.mode=1,this.draggedItem=e,this.$emit("draggedItem",e),setTimeout(()=>{this.draggedNode=t.target.closest(".drop-grid-item");let e=t.target.closest(".drop-grid-item")?.cloneNode(!0);e.style.zIndex=5,e.classList.add("widgetClone"),this.$refs.container.appendChild(e);e.querySelector("[style='display: none;']").style.removeProperty("display"),this.clonedWidget=e},0),this.draggedOffset=[e.x-this.x,e.y-this.y],this._dragStart(t,e))},startResize(t,e){this.active&&(this.mode=2,this.draggedItem=e,this.$emit("draggedItem",e),this._dragStart(t))},dragOver(t){if(this.y+1>this.rows&&(1==this.mode||2==this.mode)&&this.dragCancel(),!this.active)return this.dragCancel();if(this.checkPinnedWidgetAnimation(),2==this.mode&&this.checkWidgetSizeLimitAnimation(),this.updateCursor(t))switch(this.mode){case 1:{t.preventDefault(),this.dragGrid=new d(this.grid);let e=this.x+this.draggedOffset[0],n=this.y+this.draggedOffset[1];e<0?(this.draggedOffset[0]+=e,e=0):e+this.draggedItem.w>this.cols&&(this.draggedOffset[0]+=this.cols-this.draggedItem.w-e,e=this.cols-this.draggedItem.w),n<0&&(this.draggedOffset[1]+=n,n=0),this.positionUpdates=this.dragGrid.move(this.draggedItem,e,n);break}case 2:{t.preventDefault(),this.dragGrid=new d(this.grid);let e=Math.min(this.cols-this.draggedItem.x,Math.max(1,this.x-this.draggedItem.x+1)),n=Math.max(1,this.y-this.draggedItem.y+1);this.resizeLimit&&([e,n]=this.resizeLimit(this.draggedItem.data,e,n)),this.positionUpdates=this.dragGrid.resize(this.draggedItem,e,n);break}}},dragCancel(){this.removeWidgetClones(),this.additionalRowComputed=!1,this.toggleDraggedItemOverlay(!1),this.mode=0,this.positionUpdates=null,this.draggedOffset=[0,0],this.draggedItem=null,this.$emit("draggedItem",null),this.draggedNode=null},dragEnd(){if(this.removeWidgetClones(),this.toggleDraggedItemOverlay(!1),0==this.mode)return;document.getElementById(this.draggedItem.data.widgetid).classList.remove("border-danger"),Array.from(document.getElementsByClassName("denied-dragging-animation"))?.forEach(t=>{t.classList.remove("denied-dragging-animation")}),this.mode=0;let t=[];this.convertGridResultToUpdate(this.positionUpdates,t),t=this._updateFixedPositions(t),t.length&&this.$emit("rearrangeItems",t.filter(t=>t)),this.draggedItem=null,this.draggedNode=null,this.$emit("draggedItem",null)},_updateFixedPositions(t){t.forEach((t,e)=>{this.fixedPositionUpdates[e]?this.fixedPositionUpdates[e]={...this.fixedPositionUpdates[e],...t}:this.fixedPositionUpdates[e]=t});let e=this.createNewGrid(this.prePlacedItems);return e.length?(e.forEach((e,n)=>t[n]=e),this._updateFixedPositions(t)):t},emptyTileClicked(){this.additionalRowComputed=!1,this.$emit("newItem",this.x,this.y)},updateCursorOnMouseMove(t){0==this.mode&&this.updateCursor(t)},checkPinnedWidgetAnimation(){let t=[];switch(this.mode){case 2:for(let e=this.draggedItem.x;e<=this.x;e++)for(let n=this.draggedItem.y;n<=this.y;n++)this.items.forEach(i=>{i.x==e&&i.y==n&&t.push(i)});break;case 1:t=this.items.filter(t=>t.x==this.x&&t.y==this.y)}Array.from(document.getElementsByClassName("denied-dragging-animation"))?.forEach(t=>{t.classList.remove("denied-dragging-animation")}),t.forEach(t=>{if(t.place[this.cols]&&t.place[this.cols].pinned){let e=document.getElementById(t.widgetid).querySelector("[pinned='true']");e.classList.contains("denied-dragging-animation")||e.classList.add("denied-dragging-animation")}})},checkWidgetSizeLimitAnimation(){let t=this.itemsSetup[this.draggedItem.data.widget],e=t.width.max??t.width,n=t.width.min??t.width,i=t.height.max??t.height,a=t.height.min??t.height,s=document.getElementById(this.draggedItem.data.widgetid),r=this.x-this.draggedItem.x+1,o=this.y-this.draggedItem.y+1;r>0&&(r>e||r0&&(o>i||o\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t'};let u={},p={},h=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/dashboard/Widget";var m={getWidget:t=>u[t],loadWidget:t=>u[t]?Promise.resolve(u[t]):p[t]?p[t]:h?(p[t]=new Promise((e,n)=>{axios.get(h,{params:{id:t}}).then(n=>{n.data.retval.arguments=JSON.parse(n.data.retval.arguments),n.data.retval.setup=JSON.parse(n.data.retval.setup),u[t]=n.data.retval,p[t]=void 0,e(u[t])}).catch(t=>n(t.response.data.retval.error))}),p[t]):Promise.reject("Widget could not be loaded because there is no path yet!"),setPath(t){h=t}},f={name:"Item",components:{BsModal:s,HeightTransition:{data:()=>({}),methods:{onEnter(t,e){t.style.height="0",t.style.height=t.scrollHeight+"px"},onLeave(t,e){t.style.height=t.scrollHeight+"px",t.style.height="0"}},template:'\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t'}},data:()=>({component:"",arguments:null,target:!1,widget:null,tmpConfig:{},isLoading:!1,hasConfig:!1,sharedData:null}),emits:["change","remove","dragstart","resizestart","configOpened","configClosed","pinItem","unPinItem"],props:["id","widgetID","config","width","height","custom","hidden","editMode","loading","item_data","place","setup","dragstate","resizeOverlay","additionalRow"],computed:{maxHeight(){return this.setup?.height?.max},maxWidth(){return"[object Number]"==Object.prototype.toString.call(this.setup?.width)?this.setup?.width:this.setup?.width?.max},minHeight(){return this.setup?.height?.min},minWidth(){return this.setup?.width?.min},isResizeable(){return this.maxWidth>1||this.maxHeight>1},isPinned(){return!!this.place?.pinned},ready(){return this.component&&null!==this.arguments}},methods:{unpin(){if(!this.editMode)return;let t={item:this.item_data,x:this.item_data.x,y:this.item_data.y};this.$emit("unPinItem",[t])},pinItem(){let t={item:this.item_data,x:this.item_data.x,y:this.item_data.y};this.$emit("pinItem",[t])},getWidgetC4Link:t=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+t.setup.cis4link,handleShowBsModal(){this.$emit("configOpened")},handleHideBsModal(){this.$emit("configClosed")},mouseDown(t){this.target=t.target},startDrag(t){this.$refs.dragHandle.contains(this.target)?this.$emit("dragstart",t):this.isResizeable&&this.$refs.resizeHandle.contains(this.target)&&this.isResizeable?this.$emit("resizestart",t):t.preventDefault()},openConfig(){this.tmpConfig={...this.arguments},this.$refs.config.show()},setConfig(t){this.hasConfig=t},changeConfig(){this.isLoading=!0;let t={...this.tmpConfig};this.sendChangeConfig(t)},changeConfigManually(){let t={...this.arguments};this.sendChangeConfig(t)},sendChangeConfig(t){for(var e in t)this.widget.arguments[e]==t[e]&&delete t[e];this.$emit("change",t)}},watch:{config(){this.arguments={...this.widget?.arguments,...this.config},this.tmpConfig={...this.arguments},this.$refs.config&&this.$refs.config.hide(),this.isLoading=!1}},async created(){this.widget=await m.loadWidget(this.id);let t=(await import(FHC_JS_DATA_STORAGE_OBJECT.app_root+this.widget.setup.file+"?"+FHC_JS_DATA_STORAGE_OBJECT.fhcomplete_build_version)).default;this.$options.components["widget"+this.widget.widget_id]=t,this.component="widget"+this.widget.widget_id,this.arguments={...this.widget.arguments,...this.config},this.tmpConfig={...this.arguments}},template:'\n\t
\n\t\t
\n\t\t\t\n\t\t
\n\t
\n\t
\n\t
\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{{ widget.setup.name }}\n\t\t\t\n\t\t\t\n\t\t\t\n \t\t\n \t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t\t
\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t
\n\t
'},g={data:()=>({}),props:{widget:{type:Object,required:!0}},methods:{path:t=>"/"==t[0]?FHC_JS_DATA_STORAGE_OBJECT.app_root+t:t},emits:["select"],template:'\n\t
\n\t\t\n\t\t
\n\t\t\t
{{ widget.setup.name || widget.widget_kurzbz }}
\n\t\t\t

{{ widget.beschreibung }}

\n\t\t
\n\t
'},v={name:"Section",components:{DropGrid:c,DashboardItem:f,WidgetIcon:g},inject:{widgetsSetup:{type:Array,default:[]},adminMode:{type:Boolean,default:!1},editMode:{type:Boolean,default:!1}},props:["name","widgets"],emits:["widgetAdd","widgetUpdate","widgetRemove"],data:()=>({configOpened:!1,gridWidth:1,gridHeight:null,draggedItem:null,additionalRow:!1}),provide(){return{editModeIsActive:Vue.computed(()=>this.editModeIsActive),sectionName:Vue.computed(()=>this.name)}},computed:{computedWidgetsSetup(){return this.widgetsSetup?this.widgetsSetup.reduce((t,e)=>(t[e.widget_id]=e.setup,t),{}):{}},editModeIsActive(){return(this.editMode||this.adminMode)&&!this.configOpened},getSectionStyle:()=>"margin-bottom: 8px;",items(){return this.widgets.map(t=>(!t?.widgetid&&t?.id&&(t.widgetid=t.id),{...t,reorder:!1,...t.place[this.gridWidth]||{reorder:!0,x:0,y:0,w:1,h:1}}))}},methods:{sectionNameTranslation(){switch(this.name){case"general":case"custom":return this.$p.t("dashboard",this.name);default:return this.name}},showSectionInformation(){return"general"==this.name?this.$p.t("dashboard","dashboardGeneralSectionDescription"):"custom"==this.name?this.$p.t("dashboard","dashboardCustomSectionDescription"):this.$p.t("dashboard","dashboardSectionDescription",[this.name])},handleConfigOpened(){this.configOpened=!0},handleConfigClosed(){this.configOpened=!1},checkResizeLimit(t,e,n){let i=m.getWidget(t.widget);if(i){let t=i.setup.width;t.max?t.min=t.min||1:t={min:t,max:t},et.max&&(e=t.max);let a=i.setup.height;a.max?a.min=a.min||1:a={min:a,max:a},na.max&&(n=a.max)}return[e,n]},removeWidget(t,e){if(t.custom)o.popup("Are you sure you want to delete this widget?").then(()=>this.$emit("widgetRemove",this.name,t.id));else{let n={};n[t.id]={hidden:!e},this.updatePreset(n)}},saveConfig(t,e){let n={};n[e.id]={config:t},this.updatePreset(n)},updatePositions(t,e=!1){let n={};t.forEach(t=>{let i={...t.item};i.placeholder||(i.place[this.gridWidth]||(i.place[this.gridWidth]={x:0,y:0,w:1,h:1}),delete i.x,delete i.y,delete i.w,delete i.h,delete i.place[this.gridWidth].pinned,void 0!==t.x&&(i.place[this.gridWidth].x=t.x),void 0!==t.y&&(i.place[this.gridWidth].y=t.y),void 0!==t.w&&(i.place[this.gridWidth].w=t.w),void 0!==t.h&&(i.place[this.gridWidth].h=t.h),e&&(i.place[this.gridWidth].pinned=!0),n[i.id]=i)}),this.updatePreset(n)},updatePreset(t){let e={};e[this.name]=t,this.$emit("widgetUpdate",this.name,e)}},mounted(){let t=this,e=t.$refs.container;t.gridWidth=parseInt(window.getComputedStyle(e).getPropertyValue("--fhc-dashboard-grid-size")),window.addEventListener("resize",()=>{t.gridWidth=parseInt(window.getComputedStyle(e).getPropertyValue("--fhc-dashboard-grid-size"))})},template:'\n\t
\n\t\t

\n\t\t\t\n\t\t\t{{sectionNameTranslation()}}:\n\t\t

\n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
'},b={components:{BsModal:s,WidgetIcon:g},props:["widgets"],data:()=>({callbacks:{}}),methods:{getWidget(){return new Promise((t,e)=>{this.callbacks={resolve:t,reject:e},this.$refs.modal.show()})},close(){this.callbacks.reject&&this.callbacks.reject(),this.callbacks={}},pick(t){this.callbacks.resolve&&this.callbacks.resolve(t),this.callbacks={},this.$refs.modal.hide()}},template:'
\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
'},y={mergeDeep(...t){const e=t=>t&&"object"==typeof t;return t.reduce((t,n)=>(Object.keys(n).forEach(i=>{const a=t[i],s=n[i];Array.isArray(a)&&Array.isArray(s)?t[i]=a.concat(...s):e(a)&&e(s)?t[i]=this.mergeDeep(a,s):t[i]=s}),t),{})}},w={getViewData:()=>({method:"get",url:"/api/frontend/v1/Cis4FhcApi/getViewData"})},_={name:"Dashboard",components:{DashboardSection:v,DashboardWidgetPicker:b},props:{dashboard:{type:String,required:!0,default:"CIS"},viewData:{type:Object,required:!0,validator:t=>t&&t.name&&t.uid&&t.timezone}},data(){return{sections:[],widgets:null,editMode:!1,viewDataInternal:this.viewData}},provide(){return{editMode:Vue.computed(()=>this.editMode),widgetsSetup:Vue.computed(()=>this.widgets),timezone:Vue.computed(()=>this.viewData.timezone)}},computed:{apiurl:()=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/dashboard"},methods:{widgetAdd(t,e){null===this.widgets&&axios.get(this.apiurl+"/Widget/getWidgetsForDashboard",{params:{db:this.dashboard}}).then(t=>{t.data.retval.forEach(t=>{t.arguments=JSON.parse(t.arguments),t.setup=JSON.parse(t.setup)}),this.widgets=t.data.retval}).catch(t=>console.error("ERROR:",t)),this.$refs.widgetpicker.getWidget().then(n=>{e.widget=n,e.id="loading_"+String((new Date).valueOf());let i={...e};i.loading=!0,this.sections.forEach(e=>{e.name==t&&e.widgets.push(i)}),axios.post(this.apiurl+"/Config/addWidgetsToUserOverride",{db:this.dashboard,funktion_kurzbz:t,widgets:[e]}).then(n=>{let a=Object.keys(n.data.retval.data[t].widgets).pop();e.id=a,this.sections.forEach(n=>{n.name==t&&(n.widgets.splice(n.widgets.indexOf(i),1),n.widgets.push(e))})}).catch(t=>{console.error("ERROR: ",t),alert("ERROR: "+t.response.data.retval)})}).catch(()=>{})},widgetUpdate(t,e){for(var n in e=e[t]){for(var i in this.sections)if(this.sections[i].name==t){for(var a in this.sections[i].widgets)if(this.sections[i].widgets[a].id==n){for(var s in e[n]=y.mergeDeep(this.sections[i].widgets[a],e[n]),{_x:1,_y:1,_w:1,_h:1,index:1,id:1,preset:1})e[n][s]&&delete e[n][s];break}break}e[n].widgetid=n}axios.post(this.apiurl+"/Config/addWidgetsToUserOverride",{db:this.dashboard,funktion_kurzbz:t,widgets:e}).then(()=>{this.sections.forEach(n=>{n.name==t&&n.widgets.forEach((t,i)=>{e[t.id]&&(e[t.id].id=t.id,e[t.id].index=t.index,n.widgets[i]=e[t.id])})})}).catch(t=>{console.error("ERROR: ",t),alert("ERROR: "+t.response.data.retval)})},widgetRemove(t,e){axios.post(this.apiurl+"/Config/removeWidgetFromUserOverride",{db:this.dashboard,funktion_kurzbz:t,widgetid:e}).then(()=>{this.sections.forEach(n=>{n.name==t&&(n.widgets=n.widgets.filter(t=>t.id!=e))})}).catch(t=>{console.error("ERROR: ",t),alert("ERROR: "+t.response.data.retval)})}},created(){this.$p.loadCategory("dashboard"),axios.get(this.apiurl+"/Widget/getWidgetsForDashboard",{params:{db:this.dashboard}}).then(t=>{t.data.retval.forEach(t=>{t.arguments=JSON.parse(t.arguments),t.setup=JSON.parse(t.setup)}),this.widgets=t.data.retval}).catch(t=>console.error("ERROR:",t)),axios.get(this.apiurl+"/Config",{params:{db:this.dashboard}}).then(t=>{for(var e in t.data.retval){let i=[],a=[];for(var n in t.data.retval[e].widgets)t.data.retval[e].widgets[n].id=n,t.data.retval[e].widgets[n].custom||t.data.retval[e].widgets[n].preset?i.push(t.data.retval[e].widgets[n]):a.push(n);this.sections.push({name:e,widgets:i}),a.forEach(t=>this.widgetRemove(e,t))}this.sections=this.sections.sort((t,e)=>"custom"==t.name?1:"custom"==e.name?-1:e.widgets.length-t.widgets.length)}).catch(t=>console.error("ERROR:",t))},async beforeMount(){if(!this.viewData.name||!this.viewData.uid){const t=await this.$api.call(w.getViewData());this.viewDataInternal=t.data}},template:'\n\t
\n\t\t

\n\t\t\t{{ $p.t(\'global/personalGreeting\', [ viewDataInternal?.name ]) }}\n\t\t\t\n\t\t

\n\t\t\n\t\t\n\t
'},k={search(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/search",t,e)},searchAdvanced(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/searchAdvanced",t,e)},searchdummy(t){return this.$fhcApi.post("public/js/apps/api/dummyapi.php/Search",t)}},A={loadCategory(t){return this.$fhcApi.get("/api/frontend/v1/phrasen/loadModule/"+t)},setLanguage(t,e){const n={categories:t,language:e};return this.$fhcApi.post("/api/frontend/v1/phrasen/setLanguage",n)},getLanguage(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getLanguage",{})},getActiveDbLanguages(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getAllLanguages",{})}},x={getHeader(t){return this.$fhcApi.get("/api/frontend/v1/navigation/header",{navigation_page:t})},getMenu:function(t){return this.$fhcApi.get("/api/frontend/v1/navigation/menu",{navigation_page:t})}},S={saveCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/saveCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,customFilterName:t.customFilterName})},removeCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},applyFilterFields(t){return this.$fhcApi.post("/api/frontend/v1/filter/applyFilterFields",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterFields:t.filterFields})},addFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/addFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},removeFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},getFilterById(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},getFilter(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType})}},$={abmeldung:{getDetails(t,e){const n="/api/frontend/v1/studstatus/abmeldung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(n)},create(t,e,n){return this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/createAntrag",{studiensemester:t,prestudent_id:e,grund:n},{errorHandling:"strict"})},cancel(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t.studierendenantrag_id},{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t})}},unterbrechung:{getDetails(t,e){const n="/api/frontend/v1/studstatus/unterbrechung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(n)},create(t,e,n,i,a){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/createAntrag",{studiensemester:t,prestudent_id:e,grund:n,datum_wiedereinstieg:i,attachment:a},{errorHandling:"strict"})},cancel(t){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/cancelAntrag",{antrag_id:t},{errorHandling:"strict"})}},wiederholung:{getDetails(t){const e="/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/"+t;return this.$fhcApi.get(e)},getLvs(t){const e="/api/frontend/v1/studstatus/wiederholung/getLvs/"+t;return this.$fhcApi.get(e)},create(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/createAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},cancel(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/cancelAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},saveLvs(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/saveLvs",{forbiddenLvs:t,mandatoryLvs:e})}},leitung:{getStgs(){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getActiveStgs")},getAntraege(t,e,n){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getAntraege/"+t).then(t=>t.data)},getHistory(t){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getHistory/"+t)},getPrestudents(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/getPrestudents",{query:t},{signal:e,timeout:3e4})},approve(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t)},reject(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t)},reopen(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t)},pause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t)},unpause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t)},object(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t)},approveObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t)},denyObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t)}}},T={getView:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getView/${t}`,{})},fotoSperre:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/fotoSperre/${t}`,{})},isStudent:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/isStudent",{uid:t})},isMitarbeiter:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/isMitarbeiter/${t}`,{})},getZustellAdresse:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellAdresse",{})},getZustellKontakt:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellKontakt",{})},getGemeinden:function(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getGemeinden/${t}/${e}`,{})},getAllNationen:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getAllNationen",{})}},E={ +import t from"../../../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js?2025111701";import e from"../../../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js?2025111701";import n from"../../../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js?2025111701";import i from"../../../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js?2025111701";import a from"../../../../js/components/vueDatepicker.js.php?2025111701";var s={name:"BootstrapModal",data:()=>({modal:null,fullscreen:!1}),props:{backdrop:{type:[Boolean,String],default:!0,validator:t=>["static",!0,!1].includes(t)},focus:{type:Boolean,default:!0},keyboard:{type:Boolean,default:!0},noCloseBtn:Boolean,dialogClass:[String,Array,Object],headerClass:{type:[String,Array,Object],default:""},bodyClass:{type:[String,Array,Object],default:"px-4 py-5"},footerClass:{type:[String,Array,Object],default:""},allowFullscreenExpand:{type:Boolean,default:!1}},emits:["hideBsModal","hiddenBsModal","hidePreventedBsModal","showBsModal","shownBsModal"],methods:{dispose(){return this.modal.dispose()},handleUpdate(){return this.modal.handleUpdate()},hide(){return this.modal.hide()},show(t){return this.modal.show(t)},toggle(){return this.modal.toggle()},toggleFullscreen(){this.fullscreen=!this.fullscreen}},mounted(){this.$refs.modal&&(this.modal=new bootstrap.Modal(this.$refs.modal,{backdrop:this.backdrop,focus:this.focus,keyboard:this.keyboard}))},popup(t,e,n,i){const a=this,s={};void 0!==t&&(s.default=()=>t),void 0!==n&&(s.title=()=>n),void 0!==i&&(s.footer=()=>i);let r=!1;return"undefined"!=typeof primevue&&(r=!0),new Promise((t,n)=>{const i=Vue.createApp({name:"ModalTmpApp",setup:()=>()=>Vue.h(a,{class:"fade",...e,ref:"modal","onHidden.bs.modal":i.unmount},s),mounted(){this.$refs.modal.show()},beforeUnmount(){this.$refs.modal&&(!1!==this.$refs.modal.result?t(this.$refs.modal.result):n())},unmounted(){o.parentElement.removeChild(o)}}),o=document.createElement("div");r&&i.use(primevue.config.default,{zIndex:{overlay:9999}}),Promise.resolve().then(function(){return at}).then(t=>{i.use(t.default),i.mount(o),document.body.appendChild(o)})})},template:''},r={name:"BootstrapAlert",components:{BsModal:s},mixins:[s],props:{dialogClass:{type:[String,Array,Object],default:"modal-dialog-centered"},onHideBsModal:Function,onHiddenBsModal:Function,onHidePreventedBsModal:Function,onShowBsModal:Function,onShownBsModal:Function},data:()=>({result:!0}),mounted(){this.modal=this.$refs.modalContainer.modal},popup(t,e){return s.popup.bind(this)(t,e)},template:'\n\t\t\n\t\t\n\t'},o={name:"BootstrapConfirm",mixins:[r],data:()=>({result:!1}),popup(t,e){return r.popup.bind(this)(t,e)},template:'\n\t\t\n\t\t\n\t'},l={name:"GridItem",components:{},inject:{},props:{item:Object,active:Boolean},emits:["mouseDown","mouseUp","startMove","startResize","dragging","endDrag","dropDrag","item","touchStart","touchEnd"],data:()=>({dragAction:"",dragging:!1}),computed:{},methods:{registerDragAction(t){if(this.$emit("mouseDown",t),t.target.hasAttribute("drag-action"))this.dragAction=t.target.getAttribute("drag-action");else{let e=t.target.closest("[drag-action]");this.dragAction=e?e.getAttribute("drag-action"):""}},tryDragStart(t,e){let n=this.dragAction||t.target.getAttribute("drag-action");if(n){if(this.dragging=!0,"move"==n)return this.$emit("startMove",t,e);if("resize"==n)return this.$emit("startResize",t,e)}},touchDragEnd(t){this.dragging&&(this.dragging=!1,this.$emit("touchEnd",t))},touchStart(t){this.$emit("touchStart",t),this.registerDragAction(t),this.tryDragStart(t,this.item)},touchMove(t){this.dragging&&(t.preventDefault(),this.$emit("dragging",t))}},template:'\n\t
\n\t\t\n\t
'};class d{constructor(t){t.w?(this.w=t.w,this.h=t.h,this.data=[...t.data],this.grid=[...t.grid]):(this.w=t,this.h=1,this.data=[],this.grid=[])}isFreeSlot(t,e){const n=e*this.w+t;return!this.grid[n]&&0!==this.grid[n]}getMaxY(){return this.data.reduce((t,e)=>(e?.y>t&&(t=e.y),t),0)}getFreeSlots(){const t=[];let e=this.getMaxY(),n=this.w*(e+1);for(let t=0;tthis.grid[e]=t.index),this.data[t.index]=t,this.h=Math.max(this.h,t.y+t.h),[];{const i=new d(this);t.frame.forEach(t=>i.grid[t]=-1);const a=i.tryMoving(n,e);if(a.length){const e=a.sort((t,e)=>(void 0===t.cost&&(t.cost=t.moves.reduce((t,e)=>t*e.cost,1)),void 0===e.cost&&(e.cost=e.moves.reduce((t,e)=>t*e.cost,1)),t.cost>e.cost)),n=[];return e[0].moves.forEach(t=>{const e={...this.data[t.index]};e.x+=t.x,e.y+=t.y,e.frame=this.getItemFrame(e),this.h=Math.max(this.h,e.y+e.h),this.remove(e),e.frame.forEach(t=>this.grid[t]=e.index),this.data[t.index]=e,n[t.index]={index:e.index,x:e.x,y:e.y}}),t.frame.forEach(e=>this.grid[e]=t.index),this.data[t.index]=t,n}console.error("FATAL","can't arrange item on grid")}}move(t,e,n){if(t.data.place[this.w]?.pinned)return[];if(t.x==e&&t.y==n)return[];let i;this.remove(t),t.x==e?i=n-t.y>0?0:3:t.y==n&&(i=e-t.x>0?1:2);const a=Array.isArray(t.frame)?[...t.frame]:[t.frame],s={...t};s.x=e,s.y=n,s.frame=this.getItemFrame(s);let r=this.getItemsInFrame(s.frame);if(r.some(t=>this.data[t]?.data.place[this.w]?.pinned))return[];let o=r.map(t=>this.data[t]),l=o.map(t=>t.frame).flat();if(!l.some(t=>!s.frame.includes(t))&&!l.some(t=>a.includes(t))){let i=[],s=[];for(let t of a){if(s.includes(t))continue;let e=o.shift();e&&(s=[...s,...this.getItemFrame({...e,...this.getSingleFramePosition(t)})],i[e.index]={index:e.index,...this.getSingleFramePosition(t)})}return i[t.index]={index:t.index,x:e,y:n},i}const d=this.add(s,i);return d[t.index]={index:t.index,x:e,y:n},d}resize(t,e,n){if(t.w==e&&t.h==n)return[];this.remove(t);const i={...t};i.w=e,i.h=n,i.frame=this.getItemFrame(i);const a=this.add(i);return a&&(a[t.index]={index:t.index,w:e,h:n,x:t.x,y:t.y,resize:!0}),a}tryMoving(t,e){if(Array.isArray(t)){t.forEach(t=>this.remove({index:t}));let n=[{grid:this,moves:[]}];return t.forEach(t=>{let i=[];n.forEach(n=>{n.grid.tryMoving(t,e).forEach(t=>{n.moves,t.moves=[...t.moves,...n.moves],i.push(t)})}),n=i}),n}const n=[0,3,1,2];this.remove({index:t});const i=1+.2*(this.data[t].weight||0);return n.reduce((n,a)=>{let s=this.tryMovingInDirection(a,t,1,(e===a?.5:1+.1*a)*i);return s?[...n,...s]:n},[]).filter(t=>t)}tryMovingInDirection(t,e,n,i){const a={index:e,x:0,y:0,cost:i};let s;switch(t){case 0:if(this.data[e].data?.place[this.w]?.pinned||this.data[e].y-n<0)return!1;s=this.data[e].frame.map(t=>t-this.w*n),a.y=-n;break;case 3:if(this.data[e].data?.place[this.w]?.pinned)return!1;this.data[e].y+this.data[e].h+n>this.h&&(i+=.4),s=this.data[e].frame.map(t=>t+this.w*n),a.y=n;break;case 1:if(this.data[e].data?.place[this.w]?.pinned||this.data[e].x-n<0)return!1;s=this.data[e].frame.map(t=>t-n),a.x=-n;break;case 2:if(this.data[e].data?.place[this.w]?.pinned||this.data[e].x+this.data[e].w+n>this.w)return!1;s=this.data[e].frame.map(t=>t+n),a.x=n}const r=this.getItemsInFrame(s);if(r.includes(-1))return this.tryMovingInDirection(t,e,n+1,i);const o=new d(this);if(s.forEach(t=>o.grid[t]=-1),!r.length)return[{grid:o,moves:[a]}];const l=o.tryMoving(r).map(t=>t.moves.unshift(a)&&t);return!!l.length&&l}clearWeights(){this.data.forEach(t=>t.weight=void 0)}getItemsInFrame(t){return t.map(t=>this.grid[t]).filter((t,e,n)=>(t||0===t)&&n.indexOf(t)===e)}remove(t){this.grid=this.grid.map(e=>e!=t.index?e:void 0)}getItemFrame(t){const e=[];for(let n=0;n({x:-1,y:-1,clientX:0,clientY:0,mode:0,grid:null,dragGrid:null,permUpdates:[],positionUpdates:null,fixedPositionUpdates:null,draggedOffset:[0,0],draggedItem:null,draggedNode:null,reorderedItems:[],clonedWidget:null}),inject:{sectionName:{type:String,default:""}},computed:{additionalRowComputed:{get(){return this.additionalRow},set(t){this.$emit("update:additionalRow",t)}},items_hashmap(){let t={};return this.items.forEach(e=>{if(this.reorderedItems.length>0&&this.needsReordering(e)){let t=this.reorderedItems.filter(t=>t.data.widgetid==e.widgetid)?.pop();t&&(e.x=t.x,e.y=t.y)}t[`x${e.x}y${e.y}`]=e}),t},items_placeholders(){let t=[],e=this.cols,n=this.rows,i={};for(let a=0;a({index:e,x:t.x,y:t.y,w:t.w,h:t.h,weight:t.weight||0,data:t}))},prePlacedItems(){return this.fixedPositionUpdates?this.indexedItems.map(t=>this.fixedPositionUpdates[t.index]?{index:t.index,weight:t.weight,data:t.data,x:void 0===this.fixedPositionUpdates[t.index].x?t.x:this.fixedPositionUpdates[t.index].x,y:void 0===this.fixedPositionUpdates[t.index].y?t.y:this.fixedPositionUpdates[t.index].y,w:void 0===this.fixedPositionUpdates[t.index].w?t.w:this.fixedPositionUpdates[t.index].w,h:void 0===this.fixedPositionUpdates[t.index].h?t.h:this.fixedPositionUpdates[t.index].h}:t):this.indexedItems},placedItems(){if(!this.positionUpdates)return this.prePlacedItems;let t=this.prePlacedItems.map(t=>{if(!this.positionUpdates[t.index])return t;let e=this.positionUpdates[t.index]?.h-t.h,n=this.positionUpdates[t.index]?.w-t.w;return{resize:this.positionUpdates[t.index]?.resize,index:t.index,weight:t.weight,data:t.data,x:void 0===this.positionUpdates[t.index].x?t.x:this.positionUpdates[t.index].x,y:void 0===this.positionUpdates[t.index].y?t.y:this.positionUpdates[t.index].y,w:n>0||void 0===this.positionUpdates[t.index].w?t.w:this.positionUpdates[t.index].w,h:e>0||void 0===this.positionUpdates[t.index].h?t.h:this.positionUpdates[t.index].h}}),e=[];return t.forEach(t=>{if(t.resize){let n={...t,w:void 0===this.positionUpdates[t.index].w?t.w:this.positionUpdates[t.index].w,h:void 0===this.positionUpdates[t.index].h?t.h:this.positionUpdates[t.index].h,resizeOverlay:!0,blank:!0};e.push(n)}}),[...t,...e]},showEmptyTileHover(){return!(!this.active||!this.grid||0!=this.mode||this.x<0||this.y<0||this.x>=this.cols||this.y>=this.rows)&&this.grid.isFreeSlot(this.x,this.y)},widgetSetup(){if(this.widgetsSetup)return this.widgetsSetup.reduce((t,e)=>(t[e.widget_id]=e,t),{})}},watch:{active(t){t||this.dragCancel()},cols(){this.dragCancel()},rows:{handler(t){this.$emit("gridHeight",t)},immediate:!0},indexedItems:{handler(t){this.dragCancel();const e=this.createNewGrid(t);this.fixedPositionUpdates=e,e.length&&this.$emit("rearrangeItems",e.filter(t=>t))},immediate:!0,deep:!0}},methods:{needsReordering(t){return!t?.data?.place[this.cols]},toggleDraggedItemOverlay(t){this.draggedNode&&(t?this.draggedNode.firstElementChild.classList.add("dashboard-item-overlay"):this.draggedNode.firstElementChild.classList.remove("dashboard-item-overlay"))},dragging(t){if(1==this.mode){this.toggleDraggedItemOverlay(!0);const t=this.$refs.container.getBoundingClientRect(),e=this.clonedWidget.getBoundingClientRect();let n=this.clientY-20,i=this.clientX-15;const a=0,s=t.height-e.height,r=0,o=t.width-e.width,l=Math.max(a,Math.min(s,n)),d=Math.max(r,Math.min(o,i));this.clonedWidget.style.top=`${l}px`,this.clonedWidget.style.left=`${d}px`}},createNewGrid(t){this.grid=new d(this.cols);const e=[];let n=[...t].sort((t,e)=>this.needsReordering(t)&&this.needsReordering(e)?0:this.needsReordering(t)?999:this.needsReordering(e)?-999:t.weight>e.weight),i=[];return n.forEach(n=>{let a=this.grid.getFreeSlots();if(this.needsReordering(n)){let t=a.shift();t?(n.x=t.x,n.y=t.y):(n.x=0,n.y=this.grid.h),i.push(n)}if(n.x+n.w>this.cols){let t,i=this.cols-n.x;this.resizeLimit&&([i]=this.resizeLimit(n.data,i,n.h)),i<1&&(i=1),i>this.cols&&(i=this.cols),n.x+i>this.cols&&(t=this.cols-i),i==n.w&&(i=void 0),e[n.index]={item:n.data,x:t,w:i}}n.frame=this.grid.getItemFrame(n),this.convertGridResultToUpdate(this.grid.add(n),e,t)}),this.reorderedItems=i,this.grid.clearWeights(),e},convertGridResultToUpdate(t,e,n){t&&(n||(n=this.indexedItems),t.forEach(t=>{let i={item:n[t.index].data};void 0!==t.x&&(i.x=t.x),void 0!==t.y&&(i.y=t.y),void 0!==t.w&&(i.w=t.w),void 0!==t.h&&(i.h=t.h),e[t.index]=i}))},mouseLeave(){},updateCursor(t){if(!this.active)return this.x=this.y=-1,!1;const e=this.active?this.marginForExtraRow:0,n=this.$refs.container.getBoundingClientRect();t.clientX||t.clientY||!t.touches||(t.clientX=t.touches[0].clientX,t.clientY=t.touches[0].clientY),this.clientX=t.clientX-n.left,this.clientY=t.clientY-n.top;const i=Math.floor(this.cols*(t.clientX-n.left)/this.$refs.container.clientWidth),a=Math.floor((this.rows+e)*(t.clientY-n.top)/this.$refs.container.clientHeight);return(this.x!=i||this.y!=a)&&(this.x=i,this.y=a,!0)},_dragStart(t,e){t.dataTransfer&&(t.dataTransfer.setDragImage(t.target,-99999,-99999),t.dataTransfer.dropEffect="move",t.dataTransfer.effectAllowed="move")},startMove(t,e){this.active&&(this.mode=1,this.draggedItem=e,this.$emit("draggedItem",e),setTimeout(()=>{this.draggedNode=t.target.closest(".drop-grid-item");let e=t.target.closest(".drop-grid-item")?.cloneNode(!0);e.style.zIndex=5,e.classList.add("widgetClone"),this.$refs.container.appendChild(e);e.querySelector("[style='display: none;']").style.removeProperty("display"),this.clonedWidget=e},0),this.draggedOffset=[e.x-this.x,e.y-this.y],this._dragStart(t,e))},startResize(t,e){this.active&&(this.mode=2,this.draggedItem=e,this.$emit("draggedItem",e),this._dragStart(t))},dragOver(t){if(this.y+1>this.rows&&(1==this.mode||2==this.mode)&&this.dragCancel(),!this.active)return this.dragCancel();if(this.checkPinnedWidgetAnimation(),2==this.mode&&this.checkWidgetSizeLimitAnimation(),this.updateCursor(t))switch(this.mode){case 1:{t.preventDefault(),this.dragGrid=new d(this.grid);let e=this.x+this.draggedOffset[0],n=this.y+this.draggedOffset[1];e<0?(this.draggedOffset[0]+=e,e=0):e+this.draggedItem.w>this.cols&&(this.draggedOffset[0]+=this.cols-this.draggedItem.w-e,e=this.cols-this.draggedItem.w),n<0&&(this.draggedOffset[1]+=n,n=0),this.positionUpdates=this.dragGrid.move(this.draggedItem,e,n);break}case 2:{t.preventDefault(),this.dragGrid=new d(this.grid);let e=Math.min(this.cols-this.draggedItem.x,Math.max(1,this.x-this.draggedItem.x+1)),n=Math.max(1,this.y-this.draggedItem.y+1);this.resizeLimit&&([e,n]=this.resizeLimit(this.draggedItem.data,e,n)),this.positionUpdates=this.dragGrid.resize(this.draggedItem,e,n);break}}},dragCancel(){this.removeWidgetClones(),this.additionalRowComputed=!1,this.toggleDraggedItemOverlay(!1),this.mode=0,this.positionUpdates=null,this.draggedOffset=[0,0],this.draggedItem=null,this.$emit("draggedItem",null),this.draggedNode=null},dragEnd(){if(this.removeWidgetClones(),this.toggleDraggedItemOverlay(!1),0==this.mode)return;document.getElementById(this.draggedItem.data.widgetid).classList.remove("border-danger"),Array.from(document.getElementsByClassName("denied-dragging-animation"))?.forEach(t=>{t.classList.remove("denied-dragging-animation")}),this.mode=0;let t=[];this.convertGridResultToUpdate(this.positionUpdates,t),t=this._updateFixedPositions(t),t.length&&this.$emit("rearrangeItems",t.filter(t=>t)),this.draggedItem=null,this.draggedNode=null,this.$emit("draggedItem",null)},_updateFixedPositions(t){t.forEach((t,e)=>{this.fixedPositionUpdates[e]?this.fixedPositionUpdates[e]={...this.fixedPositionUpdates[e],...t}:this.fixedPositionUpdates[e]=t});let e=this.createNewGrid(this.prePlacedItems);return e.length?(e.forEach((e,n)=>t[n]=e),this._updateFixedPositions(t)):t},emptyTileClicked(){this.additionalRowComputed=!1,this.$emit("newItem",this.x,this.y)},updateCursorOnMouseMove(t){0==this.mode&&this.updateCursor(t)},checkPinnedWidgetAnimation(){let t=[];switch(this.mode){case 2:for(let e=this.draggedItem.x;e<=this.x;e++)for(let n=this.draggedItem.y;n<=this.y;n++)this.items.forEach(i=>{i.x==e&&i.y==n&&t.push(i)});break;case 1:t=this.items.filter(t=>t.x==this.x&&t.y==this.y)}Array.from(document.getElementsByClassName("denied-dragging-animation"))?.forEach(t=>{t.classList.remove("denied-dragging-animation")}),t.forEach(t=>{if(t.place[this.cols]&&t.place[this.cols].pinned){let e=document.getElementById(t.widgetid).querySelector("[pinned='true']");e.classList.contains("denied-dragging-animation")||e.classList.add("denied-dragging-animation")}})},checkWidgetSizeLimitAnimation(){let t=this.itemsSetup[this.draggedItem.data.widget],e=t.width.max??t.width,n=t.width.min??t.width,i=t.height.max??t.height,a=t.height.min??t.height,s=document.getElementById(this.draggedItem.data.widgetid),r=this.x-this.draggedItem.x+1,o=this.y-this.draggedItem.y+1;r>0&&(r>e||r0&&(o>i||o\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t'};let u={},p={},h=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/dashboard/Widget";var m={getWidget:t=>u[t],loadWidget:t=>u[t]?Promise.resolve(u[t]):p[t]?p[t]:h?(p[t]=new Promise((e,n)=>{axios.get(h,{params:{id:t}}).then(n=>{n.data.retval.arguments=JSON.parse(n.data.retval.arguments),n.data.retval.setup=JSON.parse(n.data.retval.setup),u[t]=n.data.retval,p[t]=void 0,e(u[t])}).catch(t=>n(t.response.data.retval.error))}),p[t]):Promise.reject("Widget could not be loaded because there is no path yet!"),setPath(t){h=t}},f={name:"Item",components:{BsModal:s,HeightTransition:{data:()=>({}),methods:{onEnter(t,e){t.style.height="0",t.style.height=t.scrollHeight+"px"},onLeave(t,e){t.style.height=t.scrollHeight+"px",t.style.height="0"}},template:'\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t'}},data:()=>({component:"",arguments:null,target:!1,widget:null,tmpConfig:{},isLoading:!1,hasConfig:!1,sharedData:null}),emits:["change","remove","dragstart","resizestart","configOpened","configClosed","pinItem","unPinItem"],props:["id","widgetID","config","width","height","custom","hidden","editMode","loading","item_data","place","setup","dragstate","resizeOverlay","additionalRow"],computed:{maxHeight(){return this.setup?.height?.max},maxWidth(){return"[object Number]"==Object.prototype.toString.call(this.setup?.width)?this.setup?.width:this.setup?.width?.max},minHeight(){return this.setup?.height?.min},minWidth(){return this.setup?.width?.min},isResizeable(){return this.maxWidth>1||this.maxHeight>1},isPinned(){return!!this.place?.pinned},ready(){return this.component&&null!==this.arguments}},methods:{unpin(){if(!this.editMode)return;let t={item:this.item_data,x:this.item_data.x,y:this.item_data.y};this.$emit("unPinItem",[t])},pinItem(){let t={item:this.item_data,x:this.item_data.x,y:this.item_data.y};this.$emit("pinItem",[t])},getWidgetC4Link:t=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+t.setup.cis4link,handleShowBsModal(){this.$emit("configOpened")},handleHideBsModal(){this.$emit("configClosed")},mouseDown(t){this.target=t.target},startDrag(t){this.$refs.dragHandle.contains(this.target)?this.$emit("dragstart",t):this.isResizeable&&this.$refs.resizeHandle.contains(this.target)&&this.isResizeable?this.$emit("resizestart",t):t.preventDefault()},openConfig(){this.tmpConfig={...this.arguments},this.$refs.config.show()},setConfig(t){this.hasConfig=t},changeConfig(){this.isLoading=!0;let t={...this.tmpConfig};this.sendChangeConfig(t)},changeConfigManually(){let t={...this.arguments};this.sendChangeConfig(t)},sendChangeConfig(t){for(var e in t)this.widget.arguments[e]==t[e]&&delete t[e];this.$emit("change",t)}},watch:{config(){this.arguments={...this.widget?.arguments,...this.config},this.tmpConfig={...this.arguments},this.$refs.config&&this.$refs.config.hide(),this.isLoading=!1}},async created(){this.widget=await m.loadWidget(this.id);let t=(await import(FHC_JS_DATA_STORAGE_OBJECT.app_root+this.widget.setup.file+"?"+FHC_JS_DATA_STORAGE_OBJECT.fhcomplete_build_version)).default;this.$options.components["widget"+this.widget.widget_id]=t,this.component="widget"+this.widget.widget_id,this.arguments={...this.widget.arguments,...this.config},this.tmpConfig={...this.arguments}},template:'\n\t
\n\t\t
\n\t\t\t\n\t\t
\n\t
\n\t
\n\t
\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{{ widget.setup.name }}\n\t\t\t\n\t\t\t\n\t\t\t\n \t\t\n \t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t\t
\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t
\n\t
'},g={data:()=>({}),props:{widget:{type:Object,required:!0}},methods:{path:t=>"/"==t[0]?FHC_JS_DATA_STORAGE_OBJECT.app_root+t:t},emits:["select"],template:'\n\t
\n\t\t\n\t\t
\n\t\t\t
{{ widget.setup.name || widget.widget_kurzbz }}
\n\t\t\t

{{ widget.beschreibung }}

\n\t\t
\n\t
'},v={name:"Section",components:{DropGrid:c,DashboardItem:f,WidgetIcon:g},inject:{widgetsSetup:{type:Array,default:[]},adminMode:{type:Boolean,default:!1},editMode:{type:Boolean,default:!1}},props:["name","widgets"],emits:["widgetAdd","widgetUpdate","widgetRemove"],data:()=>({configOpened:!1,gridWidth:1,gridHeight:null,draggedItem:null,additionalRow:!1}),provide(){return{editModeIsActive:Vue.computed(()=>this.editModeIsActive),sectionName:Vue.computed(()=>this.name)}},computed:{computedWidgetsSetup(){return this.widgetsSetup?this.widgetsSetup.reduce((t,e)=>(t[e.widget_id]=e.setup,t),{}):{}},editModeIsActive(){return(this.editMode||this.adminMode)&&!this.configOpened},getSectionStyle:()=>"margin-bottom: 8px;",items(){return this.widgets.map(t=>(!t?.widgetid&&t?.id&&(t.widgetid=t.id),{...t,reorder:!1,...t.place[this.gridWidth]||{reorder:!0,x:0,y:0,w:1,h:1}}))}},methods:{sectionNameTranslation(){switch(this.name){case"general":case"custom":return this.$p.t("dashboard",this.name);default:return this.name}},showSectionInformation(){return"general"==this.name?this.$p.t("dashboard","dashboardGeneralSectionDescription"):"custom"==this.name?this.$p.t("dashboard","dashboardCustomSectionDescription"):this.$p.t("dashboard","dashboardSectionDescription",[this.name])},handleConfigOpened(){this.configOpened=!0},handleConfigClosed(){this.configOpened=!1},checkResizeLimit(t,e,n){let i=m.getWidget(t.widget);if(i){let t=i.setup.width;t.max?t.min=t.min||1:t={min:t,max:t},et.max&&(e=t.max);let a=i.setup.height;a.max?a.min=a.min||1:a={min:a,max:a},na.max&&(n=a.max)}return[e,n]},removeWidget(t,e){if(t.custom)o.popup("Are you sure you want to delete this widget?").then(()=>this.$emit("widgetRemove",this.name,t.id));else{let n={};n[t.id]={hidden:!e},this.updatePreset(n)}},saveConfig(t,e){let n={};n[e.id]={config:t},this.updatePreset(n)},updatePositions(t,e=!1){let n={};t.forEach(t=>{let i={...t.item};i.placeholder||(i.place[this.gridWidth]||(i.place[this.gridWidth]={x:0,y:0,w:1,h:1}),delete i.x,delete i.y,delete i.w,delete i.h,delete i.place[this.gridWidth].pinned,void 0!==t.x&&(i.place[this.gridWidth].x=t.x),void 0!==t.y&&(i.place[this.gridWidth].y=t.y),void 0!==t.w&&(i.place[this.gridWidth].w=t.w),void 0!==t.h&&(i.place[this.gridWidth].h=t.h),e&&(i.place[this.gridWidth].pinned=!0),n[i.id]=i)}),this.updatePreset(n)},updatePreset(t){let e={};e[this.name]=t,this.$emit("widgetUpdate",this.name,e)}},mounted(){let t=this,e=t.$refs.container;t.gridWidth=parseInt(window.getComputedStyle(e).getPropertyValue("--fhc-dashboard-grid-size")),window.addEventListener("resize",()=>{t.gridWidth=parseInt(window.getComputedStyle(e).getPropertyValue("--fhc-dashboard-grid-size"))})},template:'\n\t
\n\t\t

\n\t\t\t\n\t\t\t{{sectionNameTranslation()}}:\n\t\t

\n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
'},b={components:{BsModal:s,WidgetIcon:g},props:["widgets"],data:()=>({callbacks:{}}),methods:{getWidget(){return new Promise((t,e)=>{this.callbacks={resolve:t,reject:e},this.$refs.modal.show()})},close(){this.callbacks.reject&&this.callbacks.reject(),this.callbacks={}},pick(t){this.callbacks.resolve&&this.callbacks.resolve(t),this.callbacks={},this.$refs.modal.hide()}},template:'
\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
'},y={mergeDeep(...t){const e=t=>t&&"object"==typeof t;return t.reduce((t,n)=>(Object.keys(n).forEach(i=>{const a=t[i],s=n[i];Array.isArray(a)&&Array.isArray(s)?t[i]=a.concat(...s):e(a)&&e(s)?t[i]=this.mergeDeep(a,s):t[i]=s}),t),{})}},w={getViewData:()=>({method:"get",url:"/api/frontend/v1/Cis4FhcApi/getViewData"})},_={name:"Dashboard",components:{DashboardSection:v,DashboardWidgetPicker:b},props:{dashboard:{type:String,required:!0,default:"CIS"},viewData:{type:Object,required:!0,validator:t=>t&&t.name&&t.uid&&t.timezone}},data(){return{sections:[],widgets:null,editMode:!1,viewDataInternal:this.viewData}},provide(){return{editMode:Vue.computed(()=>this.editMode),widgetsSetup:Vue.computed(()=>this.widgets),timezone:Vue.computed(()=>this.viewData.timezone)}},computed:{apiurl:()=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/dashboard"},methods:{widgetAdd(t,e){null===this.widgets&&axios.get(this.apiurl+"/Widget/getWidgetsForDashboard",{params:{db:this.dashboard}}).then(t=>{t.data.retval.forEach(t=>{t.arguments=JSON.parse(t.arguments),t.setup=JSON.parse(t.setup)}),this.widgets=t.data.retval}).catch(t=>console.error("ERROR:",t)),this.$refs.widgetpicker.getWidget().then(n=>{e.widget=n,e.id="loading_"+String((new Date).valueOf());let i={...e};i.loading=!0,this.sections.forEach(e=>{e.name==t&&e.widgets.push(i)}),axios.post(this.apiurl+"/Config/addWidgetsToUserOverride",{db:this.dashboard,funktion_kurzbz:t,widgets:[e]}).then(n=>{let a=Object.keys(n.data.retval.data[t].widgets).pop();e.id=a,this.sections.forEach(n=>{n.name==t&&(n.widgets.splice(n.widgets.indexOf(i),1),n.widgets.push(e))})}).catch(t=>{console.error("ERROR: ",t),alert("ERROR: "+t.response.data.retval)})}).catch(()=>{})},widgetUpdate(t,e){for(var n in e=e[t]){for(var i in this.sections)if(this.sections[i].name==t){for(var a in this.sections[i].widgets)if(this.sections[i].widgets[a].id==n){for(var s in e[n]=y.mergeDeep(this.sections[i].widgets[a],e[n]),{_x:1,_y:1,_w:1,_h:1,index:1,id:1,preset:1})e[n][s]&&delete e[n][s];break}break}e[n].widgetid=n}axios.post(this.apiurl+"/Config/addWidgetsToUserOverride",{db:this.dashboard,funktion_kurzbz:t,widgets:e}).then(()=>{this.sections.forEach(n=>{n.name==t&&n.widgets.forEach((t,i)=>{e[t.id]&&(e[t.id].id=t.id,e[t.id].index=t.index,n.widgets[i]=e[t.id])})})}).catch(t=>{console.error("ERROR: ",t),alert("ERROR: "+t.response.data.retval)})},widgetRemove(t,e){axios.post(this.apiurl+"/Config/removeWidgetFromUserOverride",{db:this.dashboard,funktion_kurzbz:t,widgetid:e}).then(()=>{this.sections.forEach(n=>{n.name==t&&(n.widgets=n.widgets.filter(t=>t.id!=e))})}).catch(t=>{console.error("ERROR: ",t),alert("ERROR: "+t.response.data.retval)})}},created(){this.$p.loadCategory("dashboard"),axios.get(this.apiurl+"/Widget/getWidgetsForDashboard",{params:{db:this.dashboard}}).then(t=>{t.data.retval.forEach(t=>{t.arguments=JSON.parse(t.arguments),t.setup=JSON.parse(t.setup)}),this.widgets=t.data.retval}).catch(t=>console.error("ERROR:",t)),axios.get(this.apiurl+"/Config",{params:{db:this.dashboard}}).then(t=>{for(var e in t.data.retval){let i=[],a=[];for(var n in t.data.retval[e].widgets)t.data.retval[e].widgets[n].id=n,t.data.retval[e].widgets[n].custom||t.data.retval[e].widgets[n].preset?i.push(t.data.retval[e].widgets[n]):a.push(n);this.sections.push({name:e,widgets:i}),a.forEach(t=>this.widgetRemove(e,t))}this.sections=this.sections.sort((t,e)=>"custom"==t.name?1:"custom"==e.name?-1:e.widgets.length-t.widgets.length)}).catch(t=>console.error("ERROR:",t))},async beforeMount(){if(!this.viewData.name||!this.viewData.uid){const t=await this.$api.call(w.getViewData());this.viewDataInternal=t.data}},template:'\n\t
\n\t\t

\n\t\t\t{{ $p.t(\'global/personalGreeting\', [ viewDataInternal?.name ]) }}\n\t\t\t\n\t\t

\n\t\t\n\t\t\n\t
'},k={search(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/search",t,e)},searchAdvanced(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/searchAdvanced",t,e)},searchdummy(t){return this.$fhcApi.post("public/js/apps/api/dummyapi.php/Search",t)}},A={loadCategory(t){return this.$fhcApi.get("/api/frontend/v1/phrasen/loadModule/"+t)},setLanguage(t,e){const n={categories:t,language:e};return this.$fhcApi.post("/api/frontend/v1/phrasen/setLanguage",n)},getLanguage(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getLanguage",{})},getActiveDbLanguages(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getAllLanguages",{})}},x={getHeader(t){return this.$fhcApi.get("/api/frontend/v1/navigation/header",{navigation_page:t})},getMenu:function(t){return this.$fhcApi.get("/api/frontend/v1/navigation/menu",{navigation_page:t})}},S={saveCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/saveCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,customFilterName:t.customFilterName})},removeCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},applyFilterFields(t){return this.$fhcApi.post("/api/frontend/v1/filter/applyFilterFields",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterFields:t.filterFields})},addFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/addFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},removeFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},getFilterById(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},getFilter(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType})}},$={abmeldung:{getDetails(t,e){const n="/api/frontend/v1/studstatus/abmeldung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(n)},create(t,e,n){return this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/createAntrag",{studiensemester:t,prestudent_id:e,grund:n},{errorHandling:"strict"})},cancel(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t.studierendenantrag_id},{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t})}},unterbrechung:{getDetails(t,e){const n="/api/frontend/v1/studstatus/unterbrechung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(n)},create(t,e,n,i,a){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/createAntrag",{studiensemester:t,prestudent_id:e,grund:n,datum_wiedereinstieg:i,attachment:a},{errorHandling:"strict"})},cancel(t){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/cancelAntrag",{antrag_id:t},{errorHandling:"strict"})}},wiederholung:{getDetails(t){const e="/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/"+t;return this.$fhcApi.get(e)},getLvs(t){const e="/api/frontend/v1/studstatus/wiederholung/getLvs/"+t;return this.$fhcApi.get(e)},create(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/createAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},cancel(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/cancelAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},saveLvs(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/saveLvs",{forbiddenLvs:t,mandatoryLvs:e})}},leitung:{getStgs(){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getActiveStgs")},getAntraege(t,e,n){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getAntraege/"+t).then(t=>t.data)},getHistory(t){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getHistory/"+t)},getPrestudents(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/getPrestudents",{query:t},{signal:e,timeout:3e4})},approve(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t)},reject(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t)},reopen(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t)},pause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t)},unpause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t)},object(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t)},approveObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t)},denyObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t)}}},T={getView:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getView/${t}`,{})},fotoSperre:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/fotoSperre/${t}`,{})},isStudent:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/isStudent",{uid:t})},isMitarbeiter:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/isMitarbeiter/${t}`,{})},getZustellAdresse:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellAdresse",{})},getZustellKontakt:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellKontakt",{})},getGemeinden:function(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getGemeinden/${t}/${e}`,{})},getAllNationen:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getAllNationen",{})}},E={ //! API calls for profil update requests -getStatus:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getStatus",{})},getTopic:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getTopic",{})},acceptProfilRequest:function({profil_update_id:t,uid:e,status_message:n,topic:i,requested_change:a}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/acceptProfilRequest",{profil_update_id:t,uid:e,status_message:n,topic:i,requested_change:a})},denyProfilRequest:function({profil_update_id:t,uid:e,topic:n,status_message:i}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/denyProfilRequest",{profil_update_id:t,uid:e,topic:n,status_message:i})},insertFile:function(t,e=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/insertFile/${e}`,t)},getProfilRequestFiles:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${t}`,{})},selectProfilRequest:function(t=null,e=null){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/selectProfilRequest",{...t?{uid:t}:{},...e?{id:e}:{}})},insertProfilRequest:function(t,e,n=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/insertProfilRequest",{topic:t,payload:e,...n?{fileID:n}:{}})},updateProfilRequest:function(t,e,n,i=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/updateProfilRequest",{topic:t,payload:e,ID:n,...i?{fileID:i}:{}})},deleteProfilRequest:function(t){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/deleteProfilRequest",{requestID:t})}},D={getRoomInfo(t,e,n){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getRoomplan",{ort_kurzbz:t,start_date:e,end_date:n})},getStunden(){return this.$fhcApi.get("/api/frontend/v1/LvPlan/Stunden",{})},getOrtReservierungen(t,e,n){return this.$fhcApi.post(`/api/frontend/v1/LvPlan/getReservierungen/${t}`,{start_date:e,end_date:n})},getLvPlanReservierungen(t,e){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getReservierungen",{start_date:t,end_date:e})},getLehreinheitStudiensemester(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${t}`,{})},studiensemesterDateInterval(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${t}`,{})},LvPlanEvents(t,e,n){return this.$fhcApi.get("/api/frontend/v1/LvPlan/LvPlanEvents",{start_date:t,end_date:e,lv_id:n})}},C={verband:{get(){return this.$fhcApi.get("api/frontend/v1/stv/verband")},favorites:{get(){return this.$fhcApi.get("api/frontend/v1/stv/favorites")},set(t){return this.$fhcApi.post("api/frontend/v1/stv/favorites/set",{favorites:t})}}},students:{uid(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/uid/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},prestudent(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/prestudent/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},person(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/person/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},verband(t){return this.$fhcApi.getUri("api/frontend/v1/stv/students/"+t)}},filter:{getStg(){return this.$fhcApi.get("api/frontend/v1/stv/filter/getStg")},setStg(t){return this.$fhcApi.post("api/frontend/v1/stv/filter/setStg",{studiengang_kz:t})}},konto:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/konto/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id),only_open:e.filter,studiengang_kz:e.studiengang_kz_intern?e.stg_kz:""}),t.ajaxRequestFunc=(t,e,n)=>this.$fhcApi.post(t,n,e),t.ajaxResponse=(t,e,n)=>n.data,t},checkDoubles(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/checkDoubles",e,{confirmErrorHandler:t=>!0})},insert(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/insert",e)},counter(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/counter",t)},edit(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/update",e)},delete(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/delete",{buchungsnr:t})},getBuchungstypen(){return this.$fhcApi.get("api/frontend/v1/stv/konto/getBuchungstypen")}},group:{getGruppen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/Gruppen/getGruppen/"+n.id)},deleteGroup(t){return this.$fhcApi.post("api/frontend/v1/stv/Gruppen/deleteGruppe/",t)}},kontakt:{getAdressen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressen/"+n.id)},addNewAddress(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewAddress/"+e,n)},loadAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadAddress/",{address_id:t})},updateAddress(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateAddress/"+e,n)},deleteAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteAddress/",{address_id:t})},getPlaces(t){return this.$fhcApi.get("api/frontend/v1/stv/address/getPlaces/"+t)},getFirmen(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getFirmen/"+t)},getNations(){return this.$fhcApi.get("api/frontend/v1/stv/address/getNations/")},getAdressentypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressentypen/")},getBankverbindung(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getBankverbindung/"+n.id)},addNewBankverbindung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewBankverbindung/"+e,n)},loadBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadBankverbindung/",{bankverbindung_id:t})},updateBankverbindung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateBankverbindung/"+e,n)},deleteBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteBankverbindung/",{bankverbindung_id:t})},getKontakte(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakte/"+n.id)},addNewContact(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewContact/"+e,n)},loadContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadContact/",{kontakt_id:t})},updateContact(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateContact/"+e,n)},deleteContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteContact/",{kontakt_id:t})},getStandorteByFirma(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getStandorteByFirma/"+t)},getKontakttypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakttypen/")}},prestudent:{get(t,e){return this.$fhcApi.post("api/frontend/v1/stv/prestudent/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e))},updatePrestudent(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/prestudent/updatePrestudent/"+e,n)},getBezeichnungZGV(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungZGV/")},getBezeichnungMZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungMZgv/")},getBezeichnungDZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungDZgv/")},getStgs(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStgs/")},getAusbildung(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAusbildung/")},getAufmerksamdurch(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAufmerksamdurch/")},getBerufstaetigkeit(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBerufstaetigkeit/")},getTypenStg(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getTypenStg/")},getBisstandort(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBisstandort/")},getHistoryPrestudent(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/status/getHistoryPrestudent/"+n.id)},getMaxSem(t){return this.$fhcApi.post("api/frontend/v1/stv/status/getMaxSemester/",{studiengang_kzs:t})},advanceStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/advanceStatus/"+t+"/"+e+"/"+n+"/"+i)},confirmStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/confirmStatus/"+t+"/"+e+"/"+n+"/"+i)},isLastStatus(t){return this.$fhcApi.get("api/frontend/v1/stv/status/isLastStatus/"+t)},deleteStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/deleteStatus/"+t+"/"+e+"/"+n+"/"+i)},getLastBismeldestichtag(){return this.$fhcApi.get("api/frontend/v1/stv/status/getLastBismeldestichtag/")},getHistoryPrestudents(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getHistoryPrestudents/"+n.id)}},status:{insertStatus(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/insertStatus/"+e,n)},loadStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/loadStatus/"+t+"/"+e+"/"+n+"/"+i)},updateStatus(t,{prestudent_id:e,status_kurzbz:n,studiensemester_kurzbz:i,ausbildungssemester:a},s){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/updateStatus/"+e+"/"+n+"/"+i+"/"+a,s)},getStudienplaene(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudienplaene/"+t)},getStudiengang(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudiengang/"+t)},getStatusgruende(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusgruende/")},getStati(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStati/")},addStudent(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/addStudent/"+t,e,{errorHeader:t})},changeStatus(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/changeStatus/"+t,e,{errorHeader:t})},getStatusarray(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusarray/")}},details:{get(t,e){let n="api/frontend/v1/stv/student/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e);return this.$fhcApi.post(n)},save(t,e,n,i){let a="api/frontend/v1/stv/student/save/"+encodeURIComponent(e)+"/"+encodeURIComponent(n);return this.$fhcApi.post(t,a,i)}},exam:{getPruefungen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getPruefungen/"+n.id)},loadPruefung(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/loadPruefung/"+t)},getTypenPruefungen(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getTypenPruefungen")},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/getAllLehreinheiten/",t)},getLvsByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsByStudent/"+t)},getLvsandLesByStudent(t,e){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsandLesByStudent/"+t+"/"+e)},getLvsAndMas(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsAndMas/"+t)},getMitarbeiterLv(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getMitarbeiterLv/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getNoten")},checkZeugnisnoteLv(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/",t)},addPruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/insertPruefung/",e)},updatePruefung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/updatePruefung/"+e,n)},deletePruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/deletePruefung/"+t)}},abschlusspruefung:{getAbschlusspruefung(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/"+n.id)},addNewAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/",e)},loadAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/",{id:t})},updateAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/",e)},deleteAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/",{id:t})},getTypenAbschlusspruefung(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/")},getTypenAntritte(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/")},getBeurteilungen(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/")},getAkadGrade(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getAkadGrade/",{studiengang_kz:t})},getTypStudiengang(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/",{studiengang_kz:t})},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/"+t)},getPruefer(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getPruefer/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getNoten/")},checkForExistingExams(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/",{uids:t})}},grades:{list(){return this.$fhcApi.get("api/frontend/v1/stv/grades/list")},getCertificate(t,e){let n="api/frontend/v1/stv/grades/getCertificate/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},getTeacherProposal(t,e){let n="api/frontend/v1/stv/grades/getTeacherProposal/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},getRepeaterGrades(t,e){let n="api/frontend/v1/stv/grades/getRepeaterGrades/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},updateCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,note:i,lehrveranstaltung_bezeichnung:a}){return this.$fhcApi.post("api/frontend/v1/stv/grades/updateCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,note:i},{errorHeader:a})},deleteCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,lehrveranstaltung_bezeichnung:i}){return this.$fhcApi.post("api/frontend/v1/stv/grades/deleteCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n},{errorHeader:i})},copyTeacherProposalToCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,lehrveranstaltung_bezeichnung:i}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyTeacherProposalToCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n},{errorHeader:i})},copyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id:t,lv_bezeichnung:e}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate",{studierendenantrag_lehrveranstaltung_id:t},{errorHeader:e})},getGradeFromPoints(t,e,n,i){const a=i?{errorHandling:!1}:{};return this.$fhcApi.post("api/frontend/v1/stv/grades/getGradeFromPoints",{points:t,lehrveranstaltung_id:e,studiensemester_kurzbz:n},a)}},mobility:{getMobilitaeten(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getMobilitaeten/"+n.id)},getProgramsMobility(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getProgramsMobility/")},addNewMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/insertMobility/",e)},loadMobility(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/loadMobility/"+t)},updateMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/updateMobility/",e)},deleteMobility(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobility/"+t)},getLVList(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLVList/"+t)},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/getAllLehreinheiten/",t)},getLvsandLesByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLvsandLesByStudent/"+t)},getPurposes(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getPurposes/"+n.id)},getSupports(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getSupports/"+n.id)},getListPurposes(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListPurposes/")},getListSupports(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListSupports/")},deleteMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilityPurpose/"+t.bisio_id,t)},addMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilityPurpose/"+t.bisio_id,t)},deleteMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilitySupport/"+t.bisio_id,t)},addMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilitySupport/"+t.bisio_id,t)}},archiv:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/archiv/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id)}),t.ajaxRequestFunc=(t,e,n)=>this.$fhcApi.post(t,n,e),t.ajaxResponse=(t,e,n)=>n.data,t},getArchivVorlagen(){return this.$fhcApi.post("api/frontend/v1/stv/archiv/getArchivVorlagen")},archive(t){return this.$fhcApi.post("api/frontend/v1/documents/archive",t)},archiveSigned(t){return this.$fhcApi.post("api/frontend/v1/documents/archiveSigned",t)},update(t){return this.$fhcApi.post("api/frontend/v1/stv/archiv/update",t)},delete({akte_id:t,studiengang_kz:e}){return this.$fhcApi.post("api/frontend/v1/stv/archiv/delete",{akte_id:t,studiengang_kz:e})}},documents:{getDocumentsUnaccepted(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/"+n.id+"/"+n.studiengang_kz)},getDocumentsAccepted(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsAccepted/"+n.id+"/"+n.studiengang_kz)},deleteZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},createZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/createZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},loadAkte(t){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/loadAkte/"+t)},getDoktypen(){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDoktypen/")},updateFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/updateAkte/"+t,e)},deleteFile(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteAkte/"+t)},uploadFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/uploadDokument/"+t,e)}},exemptions:{getAnrechnungen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getAnrechnungen/"+n.id)},getLehrveranstaltungen(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/"+t)},getBegruendungen(){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getBegruendungen/")},getLvsKompatibel(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLvsKompatibel/"+t)},getLektoren(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLektoren/"+t)},addNewAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/insertAnrechnung/",e)},loadAnrechnung(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/loadAnrechnung/"+t)},editAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/updateAnrechnung/",e)},deleteAnrechnung(t){return this.$fhcApi.post("api/frontend/v1/stv/anrechnungen/deleteAnrechnung/"+t)}},jointstudies:{getStudies(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudien/"+n.id)},getTypenMobility(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/")},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/")},getStudyprograms(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/")},getListPartner(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/")},getStatiPrestudent(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/")},loadStudy(t){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/loadStudie/"+t)},insertStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/insertStudie/",e)},updateStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/updateStudie/",e)},deleteStudy(t){return this.$fhcApi.post("api/frontend/v1/stv/GemeinsameStudien/deleteStudie/"+t)}},courselist:{getCourselist(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStundenplan/"+n.student_uid+"/"+n.start_date+"/"+n.end_date+"/"+n.group_consecutiveHours+"/"+n.dbStundenplanTable)},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStudiensemester/")}},configStudent(){return this.$fhcApi.get("api/frontend/v1/stv/config/student")},configStudents(){return this.$fhcApi.get("api/frontend/v1/stv/config/students")}},O={person:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getUid/")},addNewNotiz(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/addNewNotiz/"+e,n)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/updateNotiz/"+e,n)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getMitarbeiter/"+t)},isBerechtigt(t,e){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/isBerechtigt/")}}},P={person:{getAllBetriebsmittel(t,e,n){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/"+n.type+"/"+n.id)},addNewBetriebsmittel(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/"+e,n)},loadBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/"+t)},updateBetriebsmittel(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/"+e,n)},deleteBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/"+t)},getTypenBetriebsmittel(){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/")},loadInventarliste(t){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/"+t)}}},F={updatePersonUnrulyStatus(t,e){try{const n={person_id:t,unruly:e},i="/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus";return this.$fhcApi.post(i,n,null)}catch(t){throw t}},filterPerson(t,e=""){try{const n=e+"/api/frontend/v1/checkperson/CheckPerson/filterPerson";return axios.post(n,t)}catch(t){throw t}}},z={getContentID(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/ContentID",{ort_kurzbz:t})},getRooms(t,e,n,i,a=0){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getRooms",{datum:t,von:e,bis:n,typ:i,personenanzahl:a})},getRoomTypes(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getTypes")}},I={content(t,e=null,n=null,i=null){return this.$fhcApi.get("/api/frontend/v1/Cms/content",{content_id:t,...e?{version:e}:{},...n?{sprache:n}:{},...i?{sichtbar:i}:{}})},getNews(t=1,e=10,n){return this.$fhcApi.get("/api/frontend/v1/Cms/getNews",{page:t,page_size:e,sprache:n})},news(t){return this.$fhcApi.get("/api/frontend/v1/Cms/news",{limit:t})},getNewsRowCount:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getNewsRowCount",{})},getNewsExtra:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getStudiengangInfoForNews",{})}},L={getStudentenMail(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Lehre/lvStudentenMail",{lehreinheit_id:t})},getLvInfo(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/LV/${t}/${e}`,{})},getStudentPruefungen(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/Pruefungen/${t}`,{})},getStudentProjektarbeiten(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/getStudentProjektarbeiten/${t}`,{})},getStudentProjektabgaben(t){return this.$fhcApi.get("/api/frontend/v1/Lehre/getStudentProjektabgaben",{projektarbeit_id:t.projektarbeit_id,student_uid:t.student_uid})},postStudentProjektarbeitEndupload(t){return this.$fhcApi.post("/api/frontend/v1/Lehre/postStudentProjektarbeitEndupload",t,{Headers:{"Content-Type":"multipart/form-data"}})},postStudentProjektarbeitZwischenabgabe(t){return this.$fhcApi.post("/api/frontend/v1/Lehre/postStudentProjektarbeitZwischenabgabe",t,{Headers:{"Content-Type":"multipart/form-data"}})},getStudentProjektarbeitAbgabeFile(t,e){const n=`/Cis/Abgabetool/getStudentProjektarbeitAbgabeFile?paabgabe_id=${t}&student_uid=${e}`;window.location=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+n},getMitarbeiterProjektarbeiten(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/getMitarbeiterProjektarbeiten?showall=${e}`,{})},postProjektarbeitAbgabe(t){const e={paabgabe_id:t.paabgabe_id,paabgabetyp_kurzbz:t.bezeichnung.paabgabetyp_kurzbz,datum:t.datum,fixtermin:t.fixtermin,insertvon:t.insertvon,kurzbz:t.kurzbz,projektarbeit_id:t.projektarbeit_id};return this.$fhcApi.post("/api/frontend/v1/Lehre/postProjektarbeitAbgabe",e,null)},deleteProjektarbeitAbgabe(t){const e={paabgabe_id:t};return this.$fhcApi.post("/api/frontend/v1/Lehre/deleteProjektarbeitAbgabe",e,null)},postSerientermin(t,e,n,i,a){const s={datum:t,paabgabetyp_kurzbz:e,bezeichnung:n,kurzbz:i,projektarbeit_ids:a};return this.$fhcApi.post("/api/frontend/v1/Lehre/postSerientermin",s,null)},fetchDeadlines(t){const e={person_id:t};return this.$fhcApi.post("/api/frontend/v1/Lehre/fetchDeadlines",e,null)}},M={getLvMenu(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/LvMenu/getLvMenu/${t}/${e}`,{})}},R={person:{getMessages(t,e,n){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessages/"+n.id+"/"+n.type+"/"+n.size+"/"+n.page)},getVorlagen(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getVorlagen/")},getMsgVarsLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/")},getMessageVarsPerson(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessageVarsPerson/"+t.id+"/"+t.type_id)},getMsgVarsPrestudent(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsPrestudent/"+t.id+"/"+t.type_id)},getPersonId(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getPersonId/"+t.id+"/"+t.type_id)},getUid(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getUid/"+t.id+"/"+t.type_id)},getVorlagentext(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getVorlagentext/"+t)},getNameOfDefaultRecipient(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getNameOfDefaultRecipient/"+t.id+"/"+t.type_id)},getPreviewText(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/getPreviewText/"+t.id+"/"+t.type_id,e)},getReplyData(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getReplyData/"+t)},sendMessageFromModalContext(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/messages/messages/sendMessage/"+e,n)},sendMessage(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/sendMessage/"+t,e)},deleteMessage(t){return this.$fhcApi.post("api/frontend/v1/messages/messages/deleteMessage/"+t)}}},N={getVorlagen(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagen/")},getVorlagenByLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/")}},B={getStudiensemester:function(){return this.$fhcApi.get("/components/Cis/Mylv/Studiensemester",{})},getAllStudienSemester:function(t=void 0,e=void 0,n=void 0,i=void 0){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienAllSemester",{studiensemester:t,studiengang:e,semester:n,studienplan:i})},getStudiengaengeForStudienSemester:function(t){return this.$fhcApi.get(`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${t}`,{})},getStudienplaeneBySemester:function(t,e){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienplaeneBySemester",{studiengang:t,studiensemester:e})},getLvPlanForStudiensemester:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${t}/${e}`,{})},getLvEvaluierungInfo:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/Studium/getLvEvaluierungInfo/${t}/${e}`,{})}},U={search:k,phrasen:A,navigation:x,dashboard:{async getViewData(){return this.$fhcApi.get("/api/frontend/v1/Cis4FhcApi/getViewData",null,null)}},filter:S,studstatus:$,profil:T,profilUpdate:E,lvPlan:D,bookmark:{getBookmarks:function(){return this.$fhcApi.get("/api/frontend/v1/Bookmark/getBookmarks",{})},delete:function(t){return this.$fhcApi.get(`/api/frontend/v1/Bookmark/delete/${t}`,{})},update:function({bookmark_id:t,url:e,title:n,tag:i=null}){return this.$fhcApi.post(`/api/frontend/v1/Bookmark/update/${t}`,{url:e,title:n})},insert:function({url:t,title:e,tag:n}){return this.$fhcApi.post("/api/frontend/v1/Bookmark/insert",{url:t,title:e,tag:n})}},stv:C,notiz:O,betriebsmittel:P,checkperson:F,ampeln:{open:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/open",{})},all:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/all",{})},confirm:function(t){return this.$fhcApi.get(`/api/frontend/v1/Ampeln/confirm/${t}`,{})}},ort:z,cms:I,lehre:L,addons:M,messages:R,vorlagen:N,addons:M,studiengang:{studiengangInformation:function(){return this.$fhcApi.get("/api/frontend/v1/Studgang/getStudiengangInfo",{})},getStudiengangByKz:function(t){return this.$fhcApi.get("/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz",{studiengang_kz:t})}},menu:{getMenu:function(){return this.$fhcApi.get("/api/frontend/v1/CisMenu/getMenu",{})}},authinfo:{getAuthUID(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthUID",{})},getAuthInfo(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthInfo",{})}},studium:B,language:{getAll(){return this.$fhcApi.get("/api/frontend/v1/language/get")}}},j={install:(t,e)=>{if(t.config.globalProperties.$fhcApi)return void(e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory.addEndpoints(e.factory)));function n(t,e,n,i){if("string"==typeof t&&void 0===i)[e,n,i]=[t,e,n],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===n&&void 0===i&&(i=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},i?i.form=t:i={form:t}}return[e,n,i]}function i(t){const e=t.data;return delete t.data,e.meta?e.meta.response=t:e.meta={response:t},e}FHC_JS_DATA_STORAGE_OBJECT.app_root,FHC_JS_DATA_STORAGE_OBJECT.ci_router;const a=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});a.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,n])=>{if(n instanceof FileList)for(const i of n)t.FormData.append(e+(n.length>1?"[]":""),i);else Array.isArray(n)?n.every(t=>!(t instanceof File))?t.jsondata[e]=n:n.forEach(i=>t.FormData.append(e+(n.length>1?"[]":""),i)):t.jsondata[e]=n;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),a.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[n.type])(n,e.config))),i(e)),e=>"ERR_CANCELED"==e.code?Promise.reject({handled:!0,...e}):"off"==e.config?.errorHandling||!1===e.config?.errorHandling||"success"==e.config?.errorHandling?Promise.reject(e):e.response?404==e.response.status?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL,!0),Promise.reject({handled:!0,...e})):(e.response.data.errors=e.response.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[n.type])(n,e.config)),e.response.data.errors.length?Promise.reject(e):Promise.reject({handled:!0,...e})):e.request?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL),Promise.reject({handled:!0,...e})):(t.config.globalProperties.$fhcAlert.alertError(e.message),Promise.reject({handled:!0,...e}))),t.config.globalProperties.$fhcApi={getUri:t=>(console.warn("$fhcApi.getUri is DEPRECATED! Use $api.getUri instead."),a.getUri({url:t})),get:(t,e,i,s)=>(console.warn("$fhcApi.get is DEPRECATED! Use $api.get instead."),[e,i,s]=n(t,e,i,s),i&&(s?s.params=i:s={params:i}),a.get(e,s)),post:(t,e,i,s)=>(console.warn("$fhcApi.post is DEPRECATED! Use $api.post instead."),[e,i,s]=n(t,e,i,s),a.post(e,i,s)),_defaultErrorHandlers:{validation(e,n){const i=t.config.globalProperties.$fhcAlert;return n?.form?(n.form.clearValidation(),n.form.setFeedback(!1,e.messages),!1):Array.isArray(e.messages)?(e.messages.forEach(i.alertError),!1):"object"!=typeof e.messages||(n?.errorHeader?Object.values(e.messages).forEach(e=>i.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e,!0)):Object.entries(e.messages).forEach(([t,e])=>i.alertDefault("error",t,e,!0)),!1)},general(e,n){const i=t.config.globalProperties.$fhcAlert;n?.form?n.form.setFeedback(!1,e.message):n?.errorHeader?i.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e.message,!0):i.alertError(e.message)},php(e){const n=t.config.globalProperties.$fhcAlert;var i="";switch(i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":n.alertDefault("warn","PHP "+e.severity,i,!0);break;case"Notice":case"User Notice":case"Runtime Notice":n.alertDefault("info","PHP "+e.severity,i,!0);break;default:i="Type: PHP "+e.severity+"\n\n"+i,n.alertSystemError(i)}},exception(e){const n=t.config.globalProperties.$fhcAlert;var i="";i+="Type: "+e.class+"\n\n",i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),n.alertSystemError(i)},db(e){const n=t.config.globalProperties.$fhcAlert;var i="";void 0!==e.heading&&(i+=e.heading+"\n\n"),void 0!==e.code&&(i+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(i+="SQL: "+e.sql+"\n\n"),void 0!==e.message?i+="Message: "+e.message+"\n\n":void 0!==e.messages&&(i+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(i+="Filename: "+e.filename+"\n"),void 0!==e.line&&(i+="Line Number: "+e.line+"\n"),n.alertSystemError(i)},auth(e,n){const i=t.config.globalProperties.$fhcAlert;var a="";a+="Controller name: "+e.controller+"\n",a+="Method name: "+e.method+"\n",a+="Required permissions: "+e.required_permissions,n?.errorHeader?i.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e.message,!0):i.alertDefault("error",e.message,a)}}};class s{constructor(e,n){void 0===n?(this.$fhcApi={getUri:e=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.getUri(e)),get:(e,n,i,a)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.get(e,n,i,a)),post:(e,n,i,a)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.post(e,n,i,a))},Object.defineProperty(this.$fhcApi,"factory",{get:()=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory)}),t.config.globalProperties.$fhcApi.factory=this):Object.defineProperty(this,"$fhcApi",{get(){return(n||this).$fhcApi}}),this.addEndpoints(e,!0)}addEndpoints(t,e){Object.keys(t).forEach(e=>{Object.defineProperty(this,e,{get(){return"function"==typeof t[e]?t[e].bind(this):new s(t[e],this.$fhcApi.factory)}})}),e||console.warn("$fhcApi.factory.addEndpoints() is DEPRECATED!")}}const r=new s(U);e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),r.addEndpoints(e.factory)),t.config.globalProperties.$fhcApi.factory=r,t.provide("$fhcApi",t.config.globalProperties.$fhcApi)}};const H="error",V="retval",J={get:function(t,e,n=null){return J._axiosCall(t,e,"get",n)},post:function(t,e,n=null){return J._axiosCall(t,e,"post",n)},isSuccess:function(t){return!("object"!=typeof t||!t.hasOwnProperty(H)||!t.hasOwnProperty(V)||0!=t.error)},isError:function(t){return!J.isSuccess(t)},hasData:function(t){return!(!J.isSuccess(t)||!("object"==typeof t[V]&&Object.keys(t[V]).length>0||"array"==typeof t[V]&&t[V].length>0||"string"==typeof t[V]&&""!=t[V].trim()||"number"==typeof t[V]))},getData:function(t){return J.hasData(t)?t[V]:null},getError:function(t){return"object"==typeof t&&Object.keys(t).length>0&&t.hasOwnProperty(V)?t[V]:"Generic error"},getErrorCode:function(t){return"object"==typeof t&&t.hasOwnProperty(H)?t[H]:1},_generateRouterURI:function(t){var e=null;return"undefined"!=typeof FHC_JS_DATA_STORAGE_OBJECT&&(e=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"+t),e},_printDebug:function(t,e,n){},_axiosCall:function(t,e,n,i){let a={method:n,url:J._generateRouterURI(t),timeout:5e3};if("get"==n?a.params=e:a.data=e,"object"==typeof i)for(var s in i)a[s]=i[s];return axios(a)}},G=document.createElement("div"),q=Vue.createApp({name:"FhcAlertApp",components:{PvToast:e,PvConfirm:n},methods:{mailToUrl:t=>"mailto:"+FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto+"?subject=Meldung%20Systemfehler&body="+("\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method+"%0D%0A\n\t\t\t\tFehler Meldung: "+t.message.detail+"%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!"),openMessagecard(t){bootstrap.Collapse.getOrCreateInstance(t.target.getAttribute("href")).toggle()}},unmounted(){G.parentElement.removeChild(G)},computed:{showmaillink:function(){return""!==FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto}},template:'\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t'});q.use(t),q.use(i);const W=q.mount(G);document.body.appendChild(G);var K={install:(t,e)=>{t.config.globalProperties.$p||t.use(it);const n={alertSuccess(t){if(Array.isArray(t))return t.forEach(this.alertSuccess);W.$refs.toast.add({severity:"success",summary:"Info",detail:t,life:1e3})},alertInfo(t){if(Array.isArray(t))return t.forEach(this.alertInfo);W.$refs.toast.add({severity:"info",summary:"Info",detail:t,life:3e3})},alertWarning(t){if(Array.isArray(t))return t.forEach(this.alertWarning);W.$refs.toast.add({severity:"warn",summary:"Achtung",detail:t})},alertError(t){if(Array.isArray(t))return t.forEach(this.alertError);W.$refs.toast.add({severity:"error",summary:"Achtung",detail:t})},alertSystemError(e){if(Array.isArray(e))return e.forEach(this.alertSystemError);W.$refs.alert.add({severity:"error",summary:Vue.computed(()=>t.config.globalProperties.$p.t("alert/systemerror")),detail:e})},confirmDelete:()=>new Promise((e,n)=>{W.$confirm.require({group:"fhcAlertConfirm",header:Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:Vue.computed(()=>t.config.globalProperties.$p.t("alert/confirm_delete")),acceptLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/loeschen")),acceptClass:"p-button-danger",rejectLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:"p-button-secondary",accept(){e(!0)},reject(){e(!1)}})}),confirm:e=>new Promise((n,i)=>{W.$confirm.require({group:e?.group??"fhcAlertConfirm",header:e?.header??Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:e?.message??"",acceptLabel:e?.acceptLabel??"Ok",acceptClass:e?.acceptClass??"btn btn-primary",rejectLabel:e?.rejectLabel??Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:e?.rejectClass??"btn btn-outline-secondary",accept(){n(!0)},reject(){n(!1)}})}),alertDefault(t,e,n,i=!1,a=!1){let s={severity:t,summary:e,detail:n,html:a};i||(s.life=3e3),W.$refs.toast.add(s)},alertMultiple(t,e="info",n="Info",i=!1,a=!1){return!!t.every(t=>"string"==typeof t)&&(t.forEach(t=>this.alertDefault(e,n,t,i,a)),!0)},handleSystemError(t){if(!t.hasOwnProperty("name")||t.name.toLowerCase()!=="AbortError".toLowerCase()){if("string"==typeof t)return n.alertSystemError(t);if(Array.isArray(t)&&t.every(t=>"string"==typeof t))return t.every(n.alertSystemError);if(!t.hasOwnProperty("handled")||!t.handled){if("object"==typeof t&&null!==t){let e="";return t.hasOwnProperty("response")&&t.response?.data?.retval?e+="Error Message: "+(t.response.data.retval.message||t.response.data.retval)+"\r\n":t.hasOwnProperty("message")&&(e+="Error Message: "+t.message.toUpperCase()+"\r\n"),t.hasOwnProperty("config")&&t.config.hasOwnProperty("url")&&(e+="Error ConfigURL: "+t.config.url+"\r\n"),t.hasOwnProperty("stack")&&(e+="Error Stack: "+t.stack+"\r\n"),""==e&&(e="Error Message: "+JSON.stringify(t)+"\r\n"),e+="Error Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,n.alertSystemError(e)}n.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method)}}},handleSystemMessage(t){if("string"==typeof t)return n.alertWarning(t);if(Array.isArray(t)){if(t.every(t=>"string"==typeof t))return t.every(n.alertWarning);if(t.every(t=>"object"==typeof t)&&null!==msg)return t.every(t=>{t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?n.alertWarning(JSON.stringify(t.data.retval)):n.alertSystemError(JSON.stringify(t))})}"object"!=typeof t||null===t?n.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method):t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?n.alertWarning(JSON.stringify(t.data.retval)):n.alertSystemError(JSON.stringify(t))},resetFormValidation(t){const e=new Event("fhc-form-reset");t.querySelectorAll(["[data-fhc-form-validate],[data-fhc-form-error]"]).forEach(t=>t.dispatchEvent(e))},handleFormValidation(t,e){if(void 0===e){if(t&&t.nodeType===Node.ELEMENT_NODE)return e=>n.handleFormValidation(e,t)}else if(400==t?.response?.status){let i=J.getError(t.response.data);"object"!=typeof i&&(i=t.response.data),n.resetFormValidation(e);const a=Object.entries(i).filter(([t,n])=>{const i=e.querySelector('[data-fhc-form-validate="'+t+'"]');return!i||(i.dispatchEvent(new CustomEvent("fhc-form-invalidate",{detail:n})),!1)}).map(t=>t[1]),s=e.querySelector("[data-fhc-form-error]");return void(s&&a.length?s.dispatchEvent(new CustomEvent("fhc-form-error",{detail:a})):a.forEach(n.alertError))}if(400==t?.response?.status){let e=J.getError(t.response.data);n.alertError("object"==typeof e?Object.values(e):e)}else n.handleSystemError(t)}};t.config.globalProperties.$fhcAlert=n,t.provide("$fhcAlert",t.config.globalProperties.$fhcAlert)}},Z={install:(t,e)=>{if(t.config.globalProperties.$api)return;function n(t,e){Array.isArray(t)?t.forEach(e):Object.entries(t).forEach(([t,n])=>n.forEach(n=>e(n,t)))}t.config.globalProperties.$fhcAlert||t.use(K);let i={success:!0,fail:!0,combine:{form:["validation","general"],toast:["validation","general","not_found","site_failed"]},handler:{form(t,e){t.clearValidation(),e.forEach(e=>t.setFeedback(!1,e.messages||e.message))},async toast(e){const n=t.config.globalProperties.$p;if(!n)return Promise.reject("Phrasen plugin not loaded!");async function i(t){t=t.reduce((t,e)=>{switch(e.type){case"not_found":case"site_failed":e.message?t[e.message]=[e.url]:t._default=[e.url];break;case"general":t._default||(t._default=[]),t._default.push(e.message);break;case"validation":Object.entries(e.messages).forEach(([e,n])=>{t[e]||(t[e]=[]),Array.isArray(n)?t[e].push(...n):t[e].push(n)})}return t},{});let e=0;const i=await Promise.all(Object.entries(t).sort((t,e)=>["_default"].indexOf(e[0])-["_default"].indexOf(t[0])).map(async([t,i])=>{if("_default"==t){await n.loadCategory("dashboard");t='
'+n.t("dashboard/general")+"
"}else t="
"+t+"
";return e+=i.length,t+"
"+i.join("
")+"
"}));return{counter:e,msgs:i}}let a,s;Array.isArray(e)?({counter:a,msgs:s}=await i(e)):({counter:a,msgs:s}=await Object.entries(e).reduce(async(t,[e,n])=>{const a=await t,{counter:s,msgs:r}=await i(n);return a.counter+=s,a.msgs.push("
"+e+"
"+r.join("")+"
"),a},Promise.resolve({counter:0,msgs:[]}))),await n.loadCategory("ui");const r=n.t("ui/n_errors",{n:a});t.config.globalProperties.$fhcAlert.alertDefault("error",r,"
"+s.join("")+"
",!0,!0)},php(e){n(e,(e,n)=>{var i="";switch(i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":n?n+=": PHP "+e.severity:n="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("warn",n,i,!0);break;case"Notice":case"User Notice":case"Runtime Notice":n?n+=": PHP "+e.severity:n="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("info",n,i,!0);break;default:i="Type: PHP "+e.severity+"\n\n"+i,n&&(i=n+"\n\n"+i),t.config.globalProperties.$fhcAlert.alertSystemError(i)}})},exception(e){n(e,(e,n)=>{var i="";n&&(i+=n+"\n\n"),i+="Type: "+e.class+"\n\n",i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),t.config.globalProperties.$fhcAlert.alertSystemError(i)})},db(e){n(e,(e,n)=>{var i="";n&&(i+=n+"\n\n"),void 0!==e.heading&&(i+=e.heading+"\n\n"),void 0!==e.code&&(i+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(i+="SQL: "+e.sql+"\n\n"),void 0!==e.message?i+="Message: "+e.message+"\n\n":void 0!==e.messages&&(i+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(i+="Filename: "+e.filename+"\n"),void 0!==e.line&&(i+="Line Number: "+e.line+"\n"),t.config.globalProperties.$fhcAlert.alertSystemError(i)})},auth(e){n(e,(e,n)=>{n?n+=": "+e.message:n=e.message;var i="";i+="Controller name: "+e.controller+"\n",i+="Method name: "+e.method+"\n",i+="Required permissions: "+e.required_permissions,t.config.globalProperties.$fhcAlert.alertDefault("error",n,i,!0)})}}};function a(t,e,n,i){if("string"==typeof t&&void 0===i)[e,n,i]=[t,e,n],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===n&&void 0===i&&(i=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},i?i.form=t:i={form:t}}return[e,n,i]}function s(t){if("string"==typeof t.data||t.data instanceof String)return s({data:t});const e=t.data;return delete t.data,e?(e.meta?e.meta.response=t:e.meta={response:t},e):{meta:{response:t},data:null}}function r(t){if(!1===t||"off"===t)return{...i,success:!1,fail:!1};if(!t||!0===t)return{...i};if("success"===t)return{...i,fail:!1};if("fail"===t)return{...i,success:!1};const{success:e,fail:n,handler:a,combine:s}=t;return t={...i},Object.entries({fail:n,success:e}).forEach(([e,n])=>{void 0!==n&&(t[e]=n)}),Object.entries({handler:a,combine:s}).forEach(([e,n])=>{void 0!==n&&(t[e]={...t[e],...n})}),t}function o(t){const e=r(t?.errorHandling);if(t?.form){const n=e.handler.form;e.handler={...e.handler,form:e=>n(t.form,e)}}else e.combine={...e.combine,form:[]};return e}function l(t){return t.response?404==t.response.status?[{type:"not_found",message:t.message,url:t.request.responseURL}]:null==t.response.data.errors?[]:t.response.data.errors:t.request?[{type:"site_failed",message:t.message,url:t.request.responseURL}]:[{type:"script",message:t.message}]}function d(t,e){const n={},i=[];if(null==e)return{};for(;e.length;)i.push(e.pop());for(var a of i){let i=a.type,r=null;for(var s in t.combine){let e=t.combine[s].includes(i),n=t.handler[s];if(e&&n&&(r=s,"form"==r))break}r&&(i=r);t.handler[i]?(n[i]||(n[i]=[]),Array.isArray(a)?n[i].push(...a):n[i].push(a)):e.push(a)}return n}void 0!==e?.errorHandling&&(i=r(e.errorHandling));const c=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});c.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,n])=>{if(n instanceof FileList)for(const i of n)t.FormData.append(e+(n.length>1?"[]":""),i);else Array.isArray(n)?n.every(t=>!(t instanceof File))?t.jsondata[e]=n:n.forEach(i=>t.FormData.append(e+(n.length>1?"[]":""),i)):t.jsondata[e]=n;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),c.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$api._defaultErrorHandlers[n.type])(n,e.config))),s(e)),t=>{if("ERR_CANCELED"==t.code)return Promise.reject({handled:!0,...t});const e=o(t.config);if(!e.fail)return Promise.reject(t);const n=l(t),i=d(e,n);for(var a in i)e.handler[a](i[a]);return n.length?Promise.reject(t):Promise.reject({handled:!0,...t})}),t.config.globalProperties.$api={getUri:t=>c.getUri({url:t}),get:(t,e,n,i)=>([e,n,i]=a(t,e,n,i),n&&(i?i.params=n:i={params:n}),c.get(e,i)),post:(t,e,n,i)=>([e,n,i]=a(t,e,n,i),c.post(e,n,i)),call(e,n,i){if(Array.isArray(e)){const s=t.config.globalProperties.$api;return Promise.allSettled(e.map((t,e)=>(Array.isArray(t)||(t=["#"+e,t]),s.call(t[1],{errorHeader:t[0],errorHandling:!1})))).then(t=>{const[,,e]=a(i,void 0,void 0,n||{}),s=o(e);if(!s.success&&!s.fail)return t;const r={};for(var c of t){const[t,e]="fulfilled"===c.status?[s.success,c.value]:[s.fail,c.reason];if(!t)return;const n=d(s,l(e));for(var u in n)r[u]?r[u][e.config.errorHeader]=n[u]:r[u]={[e.config.errorHeader]:n[u]}}for(var p in r)s.handler[p](r[p]);return t})}let{method:s,url:r,params:c,config:u}=e;return void 0!==n&&(u=n),s||(s="get"),s.toLowerCase&&(s=s.toLowerCase()),"get"==s?this.get(i,r,c,u):"post"==s?this.post(i,r,c,u):void console.error("FhcApi: method not allowed:",s)}},t.provide("$api",t.config.globalProperties.$api)}},Y={loadCategory:t=>({method:"get",url:"/api/frontend/v1/phrasen/loadModule/"+t}),setLanguage:(t,e)=>({method:"post",url:"/api/frontend/v1/phrasen/setLanguage",params:{categories:t,language:e}}),getLanguage:()=>({method:"get",url:"/api/frontend/v1/phrasen/getLanguage"}),getActiveDbLanguages:()=>({method:"get",url:"/api/frontend/v1/phrasen/getAllLanguages"})};const X=Vue.reactive({}),Q={};let tt=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language),et=Vue.computed(()=>tt.value?FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(t=>t.sprache==tt.value).LC_Time:null);const nt={user_language:tt,user_locale:et,setLanguage(t){const e=Object.keys(X);return this.config.globalProperties.$api.call(Y.setLanguage(e,t)).then(e=>(e.data.forEach(t=>{X[t.category][t.phrase]=t.text}),tt.value=t,e))},loadCategory(t){return Array.isArray(t)?Promise.all(t.map(this.config.globalProperties.$p.loadCategory)):(Q[t]||(Q[t]=this.config.globalProperties.$api.call(Y.loadCategory(t)).then(e=>e?.data?function(t,e){return t.filter(t=>t.category==e).reduce((t,e)=>(t[e.phrase]||(t[e.phrase]=e.text),t),{})}(e.data,t):{}).then(e=>{X[t]=e})),Q[t])},t_ref(t,e,n){return console.warn("deprecated"),Vue.computed(()=>this.t(t,e,n))},t(t,e,n){if(void 0===n&&(Array.isArray(t)&&2==t.length||t.split&&2==t.split("/").length)&&(n=e,[t,e]=t.split?t.split("/"):t),void 0===e)return console.error("invalid input",t,e,n),"";let i=Vue.computed(()=>X[t]?function(t,e,n){let i=X[t][e];return i?(n&&(i=i.replace(/\{([^}]*)\}/g,(t,e)=>void 0===n[e]?t:n[e])),i):"<< PHRASE "+e+">>"}(t,e,n):"");return X[t]||this.loadCategory(t),i.value}};var it={install(t,e){t.config.globalProperties.$fhcApi||t.use(j),t.config.globalProperties.$api||t.use(Z),t.config.globalProperties.$p={t:nt.t,loadCategory:e=>nt.loadCategory.call(t,e),setLanguage:e=>nt.setLanguage.call(t,e),user_language:tt,user_locale:et,t_ref:nt.t_ref},t.provide("$p",t.config.globalProperties.$p)}},at=Object.freeze({__proto__:null,default:it,user_locale:et});let st=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.theme.name);const rt=FHC_JS_DATA_STORAGE_OBJECT.theme.modes,ot=t=>{if(!t)return;for(const t of rt)document.documentElement.classList.remove(t);st.value=t,document.documentElement.classList.add(t),document.body.setAttribute("data-bs-theme",t);let e=document.querySelector('link[href*="primevue/resources/themes"]');"dark"==t?e.attributes.href.value=e.attributes.href.value.replace("bootstrap4-light-blue","bootstrap4-dark-blue"):("light"==t||e.attributes.href.value.includes("bootstrap4-dark-blue"))&&(e.attributes.href.value=e.attributes.href.value.replace("bootstrap4-dark-blue","bootstrap4-light-blue")),localStorage.setItem("theme",t)};var lt={install:(t,e)=>{document.documentElement.classList.add(st.value),(()=>{let t=localStorage.getItem("theme");t&&rt.includes(t)||(t=rt[0],localStorage.setItem("theme",t)),ot(t)})(),t.config.globalProperties.$theme={theme_name:st,theme_modes:rt,switchTheme:t=>{ot(t)}}}};const dt=t=>{const e=t.toString(16);return 1===e.length?"0"+e:e};function ct(t){return(299*parseInt(t.substring(1,3),16)+587*parseInt(t.substring(3,5),16)+114*parseInt(t.substring(5,7),16))/1e3>=128?"black":"white"}var ut={mounted(t,e){const n=window.getComputedStyle(t).backgroundColor;let i=new RegExp(/^rgba?\s*\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*,?\s*([0-9]+.?[0-9]?)?\s*\)/),a=n.match(i);if(a){a.length<3&&console.error("Invalid RGB color format");let e=parseInt(a[1],10),n=parseInt(a[2],10),i=parseInt(a[3],10),s=`#${dt(e)}${dt(n)}${dt(i)}`;t.style.color=ct(s)}else t.style.color=ct(n)}};const pt={TYPE_LE:"lehreinheit",TYPE_VEVENT:"vevent",getValidTransferData(t,e){const n=t.dataTransfer.getData("text");let i;try{if(i=JSON.parse(n),!i.type)return null;if(e&&!e.includes(i.type))return null}catch(t){return null}return i},isValidTransferData(t,e){return!!this.getValidTransferData(t,e)},getTransferData(t){const e=t.dataTransfer.getData("text");return JSON.parse(e)},setTransferData(t,e){switch(e.type){case pt.TYPE_LE:e=pt.fromLe(e);break;default:if(e.dtstart&&e.dtend&&e.uid&&e.summary){e=pt.fromVEvent(e);break}return!1}return t.dataTransfer.setData("text",JSON.stringify(e)),!0},fromLe(t){const{type:e=pt.TYPE_LE,lehreinheit_id:n,stundenblockung:i}=t;return{type:e,id:n,stundenblockung:i}},fromVEvent(t){const{type:e=pt.TYPE_VEVENT,uid:n,dtstart:i,dtend:a,summary:s}=t;return{type:e,id:n,dtstart:i,dtend:a,summary:s}}};var ht={mounted(t,e,n){if("draggable"==e.arg)t.addEventListener("update-my-value",t=>{t.preventDefault(),e.value=t.detail.item}),t.addEventListener("dragstart",n=>{t.dispatchEvent(new CustomEvent("calendar-dragstart",{cancelable:!0,bubbles:!0,detail:{item:e.value,x:n.offsetX/t.offsetWidth,y:n.offsetY/t.offsetHeight,originalEvent:n}}))}),t.addEventListener("dragend",n=>{t.dispatchEvent(new CustomEvent("calendar-dragend",{cancelable:!0,bubbles:!0,detail:{item:e.value,originalEvent:n}}))});else if("dropcage"==e.arg){let e=null;t.addEventListener("dragover",n=>{if(!e)return e=t.getBoundingClientRect(),t.dispatchEvent(new CustomEvent("calendar-dragenter",{detail:{originalEvent:n}}))}),window.addEventListener("dragleave",n=>{if(!e)return;let i;return i=void 0===n.clientX?{x:n.pageX+document.documentElement.scrollLeft,y:n.pageY+document.documentElement.scrollTop}:{x:n.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,y:n.clientY+document.body.scrollTop+document.documentElement.scrollTop},i.x>e.left+e.width-1||i.xe.top+e.height-1||i.y{if(e)return e=null,t.dispatchEvent(new CustomEvent("calendar-dragleave",{detail:{originalEvent:n}}))})}else"dropzone"==e.arg&&t.addEventListener(e.modifiers.once?"dragenter":"dragover",n=>{const i=e.value instanceof Function?e.value(n):e.value,a=i.timestamp?i:{timestamp:i};t.dispatchEvent(new CustomEvent("calendar-dragchange",{cancelable:!0,bubbles:!0,detail:a}))})},updated(t,e,n,i){"draggable"==e.arg&&t.dispatchEvent(new CustomEvent("update-my-value",{cancelable:!0,detail:{item:e.value}}))}},mt={name:"CalendarDragAndDrop",directives:{CalDnd:ht},provide(){return{events:Vue.computed(()=>this.correctedEvents),backgrounds:Vue.computed(()=>this.backgrounds),dropAllowed:Vue.computed(()=>this.dragging&&this.dropAllowed)}},inject:{mode:"mode",dropableEvents:"dropableEvents"},props:{events:Array,backgrounds:Array},emits:["drop"],data:()=>({dragging:!1,allowed:!1,draggedInternalEvent:null,draggedExternalEvent:null,targetTimestamp:0,targetGridEnds:null,dropAllowed:!1,shadowPreview:!1}),computed:{correctedEvents(){if(this.dragging){if(this.draggedInternalEvent){const t=this.events.findIndex(t=>t.id==this.draggedInternalEvent.id);return this.previewEvent&&!this.shadowPreview?this.events.toSpliced(t,1,this.previewEvent):this.events.toSpliced(t,1)}if(this.previewEvent&&!this.shadowPreview)return[...this.events,this.previewEvent]}return this.events},correctedBackgrounds(){return this.dragging&&this.shadowPreview?[...this.backgrounds,{start:new Date(this.targetTimestamp),class:"shadow-preview"}]:this.backgrounds},previewEvent(){if(!this.dragging||!this.dropAllowed)return null;if(!this.targetTimestamp)return null;const t=this.draggedInternalEvent||this.draggedExternalEvent;if(!t)return null;let e=t.end-t.start;return this.targetGridEnds&&(e=this.targetGridEnds.find(t=>t>=this.targetTimestamp+e)-this.targetTimestamp),{orig:t.orig,start:this.targetTimestamp,end:this.targetTimestamp+e}}},methods:{onDragstart(t){pt.setTransferData(t.detail.originalEvent,t.detail.item.orig),this.draggedInternalEvent=t.detail.item},onDragend(){this.draggedInternalEvent=null,this.dragging=!1},onDragenter(t){if(this.dragging=!0,this.draggedInternalEvent)this.dropAllowed=this.dropableEvents(this.draggedInternalEvent,this.mode);else{const e=pt.getValidTransferData(t.detail.originalEvent);this.draggedExternalEvent=e?{id:e.id,type:e.type,start:e.isostart?luxon.DateTime.fromISO(e.isostart).setZone(this.timezone):luxon.DateTime.local().setZone(this.timezone),end:e.isoend?luxon.DateTime.fromISO(e.isoend).setZone(this.timezone):luxon.DateTime.local().setZone(this.timezone),orig:e}:null,this.dropAllowed=this.dropableEvents(e,this.mode)}},onDragleave(){this.dragging=!1},onDragchange(t){this.targetTimestamp=t.detail.timestamp,this.targetGridEnds=t.detail.ends||null},onDrop(t){this.dragging&&this.dropAllowed&&(this.$emit("drop",t,this.previewEvent.start,this.previewEvent.end),this.dropAllowed=!1,this.dragging=!1)}},template:'\n\t\n\t\t\n\t\n\t'},ft={name:"CalendarHeader",components:{DatePicker:{name:"CalendarHeaderDatepicker",components:{VueDatePicker:VueDatePicker},inject:["locale","timezone"],props:{date:{type:luxon.DateTime,required:!0},mode:{type:String,required:!0},listLength:{type:Number,default:7}},emits:["update:date"],computed:{convertedDate(){return this.date.setZone(this.timezone).setZone("local",{keepLocalTime:!0})},current(){switch(this.mode){case"month":return{month:this.convertedDate.month-1,year:this.convertedDate.year};case"list":return[this.convertedDate.startOf("day").ts,this.convertedDate.startOf("day").plus({days:this.listLength}).ts-1];case"week":return[this.convertedDate.startOf("week",{useLocaleWeeks:!0}).ts,this.convertedDate.endOf("week",{useLocaleWeeks:!0}).ts];case"day":return this.convertedDate;default:return null}},title(){switch(this.mode){case"month":return this.date.toLocaleString({month:"long",year:"numeric"});case"week":var t=this.date.localWeekYear,e=this.date.toFormat("nn");return this.$p.t("calendar/year_kw",{year:t,week:e});case"list":return this.date.toLocaleString(luxon.DateTime.DATE_FULL)+"-"+this.date.plus({days:this.listLength-1}).toLocaleString(luxon.DateTime.DATE_FULL);case"day":return this.date.toLocaleString(luxon.DateTime.DATE_FULL);default:return"View not Supported"}},weekStart(){return luxon.Info.getStartOfWeek(this.date)%7}},methods:{update(t){let e;switch(this.mode){case"month":t.month++,e=luxon.DateTime.fromObject(t).setZone(this.timezone,{keepLocalTime:!0}).setLocale(this.locale);break;case"list":case"week":e=luxon.DateTime.fromJSDate(t[0]).setZone(this.timezone,{keepLocalTime:!0}).setLocale(this.locale);break;case"day":e=luxon.DateTime.fromJSDate(t).setZone(this.timezone,{keepLocalTime:!0}).setLocale(this.locale);break;default:return}this.$emit("update:date",e)},weekNumbers(t){return luxon.DateTime.fromJSDate(t,{locale:this.locale}).localWeekNumber}},template:'\n\t title"\n\t\t:month-picker="mode == \'month\'"\n\t\t:week-picker="mode == \'week\'"\n\t\t:range="mode == \'list\' ? { autoRange: listLength - 1 } : false"\n\t\t:text-input="mode == \'day\'"\n\t\t:week-start="weekStart"\n\t\t:week-numbers="{ type: weekNumbers }"\n\t\t:clearable="false"\n\t\t:enable-time-picker="false"\n\t\t:config="{ keepActionRow: mode != \'month\' }"\n\t\t:action-row="{ showSelect: false, showCancel: false, showNow: mode != \'month\', showPreview: false }"\n\t\tauto-apply\n\t\tsix-weeks\n\t\tteleport\n\t\t:locale="locale"\n\t\t:now-button-label="$p.t(\'calendar/today\')"\n\t\t:week-num-name="$p.t(\'calendar/kw\')"\n\t/>\n\t'}},props:{date:{type:luxon.DateTime,required:!0},mode:{type:String,required:!0},modeOptions:{type:Object,default:{}},btnMonth:Boolean,btnWeek:Boolean,btnDay:Boolean,btnList:Boolean},emits:["next","prev","click:mode","update:date","update:mode"],data:()=>({open:!1}),methods:{clickMode(t,e){this.$emit("click:mode",t),t.defaultPrevented||this.$emit("update:mode",e)}},template:'\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t
\n\t'},gt={name:"CalendarSlider",inject:{time:{from:"sliderTime",default:".3s"}},emits:["slid"],data:()=>({target:0,extrasAfter:0,extrasBefore:0,running:!1,promiseResolve:null}),computed:{itemsAfter(){return[...Array(this.extrasAfter)].map((t,e)=>1+e)},itemsBefore(){return[...Array(this.extrasBefore)].map((t,e)=>e-this.extrasBefore)},styleSlider(){const t={position:"absolute",top:0,left:0,width:"100%",height:"100%"};return this.running&&(t.left=100*-this.target+"%",t.transition="left "+this.time+" ease-in-out"),t},styleBefore(){return{position:"absolute",top:0,height:"100%",display:"flex",right:"100%",width:100*this.extrasBefore+"%"}},styleAfter(){return{position:"absolute",top:0,height:"100%",display:"flex",left:"100%",width:100*this.extrasAfter+"%"}}},methods:{prevPage(){return this.slidePages(-1)},nextPage(){return this.slidePages(1)},slidePages(t){return new Promise(e=>{this.promiseResolve=e,this.running=!0;const n=this.target+t;n>0?this.extrasAftern&&(this.extrasBefore=-n),this.target=n})},endSlide(){this.promiseResolve&&(this.promiseResolve(this.target),this.promiseResolve=null),this.$emit("slid",this.target),this.running=!1,this.target=0,this.extrasAfter=this.extrasBefore=0}},template:'\n\t\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\n\t\n\t'};const vt=[];function bt(t,e,n){const i=vt.findIndex(e=>e.el==t);i>=0&&(t.removeEventListener("click",vt[i].listener),vt.splice(i,1));const a=t=>{t.preventDefault(),t.stopPropagation();const i=new CustomEvent("cal-click",{cancelable:!0,bubbles:!0,detail:{source:e,value:n}});t.target.dispatchEvent(i)};vt.push({el:t,listener:a}),t.addEventListener("click",a)}var yt={mounted(t,e,n){"container"==e.arg?t.addEventListener("cal-click",t=>{const n=new Event("click:"+t.detail.source,{cancelable:!0});if(e.instance.$emit("click:"+t.detail.source,n,t.detail.value),!n.defaultPrevented){const e=new CustomEvent("cal-click-default",{cancelable:!0,bubbles:!0,detail:t.detail});t.target.dispatchEvent(e)}}):bt(t,e.arg,e.value)},updated(t,e,n,i){"container"!=e.arg&&bt(t,e.arg,e.value)}},wt={name:"CalendarBase",components:{BaseDraganddrop:mt,BaseHeader:ft,BaseSlider:gt,BsModal:s},directives:{CalClick:yt},provide(){return{locale:Vue.computed(()=>this.locale),timezone:Vue.computed(()=>this.timezone),timeGrid:Vue.computed(()=>this.timeGrid),draggableEvents:Vue.computed(()=>this.draggableEvents?Array.isArray(this.draggableEvents)?t=>this.draggableEvents.includes(t.type):this.draggableEvents instanceof Function?this.draggableEvents:()=>!0:()=>!1),dropableEvents:Vue.computed(()=>this.onDrop?Array.isArray(this.dropableEvents)?t=>this.dropableEvents.includes(t.type):this.dropableEvents instanceof Function?this.dropableEvents:()=>!0:()=>!1),hasDragoverFunc:Vue.computed(()=>this.onDragover),mode:Vue.computed(()=>this.mode)}},props:{locale:{type:String,default:"de"},timezone:{type:String,required:!0},date:{type:[Date,String,Number,luxon.DateTime],default:t=>luxon.DateTime.now().setZone(t.timezone).startOf("day")},modes:{type:Object,required:!0,default:{}},mode:String,modeOptions:Object,events:{type:Array,default:[]},backgrounds:{type:Array,default:[]},showBtns:Boolean,btnMonth:{type:Boolean,default:void 0},btnWeek:{type:Boolean,default:void 0},btnDay:{type:Boolean,default:void 0},btnList:{type:Boolean,default:void 0},timeGrid:Array,draggableEvents:[Boolean,Array,Function],dropableEvents:[Boolean,Array,Function],onDragover:Function,onDrop:Function},emits:["click:next","click:prev","click:mode","click:event","click:day","click:week","update:date","update:mode","update:range","drop"],data:()=>({internalView:null,internalDate:null,modalEvent:null}),computed:{convertedEvents(){return this.events.map(t=>({id:t.type+t[t.type+"_id"],type:t.type,start:luxon.DateTime.fromISO(t.isostart).setZone(this.timezone),end:luxon.DateTime.fromISO(t.isoend).setZone(this.timezone),orig:t}))},convertedBackgrounds(){return this.backgrounds.map(t=>{const e={...t};return e.start&&(Number.isInteger(e.start)?e.start=luxon.DateTime.fromMillis(e.start,{zone:this.timezone,locale:this.locale}):e.start instanceof Date?e.start=luxon.DateTime.fromJSDate(e.start,{zone:this.timezone,locale:this.locale}):("string"==typeof e.start||e.start instanceof String)&&(e.start=luxon.DateTime.fromISO(e.start,{zone:this.timezone,locale:this.locale}))),e.end&&(Number.isInteger(e.end)?e.end=luxon.DateTime.fromMillis(e.end,{zone:this.timezone,locale:this.locale}):e.end instanceof Date?e.end=luxon.DateTime.fromJSDate(e.end,{zone:this.timezone,locale:this.locale}):("string"==typeof e.end||e.end instanceof String)&&(e.end=luxon.DateTime.fromISO(e.end,{zone:this.timezone,locale:this.locale}))),e})},sDate(){return this.date instanceof luxon.DateTime?this.date:luxon.DateTime.fromJSDate(new Date(this.date)).setZone(this.timezone)},cDate:{get(){return(this.internalDate?this.internalDate:this.sDate).setLocale(this.locale)},set(t){this.internalDate=t,this.$emit("update:date",t,this.cMode)}},sMode(){let t=this.mode;return t&&(t=t.toLowerCase()),t&&this.modes[t]||(t=Object.keys(this.modes).find(Boolean)),t||""},cMode:{get(){return this.internalView?this.internalView:this.sMode},set(t){this.internalView=t,this.$emit("update:mode",t,this.cDate)}}},watch:{sDate(t,e){this.sDate.isValid&&!this.sDate.hasSame(this.internalDate,"day")&&(this.internalDate=this.sDate)},sMode(){this.sMode&&(this.internalView=this.sMode)}},methods:{clickPrev(){const t=new Event("click:prev",{cancelable:!0});this.$emit("click:prev",t),t.defaultPrevented||this.$refs.mode.prevPage()},clickNext(){const t=new Event("click:next",{cancelable:!0});this.$emit("click:next",t),t.defaultPrevented||this.$refs.mode.nextPage()},handleClickDefaults(t){switch(t.detail.source){case"day":"day"!=this.cMode&&this.modes.day&&(t.stopPropagation(),this.cDate=t.detail.value,this.cMode="day");break;case"week":"week"!=this.cMode&&this.modes.week&&(t.stopPropagation(),this.cDate=luxon.DateTime.fromObject({localWeekNumber:t.detail.value.number,localWeekYear:t.detail.value.year},{zone:this.cDate.zoneName,locale:this.cDate.locale}),this.cMode="week")}},onDropItem(t,e,n){this.$emit("drop",t,e,n)},showEventModal(t){this.modalEvent=t,this.$refs.modal.show()},hideEventModal(){this.modalEvent&&(this.modalEvent.closeFn=void 0),this.$refs.modal.hide(),this.modalEvent=null},onModalHidden(){this.modalEvent.closeFn&&this.modalEvent.closeFn()}},beforeUnmount(){this.hideEventModal()},template:'\n\t
\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
\n\t'},_t={getRoomInfo:(t,e,n)=>({method:"post",url:"/api/frontend/v1/LvPlan/getRoomplan",params:{ort_kurzbz:t,start_date:e,end_date:n}}),getLvPlan:(t,e,n)=>({method:"get",url:"/api/frontend/v1/LvPlan/getLvPlan",params:{start_date:t,end_date:e,lv_id:n}}),eventsPersonal:(t,e)=>({method:"post",url:"/api/frontend/v1/lvPlan/eventsPersonal",params:{start_date:t,end_date:e}}),eventsLv:(t,e,n)=>({method:"post",url:"/api/frontend/v1/lvPlan/eventsLv",params:{lv_id:t,start_date:e,end_date:n}}),getStunden:()=>({method:"get",url:"/api/frontend/v1/LvPlan/Stunden"}),getOrtReservierungen:(t,e,n)=>({method:"post",url:`/api/frontend/v1/LvPlan/getReservierungen/${t}`,params:{start_date:e,end_date:n}}),getLvPlanReservierungen:(t,e)=>({method:"post",url:"/api/frontend/v1/LvPlan/getReservierungen",params:{start_date:t,end_date:e}}),getLehreinheitStudiensemester:t=>({method:"get",url:`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${t}`}),studiensemesterDateInterval:t=>({method:"get",url:`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${t}`}),LvPlanEvents:(t,e,n)=>({method:"post",url:"/api/frontend/v1/LvPlan/LvPlanEvents",params:{start_date:t,end_date:e,lv_id:n}}),getLv:t=>({method:"get",url:"/api/frontend/v1/LvPlan/getLv/"+t})};var kt={name:"GridLineEvent",directives:{CalDnd:ht,CalClick:yt},inject:{draggableEvents:"draggableEvents",mode:"mode"},props:{event:{type:Object,required:!0,validator:t=>t.start&&t.end&&t.orig}},computed:{isHeaderOrFooter(){return["header","footer"].includes(this.event.orig)},draggable(){return!this.isHeaderOrFooter&&this.draggableEvents(this.event.orig,this.mode)},classes(){const t=[];return this.isHeaderOrFooter?t.push("event-"+this.event.orig):(this.event.startsHere&&t.push("event-begin"),this.event.endsHere&&t.push("event-end")),t}},template:'\n\t\n\t\t\n\t\t\t{{ event.orig }}\n\t\t\n\t\n\t'},At={name:"CalendarGrid",components:{GridLine:{name:"GridLine",components:{LineEvent:kt,LineBackground:{name:"GridLineBackground",inject:{flipAxis:"flipAxis"},props:{start:{type:luxon.DateTime,required:!0},end:{type:luxon.DateTime,required:!0},background:{type:Object,required:!0,validator:t=>!(!t.start&&!t.end)&&((!t.start||t.start instanceof luxon.DateTime)&&(!t.end||t.end instanceof luxon.DateTime))}},computed:{styles(){if(!this.background.endsHere&&!this.background.startsHere)return this.background.style;const t=(this.end.ts-this.start.ts)/100;let e={};return this.background.startsHere&&(e[this.flipAxis?"left":"top"]=this.background.start.diff(this.start)/t+"%"),this.background.endsHere&&(e[this.flipAxis?"right":"bottom"]=this.end.diff(this.background.end)/t+"%"),this.background.style?[this.background.style,e]:e},classes(){if(!this.background.endsHere&&!this.background.startsHere)return this.background.class;const t=[];return this.background.class&&t.push(this.background.class),this.background.startsHere&&t.push("bg-begin"),this.background.endsHere&&t.push("bg-end"),t}},template:'\n\t\n\t\t{{ background.label }}\n\t\n\t'}},inject:{axisRow:"axisRow"},props:{date:{type:luxon.DateTime,required:!0},start:{type:luxon.DateTime,required:!0},end:{type:luxon.DateTime,required:!0},events:{type:Array,default:[]},backgrounds:{type:Array,default:[]}},computed:{eventsWithRowInfo(){const t=[];return this.events.forEach(e=>{const n=[1,-1];e.startsHere&&(n[0]="t_"+e.start.diff(this.date).toMillis()),e.endsHere&&(n[1]="t_"+e.end.diff(this.date).toMillis()),t.push({...e,rows:n})}),t}},template:'\n\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t'},GridLineEvent:kt},directives:{CalDnd:ht},inject:{originalEvents:"events",originalBackgrounds:"backgrounds",dropAllowed:"dropAllowed"},provide(){return{flipAxis:Vue.computed(()=>this.flipAxis),axisRow:Vue.computed(()=>this.axisRow)}},props:{axisMain:{type:Array,required:!0,validator:t=>t.every(t=>t instanceof luxon.DateTime)},axisParts:{type:Array,required:!0,validator:t=>t.every(t=>t instanceof luxon.Duration||Number.isInteger(t)||(t.start instanceof luxon.Duration||Number.isInteger(t.start))&&(t.end instanceof luxon.Duration||Number.isInteger(t.end)))},flipAxis:Boolean,allDayEvents:Boolean,axisMainCollapsible:Boolean,snapToGrid:Boolean},data:()=>({dragging:!1,resizeObserver:null,mutationObserver:null,userScroll:!0}),computed:{axisRow(){return this.flipAxis?"column":"row"},axisCol(){return this.flipAxis?"row":"column"},axisPartsWithBreaks(){return this.axisParts.reduce((t,e,n)=>{const i=e.start||e,a=e.end;if(t.length){const e=t.pop();Array.isArray(e)?t.push({start:e[0],end:i,index:e[1]}):e!=i&&t.push({start:e,end:i})}return a?(t.push({start:i,end:a,index:n}),t.push(a)):t.push([i,n]),t},[]).slice(0,-1)},axisPartsSave(){return this.axisParts[this.axisParts.length-1].end?this.axisParts:this.axisParts.slice(0,-1)},start(){return this.axisPartsWithBreaks[0].start},end(){return this.axisPartsWithBreaks[this.axisPartsWithBreaks.length-1].end},ends(){const t=[],e=this.axisPartsWithBreaks.filter(t=>void 0!==t.index).map(t=>t.end);for(var n of this.axisMain)for(var i of e)t.push(n.plus(i));return t},axisMainBorders(){return this.axisMain.reduce((t,e)=>t.concat([e.plus(this.start),e.plus(this.end)]),[])},eventsAllDay(){return this.allDayEvents?this.mapIntoMainAxis(this.originalEvents.filter(t=>t.orig.allDayEvent)):[]},eventsNormal(){return this.allDayEvents?this.mapIntoMainAxis(this.originalEvents.filter(t=>!t.orig.allDayEvent)):this.events},events(){return this.mapIntoMainAxis(this.originalEvents)},backgrounds(){return this.mapIntoMainAxis(this.originalBackgrounds)},hasValidEvents(){return this.events.find(t=>t.length)},styleGridCols(){let t="repeat("+this.axisMain.length+", 1fr)";return this.axisMainCollapsible&&this.hasValidEvents&&(t=this.events.map(t=>t.length?"1fr":"var(--fhc-calendar-axis-collapsible, .5fr)").join(" ")),t},styleGridRows(){const t={};return this.axisPartsWithBreaks.forEach(e=>{let n=e.start.toMillis();t[n]||(t[n]=["t_"+n]),void 0!==e.index&&t[n].push("ps_"+e.index),n=e.end.toMillis(),t[n]||(t[n]=["t_"+n]),void 0!==e.index&&t[n].push("pe_"+e.index)}),this.eventsNormal.forEach((e,n)=>{let i=this.axisMain[n];e.forEach(e=>{if(e.startsHere||e.endsHere){if(e.startsHere){let n=e.start.diff(i).toMillis();t[n]||(t[n]=["t_"+n,"e_"+n])}if(e.endsHere){let n=e.end.diff(i).toMillis();t[n]||(t[n]=["t_"+n,"e_"+n])}}})}),Object.keys(t).sort((t,e)=>parseInt(t)-parseInt(e)).map((e,n,i)=>{let a=i[n+1];return a?"["+t[e].join(" ")+"] "+(a-e)+"fr":(t[e].push("end"),"["+t[e].join(" ")+"]")}).join(" ")}},methods:{mapIntoMainAxis(t){const e=Array.from({length:this.axisMain.length},()=>Array());return t.forEach(t=>{const n=t.start||this.axisMainBorders[0].plus(-1),i=t.end||this.axisMainBorders[this.axisMainBorders.length-1].plus(1);for(var a=0;as){const o=n>=s,l=i<=r;e[a].push({...t,startsHere:o,endsHere:l})}}}),e},getPageTop(t){let e=t.offsetTop;return t.offsetParent&&(e+=this.getPageTop(t.offsetParent)),e},getPageLeft(t){let e=t.offsetLeft;return t.offsetParent&&(e+=this.getPageLeft(t.offsetParent)),e},getTimestampFromMouse(t,e){let n,i;return this.flipAxis?(n=t.pageX-this.getPageLeft(this.$refs.body)+this.$refs.main.scrollLeft,i=n/this.$refs.body.offsetWidth):(n=t.pageY-this.getPageTop(this.$refs.body)+this.$refs.main.scrollTop,i=n/this.$refs.body.offsetHeight),e+this.start+Math.floor((this.end-this.start)*i)},enableAutoScroll(){this.resizeObserver||(this.resizeObserver=new ResizeObserver(this.scrollToEarliestEvent)),this.resizeObserver.observe(this.$refs.body),this.mutationObserver||(this.mutationObserver=new MutationObserver(t=>{t.some(t=>t.addedNodes.length&&[].some.call(t.addedNodes,t=>t.matches&&t.matches(".fhc-calendar-base-grid-line-event")))&&this.scrollToEarliestEvent()})),this.mutationObserver.observe(this.$refs.body,{subtree:!0,childList:!0}),this.scrollToEarliestEvent()},disableAutoScroll(){this.resizeObserver&&this.resizeObserver.disconnect(),this.resizeObserver=null,this.mutationObserver&&this.mutationObserver.disconnect(),this.mutationObserver=null},scrollToEarliestEvent(){const t=this.$refs.scroller.querySelectorAll(".fhc-calendar-base-grid-line-event");let e=[0,null];for(var n of t.values()){const t=n.offsetTop;(!e[1]||t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t'},xt={name:"LabelDay",directives:{CalClick:yt},props:{date:{type:luxon.DateTime,required:!0}},computed:{titleFull(){return this.date.toLocaleString({day:"numeric",month:"long",year:"numeric"})},titleLong(){return this.date.toLocaleString({day:"2-digit",month:"2-digit",year:"numeric"})},titleShort(){return this.date.toLocaleString({day:"numeric",month:"numeric"})},titleNarrow(){return this.date.toLocaleString({day:"numeric"})}},template:'\n\t\n\t\t{{ titleFull }}\n\t\t{{ titleLong }}\n\t\t{{ titleShort }}\n\t\t{{ titleNarrow }}\n\t\n\t'},St={name:"LabelDow",directives:{CalClick:yt},props:{date:{type:luxon.DateTime,required:!0}},computed:{titleLong(){return this.date.toLocaleString({weekday:"long"})},titleShort(){return this.date.toLocaleString({weekday:"short"})},titleNarrow(){return this.date.toLocaleString({weekday:"narrow"})}},template:'\n\t\n\t\t{{ titleLong }}\n\t\t{{ titleShort }}\n\t\t{{ titleNarrow }}\n\t\n\t'},$t={name:"LabelTime",props:{part:{type:[luxon.Duration,Number,Object],required:!0,validator(t){if(t instanceof Object){if(t instanceof luxon.Duration)return!0;let e=!0,n=!0;return t.start&&(e=t.start instanceof luxon.Duration||Number.isInteger(t.start)),t.end&&(n=t.end instanceof luxon.Duration||Number.isInteger(t.end)),e&&n}return!0}}},computed:{sanitizedTimestamps(){return this.part.start||this.part.end?this.part:{start:this.part}},start(){return this.sanitizedTimestamps.start?this.formatTime(this.sanitizedTimestamps.start):null},end(){return this.sanitizedTimestamps.end?this.formatTime(this.sanitizedTimestamps.end):null}},methods:{formatTime:t=>t.toISOTime({suppressSeconds:!0})},template:'\n\t
\n\t\t{{ start }}\n\t\t-\n\t\t{{ end }}\n\t
\n\t'};var Tt={name:"ModeDay",components:{BaseSlider:gt,DayView:{name:"DayView",components:{CalendarGrid:At,LabelDay:xt,LabelDow:St,LabelTime:$t},inject:{timeGrid:"timeGrid",originalEvents:"events",timezone:"timezone"},props:{day:{type:luxon.DateTime,required:!0},emptyMessage:String,emptyMessageDetails:String},emits:["requestModalOpen","requestModalClose"],data:()=>({chosenEvent:null,gridMainRef:null}),computed:{axisMain(){return[this.day.startOf("day")]},axisParts(){return this.timeGrid?this.timeGrid.map(t=>({start:luxon.Duration.fromISOTime(t.start),end:luxon.Duration.fromISOTime(t.end)})):Array.from({length:17},(t,e)=>luxon.Duration.fromObject({hours:e+7}))},events(){return this.originalEvents.filter(t=>t.startthis.day).sort((t,e)=>t.start.ts-e.start.ts).map(t=>t.orig)},currentEvent(){if(this.chosenEvent&&this.events.find(t=>t==this.chosenEvent))return this.chosenEvent;let t=null;return this.events&&(t=this.events.find(Boolean)),t&&"loading"==t.type?null:t},isToday(){return this.day.hasSame(luxon.DateTime.now().setZone(this.timezone),"day")}},watch:{compact(){this.compact?this.chosenEvent&&this.$emit("requestModalOpen",{event:this.chosenEvent,closeFn:()=>{this.chosenEvent=null}}):this.$emit("requestModalClose")}},methods:{handleClickDefaults(t){"event"==t.detail.source&&(this.chosenEvent=t.detail.value,this.compact&&this.$emit("requestModalOpen",{event:this.chosenEvent,closeFn:()=>{this.chosenEvent=null}}))}},setup(){const t=Vue.ref(null),{compact:e}=function(t,e){const n=Vue.ref(!1),i=Vue.ref(!1),a=Vue.ref(!1),s=Vue.computed(()=>Vue.isRef(t)?t.value&&t.value.$el?t.value.$el:t.value:t),r=Vue.computed(()=>{const t=Vue.isRef(e)?e.value:e;return Number.isInteger(t)?[["compact",t]]:Array.isArray(t)?t.map((t,e)=>[e,t]).sort((t,e)=>t[1]-e[1]):Object.entries(t).sort((t,e)=>t[1]-e[1])});function o(){if(void 0===s.value.offsetWidth)return;const t=r.value.find(t=>t[1]>s.value.offsetWidth);i.value=t?t[0]:"full",n.value=i.value==r.value[0][0]}const l=new ResizeObserver(()=>{s.value&&o()});function d(){s.value&&(o(),l.observe(s.value),a.value=!0)}function c(){a.value&&l.disconnect()}return Vue.onMounted(d),Vue.onUnmounted(c),Vue.watchEffect(()=>{s.value&&(c(),d())}),{compact:n,size:i}}(t,750);return{container:t,compact:e}},mounted(){this.gridMainRef=this.$refs.grid.$refs.main},template:'\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t{{ emptyMessage }}\n\t\t\t\n\t\t\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\t

{{ emptyMessageDetails }}

\n\t\t\t\n\t\t\n\t\n\t'}},props:{currentDate:{type:luxon.DateTime,required:!0}},emits:["update:currentDate","update:range","click","requestModalOpen","requestModalClose"],data(){return{focusDate:this.currentDate,rangeOffset:0}},computed:{range(){let t=this.focusDate.startOf("day"),e=this.focusDate.endOf("day");return 0!=this.rangeOffset&&(this.rangeOffset<0?t=t.plus({days:this.rangeOffset}):e=e.plus({days:this.rangeOffset})),luxon.Interval.fromDateTimes(t,e)}},watch:{currentDate(){this.currentDate.locale!=this.focusDate.locale?(this.focusDate=this.currentDate,this.$emit("update:range",this.range)):(this.rangeOffset=this.currentDate.startOf("day").diff(this.focusDate.startOf("day"),"days").days,this.rangeOffset&&(this.$refs.view.$refs.grid.disableAutoScroll(),this.$emit("update:range",this.range),this.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage)))}},methods:{prevPage(){this.rangeOffset=this.$refs.slider.target-1,this.$refs.view.$refs.grid.disableAutoScroll(),this.$emit("update:range",this.range),this.$refs.slider.prevPage().then(this.updatePage)},nextPage(){this.rangeOffset=this.$refs.slider.target+1,this.$refs.view.$refs.grid.disableAutoScroll(),this.$emit("update:range",this.range),this.$refs.slider.nextPage().then(this.updatePage)},updatePage(t){const e=this.focusDate.plus({days:t});this.focusDate=e,this.rangeOffset=0,this.$emit("update:currentDate",this.focusDate),this.$emit("update:range",this.range),this.$refs.view.$refs.grid.enableAutoScroll()},viewAttrs(t){const e=this.focusDate.plus({days:t});return{...this.$attrs,day:e}}},mounted(){this.$emit("update:range",this.range),this.$refs.view.$refs.grid.enableAutoScroll()},template:'\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t'},Et={name:"ModeWeek",components:{BaseSlider:gt,WeekView:{name:"WeekView",components:{CalendarGrid:At,LabelDay:xt,LabelDow:St,LabelTime:$t},inject:{timeGrid:"timeGrid",timezone:"timezone"},props:{day:{type:luxon.DateTime,required:!0},collapseEmptyDays:Boolean},computed:{start(){return this.day.startOf("week",{useLocaleWeeks:!0})},axisMain(){return Array.from({length:7},(t,e)=>this.start.plus({days:e}))},axisParts(){return this.timeGrid?this.timeGrid.map(t=>({start:luxon.Duration.fromISOTime(t.start),end:luxon.Duration.fromISOTime(t.end)})):Array.from({length:17},(t,e)=>luxon.Duration.fromObject({hours:e+7}))}},methods:{isToday(t){return t.hasSame(luxon.DateTime.now().setZone(this.timezone),"day")}},template:'\n\t
\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
\n\t'}},props:{currentDate:{type:luxon.DateTime,required:!0}},emits:["update:currentDate","update:range","click","requestModalOpen"],data(){return{focusDate:this.currentDate,rangeOffset:0}},computed:{range(){let t=this.focusDate.startOf("week",{useLocaleWeeks:!0}),e=this.focusDate.endOf("week",{useLocaleWeeks:!0});return 0!=this.rangeOffset&&(this.rangeOffset<0?t=t.plus({weeks:this.rangeOffset}):e=e.plus({weeks:this.rangeOffset})),luxon.Interval.fromDateTimes(t,e)}},watch:{currentDate(){this.currentDate.locale!=this.focusDate.locale?(this.focusDate=this.currentDate,this.$emit("update:range",this.range)):(this.rangeOffset=this.currentDate.startOf("week",{useLocaleWeeks:!0}).diff(this.focusDate.startOf("week",{useLocaleWeeks:!0}),"weeks").weeks,this.rangeOffset&&(this.$refs.view.$refs.grid.disableAutoScroll(),this.$emit("update:range",this.range),this.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage)))}},methods:{prevPage(){this.rangeOffset=this.$refs.slider.target-1,this.$refs.view.$refs.grid.disableAutoScroll(),this.$emit("update:range",this.range),this.$refs.slider.prevPage().then(this.updatePage)},nextPage(){this.rangeOffset=this.$refs.slider.target+1,this.$refs.view.$refs.grid.disableAutoScroll(),this.$emit("update:range",this.range),this.$refs.slider.nextPage().then(this.updatePage)},updatePage(t){const e=this.focusDate.plus({weeks:t});this.focusDate=e,this.rangeOffset=0,this.$emit("update:currentDate",this.focusDate),this.$emit("update:range",this.range),this.$refs.view.$refs.grid.enableAutoScroll()},viewAttrs(t){const e=this.focusDate.plus({weeks:t});return{...this.$attrs,day:e}},handleClickDefaults(t){switch(t.detail.source){case"day":this.$emit("update:currentDate",t.detail.value);break;case"event":this.$emit("requestModalOpen",{event:t.detail.value})}}},mounted(){this.$emit("update:range",this.range),this.$refs.view.$refs.grid.enableAutoScroll()},template:'\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t'},Dt={name:"ModeMonth",components:{BaseSlider:gt,MonthView:{name:"MonthView",components:{CalendarGrid:At,LabelWeek:{name:"LabelWeek",directives:{CalClick:yt},props:{date:{type:luxon.DateTime,required:!0}},computed:{weeks(){const t=this.date.startOf("week",{useLocaleWeeks:!0}),e=this.date.endOf("week",{useLocaleWeeks:!0}),n=[{number:t.localWeekNumber,year:t.localWeekYear},{number:e.localWeekNumber,year:e.localWeekYear}];return n[0].number==n[1].number&&n.pop(),n}},template:'\n\t
\n\t\t\n\t\t\t{{ week.number }}\n\t\t\n\t
\n\t'},LabelDow:St,LabelDay:xt},provide(){return{events:Vue.computed(()=>{const t=this.events.map(t=>{const e=t.start.startOf("day"),n=t.end.plus({days:1}).startOf("day");return{...t,start:e,end:n}});for(var e=5;e>-1;e--)for(var n=6;n>-1;n--){const i=this.axisMain[e].plus(this.axisParts[n]);t.unshift({start:i,end:i.plus({days:1}),orig:"header"})}return t})}},inject:{events:"events",timezone:"timezone"},props:{day:{type:luxon.DateTime,required:!0}},computed:{axisMain(){const t=this.day.startOf("month").startOf("week",{useLocaleWeeks:!0});return Array.from({length:6},(e,n)=>t.plus({weeks:n}))},axisParts:()=>Array.from({length:8},(t,e)=>luxon.Duration.fromObject({days:e}))},methods:{isToday(t){return t.hasSame(luxon.DateTime.now().setZone(this.timezone),"day")}},template:'\n\t
\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
\n\t'}},props:{currentDate:{type:luxon.DateTime,required:!0}},emits:["update:currentDate","update:range","click","requestModalOpen"],data(){return{focusDate:this.currentDate,rangeOffset:0}},computed:{range(){let t=this.focusDate.startOf("month").startOf("week",{useLocaleWeeks:!0}),e=t.plus({days:41}).endOf("day");if(0!=this.rangeOffset){const n=this.focusDate.plus({months:this.rangeOffset}).startOf("month").startOf("week",{useLocaleWeeks:!0});this.rangeOffset<0?t=n:e=n.plus({days:41}).endOf("day")}return luxon.Interval.fromDateTimes(t,e)}},watch:{currentDate(){this.currentDate.locale!=this.focusDate.locale?(this.focusDate=this.currentDate,this.$emit("update:range",this.range)):(this.rangeOffset=this.currentDate.startOf("month").diff(this.focusDate.startOf("month"),"months").months,this.rangeOffset&&(this.$emit("update:range",this.range),this.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage)))}},methods:{prevPage(){this.rangeOffset=this.$refs.slider.target-1,this.$emit("update:range",this.range),this.$refs.slider.prevPage().then(this.updatePage)},nextPage(){this.rangeOffset=this.$refs.slider.target+1,this.$emit("update:range",this.range),this.$refs.slider.nextPage().then(this.updatePage)},updatePage(t){const e=this.focusDate.plus({months:t});this.focusDate=e,this.rangeOffset=0,this.$emit("update:currentDate",this.focusDate),this.$emit("update:range",this.range)},viewAttrs(t){return{day:this.focusDate.plus({months:t})}},handleClickDefaults(t){switch(t.detail.source){case"week":let e=luxon.DateTime.fromObject({localWeekNumber:t.detail.value.number,localWeekYear:t.detail.value.year},{zone:this.currentDate.zoneName,locale:this.currentDate.locale});this.focusDate.hasSame(e.startOf("week",{useLocaleWeeks:!0}),"month")?this.focusDate.hasSame(e.endOf("week",{useLocaleWeeks:!0}),"month")||this.$emit("update:currentDate",e.endOf("week",{useLocaleWeeks:!0})):this.$emit("update:currentDate",e.startOf("week",{useLocaleWeeks:!0}));break;case"day":this.$emit("update:currentDate",t.detail.value);break;case"event":this.$emit("requestModalOpen",{event:t.detail.value})}}},mounted(){this.$emit("update:range",this.range)},template:'\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t'},Ct={name:"CalendarLvPlan",components:{FhcCalendar:wt},inject:["renderers"],props:{timezone:{type:String,required:!0},date:{type:[Date,String,Number,luxon.DateTime],default:luxon.DateTime.local()},mode:{type:String,default:"Week"},getPromiseFunc:{type:Function,required:!0}},emits:["update:date","update:mode","update:range"],data(){return{modes:{day:Vue.markRaw(Tt),week:Vue.markRaw(Et),month:Vue.markRaw(Dt)},modeOptions:{day:{emptyMessage:Vue.computed(()=>this.$p.t("lehre/noLvFound")),emptyMessageDetails:Vue.computed(()=>this.$p.t("lehre/noLvFound"))},week:{collapseEmptyDays:!1}},teachingunits:null}},computed:{backgrounds(){let t=luxon.DateTime.now().setZone(this.timezone);return"Month"==this.mode?[{class:"background-past",end:t.startOf("day")}]:[{class:"background-past",end:t,label:t.startOf("minute").toISOTime({suppressSeconds:!0,includeOffset:!1})}]}},methods:{eventStyle(t){if(t.farbe)return"--event-bg:#"+t.farbe},updateRange(t){this.rangeInterval=t,this.$emit("update:range",t)}},setup(t,e){const n=Vue.ref(null),{events:i,lv:a}=function(t,e){let n=0;const i=Vue.ref([]),a=Vue.ref([]),s=Vue.computed(()=>i.value.concat(a.value)),r=Vue.ref(null),o=[],l=(t,e)=>Array.isArray(t)?e.concat(t):(e.push(t),e),d=(t,i)=>{let s=[];if(o.length)if(o[o.length-1]+1==t.ts)o[o.length-1]=i.ts;else if(o[o.length-1]i.ts)o.unshift(t.ts,i.ts);else{let e=o.findIndex(e=>e>=t.ts);if(e%2){if(o[e]>=i.ts)return[];let n=e==o.length-1;if(n||o[e+1]>i.ts){let a=o[e]+1;t=t.plus(a-t.ts),n||o[e+1]!=i.ts+1?o[e]=i.ts:o.splice(e,2)}else{if(o[e+2]=i.ts)return[];let n=o[e+1]+1;s=l(d(t.plus(n-t.ts),i),s)}else{if(o[e+1]=i.ts?s:(a.value.push({loading_id:n++,type:"loading",isostart:t.toISODate()+"T"+t.toISOTime(),isoend:i.toISODate()+"T"+i.toISOTime()}),l(e(t,i),s))};return Vue.watchEffect(()=>{const e=Vue.toValue(t);if(!(e instanceof luxon.Interval))return;const n=d(e.start,e.end);Promise.allSettled(n).then(t=>{t.forEach(t=>{"fulfilled"===t.status&&"success"===t.value.meta.status&&(t.value.meta.lv&&(r.value=t.value.meta.lv),i.value=i.value.concat(t.value.data),a.value=[])})})}),{events:s,lv:r}}(n,t.getPromiseFunc);return Vue.watch(a,t=>{e.emit("update:lv",t)}),{rangeInterval:n,events:i,lv:a}},created(){this.$api.call(_t.getStunden()).then(t=>this.teachingunits=t.data.map(t=>({id:t.stunde,start:t.beginn,end:t.ende})))},template:'\n\t\n\t\t\n\t\t\n\t'},Ot={getAuthUID:()=>({method:"get",url:"/api/frontend/v1/AuthInfo/getAuthUID"}),getAuthInfo:()=>({method:"get",url:"/api/frontend/v1/AuthInfo/getAuthInfo"})};var Pt={name:"LvPlanLehrveranstaltung",components:{FhcCalendar:Ct},props:{viewData:Object,propsViewData:Object},data:()=>({lv:null}),computed:{currentDay(){return!this.propsViewData?.focus_date||isNaN(new Date(this.propsViewData?.focus_date))?luxon.DateTime.now().setZone(this.viewData.timezone).toISODate():this.propsViewData?.focus_date},currentMode(){return this.propsViewData?.mode&&["day","week","month"].includes(this.propsViewData?.mode.toLowerCase())?this.propsViewData?.mode:"Week"},currentLv(){return isNaN(parseInt(this.propsViewData?.lv_id))?null:this.propsViewData.lv_id},lvTitle(){return null===this.currentLv?"":this.lv?"English"===this.$p.user_language.value?this.lv.bezeichnung_english:this.lv.bezeichnung:""}},methods:{handleChangeDate(t,e){return this.handleChangeMode(e,t)},handleChangeMode(t,e){const n=t[0].toUpperCase()+t.slice(1),i=e.toISODate();this.$router.push({name:"LvPlan",params:{mode:n,focus_date:i,lv_id:this.currentLv}})},getPromiseFunc(t,e){return[this.$api.call(_t.eventsLv(this.propsViewData.lv_id,t.toISODate(),e.toISODate())),this.$api.call(_t.getLvPlanReservierungen(t.toISODate(),e.toISODate()))]}},created(){null!==this.currentLv&&this.$api.call(_t.getLv(this.propsViewData?.lv_id)).then(t=>{this.lv=t.data})},template:'\n\t
\n\t\t

\n\t\t\t{{ $p.t(\'lehre/stundenplan\') }}\n\t\t\t\n\t\t\t\t{{ lvTitle }}\n\t\t\t\n\t\t

\n\t\t
\n\t\t
\n\t\t\t{{ $p.t(\'lehre/noLvFound\') }}\n\t\t
\n\t\t\n\t
'};var Ft={name:"LvPlanPersonal",components:{FhcCalendar:Ct},props:{viewData:Object,propsViewData:Object},data:()=>({studiensemester_kurzbz:null,studiensemester_start:null,studiensemester_ende:null,uid:null,isMitarbeiter:!1,isStudent:!1}),computed:{currentDay(){return!this.propsViewData?.focus_date||isNaN(new Date(this.propsViewData?.focus_date))?luxon.DateTime.now().setZone(this.viewData.timezone).toISODate():this.propsViewData?.focus_date},currentMode(){return this.propsViewData?.mode&&["day","week","month"].includes(this.propsViewData?.mode.toLowerCase())?this.propsViewData?.mode:"Week"},downloadLinks(){if(!this.studiensemester_start||!this.studiensemester_ende||!this.uid)return!1;let t=!1;if(t=this.isStudent?"student":t,t=this.isMitarbeiter?"lektor":t,!1===t)return;const e={zone:this.viewData.timezone},n=luxon.DateTime.fromISO(this.studiensemester_start,e).toUnixInteger(),i=luxon.DateTime.fromISO(this.studiensemester_ende,e).toUnixInteger(),a=FHC_JS_DATA_STORAGE_OBJECT.app_root+"cis/private/lvplan/stpl_kalender.php?type="+t+"&pers_uid="+this.uid+"&begin="+n+"&ende="+i;return[{title:"excel",icon:"fa-solid fa-file-excel",link:a+"&format=excel"},{title:"csv",icon:"fa-solid fa-file-csv",link:a+"&format=csv"},{title:"ical1",icon:"fa-regular fa-calendar",link:a+"&format=ical&version=1&target=ical"},{title:"ical2",icon:"fa-regular fa-calendar",link:a+"&format=ical&version=2&target=ical"}]}},methods:{handleChangeDate(t,e){return this.handleChangeMode(e,t)},handleChangeMode(t,e){const n=t[0].toUpperCase()+t.slice(1),i=e.toISODate();this.$router.push({name:"MyLvPlan",params:{mode:n,focus_date:i}})},updateRange(t){this.$api.call(_t.studiensemesterDateInterval(t.end.startOf("week").toISODate())).then(t=>{this.studiensemester_kurzbz=t.data.studiensemester_kurzbz,this.studiensemester_start=t.data.start,this.studiensemester_ende=t.data.ende})},getPromiseFunc(t,e){return[this.$api.call(_t.eventsPersonal(t.toISODate(),e.toISODate())),this.$api.call(_t.getLvPlanReservierungen(t.toISODate(),e.toISODate()))]}},created(){this.$api.call(Ot.getAuthInfo()).then(t=>{this.uid=t.data.uid,this.isMitarbeiter=t.data.isMitarbeiter,this.isStudent=t.data.isStudent})},template:'\n\t
\n\t\t

\n\t\t\t{{ $p.t(\'lehre/stundenplan\') }}\n\t\t\t\n\t\t\t\t{{ studiensemester_kurzbz }}\n\t\t\t\n\t\t

\n\t\t
\n\t\t\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ title }}\n\t\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t\n\t'},zt={components:{BsModal:s},mixins:[s],props:{pruefungenData:null|Array,bezeichnung:String,onHideBsModal:Function,onHiddenBsModal:Function,onHidePreventedBsModal:Function,onShowBsModal:Function,onShownBsModal:Function},data:()=>({result:!0}),mounted(){this.modal=this.$refs.modalContainer.modal},popup(t){return s.popup.bind(this)(null,t)},template:'\n\t\t\n\t\t\n\t'},It={getStudentenMail:t=>({method:"get",url:"/api/frontend/v1/Lehre/lvStudentenMail",params:{lehreinheit_id:t}}),getLvInfo:(t,e)=>({method:"get",url:`/api/frontend/v1/Lehre/LV/${t}/${e}`}),getStudentPruefungen:t=>({method:"get",url:`/api/frontend/v1/Lehre/Pruefungen/${t}`})};const Lt={};var Mt={props:{studien_semester:String,lehrveranstaltung_id:Number},data:()=>({bezeichnung:null,studiengang_kuerzel:null,semester:null,orgform_kurzbz:null,sprache:null,ects:null,incoming:null,result:!0,info:null}),computed:{lektorNamesLinks(){let t={};return this.info.lektoren.forEach(e=>{let n=((e.titelpre||"")+" "+(e.vorname||"")+" "+(e.nachname||"")+" "+(e.titelpost||"")).trim();t[n]=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/Cis/Profil/View/${e.uid}`}),t},lektorNames(){return this.info.lektoren.map(t=>((t.titelpre||"")+" "+(t.vorname||"")+" "+(t.nachname||"")+" "+(t.titelpost||"")).trim())},lvLeitung(){return this.info.lvLeitung&&this.info.lvLeitung.length?this.info.lvLeitung.map(t=>((t.titelpre||"")+" "+(t.vorname||"")+" "+(t.nachname||"")+" "+(t.titelpost||"")).trim()):null},oe(){return this.info.oe.organisationseinheittyp?this.info.oe.organisationseinheittyp+" "+this.info.oe.bezeichnung:""},oeLeitung(){return this.info.oeLeitung&&this.info.oeLeitung.length?this.info.oeLeitung.map(t=>((t.titelpre||"")+" "+(t.vorname||"")+" "+(t.nachname||"")+" "+(t.titelpost||"")).trim()):["-"]},koordinator(){return this.info.koordinator&&this.info.koordinator.length?this.info.koordinator.map(t=>((t.titelpre||"")+" "+(t.vorname||"")+" "+(t.nachname||"")+" "+(t.titelpost||"")).trim()):null},currentLang(){return this.info?this.info.lastLang?this.info.lastLang:this.info.lvinfo?this.info.lvinfoDefaultLang&&this.info.lvinfo[this.info.lvinfoDefaultLang]?this.info.lvinfoDefaultLang:Object.keys(this.info.lvinfo).shift():null:null}},created(){this.$api.call(It.getLvInfo(this.studien_semester,this.lehrveranstaltung_id)).then(t=>t.data).then(t=>{Object.assign(this,{bezeichnung:t.bezeichnung,studiengang_kuerzel:t.studiengang_kuerzel,semester:t.semester,orgform_kurzbz:t.orgform_kurzbz,sprache:t.sprache,ects:t.ects,incoming:t.incoming??"-"})}),Lt[this.lehrveranstaltung_id]?this.info=Lt[this.lehrveranstaltung_id]:axios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/components/Cis/Mylv/Info/"+this.studien_semester+"/"+this.lehrveranstaltung_id).then(t=>{this.info=Lt[this.lehrveranstaltung_id]=t.data.retval||[]}).catch(()=>this.info={})},template:'\n\t\t\t

{{$p.t(\'lvinfo/lehrveranstaltungsinformationen\')}}

\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
{{$p.t(\'lehre/lehrveranstaltung\')}}{{bezeichnung}}
{{$p.t(\'lehre/studiengang\')}}{{studiengang_kuerzel}}
{{$p.t(\'lehre/semester\')}}{{semester}}
{{$p.t(\'lehre/studiensemester\')}}{{studien_semester}}
{{$p.t(\'lehre/organisationsform\')}}{{orgform_kurzbz}}
{{$p.t(\'lehre/lehrbeauftragter\')}}\n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
  • \n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{{name}}\n\t\t\t\t\t\t\t\t\t
  • \n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
{{$p.t(\'lehre/lvleitung\')}}\n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
  • \n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{{name}}\n\t\t\t\t\t\t\t\t\t
  • \n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
{{$p.t(\'global/sprache\')}}{{sprache}}
{{$p.t(\'lehre/ects\')}}{{ects}}
{{$p.t(\'lehre/incomingplaetze\')}}{{incoming}}
{{$p.t(\'lehre/organisationseinheit\')}}\n\t\t\t\t\t\t\t\t{{oe}}
\n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t{{$p.t(\'global/leitung\')}}: {{oeLeitung.join(\', \')}}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t
\n\t\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
'};const Rt={},Nt={};function Bt(t,e){return t.filter(t=>t.category==e).reduce((t,e)=>(t[e.phrase]||(t[e.phrase]=e.text),t),{})}function Ut(t){for(;Nt[t].length;){var e=Nt[t].pop();e[0].value=jt(t,e[1],e[2]),Vue.triggerRef(e[0])}}function jt(t,e,n){let i=Rt[t][e];return i?(n&&(i=i.replace(/\{([^}]*)\}/g,(t,e)=>void 0===n[e]?t:n[e])),i):"<< PHRASE "+e+">>"}const Ht={t_ref(t,e,n){if(void 0===n&&(Array.isArray(t)&&2==t.length||t.split&&2==t.split("/").length)&&(n=e,[t,e]=t.split?t.split("/"):t),void 0===e)return console.error("invalid input"),"";if(!Rt[t]){var i="";if(void 0!==window.FHC_JS_PHRASES_STORAGE_OBJECT){var a=Bt(FHC_JS_PHRASES_STORAGE_OBJECT,t);void 0!==a[e]&&(i=a[e])}if(!Rt[t]||0===Object.keys(Rt[t]).length){Rt[t]=void 0;let a=Vue.ref(i);return function(t,e,n,i){if(Nt[t])return Nt[t].push([e,n,i]),void(Rt[t]&&Ut(t));Nt[t]=[[e,n,i]],axios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/components/Phrasen/loadModule/"+t).then(e=>{e.data.retval?Rt[t]=Bt(e.data.retval,t):Rt[t]={},Ut(t)}).catch(t=>console.error(t))}(t,a,e,n),a}}var s=jt(t,e,n);return Vue.ref(s)},t(t,e,n){return Vue.unref(this.t_ref(t,e,n))}};var Vt={data:()=>({p:Ht})},Jt={props:{menu:{type:Array,default:null},containerStyles:Array,rowStyles:Array,hasLvPlanEintraege:{required:!1,default:!0,type:Boolean}},data:()=>({}),methods:{c4_disabled:function(t){return!this.c4_link(t)&&!t.c4_moodle_links?.length||("addon_fhtw_menu_lvplan_lva"==t.id&&!this.hasLvPlanEintraege||null)},c4_target:function(t){return t.c4_moodle_links?.length>0?null:t.c4_target??null},c4_link:t=>t?Array.isArray(t.c4_moodle_links)&&t.c4_moodle_links.length?null:t.c4_link??null:null,getMenuName(t){return t.phrase?this.$p.t(t.phrase):t.name}},template:'\n\t
{{$p.t(\'lehre\',\'lehrveranstaltungsUnavailable\')}}
\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t

{{ getMenuName(menuItem) }}

\n\t\t\t\t\t\t
{{text}}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
\n\t'},Gt={getLvMenu:(t,e)=>({method:"get",url:`/api/frontend/v1/LvMenu/getLvMenu/${t}/${e}`})},qt={props:{event:{type:Object,required:!0,default:null},studiensemester:{type:String,required:!1,default:null},titel:{type:String,required:!1,default:null},preselectedMenu:{type:Object,required:!1,default:null}},data:()=>({result:!1,menu:[],isMenuSelected:!1,hasLvPlanEintraege:!0,lvEvaluierungMessage:""}),mixins:[s],components:{BsModal:s,LvMenu:Jt},inject:["studium_studiensemester"],methods:{hiddenModal:function(){this.isMenuSelected=!1},showModal:function(){if(this.preselectedMenu?this.isMenuSelected=!0:this.$api.call(Gt.getLvMenu(this.event.lehrveranstaltung_id,this.studiensemester??this.event.studiensemester_kurzbz)).then(t=>{t.data&&(this.menu=t.data)}),this.studium_studiensemester&&this.$fhcApi.factory.studium.getLvEvaluierungInfo(this.studium_studiensemester,this.event.lehreinheit_id??this.event.lehrveranstaltung_id).then(t=>t.data).then(t=>{this.lvEvaluierungMessage=t.message}),this.studiensemester&&this.event)return this.$fhcApi.factory.studium.getLvPlanForStudiensemester(this.studiensemester,this.event.lehreinheit_id??this.event.lehrveranstaltung_id).then(t=>t.data).then(t=>{Array.isArray(t)&&t.length>0?this.hasLvPlanEintraege=!0:this.hasLvPlanEintraege=!1})}},mounted(){this.modal=this.$refs.modalContainer},beforeUnmount(){this.$refs.modalContainer.hide()},template:'\n \n\n\t\t\n \n \n \n\n \n '},Wt={components:{MylvSemesterStudiengang:{components:{MylvSemesterStudiengangLv:{components:{LvUebersicht:qt},mixins:[Vt],inject:["studien_semester"],props:{lehrveranstaltung_id:Number,bezeichnung:String,bezeichnung_eng:String,module:String,farbe:String,lvinfo:Boolean,benotung:Boolean,lvnote:String,lvnotebez:Array,znote:String,znotebez:Array,studiengang_kuerzel:String,semester:[String,Number],orgform_kurzbz:String,sprache:String,ects:String,incoming:Number,positiv:Boolean,note_index:String},data:()=>({pruefungenData:null,info:null,menu:null,preselectedMenuItem:null}),computed:{gradeColor(){if(null!=this.positiv)return this.positiv?"var(--fhc-success)":"var(--fhc-danger)"},is_organisatorische_einheit(){return"organisatorische_einheit"==this.menu},emptyMenu(){return!this.menu||!Array.isArray(this.menu)||Array.isArray(this.menu)&&0==this.menu.length},bodyStyle:()=>({}),grade(){const t="English"===this.$p.user_language.value?1:0;return this.benotung&&this.znotebez?.length?this.znotebez[t]:this.benotung&&this.lvnotebez?.length?this.lvnotebez[t]:null},LvHasPruefungenInformation(){return this.pruefungenData&&this.pruefungenData.length>0}},methods:{fetchMenu(t=this.lehrveranstaltung_id,e=this.studien_semester){return this.$api.call(Gt.getLvMenu(t,e)).then(t=>{this.menu=t.data}).catch(t=>{this.$fhcAlert.handleSystemError(t),this.menu=[]})},c4_link:t=>t?Array.isArray(t.c4_moodle_links)&&t.c4_moodle_links.length?"#":t.c4_link??null:null,openLvOption(t){"core_menu_mailanstudierende"==t.id||"core_menu_digitale_anwesenheitslisten"==t.id?window.location.href=t.c4_link:(this.preselectedMenuItem=t,Vue.nextTick(()=>{this.$refs.lvUebersicht.show()}))},openPruefungen(){this.LvHasPruefungenInformation&&zt.popup({pruefungenData:this.pruefungenData,bezeichnung:this.bezeichnung})},openInfos(){this.info||(this.info=!0,Mt.popup({lehrveranstaltung_id:this.lehrveranstaltung_id,bezeichnung:this.bezeichnung,bezeichnung_eng:this.bezeichnung_eng,studiengang_kuerzel:this.studiengang_kuerzel,semester:this.semester,studien_semester:this.studien_semester,orgform_kurzbz:this.orgform_kurzbz,sprache:this.sprache,ects:this.ects,incoming:this.incoming}).then(()=>this.info=!1).catch(()=>this.info=!1))}},watch:{studien_semester(t){this.fetchMenu(this.lehrveranstaltung_id,t)}},created(){this.$api.call(It.getStudentPruefungen(this.lehrveranstaltung_id)).then(t=>t.data).then(t=>{this.pruefungenData=t})},mounted(){this.fetchMenu(this.lehrveranstaltung_id,this.studien_semester)},template:'
\n\t\t\n\n\t\t
\n\t\t\t\x3c!-- {{module}} if the module of the lv is important then query the module from the api endpoint for LV--\x3e\n\t\t\t
{{ $p.t(\'lehre/organisationseinheit\') }}:
\n\t\t\t
{{$p.user_language.value === \'English\' ? bezeichnung_eng : bezeichnung}}
\n\t\t
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t\t\n\t
'}},mixins:[Vt],props:{bezeichnung:String,kuerzel:String,semester:[String,Number],lvs:Array,sg_bezeichnung_eng:String},computed:{lehrveranstaltungen(){return[...new Map(this.lvs.map(t=>[t.lehrveranstaltung_id,t])).values()]}},methods:{note:t=>t.benotung&&(t.znote||t.lvnote)||null},template:'
\n\t\t
\n\t\t\t

{{$p.user_language.value === \'English\' ? sg_bezeichnung_eng : bezeichnung}} - {{kuerzel}}\n\t\t\t\t{{semester}}.{{$p.t(\'lehre/semester\')}}\n\t\t\t

\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
'}},provide(){return{studien_semester:Vue.computed(()=>this.semester)}},props:{semester:[String,Number],lvs:Array},computed:{ready(){return null!==this.lvs},studiengaenge(){return[...new Map(this.lvs.map(t=>[t.studiengang_kz+"#"+t.semester,{studiengang_kz:t.studiengang_kz,bezeichnung:t.sg_bezeichnung,sg_bezeichnung_eng:t.sg_bezeichnung_eng,kuerzel:t.studiengang_kuerzel,semester:t.semester}])).values()].sort((t,e)=>t.bezeichnung.toLowerCase()==e.bezeichnung.toLowerCase()?t.semester>e.semester:t.bezeichnung.toLowerCase()>e.bezeichnung.toLowerCase())}},methods:{lvsForStudiengang(t){return this.lvs.filter(e=>e.studiengang_kz==t.studiengang_kz&&e.semester==t.semester)}},template:'
\n\t\t\n\t
\n\t
\n\t\t\n\t
'},Kt={components:{MylvSemester:Wt},mixins:[Vt],data:()=>({firstLoad:!0,studiensemester:null,lvs:{},currentSemester:null}),computed:{ready(){return null!==this.studiensemester&&(!this.firstLoad||null!==this.current.lvs)},current(){return null===this.currentSemester?{semester:null,lvs:[]}:(void 0===this.lvs[this.currentSemester]&&(this.lvs[this.currentSemester]={semester:this.currentSemester,lvs:null},axios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/components/Cis/Mylv/Lvs/"+this.currentSemester).then(t=>{this.lvs[this.currentSemester].lvs=t.data.retval||[],this.firstLoad=!1})),this.lvs[this.currentSemester])},nearestSem(){let t=Date.now(),e=null,n=0;return this.studiensemester.forEach(i=>{let a=new Date(i.start),s=new Date(i.ende);if(t>=a&&t<=s)return e=i.studiensemester_kurzbz,void(n=0);let r=Math.min(Math.abs(t-a),Math.abs(t-s));(null===e||r{this.studiensemester=t.data.retval||[];const e=this.$route.params.studiensemester;e&&this.studiensemester.filter(t=>t.studiensemester_kurzbz==e).length?this.currentSemester=e:this.currentSemester=this.nearestSem})},beforeRouteUpdate(t,e,n){t.params.studiensemester&&this.studiensemester.filter(e=>e.studiensemester_kurzbz==t.params.studiensemester).length&&t.params.studiensemester!=this.currentSemester&&(this.currentSemester=t.params.studiensemester),n()},template:'\n\n\t

{{$p.t(\'lehre/myLV\')}}

\n\t
\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t\t\n\t\t\n\t
\n\t
\n\t\t\n\t
'};const Zt={emits:["dataFetched"],props:{refresh:{type:Boolean},apiFunction:{required:!0,type:Function},apiFunctionParameters:{}},watch:{refresh:function(t,e){this.fetchData()}},data:function(){return{loading:!1,error:!1,errorMessage:null}},created:function(){this.fetchData()},methods:{fetchData:function(){if(this.loading=!0,this.error=!1,this.errorMessage=null,"function"==typeof this.apiFunction){let t=this.apiFunction(this.apiFunctionParameters);t instanceof Promise?t.then(this.successHandler).catch(this.errorHandler).finally(this.finallyHandler):this.setError("The called apiFunction does not return a Promise")}else this.setError("Property apiFunction is not a function")},setError:function(t){this.loading=!1,this.error=!0,this.errorMessage=t},successHandler:function(t){this.$emit("dataFetched",t?t.data:void 0)},errorHandler:function(t){t.response?.data?.retval?this.setError(t.response.data.retval):t.data?.message?this.setError(t.data.message):this.setError(t.message)},finallyHandler:function(){this.loading=!1}},template:'\n\t\t\n\t\t\t
Loading...
\n\t\t
\n\t\t\n\t\t\t
{{ errorMessage }}
\n\t\t
\n\t\t\n\t'},Yt="Filter Component New Filter";var Xt={props:{filters:{type:Array,default:[]},columns:{type:Array,default:[]},fields:{type:Array,default:[]}},emits:{switchFilter:["filterId"],applyFilterConfig:["filterFields"],saveCustomFilter:["customFilterName"]},data:function(){return{currentFields:[]}},computed:{types(){return this.columns.reduce((t,e)=>{let n=e.type.toLowerCase();return n.indexOf("int")>=0?t[e.name]="Numeric":n.indexOf("varchar")>=0||n.indexOf("text")>=0||n.indexOf("bpchar")>=0?t[e.name]="Text":n.indexOf("timestamp")>=0||n.indexOf("date")>=0?t[e.name]="Date":t[e.name]="",t},{})}},watch:{fields(t){this.currentFields=t}},methods:{switchFilter(t){this.$emit("switchFilter",t.currentTarget.value)},applyFilterConfig(){const t=this.currentFields.filter(t=>t.name!=Yt);t.filter(t=>""==t.condition).length?alert("Please fill all the filter options"):this.$emit("applyFilterConfig",t)},addField(t){this.currentFields.push({name:Yt})},removeField(t){this.currentFields.splice(t,1)}},template:'\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tFilter {{ index + 1 }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\x3c!-- Numeric --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\x3c!-- Text --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\x3c!-- Timestamp and date --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t\x3c!-- Filter save options --\x3e\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
\n\t'},Qt={props:{fields:Array,selected:{type:Array,default:[]},names:{type:Object,default:{}}},emits:{hide:["fieldName"],show:["fieldName"]},data:function(){return{selectedFields:[]}},watch:{selected(t){this.selectedFields=t}},methods:{toggle(t){-1!=this.selectedFields.indexOf(t)?(this.selectedFields.splice(this.selectedFields.indexOf(t),1),this.$emit("hide",t)):(this.selectedFields.push(t),this.$emit("show",t))}},template:'\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{{ names[fieldToDisplay] || fieldToDisplay }}\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t\n\t'};const te={jsonLines:"fa-file-lines",xlsx:"fa-file-excel",pdf:"fa-file-pdf",html:"fa-file-code",json:"fa-file",csv:"fa-file-csv"},ee={jsonLines:"Download as JSONLINES",xlsx:"Download as XLSX",pdf:"Download as PDF",html:"Download as HTML",json:"Download as JSON",csv:"Download as CSV "};var ne={props:{tabulator:Object,config:{type:[Boolean,String,Function,Array,Object],default:!1},iconClass:[String,Array,Object]},computed:{currentConfig(){if(!this.config)return!1;let t=this.config;if(t instanceof Function)return[t];if(null===t)return[];if(!0===this.config&&(t=["csv"]),"[object String]"===Object.prototype.toString.call(t)&&(t=t.split(",")),"object"==typeof t&&!Array.isArray(t)){let a=[];for(var e in t){var n,i=t[e];i&&("[object String]"===Object.prototype.toString.call(i)?null!==(n=this.stringToFileFormatter(i))?a.push({icon:"fa-solid "+te[n],label:i===e?ee[n]:e,formatter:n}):null!==(n=this.stringToFileFormatter(e))?a.push({icon:"fa-solid "+te[n],label:i,formatter:n}):alert("neither "+e+" nor "+i+" are supported download file types"):"object"!=typeof i||Array.isArray(i)?null!==(n=this.stringToFileFormatter(e))?a.push({icon:"fa-solid "+te[n],label:ee[n],formatter:n}):alert(e+" is not a supported download file type"):null!==(n=this.stringToFileFormatter(e))?(void 0===i.formatter&&(i.formatter=n),void 0===i.label&&(i.label=ee[n]),void 0===i.icon&&(i.icon=te[n]),a.push(i)):(void 0===i.label&&(i.label=e),a.push(i)))}t=a}if(Array.isArray(t)){if(t=t.map(t=>{if("[object String]"===Object.prototype.toString.call(t)){let e=this.stringToFileFormatter(t);return null===e?null:{icon:"fa-solid "+te[e],label:ee[e],formatter:e}}if(t instanceof Function)return{formatter:t};if("object"==typeof t&&!Array.isArray(t)&&null!==t){if(t.formatter instanceof Function)return t;if(this.validateFileFormatter(t.formatter))return t}return null}).filter(t=>null!==t),t.length<2)return t;if(t.filter(t=>t.label||t.icon).length==t.length)return t;alert("Config not valid")}return[]}},methods:{stringToFileFormatter(t){let e=t.toLowerCase();return"jsonlines"==e?"jsonLines":["xlsx","pdf","html","json","csv"].includes(e)?e:null},validateFileFormatter(t){let e=this.stringToFileFormatter(t);if(!e)return alert(t+" is not a supported file formatter"),!1;if("xlsx"==e&&!window.XLSX)return alert("XLSX Library not loaded"),!1;if("pdf"==e){if(!window.jspdf)return alert("jsPDF Library not loaded"),!1;if(!new jspdf.jsPDF({}).autoTable)return alert("jsPDF-AutoTable Plugin not loaded"),!1}return!0},download(t){this.tabulator.download(t.formatter,t.file,t.options)}},template:'\n\t\n\t'};const ie=new WeakMap;var ae={mounted(t,e){let n=!1;ie.set(t,e=>{if(!n)return;if(t.contains(e.target))return;const i=bootstrap.Collapse.getInstance(t);i&&i.hide()}),t.addEventListener("shown.bs.collapse",()=>{n=!0}),t.addEventListener("hide.bs.collapse",()=>{n=!1}),document.addEventListener("click",ie.get(t),!0)},beforeUnmount(t,e){document.removeEventListener("click",ie.get(t)),delete t.collapsibleAutoHideFunc}};window.Tabulator?.extendModule("layout","modes",{fitDataStretchFrozen(t,e){var n=0,i=this.table.rowManager.element.clientWidth,a=0,s=!1;t.forEach((t,e)=>{t.widthFixed||t.reinitializeWidth(),(this.table.options.responsiveLayout?t.modules.responsive.visible:t.visible&&!t.definition.frozen)&&(s=t),t.visible&&(n+=t.getWidth())}),s?(a=i-n+s.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(s.setWidth(0),this.table.modules.responsiveLayout.update()),a>0?s.setWidth(a):s.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()}});var se={saveCustomFilter:t=>({method:"post",url:"/api/frontend/v1/filter/saveCustomFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,customFilterName:t.customFilterName}}),removeCustomFilter:t=>({method:"post",url:"/api/frontend/v1/filter/removeCustomFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId}}),applyFilterFields:t=>({method:"post",url:"/api/frontend/v1/filter/applyFilterFields",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterFields:t.filterFields}}),addFilterField:t=>({method:"post",url:"/api/frontend/v1/filter/addFilterField",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField}}),removeFilterField:t=>({method:"post",url:"/api/frontend/v1/filter/removeFilterField",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField}}),getFilterById:t=>({method:"get",url:"/api/frontend/v1/filter/getFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId}}),getFilter:t=>({method:"get",url:"/api/frontend/v1/filter/getFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType}})},re=0;const oe={components:{CoreFetchCmpt:Zt,FilterConfig:Xt,FilterColumns:Qt,TableDownload:ne},directives:{collapseAutoClose:ae},emits:["nwNewEntry","click:new","tableBuilt","uuidDefined"],props:{onNwNewEntry:Function,title:String,description:String,sideMenu:{type:Boolean,default:!0},filterType:{type:String},tabulatorOptions:Object,tabulatorEvents:Array,tableOnly:Boolean,noColumnFilter:Boolean,reload:Boolean,reloadBtnInfotext:String,download:{type:[Boolean,String,Function,Array,Object],default:!1},newBtnShow:Boolean,newBtnClass:[String,Array,Object],newBtnDisabled:Boolean,newBtnLabel:String,uniqueId:String,idField:String,parentIdField:String,countOnly:Boolean,useSelectionSpan:{type:Boolean,default:!0}},data:function(){return{uuid:0,filterName:null,filterActive:!1,fields:null,dataset:null,datasetMetadata:null,selectedFields:null,filterFields:null,availableFilters:null,selectedFilter:null,fetchCmptRefresh:!1,fetchCmptApiFunction:null,fetchCmptApiFunctionParams:null,fetchCmptDataFetched:null,fetchResult:null,tabulator:null,tableBuilt:!1,tabulatorHasSelector:!1,selectedData:[],persistence:{sort:!0,columns:!0,filter:!1,headerFilter:!1,group:!1,page:!1}}},computed:{notSelectedFields(){return this.fields&&this.selectedFields?this.fields.filter(t=>-1===this.selectedFields.indexOf(t)):null},filteredData(){return this.dataset?JSON.parse(JSON.stringify(this.dataset)):[]},filteredColumns(){let t=JSON.parse(JSON.stringify(this.fields))||[],e=JSON.parse(JSON.stringify(this.selectedFields))||[],n=null;if(this.tabulatorOptions&&this.tabulatorOptions.hasOwnProperty("columns")&&(n=this.tabulatorOptions.columns),!Array.isArray(n)||Array.isArray(n)&&n.length=0,n.push(t)}}else for(let i of n)i.visible=e.indexOf(i.field)>=0||-1==t.indexOf(i.field),i.hasOwnProperty("resizable")&&(i.resizable=i.visible);return n},fieldIdsForVisibilty(){return this.tableBuilt?this.tabulator.getColumns().filter(t=>{let e=t.getDefinition();return!e.frozen&&e.title&&"responsiveCollapse"!=e.formatter}).map(t=>t.getField()):[]},fieldNames(){return this.tableBuilt?this.tabulator.getColumns().reduce((t,e)=>(t[e.getField()]=e.getDefinition().title,t),{}):{}},idExtra(){return this.uuid?"-"+this.uuid:""},columnsForFilter(){if(!this.filteredColumns||!this.datasetMetadata)return[];const t=this.filteredColumns.reduce((t,e)=>(t[e.field]=e.title,t),{});return this.datasetMetadata.map(e=>({...e,title:t[e.name]}))}},methods:{reloadTable(){this.tableOnly?this.tabulator.setData():this.getFilter()},async initTabulator(){let t="< Phrasen Plugin not loaded! >";this.$p&&(await this.$p.loadCategory("ui"),t=this.$p.t("ui/keineDatenVorhanden")),this.tableOnly||await new Promise(t=>{const e=window.location.hash?window.location.hash.slice(1):null,n=e=>{this.setRenderData(e),t()};null===e?this.startFetchCmpt(t=>this.$api.call(se.getFilter(t)),null,n):this.startFetchCmpt(t=>this.$api.call(se.getFilterById(t)),{filterId:e},n)});let e={layout:"fitDataStretchFrozen",movableColumns:!0,columnDefaults:{tooltip:!0},placeholder:t,persistence:this.persistence,...this.tabulatorOptions||{}};if(void 0===e.height&&void 0===e.minHeight&&void 0===e.maxHeight&&(e.height=500),this.tableOnly?e.columns.forEach(t=>{void 0===t.visible&&(t.visible=!0)}):(e.data=this.filteredData,e.columns=this.filteredColumns),(e.selectable||e.columns&&e.columns.filter(t=>"rowSelection"==t.formatter).length)&&(this.tabulatorHasSelector=!0),this.idField&&(this.parentIdField&&(e.dataTree=!0),e.index=this.idField),this.tabulator=new Tabulator(this.$refs.table,e),Array.isArray(this.tabulatorEvents)&&this.tabulatorEvents.length>0)for(let t of this.tabulatorEvents)this.tabulator.on(t.event,t.handler);this.tabulator.on("tableBuilt",()=>{this.tableBuilt=!0,this.$emit("tableBuilt")}),this.tabulator.on("rowSelectionChanged",t=>{this.selectedData=t}),this.parentIdField&&this.idField&&this.tabulator.on("dataLoading",t=>{let e=[];for(let n=0;n{const t=this.tabulator.getColumns();this.fields=t.map(t=>t.getField()),this.selectedFields=t.filter(t=>t.isVisible()).map(t=>t.getField()),this.tabulator.options.persistence.headerFilter&&this._setHeaderFilter()}),this.tabulator.on("dataFiltered",t=>{this.filterActive=t.length>0})},updateTabulator(){this.tabulator&&(this.tableBuilt?this._updateTabulator():this.tabulator.on("tableBuilt",this._updateTabulator))},_updateTabulator(){this.tabulatorHasSelector=this.tabulatorOptions.selectable||this.filteredColumns.filter(t=>"rowSelection"==t.formatter).length,this.tabulator.setColumns(this.filteredColumns),this.tabulator.setData(this.filteredData),this._setHeaderFilter()},clearFilters(){this.tabulator.getHeaderFilters().forEach(t=>{this.tabulator.setHeaderFilterValue(t.field,"")}),this.tabulator.clearFilter(),this.filterActive=!1},_setHeaderFilter(){this.tabulator.getHeaderFilters().forEach(t=>{this.tabulator.setHeaderFilterValue(t.field,t.value)})},getFilter(){null===this.selectedFilter?this.startFetchCmpt(t=>this.$api.call(se.getFilter(t)),null,this.render):this.startFetchCmpt(t=>this.$api.call(se.getFilterById(t)),{filterId:this.selectedFilter},this.render)},setRenderData(t){this.fetchResult=t,this.filterName=t.filterName,this.dataset=t.dataset,this.datasetMetadata=t.datasetMetadata,this.fields=t.fields,this.selectedFields=t.selectedFields,this.filterFields=[];for(let e=0;ethis.$api.call(se.saveCustomFilter(t)),{customFilterName:t},this.getFilter)},handlerRemoveCustomFilter(t){let e=t.currentTarget.getAttribute("href").substring(1);e===this.selectedFilter&&(this.selectedFilter=null),this.startFetchCmpt(t=>this.$api.call(se.removeCustomFilter(t)),{filterId:e},this.getFilter)},handlerGetFilterById:function(t){let e=null,n=t.currentTarget.getAttribute("href");e=null==n?t.currentTarget.value:n.substring(1),this.switchFilter(e)},switchFilter(t){this.selectedFilter=t,this.getFilter()},applyFilterConfig(t){this.selectedFilter=null,this.startFetchCmpt(t=>this.$api.call(se.applyFilterFields(t)),{filterFields:t},this.getFilter)},appendChild(t,e){let n=e[this.parentIdField];for(let i=0;i{this.tableOnly||(this.selectedFilter=window.location.hash?window.location.hash.slice(1):null,this.render(this.fetchResult))})},template:'\n\t\t\x3c!-- Load filter data --\x3e\n\t\t\n\t\t\n\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t\t
\n\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{{ selectedData.length }} ausgewählt\n\t\t\t\t\t\t Mit {{ selectedData.length }} ausgewählten:\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t[ {{ filterName }} ]\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\n\n\t\t\x3c!-- Tabulator --\x3e\n\t\t
\n\t'};var le={props:{data:Object,title:{type:String}},data:()=>({}),created(){},template:'\n\t'},de={props:{data:{type:String}},data:()=>({}),template:"\n
\n
\n {{$p.t('profil','fhAusweisStatus',[data])}}\n
\n
"},ce={props:{data:{type:String},title:{type:String,required:!0},mobile:{type:Boolean,default:!1}},methods:{hideCollapse:function(){this.collapseOpen=!1},showCollapse:function(){this.collapseOpen=!0}},data:()=>({collapseOpen:!1}),template:'\n
\n \n \n
'},ue={props:{data:Object,view:String,withZustelladresse:{type:Boolean,default:!0}},data:()=>({}),created(){},template:'\n \n
\n \n \x3c!-- column 1 in the address row --\x3e\n
\n \n
\n \n
\n
\n
{{$p.t(\'person\',\'strasse\')}}
\n {{data.strasse}} \n
\n
\n \n \x3c!-- column 2 in the address row --\x3e\n
\n
\n
{{$p.t(\'global\',\'typ\')}}
\n {{data.typ}} \n
\n
\n \n
\n
\n
{{$p.t(\'person\',\'ort\')}}
\n {{data.ort}} \n
\n
\n
\n
\n
{{$p.t(\'person\',\'plz\')}}
\n {{data.plz}} \n
\n
\n\n
\n
\n
{{$p.t(\'person\',\'zustelladresse\')}}
\n
\n \n
\n
\n
\n
\n'},pe={props:{view:String,data:Object},data:()=>({}),created(){},template:'\n\t\n'},he={data:()=>({}),props:{title:{type:String,required:!0},data:{type:Array}},template:'\n
\n
\n {{title}}\n
\n
\n \x3c!-- HIER SIND DIE EMAILS --\x3e\n
\n
\n\t\t\t\t\n
\n
\n
\n
'},me={data:()=>({}),props:{data:{type:Object},title:{type:String}},inject:{studiengang_kz:{from:"studiengang_kz",default:!1}},computed:{getLinkGruppeListe(){return!1===this.studiengang_kz?"":this.data.gruppe?.value&&this.data.verband?.value&&this.data.semester?.value?FHC_JS_DATA_STORAGE_OBJECT.app_root+"cis/private/stud_in_grp.php?kz="+this.studiengang_kz+"&sem="+this.data.semester.value+"&verband="+this.data.verband.value+"&grp="+this.data.gruppe.value:""},getLinkVerbandListe(){return!1===this.studiengang_kz?"":this.data.verband?.value&&this.data.semester?.value?FHC_JS_DATA_STORAGE_OBJECT.app_root+"cis/private/stud_in_grp.php?kz="+this.studiengang_kz+"&sem="+this.data.semester.value+"&verband="+this.data.verband.value:""},getLinkSemesterListe(){return!1===this.studiengang_kz?"":this.data.semester?.value?FHC_JS_DATA_STORAGE_OBJECT.app_root+"cis/private/stud_in_grp.php?kz="+this.studiengang_kz+"&sem="+this.data.semester.value:""}},created(){},template:'\n
\n
{{title}}
\n
\n
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
{{entry.label }}
\n\t\t\t\n\t\t\t\t\t\t\x3c!-- print Telefon link --\x3e\n\t\t\t\t\t\t{{entry.value ?? \'-\'}}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\x3c!-- print semester link --\x3e\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ entry.value }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\x3c!-- print verband link --\x3e\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ entry.value }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\x3c!-- print gruppe link --\x3e\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ entry.value }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\x3c!-- else print information --\x3e\n\t\t\t\t\t\t{{ entry.value ?? \'-\'}}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
'},fe={profilViewData(t){let e="/api/frontend/v1/Profil/profilViewData";return t&&(e+=`/${t}`),{method:"get",url:e}},fotoSperre:t=>({method:"get",url:`/api/frontend/v1/Profil/fotoSperre/${t}`}),isStudent:t=>({method:"get",url:"/api/frontend/v1/Profil/isStudent",params:{uid:t}}),isMitarbeiter:t=>({method:"get",url:`/api/frontend/v1/Profil/isMitarbeiter/${t}`}),getZustellAdresse:()=>({method:"get",url:"/api/frontend/v1/Profil/getZustellAdresse"}),getZustellKontakt:()=>({method:"get",url:"/api/frontend/v1/Profil/getZustellKontakt"}),getGemeinden:(t,e)=>({method:"get",url:`/api/frontend/v1/Profil/getGemeinden/${t}/${e}`}),getAllNationen:()=>({method:"get",url:"/api/frontend/v1/Profil/getAllNationen"})},ge={components:{DmsItem:{emits:["delete"],props:{modelValue:{type:[File,Object],required:!0}},data:()=>({preview:""}),watch:{modelValue(t){"application/x.fhc-dms+json"==t.type&&t.text().then(t=>{const e=JSON.parse(t);this.preview=e.preview||""})}},template:'\n\t
  • \n\t\t\n\t\t{{ modelValue.name }}\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t
  • '}},emits:["update:modelValue"],props:{modelValue:{type:[FileList,Array],required:!0},multiple:Boolean,id:String,name:String,inputClass:[String,Array,Object],noList:Boolean,accept:{type:String,default:""},disabled:{type:Boolean,default:!1}},methods:{stringifyFile:t=>JSON.stringify({lastModified:t.lastModified,lastModifiedDate:t.lastModifiedDate,name:t.name,size:t.size,type:t.type}),addFiles(t){if(!this.multiple)return this.$emit("update:modelValue",t.target.files);const e=new DataTransfer,n=[];for(var i of this.modelValue)e.items.add(i),n.push(this.stringifyFile(i));for(var i of t.target.files)n.indexOf(this.stringifyFile(i))<0&&e.items.add(i);this.$emit("update:modelValue",e.files)},removeFile(t){const e=Array.from(this.modelValue)[t],n=new DataTransfer;for(var i of this.modelValue)i!==e&&n.items.add(i);this.$emit("update:modelValue",n.files)}},watch:{modelValue(t){if(!t)return;if(t instanceof FileList){if(!this.$refs.upload)return;return this.$refs.upload.files=t}const e=new DataTransfer;for(var n of t)if(n instanceof File)e.items.add(n);else{const t=new File([JSON.stringify(n)],n.name,{type:"application/x.fhc-dms+json"});e.items.add(t)}this.$emit("update:modelValue",e.files)}},template:'\n\t
    \n\t\t\n\t\t
      \n\t\t\t\n\t\t\t\n\t\t
    \n\t
    '},ve={ +getStatus:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getStatus",{})},getTopic:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getTopic",{})},acceptProfilRequest:function({profil_update_id:t,uid:e,status_message:n,topic:i,requested_change:a}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/acceptProfilRequest",{profil_update_id:t,uid:e,status_message:n,topic:i,requested_change:a})},denyProfilRequest:function({profil_update_id:t,uid:e,topic:n,status_message:i}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/denyProfilRequest",{profil_update_id:t,uid:e,topic:n,status_message:i})},insertFile:function(t,e=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/insertFile/${e}`,t)},getProfilRequestFiles:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${t}`,{})},selectProfilRequest:function(t=null,e=null){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/selectProfilRequest",{...t?{uid:t}:{},...e?{id:e}:{}})},insertProfilRequest:function(t,e,n=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/insertProfilRequest",{topic:t,payload:e,...n?{fileID:n}:{}})},updateProfilRequest:function(t,e,n,i=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/updateProfilRequest",{topic:t,payload:e,ID:n,...i?{fileID:i}:{}})},deleteProfilRequest:function(t){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/deleteProfilRequest",{requestID:t})}},D={getRoomInfo(t,e,n){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getRoomplan",{ort_kurzbz:t,start_date:e,end_date:n})},getStunden(){return this.$fhcApi.get("/api/frontend/v1/LvPlan/Stunden",{})},getOrtReservierungen(t,e,n){return this.$fhcApi.post(`/api/frontend/v1/LvPlan/getReservierungen/${t}`,{start_date:e,end_date:n})},getLvPlanReservierungen(t,e){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getReservierungen",{start_date:t,end_date:e})},getLehreinheitStudiensemester(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${t}`,{})},studiensemesterDateInterval(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${t}`,{})},LvPlanEvents(t,e,n){return this.$fhcApi.get("/api/frontend/v1/LvPlan/LvPlanEvents",{start_date:t,end_date:e,lv_id:n})}},C={verband:{get(){return this.$fhcApi.get("api/frontend/v1/stv/verband")},favorites:{get(){return this.$fhcApi.get("api/frontend/v1/stv/favorites")},set(t){return this.$fhcApi.post("api/frontend/v1/stv/favorites/set",{favorites:t})}}},students:{uid(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/uid/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},prestudent(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/prestudent/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},person(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/person/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},verband(t){return this.$fhcApi.getUri("api/frontend/v1/stv/students/"+t)}},filter:{getStg(){return this.$fhcApi.get("api/frontend/v1/stv/filter/getStg")},setStg(t){return this.$fhcApi.post("api/frontend/v1/stv/filter/setStg",{studiengang_kz:t})}},konto:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/konto/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id),only_open:e.filter,studiengang_kz:e.studiengang_kz_intern?e.stg_kz:""}),t.ajaxRequestFunc=(t,e,n)=>this.$fhcApi.post(t,n,e),t.ajaxResponse=(t,e,n)=>n.data,t},checkDoubles(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/checkDoubles",e,{confirmErrorHandler:t=>!0})},insert(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/insert",e)},counter(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/counter",t)},edit(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/update",e)},delete(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/delete",{buchungsnr:t})},getBuchungstypen(){return this.$fhcApi.get("api/frontend/v1/stv/konto/getBuchungstypen")}},group:{getGruppen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/Gruppen/getGruppen/"+n.id)},deleteGroup(t){return this.$fhcApi.post("api/frontend/v1/stv/Gruppen/deleteGruppe/",t)}},kontakt:{getAdressen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressen/"+n.id)},addNewAddress(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewAddress/"+e,n)},loadAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadAddress/",{address_id:t})},updateAddress(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateAddress/"+e,n)},deleteAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteAddress/",{address_id:t})},getPlaces(t){return this.$fhcApi.get("api/frontend/v1/stv/address/getPlaces/"+t)},getFirmen(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getFirmen/"+t)},getNations(){return this.$fhcApi.get("api/frontend/v1/stv/address/getNations/")},getAdressentypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressentypen/")},getBankverbindung(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getBankverbindung/"+n.id)},addNewBankverbindung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewBankverbindung/"+e,n)},loadBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadBankverbindung/",{bankverbindung_id:t})},updateBankverbindung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateBankverbindung/"+e,n)},deleteBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteBankverbindung/",{bankverbindung_id:t})},getKontakte(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakte/"+n.id)},addNewContact(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewContact/"+e,n)},loadContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadContact/",{kontakt_id:t})},updateContact(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateContact/"+e,n)},deleteContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteContact/",{kontakt_id:t})},getStandorteByFirma(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getStandorteByFirma/"+t)},getKontakttypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakttypen/")}},prestudent:{get(t,e){return this.$fhcApi.post("api/frontend/v1/stv/prestudent/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e))},updatePrestudent(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/prestudent/updatePrestudent/"+e,n)},getBezeichnungZGV(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungZGV/")},getBezeichnungMZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungMZgv/")},getBezeichnungDZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungDZgv/")},getStgs(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStgs/")},getAusbildung(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAusbildung/")},getAufmerksamdurch(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAufmerksamdurch/")},getBerufstaetigkeit(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBerufstaetigkeit/")},getTypenStg(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getTypenStg/")},getBisstandort(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBisstandort/")},getHistoryPrestudent(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/status/getHistoryPrestudent/"+n.id)},getMaxSem(t){return this.$fhcApi.post("api/frontend/v1/stv/status/getMaxSemester/",{studiengang_kzs:t})},advanceStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/advanceStatus/"+t+"/"+e+"/"+n+"/"+i)},confirmStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/confirmStatus/"+t+"/"+e+"/"+n+"/"+i)},isLastStatus(t){return this.$fhcApi.get("api/frontend/v1/stv/status/isLastStatus/"+t)},deleteStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/deleteStatus/"+t+"/"+e+"/"+n+"/"+i)},getLastBismeldestichtag(){return this.$fhcApi.get("api/frontend/v1/stv/status/getLastBismeldestichtag/")},getHistoryPrestudents(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getHistoryPrestudents/"+n.id)}},status:{insertStatus(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/insertStatus/"+e,n)},loadStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/loadStatus/"+t+"/"+e+"/"+n+"/"+i)},updateStatus(t,{prestudent_id:e,status_kurzbz:n,studiensemester_kurzbz:i,ausbildungssemester:a},s){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/updateStatus/"+e+"/"+n+"/"+i+"/"+a,s)},getStudienplaene(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudienplaene/"+t)},getStudiengang(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudiengang/"+t)},getStatusgruende(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusgruende/")},getStati(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStati/")},addStudent(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/addStudent/"+t,e,{errorHeader:t})},changeStatus(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/changeStatus/"+t,e,{errorHeader:t})},getStatusarray(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusarray/")}},details:{get(t,e){let n="api/frontend/v1/stv/student/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e);return this.$fhcApi.post(n)},save(t,e,n,i){let a="api/frontend/v1/stv/student/save/"+encodeURIComponent(e)+"/"+encodeURIComponent(n);return this.$fhcApi.post(t,a,i)}},exam:{getPruefungen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getPruefungen/"+n.id)},loadPruefung(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/loadPruefung/"+t)},getTypenPruefungen(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getTypenPruefungen")},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/getAllLehreinheiten/",t)},getLvsByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsByStudent/"+t)},getLvsandLesByStudent(t,e){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsandLesByStudent/"+t+"/"+e)},getLvsAndMas(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsAndMas/"+t)},getMitarbeiterLv(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getMitarbeiterLv/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getNoten")},checkZeugnisnoteLv(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/",t)},addPruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/insertPruefung/",e)},updatePruefung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/updatePruefung/"+e,n)},deletePruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/deletePruefung/"+t)}},abschlusspruefung:{getAbschlusspruefung(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/"+n.id)},addNewAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/",e)},loadAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/",{id:t})},updateAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/",e)},deleteAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/",{id:t})},getTypenAbschlusspruefung(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/")},getTypenAntritte(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/")},getBeurteilungen(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/")},getAkadGrade(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getAkadGrade/",{studiengang_kz:t})},getTypStudiengang(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/",{studiengang_kz:t})},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/"+t)},getPruefer(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getPruefer/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getNoten/")},checkForExistingExams(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/",{uids:t})}},grades:{list(){return this.$fhcApi.get("api/frontend/v1/stv/grades/list")},getCertificate(t,e){let n="api/frontend/v1/stv/grades/getCertificate/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},getTeacherProposal(t,e){let n="api/frontend/v1/stv/grades/getTeacherProposal/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},getRepeaterGrades(t,e){let n="api/frontend/v1/stv/grades/getRepeaterGrades/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},updateCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,note:i,lehrveranstaltung_bezeichnung:a}){return this.$fhcApi.post("api/frontend/v1/stv/grades/updateCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,note:i},{errorHeader:a})},deleteCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,lehrveranstaltung_bezeichnung:i}){return this.$fhcApi.post("api/frontend/v1/stv/grades/deleteCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n},{errorHeader:i})},copyTeacherProposalToCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,lehrveranstaltung_bezeichnung:i}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyTeacherProposalToCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n},{errorHeader:i})},copyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id:t,lv_bezeichnung:e}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate",{studierendenantrag_lehrveranstaltung_id:t},{errorHeader:e})},getGradeFromPoints(t,e,n,i){const a=i?{errorHandling:!1}:{};return this.$fhcApi.post("api/frontend/v1/stv/grades/getGradeFromPoints",{points:t,lehrveranstaltung_id:e,studiensemester_kurzbz:n},a)}},mobility:{getMobilitaeten(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getMobilitaeten/"+n.id)},getProgramsMobility(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getProgramsMobility/")},addNewMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/insertMobility/",e)},loadMobility(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/loadMobility/"+t)},updateMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/updateMobility/",e)},deleteMobility(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobility/"+t)},getLVList(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLVList/"+t)},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/getAllLehreinheiten/",t)},getLvsandLesByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLvsandLesByStudent/"+t)},getPurposes(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getPurposes/"+n.id)},getSupports(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getSupports/"+n.id)},getListPurposes(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListPurposes/")},getListSupports(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListSupports/")},deleteMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilityPurpose/"+t.bisio_id,t)},addMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilityPurpose/"+t.bisio_id,t)},deleteMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilitySupport/"+t.bisio_id,t)},addMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilitySupport/"+t.bisio_id,t)}},archiv:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/archiv/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id)}),t.ajaxRequestFunc=(t,e,n)=>this.$fhcApi.post(t,n,e),t.ajaxResponse=(t,e,n)=>n.data,t},getArchivVorlagen(){return this.$fhcApi.post("api/frontend/v1/stv/archiv/getArchivVorlagen")},archive(t){return this.$fhcApi.post("api/frontend/v1/documents/archive",t)},archiveSigned(t){return this.$fhcApi.post("api/frontend/v1/documents/archiveSigned",t)},update(t){return this.$fhcApi.post("api/frontend/v1/stv/archiv/update",t)},delete({akte_id:t,studiengang_kz:e}){return this.$fhcApi.post("api/frontend/v1/stv/archiv/delete",{akte_id:t,studiengang_kz:e})}},documents:{getDocumentsUnaccepted(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/"+n.id+"/"+n.studiengang_kz)},getDocumentsAccepted(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsAccepted/"+n.id+"/"+n.studiengang_kz)},deleteZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},createZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/createZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},loadAkte(t){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/loadAkte/"+t)},getDoktypen(){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDoktypen/")},updateFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/updateAkte/"+t,e)},deleteFile(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteAkte/"+t)},uploadFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/uploadDokument/"+t,e)}},exemptions:{getAnrechnungen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getAnrechnungen/"+n.id)},getLehrveranstaltungen(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/"+t)},getBegruendungen(){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getBegruendungen/")},getLvsKompatibel(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLvsKompatibel/"+t)},getLektoren(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLektoren/"+t)},addNewAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/insertAnrechnung/",e)},loadAnrechnung(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/loadAnrechnung/"+t)},editAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/updateAnrechnung/",e)},deleteAnrechnung(t){return this.$fhcApi.post("api/frontend/v1/stv/anrechnungen/deleteAnrechnung/"+t)}},jointstudies:{getStudies(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudien/"+n.id)},getTypenMobility(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/")},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/")},getStudyprograms(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/")},getListPartner(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/")},getStatiPrestudent(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/")},loadStudy(t){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/loadStudie/"+t)},insertStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/insertStudie/",e)},updateStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/updateStudie/",e)},deleteStudy(t){return this.$fhcApi.post("api/frontend/v1/stv/GemeinsameStudien/deleteStudie/"+t)}},courselist:{getCourselist(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStundenplan/"+n.student_uid+"/"+n.start_date+"/"+n.end_date+"/"+n.group_consecutiveHours+"/"+n.dbStundenplanTable)},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStudiensemester/")}},configStudent(){return this.$fhcApi.get("api/frontend/v1/stv/config/student")},configStudents(){return this.$fhcApi.get("api/frontend/v1/stv/config/students")}},O={person:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getUid/")},addNewNotiz(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/addNewNotiz/"+e,n)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/updateNotiz/"+e,n)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getMitarbeiter/"+t)},isBerechtigt(t,e){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/isBerechtigt/")}}},P={person:{getAllBetriebsmittel(t,e,n){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/"+n.type+"/"+n.id)},addNewBetriebsmittel(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/"+e,n)},loadBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/"+t)},updateBetriebsmittel(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/"+e,n)},deleteBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/"+t)},getTypenBetriebsmittel(){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/")},loadInventarliste(t){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/"+t)}}},F={updatePersonUnrulyStatus(t,e){try{const n={person_id:t,unruly:e},i="/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus";return this.$fhcApi.post(i,n,null)}catch(t){throw t}},filterPerson(t,e=""){try{const n=e+"/api/frontend/v1/checkperson/CheckPerson/filterPerson";return axios.post(n,t)}catch(t){throw t}}},z={getContentID(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/ContentID",{ort_kurzbz:t})},getRooms(t,e,n,i,a=0){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getRooms",{datum:t,von:e,bis:n,typ:i,personenanzahl:a})},getRoomTypes(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getTypes")}},I={content(t,e=null,n=null,i=null){return this.$fhcApi.get("/api/frontend/v1/Cms/content",{content_id:t,...e?{version:e}:{},...n?{sprache:n}:{},...i?{sichtbar:i}:{}})},getNews(t=1,e=10,n){return this.$fhcApi.get("/api/frontend/v1/Cms/getNews",{page:t,page_size:e,sprache:n})},news(t){return this.$fhcApi.get("/api/frontend/v1/Cms/news",{limit:t})},getNewsRowCount:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getNewsRowCount",{})},getNewsExtra:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getStudiengangInfoForNews",{})}},L={getStudentenMail(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Lehre/lvStudentenMail",{lehreinheit_id:t})},getLvInfo(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/LV/${t}/${e}`,{})},getStudentPruefungen(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/Pruefungen/${t}`,{})},getStudentProjektarbeiten(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/getStudentProjektarbeiten/${t}`,{})},getStudentProjektabgaben(t){return this.$fhcApi.get("/api/frontend/v1/Lehre/getStudentProjektabgaben",{projektarbeit_id:t.projektarbeit_id,student_uid:t.student_uid})},postStudentProjektarbeitEndupload(t){return this.$fhcApi.post("/api/frontend/v1/Lehre/postStudentProjektarbeitEndupload",t,{Headers:{"Content-Type":"multipart/form-data"}})},postStudentProjektarbeitZwischenabgabe(t){return this.$fhcApi.post("/api/frontend/v1/Lehre/postStudentProjektarbeitZwischenabgabe",t,{Headers:{"Content-Type":"multipart/form-data"}})},getStudentProjektarbeitAbgabeFile(t,e){const n=`/Cis/Abgabetool/getStudentProjektarbeitAbgabeFile?paabgabe_id=${t}&student_uid=${e}`;window.location=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+n},getMitarbeiterProjektarbeiten(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/getMitarbeiterProjektarbeiten?showall=${e}`,{})},postProjektarbeitAbgabe(t){const e={paabgabe_id:t.paabgabe_id,paabgabetyp_kurzbz:t.bezeichnung.paabgabetyp_kurzbz,datum:t.datum,fixtermin:t.fixtermin,insertvon:t.insertvon,kurzbz:t.kurzbz,projektarbeit_id:t.projektarbeit_id};return this.$fhcApi.post("/api/frontend/v1/Lehre/postProjektarbeitAbgabe",e,null)},deleteProjektarbeitAbgabe(t){const e={paabgabe_id:t};return this.$fhcApi.post("/api/frontend/v1/Lehre/deleteProjektarbeitAbgabe",e,null)},postSerientermin(t,e,n,i,a){const s={datum:t,paabgabetyp_kurzbz:e,bezeichnung:n,kurzbz:i,projektarbeit_ids:a};return this.$fhcApi.post("/api/frontend/v1/Lehre/postSerientermin",s,null)},fetchDeadlines(t){const e={person_id:t};return this.$fhcApi.post("/api/frontend/v1/Lehre/fetchDeadlines",e,null)}},M={getLvMenu(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/LvMenu/getLvMenu/${t}/${e}`,{})}},R={person:{getMessages(t,e,n){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessages/"+n.id+"/"+n.type+"/"+n.size+"/"+n.page)},getVorlagen(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getVorlagen/")},getMsgVarsLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/")},getMessageVarsPerson(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessageVarsPerson/"+t.id+"/"+t.type_id)},getMsgVarsPrestudent(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsPrestudent/"+t.id+"/"+t.type_id)},getPersonId(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getPersonId/"+t.id+"/"+t.type_id)},getUid(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getUid/"+t.id+"/"+t.type_id)},getDataVorlage(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getDataVorlage/"+t)},getNameOfDefaultRecipient(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getNameOfDefaultRecipient/"+t.id+"/"+t.type_id)},getPreviewText(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/getPreviewText/"+t.id+"/"+t.type_id,e)},getReplyData(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getReplyData/"+t)},sendMessageFromModalContext(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/messages/messages/sendMessage/"+e,n)},sendMessage(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/sendMessage/"+t,e)},deleteMessage(t){return this.$fhcApi.post("api/frontend/v1/messages/messages/deleteMessage/"+t)}}},N={getVorlagen(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagen/")},getVorlagenByLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/")}},B={getStudiensemester:function(){return this.$fhcApi.get("/components/Cis/Mylv/Studiensemester",{})},getAllStudienSemester:function(t=void 0,e=void 0,n=void 0,i=void 0){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienAllSemester",{studiensemester:t,studiengang:e,semester:n,studienplan:i})},getStudiengaengeForStudienSemester:function(t){return this.$fhcApi.get(`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${t}`,{})},getStudienplaeneBySemester:function(t,e){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienplaeneBySemester",{studiengang:t,studiensemester:e})},getLvPlanForStudiensemester:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${t}/${e}`,{})},getLvEvaluierungInfo:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/Studium/getLvEvaluierungInfo/${t}/${e}`,{})}},U={search:k,phrasen:A,navigation:x,dashboard:{async getViewData(){return this.$fhcApi.get("/api/frontend/v1/Cis4FhcApi/getViewData",null,null)}},filter:S,studstatus:$,profil:T,profilUpdate:E,lvPlan:D,bookmark:{getBookmarks:function(){return this.$fhcApi.get("/api/frontend/v1/Bookmark/getBookmarks",{})},delete:function(t){return this.$fhcApi.get(`/api/frontend/v1/Bookmark/delete/${t}`,{})},update:function({bookmark_id:t,url:e,title:n,tag:i=null}){return this.$fhcApi.post(`/api/frontend/v1/Bookmark/update/${t}`,{url:e,title:n})},insert:function({url:t,title:e,tag:n}){return this.$fhcApi.post("/api/frontend/v1/Bookmark/insert",{url:t,title:e,tag:n})}},stv:C,notiz:O,betriebsmittel:P,checkperson:F,ampeln:{open:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/open",{})},all:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/all",{})},confirm:function(t){return this.$fhcApi.get(`/api/frontend/v1/Ampeln/confirm/${t}`,{})}},ort:z,cms:I,lehre:L,addons:M,messages:R,vorlagen:N,addons:M,studiengang:{studiengangInformation:function(){return this.$fhcApi.get("/api/frontend/v1/Studgang/getStudiengangInfo",{})},getStudiengangByKz:function(t){return this.$fhcApi.get("/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz",{studiengang_kz:t})}},menu:{getMenu:function(){return this.$fhcApi.get("/api/frontend/v1/CisMenu/getMenu",{})}},authinfo:{getAuthUID(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthUID",{})},getAuthInfo(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthInfo",{})}},studium:B,language:{getAll(){return this.$fhcApi.get("/api/frontend/v1/language/get")}}},j={install:(t,e)=>{if(t.config.globalProperties.$fhcApi)return void(e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory.addEndpoints(e.factory)));function n(t,e,n,i){if("string"==typeof t&&void 0===i)[e,n,i]=[t,e,n],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===n&&void 0===i&&(i=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},i?i.form=t:i={form:t}}return[e,n,i]}function i(t){const e=t.data;return delete t.data,e.meta?e.meta.response=t:e.meta={response:t},e}FHC_JS_DATA_STORAGE_OBJECT.app_root,FHC_JS_DATA_STORAGE_OBJECT.ci_router;const a=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});a.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,n])=>{if(n instanceof FileList)for(const i of n)t.FormData.append(e+(n.length>1?"[]":""),i);else Array.isArray(n)?n.every(t=>!(t instanceof File))?t.jsondata[e]=n:n.forEach(i=>t.FormData.append(e+(n.length>1?"[]":""),i)):t.jsondata[e]=n;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),a.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[n.type])(n,e.config))),i(e)),e=>"ERR_CANCELED"==e.code?Promise.reject({handled:!0,...e}):"off"==e.config?.errorHandling||!1===e.config?.errorHandling||"success"==e.config?.errorHandling?Promise.reject(e):e.response?404==e.response.status?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL,!0),Promise.reject({handled:!0,...e})):(e.response.data.errors=e.response.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[n.type])(n,e.config)),e.response.data.errors.length?Promise.reject(e):Promise.reject({handled:!0,...e})):e.request?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL),Promise.reject({handled:!0,...e})):(t.config.globalProperties.$fhcAlert.alertError(e.message),Promise.reject({handled:!0,...e}))),t.config.globalProperties.$fhcApi={getUri:t=>(console.warn("$fhcApi.getUri is DEPRECATED! Use $api.getUri instead."),a.getUri({url:t})),get:(t,e,i,s)=>(console.warn("$fhcApi.get is DEPRECATED! Use $api.get instead."),[e,i,s]=n(t,e,i,s),i&&(s?s.params=i:s={params:i}),a.get(e,s)),post:(t,e,i,s)=>(console.warn("$fhcApi.post is DEPRECATED! Use $api.post instead."),[e,i,s]=n(t,e,i,s),a.post(e,i,s)),_defaultErrorHandlers:{validation(e,n){const i=t.config.globalProperties.$fhcAlert;return n?.form?(n.form.clearValidation(),n.form.setFeedback(!1,e.messages),!1):Array.isArray(e.messages)?(e.messages.forEach(i.alertError),!1):"object"!=typeof e.messages||(n?.errorHeader?Object.values(e.messages).forEach(e=>i.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e,!0)):Object.entries(e.messages).forEach(([t,e])=>i.alertDefault("error",t,e,!0)),!1)},general(e,n){const i=t.config.globalProperties.$fhcAlert;n?.form?n.form.setFeedback(!1,e.message):n?.errorHeader?i.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e.message,!0):i.alertError(e.message)},php(e){const n=t.config.globalProperties.$fhcAlert;var i="";switch(i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":n.alertDefault("warn","PHP "+e.severity,i,!0);break;case"Notice":case"User Notice":case"Runtime Notice":n.alertDefault("info","PHP "+e.severity,i,!0);break;default:i="Type: PHP "+e.severity+"\n\n"+i,n.alertSystemError(i)}},exception(e){const n=t.config.globalProperties.$fhcAlert;var i="";i+="Type: "+e.class+"\n\n",i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),n.alertSystemError(i)},db(e){const n=t.config.globalProperties.$fhcAlert;var i="";void 0!==e.heading&&(i+=e.heading+"\n\n"),void 0!==e.code&&(i+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(i+="SQL: "+e.sql+"\n\n"),void 0!==e.message?i+="Message: "+e.message+"\n\n":void 0!==e.messages&&(i+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(i+="Filename: "+e.filename+"\n"),void 0!==e.line&&(i+="Line Number: "+e.line+"\n"),n.alertSystemError(i)},auth(e,n){const i=t.config.globalProperties.$fhcAlert;var a="";a+="Controller name: "+e.controller+"\n",a+="Method name: "+e.method+"\n",a+="Required permissions: "+e.required_permissions,n?.errorHeader?i.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e.message,!0):i.alertDefault("error",e.message,a)}}};class s{constructor(e,n){void 0===n?(this.$fhcApi={getUri:e=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.getUri(e)),get:(e,n,i,a)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.get(e,n,i,a)),post:(e,n,i,a)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.post(e,n,i,a))},Object.defineProperty(this.$fhcApi,"factory",{get:()=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory)}),t.config.globalProperties.$fhcApi.factory=this):Object.defineProperty(this,"$fhcApi",{get(){return(n||this).$fhcApi}}),this.addEndpoints(e,!0)}addEndpoints(t,e){Object.keys(t).forEach(e=>{Object.defineProperty(this,e,{get(){return"function"==typeof t[e]?t[e].bind(this):new s(t[e],this.$fhcApi.factory)}})}),e||console.warn("$fhcApi.factory.addEndpoints() is DEPRECATED!")}}const r=new s(U);e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),r.addEndpoints(e.factory)),t.config.globalProperties.$fhcApi.factory=r,t.provide("$fhcApi",t.config.globalProperties.$fhcApi)}};const H="error",V="retval",J={get:function(t,e,n=null){return J._axiosCall(t,e,"get",n)},post:function(t,e,n=null){return J._axiosCall(t,e,"post",n)},isSuccess:function(t){return!("object"!=typeof t||!t.hasOwnProperty(H)||!t.hasOwnProperty(V)||0!=t.error)},isError:function(t){return!J.isSuccess(t)},hasData:function(t){return!(!J.isSuccess(t)||!("object"==typeof t[V]&&Object.keys(t[V]).length>0||"array"==typeof t[V]&&t[V].length>0||"string"==typeof t[V]&&""!=t[V].trim()||"number"==typeof t[V]))},getData:function(t){return J.hasData(t)?t[V]:null},getError:function(t){return"object"==typeof t&&Object.keys(t).length>0&&t.hasOwnProperty(V)?t[V]:"Generic error"},getErrorCode:function(t){return"object"==typeof t&&t.hasOwnProperty(H)?t[H]:1},_generateRouterURI:function(t){var e=null;return"undefined"!=typeof FHC_JS_DATA_STORAGE_OBJECT&&(e=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"+t),e},_printDebug:function(t,e,n){},_axiosCall:function(t,e,n,i){let a={method:n,url:J._generateRouterURI(t),timeout:5e3};if("get"==n?a.params=e:a.data=e,"object"==typeof i)for(var s in i)a[s]=i[s];return axios(a)}},G=document.createElement("div"),q=Vue.createApp({name:"FhcAlertApp",components:{PvToast:e,PvConfirm:n},methods:{mailToUrl:t=>"mailto:"+FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto+"?subject=Meldung%20Systemfehler&body="+("\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method+"%0D%0A\n\t\t\t\tFehler Meldung: "+t.message.detail+"%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!"),openMessagecard(t){bootstrap.Collapse.getOrCreateInstance(t.target.getAttribute("href")).toggle()}},unmounted(){G.parentElement.removeChild(G)},computed:{showmaillink:function(){return""!==FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto}},template:'\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t'});q.use(t),q.use(i);const W=q.mount(G);document.body.appendChild(G);var K={install:(t,e)=>{t.config.globalProperties.$p||t.use(it);const n={alertSuccess(t){if(Array.isArray(t))return t.forEach(this.alertSuccess);W.$refs.toast.add({severity:"success",summary:"Info",detail:t,life:1e3})},alertInfo(t){if(Array.isArray(t))return t.forEach(this.alertInfo);W.$refs.toast.add({severity:"info",summary:"Info",detail:t,life:3e3})},alertWarning(t){if(Array.isArray(t))return t.forEach(this.alertWarning);W.$refs.toast.add({severity:"warn",summary:"Achtung",detail:t})},alertError(t){if(Array.isArray(t))return t.forEach(this.alertError);W.$refs.toast.add({severity:"error",summary:"Achtung",detail:t})},alertSystemError(e){if(Array.isArray(e))return e.forEach(this.alertSystemError);W.$refs.alert.add({severity:"error",summary:Vue.computed(()=>t.config.globalProperties.$p.t("alert/systemerror")),detail:e})},confirmDelete:()=>new Promise((e,n)=>{W.$confirm.require({group:"fhcAlertConfirm",header:Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:Vue.computed(()=>t.config.globalProperties.$p.t("alert/confirm_delete")),acceptLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/loeschen")),acceptClass:"p-button-danger",rejectLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:"p-button-secondary",accept(){e(!0)},reject(){e(!1)}})}),confirm:e=>new Promise((n,i)=>{W.$confirm.require({group:e?.group??"fhcAlertConfirm",header:e?.header??Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:e?.message??"",acceptLabel:e?.acceptLabel??"Ok",acceptClass:e?.acceptClass??"btn btn-primary",rejectLabel:e?.rejectLabel??Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:e?.rejectClass??"btn btn-outline-secondary",accept(){n(!0)},reject(){n(!1)}})}),alertDefault(t,e,n,i=!1,a=!1){let s={severity:t,summary:e,detail:n,html:a};i||(s.life=3e3),W.$refs.toast.add(s)},alertMultiple(t,e="info",n="Info",i=!1,a=!1){return!!t.every(t=>"string"==typeof t)&&(t.forEach(t=>this.alertDefault(e,n,t,i,a)),!0)},handleSystemError(t){if(!t.hasOwnProperty("name")||t.name.toLowerCase()!=="AbortError".toLowerCase()){if("string"==typeof t)return n.alertSystemError(t);if(Array.isArray(t)&&t.every(t=>"string"==typeof t))return t.every(n.alertSystemError);if(!t.hasOwnProperty("handled")||!t.handled){if("object"==typeof t&&null!==t){let e="";return t.hasOwnProperty("response")&&t.response?.data?.retval?e+="Error Message: "+(t.response.data.retval.message||t.response.data.retval)+"\r\n":t.hasOwnProperty("message")&&(e+="Error Message: "+t.message.toUpperCase()+"\r\n"),t.hasOwnProperty("config")&&t.config.hasOwnProperty("url")&&(e+="Error ConfigURL: "+t.config.url+"\r\n"),t.hasOwnProperty("stack")&&(e+="Error Stack: "+t.stack+"\r\n"),""==e&&(e="Error Message: "+JSON.stringify(t)+"\r\n"),e+="Error Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,n.alertSystemError(e)}n.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method)}}},handleSystemMessage(t){if("string"==typeof t)return n.alertWarning(t);if(Array.isArray(t)){if(t.every(t=>"string"==typeof t))return t.every(n.alertWarning);if(t.every(t=>"object"==typeof t)&&null!==msg)return t.every(t=>{t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?n.alertWarning(JSON.stringify(t.data.retval)):n.alertSystemError(JSON.stringify(t))})}"object"!=typeof t||null===t?n.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method):t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?n.alertWarning(JSON.stringify(t.data.retval)):n.alertSystemError(JSON.stringify(t))},resetFormValidation(t){const e=new Event("fhc-form-reset");t.querySelectorAll(["[data-fhc-form-validate],[data-fhc-form-error]"]).forEach(t=>t.dispatchEvent(e))},handleFormValidation(t,e){if(void 0===e){if(t&&t.nodeType===Node.ELEMENT_NODE)return e=>n.handleFormValidation(e,t)}else if(400==t?.response?.status){let i=J.getError(t.response.data);"object"!=typeof i&&(i=t.response.data),n.resetFormValidation(e);const a=Object.entries(i).filter(([t,n])=>{const i=e.querySelector('[data-fhc-form-validate="'+t+'"]');return!i||(i.dispatchEvent(new CustomEvent("fhc-form-invalidate",{detail:n})),!1)}).map(t=>t[1]),s=e.querySelector("[data-fhc-form-error]");return void(s&&a.length?s.dispatchEvent(new CustomEvent("fhc-form-error",{detail:a})):a.forEach(n.alertError))}if(400==t?.response?.status){let e=J.getError(t.response.data);n.alertError("object"==typeof e?Object.values(e):e)}else n.handleSystemError(t)}};t.config.globalProperties.$fhcAlert=n,t.provide("$fhcAlert",t.config.globalProperties.$fhcAlert)}},Z={install:(t,e)=>{if(t.config.globalProperties.$api)return;function n(t,e){Array.isArray(t)?t.forEach(e):Object.entries(t).forEach(([t,n])=>n.forEach(n=>e(n,t)))}t.config.globalProperties.$fhcAlert||t.use(K);let i={success:!0,fail:!0,combine:{form:["validation","general"],toast:["validation","general","not_found","site_failed"]},handler:{form(t,e){t.clearValidation(),e.forEach(e=>t.setFeedback(!1,e.messages||e.message))},async toast(e){const n=t.config.globalProperties.$p;if(!n)return Promise.reject("Phrasen plugin not loaded!");async function i(t){t=t.reduce((t,e)=>{switch(e.type){case"not_found":case"site_failed":e.message?t[e.message]=[e.url]:t._default=[e.url];break;case"general":t._default||(t._default=[]),t._default.push(e.message);break;case"validation":Object.entries(e.messages).forEach(([e,n])=>{t[e]||(t[e]=[]),Array.isArray(n)?t[e].push(...n):t[e].push(n)})}return t},{});let e=0;const i=await Promise.all(Object.entries(t).sort((t,e)=>["_default"].indexOf(e[0])-["_default"].indexOf(t[0])).map(async([t,i])=>{if("_default"==t){await n.loadCategory("dashboard");t='
    '+n.t("dashboard/general")+"
    "}else t="
    "+t+"
    ";return e+=i.length,t+"
    "+i.join("
    ")+"
    "}));return{counter:e,msgs:i}}let a,s;Array.isArray(e)?({counter:a,msgs:s}=await i(e)):({counter:a,msgs:s}=await Object.entries(e).reduce(async(t,[e,n])=>{const a=await t,{counter:s,msgs:r}=await i(n);return a.counter+=s,a.msgs.push("
    "+e+"
    "+r.join("")+"
    "),a},Promise.resolve({counter:0,msgs:[]}))),await n.loadCategory("ui");const r=n.t("ui/n_errors",{n:a});t.config.globalProperties.$fhcAlert.alertDefault("error",r,"
    "+s.join("")+"
    ",!0,!0)},php(e){n(e,(e,n)=>{var i="";switch(i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":n?n+=": PHP "+e.severity:n="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("warn",n,i,!0);break;case"Notice":case"User Notice":case"Runtime Notice":n?n+=": PHP "+e.severity:n="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("info",n,i,!0);break;default:i="Type: PHP "+e.severity+"\n\n"+i,n&&(i=n+"\n\n"+i),t.config.globalProperties.$fhcAlert.alertSystemError(i)}})},exception(e){n(e,(e,n)=>{var i="";n&&(i+=n+"\n\n"),i+="Type: "+e.class+"\n\n",i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),t.config.globalProperties.$fhcAlert.alertSystemError(i)})},db(e){n(e,(e,n)=>{var i="";n&&(i+=n+"\n\n"),void 0!==e.heading&&(i+=e.heading+"\n\n"),void 0!==e.code&&(i+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(i+="SQL: "+e.sql+"\n\n"),void 0!==e.message?i+="Message: "+e.message+"\n\n":void 0!==e.messages&&(i+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(i+="Filename: "+e.filename+"\n"),void 0!==e.line&&(i+="Line Number: "+e.line+"\n"),t.config.globalProperties.$fhcAlert.alertSystemError(i)})},auth(e){n(e,(e,n)=>{n?n+=": "+e.message:n=e.message;var i="";i+="Controller name: "+e.controller+"\n",i+="Method name: "+e.method+"\n",i+="Required permissions: "+e.required_permissions,t.config.globalProperties.$fhcAlert.alertDefault("error",n,i,!0)})}}};function a(t,e,n,i){if("string"==typeof t&&void 0===i)[e,n,i]=[t,e,n],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===n&&void 0===i&&(i=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},i?i.form=t:i={form:t}}return[e,n,i]}function s(t){if("string"==typeof t.data||t.data instanceof String)return s({data:t});const e=t.data;return delete t.data,e?(e.meta?e.meta.response=t:e.meta={response:t},e):{meta:{response:t},data:null}}function r(t){if(!1===t||"off"===t)return{...i,success:!1,fail:!1};if(!t||!0===t)return{...i};if("success"===t)return{...i,fail:!1};if("fail"===t)return{...i,success:!1};const{success:e,fail:n,handler:a,combine:s}=t;return t={...i},Object.entries({fail:n,success:e}).forEach(([e,n])=>{void 0!==n&&(t[e]=n)}),Object.entries({handler:a,combine:s}).forEach(([e,n])=>{void 0!==n&&(t[e]={...t[e],...n})}),t}function o(t){const e=r(t?.errorHandling);if(t?.form){const n=e.handler.form;e.handler={...e.handler,form:e=>n(t.form,e)}}else e.combine={...e.combine,form:[]};return e}function l(t){return t.response?404==t.response.status?[{type:"not_found",message:t.message,url:t.request.responseURL}]:null==t.response.data.errors?[]:t.response.data.errors:t.request?[{type:"site_failed",message:t.message,url:t.request.responseURL}]:[{type:"script",message:t.message}]}function d(t,e){const n={},i=[];if(null==e)return{};for(;e.length;)i.push(e.pop());for(var a of i){let i=a.type,r=null;for(var s in t.combine){let e=t.combine[s].includes(i),n=t.handler[s];if(e&&n&&(r=s,"form"==r))break}r&&(i=r);t.handler[i]?(n[i]||(n[i]=[]),Array.isArray(a)?n[i].push(...a):n[i].push(a)):e.push(a)}return n}void 0!==e?.errorHandling&&(i=r(e.errorHandling));const c=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});c.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,n])=>{if(n instanceof FileList)for(const i of n)t.FormData.append(e+(n.length>1?"[]":""),i);else Array.isArray(n)?n.every(t=>!(t instanceof File))?t.jsondata[e]=n:n.forEach(i=>t.FormData.append(e+(n.length>1?"[]":""),i)):t.jsondata[e]=n;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),c.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$api._defaultErrorHandlers[n.type])(n,e.config))),s(e)),t=>{if("ERR_CANCELED"==t.code)return Promise.reject({handled:!0,...t});const e=o(t.config);if(!e.fail)return Promise.reject(t);const n=l(t),i=d(e,n);for(var a in i)e.handler[a](i[a]);return n.length?Promise.reject(t):Promise.reject({handled:!0,...t})}),t.config.globalProperties.$api={getUri:t=>c.getUri({url:t}),get:(t,e,n,i)=>([e,n,i]=a(t,e,n,i),n&&(i?i.params=n:i={params:n}),c.get(e,i)),post:(t,e,n,i)=>([e,n,i]=a(t,e,n,i),c.post(e,n,i)),call(e,n,i){if(Array.isArray(e)){const s=t.config.globalProperties.$api;return Promise.allSettled(e.map((t,e)=>(Array.isArray(t)||(t=["#"+e,t]),s.call(t[1],{errorHeader:t[0],errorHandling:!1})))).then(t=>{const[,,e]=a(i,void 0,void 0,n||{}),s=o(e);if(!s.success&&!s.fail)return t;const r={};for(var c of t){const[t,e]="fulfilled"===c.status?[s.success,c.value]:[s.fail,c.reason];if(!t)return;const n=d(s,l(e));for(var u in n)r[u]?r[u][e.config.errorHeader]=n[u]:r[u]={[e.config.errorHeader]:n[u]}}for(var p in r)s.handler[p](r[p]);return t})}let{method:s,url:r,params:c,config:u}=e;return void 0!==n&&(u=n),s||(s="get"),s.toLowerCase&&(s=s.toLowerCase()),"get"==s?this.get(i,r,c,u):"post"==s?this.post(i,r,c,u):void console.error("FhcApi: method not allowed:",s)},getErrorHandler:t=>o(t)},t.provide("$api",t.config.globalProperties.$api)}},Y={loadCategory:t=>({method:"get",url:"/api/frontend/v1/phrasen/loadModule/"+t}),setLanguage:(t,e)=>({method:"post",url:"/api/frontend/v1/phrasen/setLanguage",params:{categories:t,language:e}}),getLanguage:()=>({method:"get",url:"/api/frontend/v1/phrasen/getLanguage"}),getActiveDbLanguages:()=>({method:"get",url:"/api/frontend/v1/phrasen/getAllLanguages"})};const X=Vue.reactive({}),Q={};let tt=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language),et=Vue.computed(()=>tt.value?FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(t=>t.sprache==tt.value).LC_Time:null);const nt={user_language:tt,user_locale:et,setLanguage(t){const e=Object.keys(X);return this.config.globalProperties.$api.call(Y.setLanguage(e,t)).then(e=>(e.data.forEach(t=>{X[t.category][t.phrase]=t.text}),tt.value=t,e))},loadCategory(t){return Array.isArray(t)?Promise.all(t.map(this.config.globalProperties.$p.loadCategory)):(Q[t]||(Q[t]=this.config.globalProperties.$api.call(Y.loadCategory(t)).then(e=>e?.data?function(t,e){return t.filter(t=>t.category==e).reduce((t,e)=>(t[e.phrase]||(t[e.phrase]=e.text),t),{})}(e.data,t):{}).then(e=>{X[t]=e})),Q[t])},t_ref(t,e,n){return console.warn("deprecated"),Vue.computed(()=>this.t(t,e,n))},t(t,e,n){if(void 0===n&&(Array.isArray(t)&&2==t.length||t.split&&2==t.split("/").length)&&(n=e,[t,e]=t.split?t.split("/"):t),void 0===e)return console.error("invalid input",t,e,n),"";let i=Vue.computed(()=>X[t]?function(t,e,n){let i=X[t][e];return i?(n&&(i=i.replace(/\{([^}]*)\}/g,(t,e)=>void 0===n[e]?t:n[e])),i):"<< PHRASE "+e+">>"}(t,e,n):"");return X[t]||this.loadCategory(t),i.value}};var it={install(t,e){t.config.globalProperties.$fhcApi||t.use(j),t.config.globalProperties.$api||t.use(Z),t.config.globalProperties.$p={t:nt.t,loadCategory:e=>nt.loadCategory.call(t,e),setLanguage:e=>nt.setLanguage.call(t,e),user_language:tt,user_locale:et,t_ref:nt.t_ref},t.provide("$p",t.config.globalProperties.$p)}},at=Object.freeze({__proto__:null,default:it,user_locale:et});let st=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.theme.name);const rt=FHC_JS_DATA_STORAGE_OBJECT.theme.modes,ot=t=>{if(!t)return;for(const t of rt)document.documentElement.classList.remove(t);st.value=t,document.documentElement.classList.add(t),document.body.setAttribute("data-bs-theme",t);let e=document.querySelector('link[href*="primevue/resources/themes"]');"dark"==t?e.attributes.href.value=e.attributes.href.value.replace("bootstrap4-light-blue","bootstrap4-dark-blue"):("light"==t||e.attributes.href.value.includes("bootstrap4-dark-blue"))&&(e.attributes.href.value=e.attributes.href.value.replace("bootstrap4-dark-blue","bootstrap4-light-blue")),localStorage.setItem("theme",t)};var lt={install:(t,e)=>{document.documentElement.classList.add(st.value),(()=>{let t=localStorage.getItem("theme");t&&rt.includes(t)||(t=rt[0],localStorage.setItem("theme",t)),ot(t)})(),t.config.globalProperties.$theme={theme_name:st,theme_modes:rt,switchTheme:t=>{ot(t)}}}};const dt=t=>{const e=t.toString(16);return 1===e.length?"0"+e:e};function ct(t){return(299*parseInt(t.substring(1,3),16)+587*parseInt(t.substring(3,5),16)+114*parseInt(t.substring(5,7),16))/1e3>=128?"black":"white"}var ut={mounted(t,e){const n=window.getComputedStyle(t).backgroundColor;let i=new RegExp(/^rgba?\s*\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*,?\s*([0-9]+.?[0-9]?)?\s*\)/),a=n.match(i);if(a){a.length<3&&console.error("Invalid RGB color format");let e=parseInt(a[1],10),n=parseInt(a[2],10),i=parseInt(a[3],10),s=`#${dt(e)}${dt(n)}${dt(i)}`;t.style.color=ct(s)}else t.style.color=ct(n)}};const pt={lehreinheit:{id:"lehreinheit_id",dragIcon:"fa-solid fa-chalkboard-user",extras:["stundenblockung"]},vevent:{id:"uid",dragIcon:"fa-solid fa-calendar",extras:["dtstart","dtend","summary"]},person:{id:"person_id",dragIcon:"fa-solid fa-user"},student:{id:"student_uid",dragIcon:"fa-solid fa-user-graduate"},prestudent:{id:"prestudent_id",dragIcon:"fa-solid fa-user-graduate text-muted"}},ht=Object.keys(pt);function mt(t){if(!t)return!1;if(Array.isArray(t))return t.every(mt);if(!t.type)return!1;if("-collection"==t.type.substr(-11)){if(!Object.prototype.hasOwnProperty.call(t,"values"))return!1;if(!ht.includes(t.type.substr(0,t.type.length-11)))return!1}else{if(!Object.prototype.hasOwnProperty.call(t,"id"))return!1;if(!ht.includes(t.type))return!1;if(pt[t.type].extras&&!pt[t.type].extras.every(e=>Object.prototype.hasOwnProperty.call(t,e)))return!1}return!0}function ft(t,e,n){let i=null;try{if(i=gt(t,n),!i)return null;if(!n&&Array.isArray(i)){if(i=i.filter(mt),!i.length)return null}else if(!mt(i))return null;if(e&&e.length)if(Array.isArray(i)){if(n&&!i.every(t=>e.includes(t.type)))return null;if(!n&&(i=i.filter(t=>e.includes(t.type)),!i.length))return null}else if(!e.includes(i.type))return null}catch(t){return null}return Array.isArray(i)&&1==i.length?i.find(Boolean):i}function gt(t,e){const n=[];for(const i of t.dataTransfer.types){if("application/fhc-"!=i.substr(0,16)){if(e)return null;continue}let a=i.substr(16),s=!1;if("-collection"==a.substr(-11)&&(a=a.substr(0,a.length-11),s=!0),!ht.includes(a)){if(e)return null;continue}let r=JSON.parse(t.dataTransfer.getData(i));s?n.push(...r.values):n.push(r)}return n.length?1==n.length?n[0]:n:null}var vt={...Object.keys(pt).reduce((t,e)=>(t["TYPE_"+e.toUpperCase()]=e,t),{}),isValidDragObject:mt,getValidTransferData:ft,isValidTransferData:function(t,e,n){return!!ft(t,e,n)},getTransferData:gt,convertToValidDragObject:function t(e,n){if(Array.isArray(e)){const i=e.map(t).filter(Boolean);if(!i.length)return;if(n&&i.length!=e.length)return;const a=i.reduce((t,e)=>(t[e.type]||(t[e.type]=[]),t[e.type].push(e),t),{});return Object.entries(a).map(([t,e])=>e.length>1?{type:t+"-collection",values:e}:e[0])}if(Object.prototype.hasOwnProperty.call(e,"type")&&mt(e))return e;const i=Object.entries(pt).find(([,t])=>!!Object.prototype.hasOwnProperty.call(e,t.id)&&!(t.extras&&!t.extras.every(t=>Object.prototype.hasOwnProperty.call(e,t))));if(!i)return;const[a,s]=i,r={};return r.type=a,r.id=e[s.id],s.extras&&s.extras.forEach(t=>r[t]=e[t]),r},setTransferData:function t(e,n,i=!1){if(i){const t=(Array.isArray(n)?n:[n]).map(t=>{const e=document.createElement("i"),n=document.createElement("span"),i=document.createElement("span");i.className="btn btn-outline-dark bg-light",n.className="small",pt[t.type]?(e.className=pt[t.type].dragIcon||"fa-solid fa-question",n.textContent=t.id):"-collection"==t.type.substr(-11)&&pt[t.type.substr(0,t.type.length-11)]?(i.style.boxShadow="3px 3px var(--bs-btn-border-color)",e.className=pt[t.type.substr(0,t.type.length-11)].dragIcon||"fa-solid fa-question",n.textContent="x"+t.values.length):(e.className="fa-solid fa-question",n.textContent=t.id||""),i.append(e);const a=document.createElement("div");return a.className="d-flex flex-column align-items-center gap-2 small",a.append(i,n),a}),i=document.createElement("div");i.className="d-flex flex-row gap-2 small",i.append(...t),document.body.append(i),e.dataTransfer.setDragImage(i,-25,0),requestAnimationFrame(()=>{document.body.removeChild(i)})}if(Array.isArray(n))return n.forEach(n=>t(e,n));e.dataTransfer.setData("application/fhc-"+n.type,JSON.stringify(n))},eventHasTypes:function(t,e,n){return e&&e.length||(e=ht),e=e.map(t=>"application/fhc-"+t),!![...t.dataTransfer.types].length&&(n?[...t.dataTransfer.types].every(t=>e.includes(t)):e.some(e=>[...t.dataTransfer.types].includes(e)))},bindDragEnterLeave:function(t,e,n){let i=!1,a=!0;function s(n){i=!1,a=!0,window.addEventListener("dragenter",o,!0),window.addEventListener("dragleave",l,!0),window.addEventListener("drop",d,!0),e(n),t.removeEventListener("dragenter",s)}function r(e,i){window.removeEventListener("dragenter",o,!0),window.removeEventListener("dragleave",l,!0),window.removeEventListener("drop",d,!0),n(e,i),t.addEventListener("dragenter",s)}function o(e){a=!1,t==e.target||t.contains(e.target)?i=!0:r(e)}function l(e){if(t==e.target||t.contains(e.target)){if(i)return void(i=!1)}else if(a)return void(a=!1);r(e)}function d(t){r(t,!0)}return t.addEventListener("dragenter",s),()=>{t.removeEventListener("dragenter",s)}}},bt={mounted(t,e,n){if("draggable"==e.arg)t.addEventListener("update-my-value",t=>{t.preventDefault(),e.value=t.detail.item}),t.addEventListener("dragstart",n=>{t.dispatchEvent(new CustomEvent("calendar-dragstart",{cancelable:!0,bubbles:!0,detail:{item:e.value,x:n.offsetX/t.offsetWidth,y:n.offsetY/t.offsetHeight,originalEvent:n}}))}),t.addEventListener("dragend",n=>{t.dispatchEvent(new CustomEvent("calendar-dragend",{cancelable:!0,bubbles:!0,detail:{item:e.value,originalEvent:n}}))});else if("dropcage"==e.arg){let e=null;t.addEventListener("dragover",n=>{if(!e)return e=t.getBoundingClientRect(),t.dispatchEvent(new CustomEvent("calendar-dragenter",{detail:{originalEvent:n}}))}),window.addEventListener("dragleave",n=>{if(!e)return;let i;return i=void 0===n.clientX?{x:n.pageX+document.documentElement.scrollLeft,y:n.pageY+document.documentElement.scrollTop}:{x:n.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,y:n.clientY+document.body.scrollTop+document.documentElement.scrollTop},i.x>e.left+e.width-1||i.xe.top+e.height-1||i.y{if(e)return e=null,t.dispatchEvent(new CustomEvent("calendar-dragleave",{detail:{originalEvent:n}}))})}else"dropzone"==e.arg&&t.addEventListener(e.modifiers.once?"dragenter":"dragover",n=>{const i=e.value instanceof Function?e.value(n):e.value,a=i.timestamp?i:{timestamp:i};t.dispatchEvent(new CustomEvent("calendar-dragchange",{cancelable:!0,bubbles:!0,detail:a}))})},updated(t,e,n,i){"draggable"==e.arg&&t.dispatchEvent(new CustomEvent("update-my-value",{cancelable:!0,detail:{item:e.value}}))}},yt={name:"CalendarDragAndDrop",directives:{CalDnd:bt},provide(){return{events:Vue.computed(()=>this.correctedEvents),backgrounds:Vue.computed(()=>this.backgrounds),dropAllowed:Vue.computed(()=>this.dragging&&this.dropAllowed)}},inject:{mode:"mode",dropableEvents:"dropableEvents"},props:{events:Array,backgrounds:Array},emits:["drop"],data:()=>({dragging:!1,allowed:!1,draggedInternalEvent:null,draggedExternalEvent:null,targetTimestamp:0,targetGridEnds:null,dropAllowed:!1,shadowPreview:!1}),computed:{correctedEvents(){if(this.dragging){if(this.draggedInternalEvent){const t=this.events.findIndex(t=>t.id==this.draggedInternalEvent.id);return this.previewEvent&&!this.shadowPreview?this.events.toSpliced(t,1,this.previewEvent):this.events.toSpliced(t,1)}if(this.previewEvent&&!this.shadowPreview)return[...this.events,this.previewEvent]}return this.events},correctedBackgrounds(){return this.dragging&&this.shadowPreview?[...this.backgrounds,{start:new Date(this.targetTimestamp),class:"shadow-preview"}]:this.backgrounds},previewEvent(){if(!this.dragging||!this.dropAllowed)return null;if(!this.targetTimestamp)return null;const t=this.draggedInternalEvent||this.draggedExternalEvent;if(!t)return null;let e=t.end-t.start;return this.targetGridEnds&&(e=this.targetGridEnds.find(t=>t>=this.targetTimestamp+e)-this.targetTimestamp),{orig:t.orig,start:this.targetTimestamp,end:this.targetTimestamp+e}}},methods:{onDragstart(t){const e=vt.convertToTransferData(t.detail.item.orig);vt.isValidDragObject(e)&&(vt.setTransferData(t.detail.originalEvent,e),this.draggedInternalEvent=t.detail.item)},onDragend(){this.draggedInternalEvent=null,this.dragging=!1},onDragenter(t){if(this.dragging=!0,this.draggedInternalEvent)this.dropAllowed=this.dropableEvents(this.draggedInternalEvent,this.mode);else{const e=vt.getValidTransferData(t.detail.originalEvent);this.draggedExternalEvent=e?{id:e.id,type:e.type,start:e.isostart?luxon.DateTime.fromISO(e.isostart).setZone(this.timezone):luxon.DateTime.local().setZone(this.timezone),end:e.isoend?luxon.DateTime.fromISO(e.isoend).setZone(this.timezone):luxon.DateTime.local().setZone(this.timezone),orig:e}:null,this.dropAllowed=this.dropableEvents(e,this.mode)}},onDragleave(){this.dragging=!1},onDragchange(t){this.targetTimestamp=t.detail.timestamp,this.targetGridEnds=t.detail.ends||null},onDrop(t){this.dragging&&this.dropAllowed&&(this.$emit("drop",t,this.previewEvent.start,this.previewEvent.end),this.dropAllowed=!1,this.dragging=!1)}},template:'\n\t\n\t\t\n\t\n\t'},wt={name:"CalendarHeader",components:{DatePicker:{name:"CalendarHeaderDatepicker",components:{VueDatePicker:VueDatePicker},inject:["locale","timezone"],props:{date:{type:luxon.DateTime,required:!0},mode:{type:String,required:!0},listLength:{type:Number,default:7}},emits:["update:date"],computed:{convertedDate(){return this.date.setZone(this.timezone).setZone("local",{keepLocalTime:!0})},current(){switch(this.mode){case"month":return{month:this.convertedDate.month-1,year:this.convertedDate.year};case"list":return[this.convertedDate.startOf("day").ts,this.convertedDate.startOf("day").plus({days:this.listLength}).ts-1];case"week":return[this.convertedDate.startOf("week",{useLocaleWeeks:!0}).ts,this.convertedDate.endOf("week",{useLocaleWeeks:!0}).ts];case"day":return this.convertedDate;default:return null}},title(){switch(this.mode){case"month":return this.date.toLocaleString({month:"long",year:"numeric"});case"week":var t=this.date.localWeekYear,e=this.date.toFormat("nn");return this.$p.t("calendar/year_kw",{year:t,week:e});case"list":return this.date.toLocaleString(luxon.DateTime.DATE_FULL)+"-"+this.date.plus({days:this.listLength-1}).toLocaleString(luxon.DateTime.DATE_FULL);case"day":return this.date.toLocaleString(luxon.DateTime.DATE_FULL);default:return"View not Supported"}},weekStart(){return luxon.Info.getStartOfWeek(this.date)%7}},methods:{update(t){let e;switch(this.mode){case"month":t.month++,e=luxon.DateTime.fromObject(t).setZone(this.timezone,{keepLocalTime:!0}).setLocale(this.locale);break;case"list":case"week":e=luxon.DateTime.fromJSDate(t[0]).setZone(this.timezone,{keepLocalTime:!0}).setLocale(this.locale);break;case"day":e=luxon.DateTime.fromJSDate(t).setZone(this.timezone,{keepLocalTime:!0}).setLocale(this.locale);break;default:return}this.$emit("update:date",e)},weekNumbers(t){return luxon.DateTime.fromJSDate(t,{locale:this.locale}).localWeekNumber}},template:'\n\t title"\n\t\t:month-picker="mode == \'month\'"\n\t\t:week-picker="mode == \'week\'"\n\t\t:range="mode == \'list\' ? { autoRange: listLength - 1 } : false"\n\t\t:text-input="mode == \'day\'"\n\t\t:week-start="weekStart"\n\t\t:week-numbers="{ type: weekNumbers }"\n\t\t:clearable="false"\n\t\t:enable-time-picker="false"\n\t\t:config="{ keepActionRow: mode != \'month\' }"\n\t\t:action-row="{ showSelect: false, showCancel: false, showNow: mode != \'month\', showPreview: false }"\n\t\tauto-apply\n\t\tsix-weeks\n\t\tteleport\n\t\t:locale="locale"\n\t\t:now-button-label="$p.t(\'calendar/today\')"\n\t\t:week-num-name="$p.t(\'calendar/kw\')"\n\t/>\n\t'}},props:{date:{type:luxon.DateTime,required:!0},mode:{type:String,required:!0},modeOptions:{type:Object,default:{}},btnMonth:Boolean,btnWeek:Boolean,btnDay:Boolean,btnList:Boolean},emits:["next","prev","click:mode","update:date","update:mode"],data:()=>({open:!1}),methods:{clickMode(t,e){this.$emit("click:mode",t),t.defaultPrevented||this.$emit("update:mode",e)}},template:'\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t
    \n\t'},_t={name:"CalendarSlider",inject:{time:{from:"sliderTime",default:".3s"}},emits:["slid"],data:()=>({target:0,extrasAfter:0,extrasBefore:0,running:!1,promiseResolve:null}),computed:{itemsAfter(){return[...Array(this.extrasAfter)].map((t,e)=>1+e)},itemsBefore(){return[...Array(this.extrasBefore)].map((t,e)=>e-this.extrasBefore)},styleSlider(){const t={position:"absolute",top:0,left:0,width:"100%",height:"100%"};return this.running&&(t.left=100*-this.target+"%",t.transition="left "+this.time+" ease-in-out"),t},styleBefore(){return{position:"absolute",top:0,height:"100%",display:"flex",right:"100%",width:100*this.extrasBefore+"%"}},styleAfter(){return{position:"absolute",top:0,height:"100%",display:"flex",left:"100%",width:100*this.extrasAfter+"%"}}},methods:{prevPage(){return this.slidePages(-1)},nextPage(){return this.slidePages(1)},slidePages(t){return new Promise(e=>{this.promiseResolve=e,this.running=!0;const n=this.target+t;n>0?this.extrasAftern&&(this.extrasBefore=-n),this.target=n})},endSlide(){this.promiseResolve&&(this.promiseResolve(this.target),this.promiseResolve=null),this.$emit("slid",this.target),this.running=!1,this.target=0,this.extrasAfter=this.extrasBefore=0}},template:'\n\t\n\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\n\t\n\t'};const kt=[];function At(t,e,n){const i=kt.findIndex(e=>e.el==t);i>=0&&(t.removeEventListener("click",kt[i].listener),kt.splice(i,1));const a=t=>{t.preventDefault(),t.stopPropagation();const i=new CustomEvent("cal-click",{cancelable:!0,bubbles:!0,detail:{source:e,value:n}});t.target.dispatchEvent(i)};kt.push({el:t,listener:a}),t.addEventListener("click",a)}var xt={mounted(t,e,n){"container"==e.arg?t.addEventListener("cal-click",t=>{const n=new Event("click:"+t.detail.source,{cancelable:!0});if(e.instance.$emit("click:"+t.detail.source,n,t.detail.value),!n.defaultPrevented){const e=new CustomEvent("cal-click-default",{cancelable:!0,bubbles:!0,detail:t.detail});t.target.dispatchEvent(e)}}):At(t,e.arg,e.value)},updated(t,e,n,i){"container"!=e.arg&&At(t,e.arg,e.value)}},St={name:"CalendarBase",components:{BaseDraganddrop:yt,BaseHeader:wt,BaseSlider:_t,BsModal:s},directives:{CalClick:xt},provide(){return{locale:Vue.computed(()=>this.locale),timezone:Vue.computed(()=>this.timezone),timeGrid:Vue.computed(()=>this.timeGrid),draggableEvents:Vue.computed(()=>this.draggableEvents?Array.isArray(this.draggableEvents)?t=>this.draggableEvents.includes(t.type):this.draggableEvents instanceof Function?this.draggableEvents:()=>!0:()=>!1),dropableEvents:Vue.computed(()=>this.onDrop?Array.isArray(this.dropableEvents)?t=>this.dropableEvents.includes(t.type):this.dropableEvents instanceof Function?this.dropableEvents:()=>!0:()=>!1),hasDragoverFunc:Vue.computed(()=>this.onDragover),mode:Vue.computed(()=>this.mode)}},props:{locale:{type:String,default:"de"},timezone:{type:String,required:!0},date:{type:[Date,String,Number,luxon.DateTime],default:t=>luxon.DateTime.now().setZone(t.timezone).startOf("day")},modes:{type:Object,required:!0,default:{}},mode:String,modeOptions:Object,events:{type:Array,default:[]},backgrounds:{type:Array,default:[]},showBtns:Boolean,btnMonth:{type:Boolean,default:void 0},btnWeek:{type:Boolean,default:void 0},btnDay:{type:Boolean,default:void 0},btnList:{type:Boolean,default:void 0},timeGrid:Array,draggableEvents:[Boolean,Array,Function],dropableEvents:[Boolean,Array,Function],onDragover:Function,onDrop:Function},emits:["click:next","click:prev","click:mode","click:event","click:day","click:week","update:date","update:mode","update:range","drop"],data:()=>({internalView:null,internalDate:null,modalEvent:null}),computed:{convertedEvents(){return this.events.map(t=>({id:t.type+t[t.type+"_id"],type:t.type,start:luxon.DateTime.fromISO(t.isostart).setZone(this.timezone),end:luxon.DateTime.fromISO(t.isoend).setZone(this.timezone),orig:t}))},convertedBackgrounds(){return this.backgrounds.map(t=>{const e={...t};return e.start&&(Number.isInteger(e.start)?e.start=luxon.DateTime.fromMillis(e.start,{zone:this.timezone,locale:this.locale}):e.start instanceof Date?e.start=luxon.DateTime.fromJSDate(e.start,{zone:this.timezone,locale:this.locale}):("string"==typeof e.start||e.start instanceof String)&&(e.start=luxon.DateTime.fromISO(e.start,{zone:this.timezone,locale:this.locale}))),e.end&&(Number.isInteger(e.end)?e.end=luxon.DateTime.fromMillis(e.end,{zone:this.timezone,locale:this.locale}):e.end instanceof Date?e.end=luxon.DateTime.fromJSDate(e.end,{zone:this.timezone,locale:this.locale}):("string"==typeof e.end||e.end instanceof String)&&(e.end=luxon.DateTime.fromISO(e.end,{zone:this.timezone,locale:this.locale}))),e})},sDate(){return this.date instanceof luxon.DateTime?this.date:luxon.DateTime.fromJSDate(new Date(this.date)).setZone(this.timezone)},cDate:{get(){return(this.internalDate?this.internalDate:this.sDate).setLocale(this.locale)},set(t){this.internalDate=t,this.$emit("update:date",t,this.cMode)}},sMode(){let t=this.mode;return t&&(t=t.toLowerCase()),t&&this.modes[t]||(t=Object.keys(this.modes).find(Boolean)),t||""},cMode:{get(){return this.internalView?this.internalView:this.sMode},set(t){this.internalView=t,this.$emit("update:mode",t,this.cDate)}}},watch:{sDate(t,e){this.sDate.isValid&&!this.sDate.hasSame(this.internalDate,"day")&&(this.internalDate=this.sDate)},sMode(){this.sMode&&(this.internalView=this.sMode)}},methods:{clickPrev(){const t=new Event("click:prev",{cancelable:!0});this.$emit("click:prev",t),t.defaultPrevented||this.$refs.mode.prevPage()},clickNext(){const t=new Event("click:next",{cancelable:!0});this.$emit("click:next",t),t.defaultPrevented||this.$refs.mode.nextPage()},handleClickDefaults(t){switch(t.detail.source){case"day":"day"!=this.cMode&&this.modes.day&&(t.stopPropagation(),this.cDate=t.detail.value,this.cMode="day");break;case"week":"week"!=this.cMode&&this.modes.week&&(t.stopPropagation(),this.cDate=luxon.DateTime.fromObject({localWeekNumber:t.detail.value.number,localWeekYear:t.detail.value.year},{zone:this.cDate.zoneName,locale:this.cDate.locale}),this.cMode="week")}},onDropItem(t,e,n){this.$emit("drop",t,e,n)},showEventModal(t){this.modalEvent=t,this.$refs.modal.show()},hideEventModal(){this.modalEvent&&(this.modalEvent.closeFn=void 0),this.$refs.modal.hide(),this.modalEvent=null},onModalHidden(){this.modalEvent.closeFn&&this.modalEvent.closeFn()}},beforeUnmount(){this.hideEventModal()},template:'\n\t
    \n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    \n\t'},$t={getRoomInfo:(t,e,n)=>({method:"post",url:"/api/frontend/v1/LvPlan/getRoomplan",params:{ort_kurzbz:t,start_date:e,end_date:n}}),getLvPlan:(t,e,n)=>({method:"get",url:"/api/frontend/v1/LvPlan/getLvPlan",params:{start_date:t,end_date:e,lv_id:n}}),eventsPersonal:(t,e)=>({method:"post",url:"/api/frontend/v1/lvPlan/eventsPersonal",params:{start_date:t,end_date:e}}),eventsLv:(t,e,n)=>({method:"post",url:"/api/frontend/v1/lvPlan/eventsLv",params:{lv_id:t,start_date:e,end_date:n}}),getStunden:()=>({method:"get",url:"/api/frontend/v1/LvPlan/Stunden"}),getOrtReservierungen:(t,e,n)=>({method:"post",url:`/api/frontend/v1/LvPlan/getReservierungen/${t}`,params:{start_date:e,end_date:n}}),getLvPlanReservierungen:(t,e)=>({method:"post",url:"/api/frontend/v1/LvPlan/getReservierungen",params:{start_date:t,end_date:e}}),getLehreinheitStudiensemester:t=>({method:"get",url:`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${t}`}),studiensemesterDateInterval:t=>({method:"get",url:`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${t}`}),LvPlanEvents:(t,e,n)=>({method:"post",url:"/api/frontend/v1/LvPlan/LvPlanEvents",params:{start_date:t,end_date:e,lv_id:n}}),getLv:t=>({method:"get",url:"/api/frontend/v1/LvPlan/getLv/"+t})};var Tt={name:"GridLineEvent",directives:{CalDnd:bt,CalClick:xt},inject:{draggableEvents:"draggableEvents",mode:"mode"},props:{event:{type:Object,required:!0,validator:t=>t.start&&t.end&&t.orig}},computed:{isHeaderOrFooter(){return["header","footer"].includes(this.event.orig)},draggable(){return!this.isHeaderOrFooter&&this.draggableEvents(this.event.orig,this.mode)},classes(){const t=[];return this.isHeaderOrFooter?t.push("event-"+this.event.orig):(this.event.startsHere&&t.push("event-begin"),this.event.endsHere&&t.push("event-end")),t}},template:'\n\t\n\t\t\n\t\t\t{{ event.orig }}\n\t\t\n\t\n\t'},Et={name:"CalendarGrid",components:{GridLine:{name:"GridLine",components:{LineEvent:Tt,LineBackground:{name:"GridLineBackground",inject:{flipAxis:"flipAxis"},props:{start:{type:luxon.DateTime,required:!0},end:{type:luxon.DateTime,required:!0},background:{type:Object,required:!0,validator:t=>!(!t.start&&!t.end)&&((!t.start||t.start instanceof luxon.DateTime)&&(!t.end||t.end instanceof luxon.DateTime))}},computed:{styles(){if(!this.background.endsHere&&!this.background.startsHere)return this.background.style;const t=(this.end.ts-this.start.ts)/100;let e={};return this.background.startsHere&&(e[this.flipAxis?"left":"top"]=this.background.start.diff(this.start)/t+"%"),this.background.endsHere&&(e[this.flipAxis?"right":"bottom"]=this.end.diff(this.background.end)/t+"%"),this.background.style?[this.background.style,e]:e},classes(){if(!this.background.endsHere&&!this.background.startsHere)return this.background.class;const t=[];return this.background.class&&t.push(this.background.class),this.background.startsHere&&t.push("bg-begin"),this.background.endsHere&&t.push("bg-end"),t}},template:'\n\t\n\t\t{{ background.label }}\n\t\n\t'}},inject:{axisRow:"axisRow"},props:{date:{type:luxon.DateTime,required:!0},start:{type:luxon.DateTime,required:!0},end:{type:luxon.DateTime,required:!0},events:{type:Array,default:[]},backgrounds:{type:Array,default:[]}},computed:{eventsWithRowInfo(){const t=[];return this.events.forEach(e=>{const n=[1,-1];e.startsHere&&(n[0]="t_"+e.start.diff(this.date).toMillis()),e.endsHere&&(n[1]="t_"+e.end.diff(this.date).toMillis()),t.push({...e,rows:n})}),t}},template:'\n\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t'},GridLineEvent:Tt},directives:{CalDnd:bt},inject:{originalEvents:"events",originalBackgrounds:"backgrounds",dropAllowed:"dropAllowed"},provide(){return{flipAxis:Vue.computed(()=>this.flipAxis),axisRow:Vue.computed(()=>this.axisRow)}},props:{axisMain:{type:Array,required:!0,validator:t=>t.every(t=>t instanceof luxon.DateTime)},axisParts:{type:Array,required:!0,validator:t=>t.every(t=>t instanceof luxon.Duration||Number.isInteger(t)||(t.start instanceof luxon.Duration||Number.isInteger(t.start))&&(t.end instanceof luxon.Duration||Number.isInteger(t.end)))},flipAxis:Boolean,allDayEvents:Boolean,axisMainCollapsible:Boolean,snapToGrid:Boolean},data:()=>({dragging:!1,resizeObserver:null,mutationObserver:null,userScroll:!0}),computed:{axisRow(){return this.flipAxis?"column":"row"},axisCol(){return this.flipAxis?"row":"column"},axisPartsWithBreaks(){return this.axisParts.reduce((t,e,n)=>{const i=e.start||e,a=e.end;if(t.length){const e=t.pop();Array.isArray(e)?t.push({start:e[0],end:i,index:e[1]}):e!=i&&t.push({start:e,end:i})}return a?(t.push({start:i,end:a,index:n}),t.push(a)):t.push([i,n]),t},[]).slice(0,-1)},axisPartsSave(){return this.axisParts[this.axisParts.length-1].end?this.axisParts:this.axisParts.slice(0,-1)},start(){return this.axisPartsWithBreaks[0].start},end(){return this.axisPartsWithBreaks[this.axisPartsWithBreaks.length-1].end},ends(){const t=[],e=this.axisPartsWithBreaks.filter(t=>void 0!==t.index).map(t=>t.end);for(var n of this.axisMain)for(var i of e)t.push(n.plus(i));return t},axisMainBorders(){return this.axisMain.reduce((t,e)=>t.concat([e.plus(this.start),e.plus(this.end)]),[])},eventsAllDay(){return this.allDayEvents?this.mapIntoMainAxis(this.originalEvents.filter(t=>t.orig.allDayEvent)):[]},eventsNormal(){return this.allDayEvents?this.mapIntoMainAxis(this.originalEvents.filter(t=>!t.orig.allDayEvent)):this.events},events(){return this.mapIntoMainAxis(this.originalEvents)},backgrounds(){return this.mapIntoMainAxis(this.originalBackgrounds)},hasValidEvents(){return this.events.find(t=>t.length)},styleGridCols(){let t="repeat("+this.axisMain.length+", 1fr)";return this.axisMainCollapsible&&this.hasValidEvents&&(t=this.events.map(t=>t.length?"1fr":"var(--fhc-calendar-axis-collapsible, .5fr)").join(" ")),t},styleGridRows(){const t={};return this.axisPartsWithBreaks.forEach(e=>{let n=e.start.toMillis();t[n]||(t[n]=["t_"+n]),void 0!==e.index&&t[n].push("ps_"+e.index),n=e.end.toMillis(),t[n]||(t[n]=["t_"+n]),void 0!==e.index&&t[n].push("pe_"+e.index)}),this.eventsNormal.forEach((e,n)=>{let i=this.axisMain[n];e.forEach(e=>{if(e.startsHere||e.endsHere){if(e.startsHere){let n=e.start.diff(i).toMillis();t[n]||(t[n]=["t_"+n,"e_"+n])}if(e.endsHere){let n=e.end.diff(i).toMillis();t[n]||(t[n]=["t_"+n,"e_"+n])}}})}),Object.keys(t).sort((t,e)=>parseInt(t)-parseInt(e)).map((e,n,i)=>{let a=i[n+1];return a?"["+t[e].join(" ")+"] "+(a-e)+"fr":(t[e].push("end"),"["+t[e].join(" ")+"]")}).join(" ")}},methods:{mapIntoMainAxis(t){const e=Array.from({length:this.axisMain.length},()=>Array());return t.forEach(t=>{const n=t.start||this.axisMainBorders[0].plus(-1),i=t.end||this.axisMainBorders[this.axisMainBorders.length-1].plus(1);for(var a=0;as){const o=n>=s,l=i<=r;e[a].push({...t,startsHere:o,endsHere:l})}}}),e},getPageTop(t){let e=t.offsetTop;return t.offsetParent&&(e+=this.getPageTop(t.offsetParent)),e},getPageLeft(t){let e=t.offsetLeft;return t.offsetParent&&(e+=this.getPageLeft(t.offsetParent)),e},getTimestampFromMouse(t,e){let n,i;return this.flipAxis?(n=t.pageX-this.getPageLeft(this.$refs.body)+this.$refs.main.scrollLeft,i=n/this.$refs.body.offsetWidth):(n=t.pageY-this.getPageTop(this.$refs.body)+this.$refs.main.scrollTop,i=n/this.$refs.body.offsetHeight),e+this.start+Math.floor((this.end-this.start)*i)},enableAutoScroll(){this.resizeObserver||(this.resizeObserver=new ResizeObserver(this.scrollToEarliestEvent)),this.resizeObserver.observe(this.$refs.body),this.mutationObserver||(this.mutationObserver=new MutationObserver(t=>{t.some(t=>t.addedNodes.length&&[].some.call(t.addedNodes,t=>t.matches&&t.matches(".fhc-calendar-base-grid-line-event")))&&this.scrollToEarliestEvent()})),this.mutationObserver.observe(this.$refs.body,{subtree:!0,childList:!0}),this.scrollToEarliestEvent()},disableAutoScroll(){this.resizeObserver&&this.resizeObserver.disconnect(),this.resizeObserver=null,this.mutationObserver&&this.mutationObserver.disconnect(),this.mutationObserver=null},scrollToEarliestEvent(){const t=this.$refs.scroller.querySelectorAll(".fhc-calendar-base-grid-line-event");let e=[0,null];for(var n of t.values()){const t=n.offsetTop;(!e[1]||t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t'},Dt={name:"LabelDay",directives:{CalClick:xt},props:{date:{type:luxon.DateTime,required:!0}},computed:{titleFull(){return this.date.toLocaleString({day:"numeric",month:"long",year:"numeric"})},titleLong(){return this.date.toLocaleString({day:"2-digit",month:"2-digit",year:"numeric"})},titleShort(){return this.date.toLocaleString({day:"numeric",month:"numeric"})},titleNarrow(){return this.date.toLocaleString({day:"numeric"})}},template:'\n\t\n\t\t{{ titleFull }}\n\t\t{{ titleLong }}\n\t\t{{ titleShort }}\n\t\t{{ titleNarrow }}\n\t\n\t'},Ct={name:"LabelDow",directives:{CalClick:xt},props:{date:{type:luxon.DateTime,required:!0}},computed:{titleLong(){return this.date.toLocaleString({weekday:"long"})},titleShort(){return this.date.toLocaleString({weekday:"short"})},titleNarrow(){return this.date.toLocaleString({weekday:"narrow"})}},template:'\n\t\n\t\t{{ titleLong }}\n\t\t{{ titleShort }}\n\t\t{{ titleNarrow }}\n\t\n\t'},Ot={name:"LabelTime",props:{part:{type:[luxon.Duration,Number,Object],required:!0,validator(t){if(t instanceof Object){if(t instanceof luxon.Duration)return!0;let e=!0,n=!0;return t.start&&(e=t.start instanceof luxon.Duration||Number.isInteger(t.start)),t.end&&(n=t.end instanceof luxon.Duration||Number.isInteger(t.end)),e&&n}return!0}}},computed:{sanitizedTimestamps(){return this.part.start||this.part.end?this.part:{start:this.part}},start(){return this.sanitizedTimestamps.start?this.formatTime(this.sanitizedTimestamps.start):null},end(){return this.sanitizedTimestamps.end?this.formatTime(this.sanitizedTimestamps.end):null}},methods:{formatTime:t=>t.toISOTime({suppressSeconds:!0})},template:'\n\t
    \n\t\t{{ start }}\n\t\t-\n\t\t{{ end }}\n\t
    \n\t'};var Pt={name:"ModeDay",components:{BaseSlider:_t,DayView:{name:"DayView",components:{CalendarGrid:Et,LabelDay:Dt,LabelDow:Ct,LabelTime:Ot},inject:{timeGrid:"timeGrid",originalEvents:"events",timezone:"timezone"},props:{day:{type:luxon.DateTime,required:!0},emptyMessage:String,emptyMessageDetails:String},emits:["requestModalOpen","requestModalClose"],data:()=>({chosenEvent:null,gridMainRef:null}),computed:{axisMain(){return[this.day.startOf("day")]},axisParts(){return this.timeGrid?this.timeGrid.map(t=>({start:luxon.Duration.fromISOTime(t.start),end:luxon.Duration.fromISOTime(t.end)})):Array.from({length:17},(t,e)=>luxon.Duration.fromObject({hours:e+7}))},events(){return this.originalEvents.filter(t=>t.startthis.day).sort((t,e)=>t.start.ts-e.start.ts).map(t=>t.orig)},currentEvent(){if(this.chosenEvent&&this.events.find(t=>t==this.chosenEvent))return this.chosenEvent;let t=null;return this.events&&(t=this.events.find(Boolean)),t&&"loading"==t.type?null:t},isToday(){return this.day.hasSame(luxon.DateTime.now().setZone(this.timezone),"day")}},watch:{compact(){this.compact?this.chosenEvent&&this.$emit("requestModalOpen",{event:this.chosenEvent,closeFn:()=>{this.chosenEvent=null}}):this.$emit("requestModalClose")}},methods:{handleClickDefaults(t){"event"==t.detail.source&&(this.chosenEvent=t.detail.value,this.compact&&this.$emit("requestModalOpen",{event:this.chosenEvent,closeFn:()=>{this.chosenEvent=null}}))}},setup(){const t=Vue.ref(null),{compact:e}=function(t,e){const n=Vue.ref(!1),i=Vue.ref(!1),a=Vue.ref(!1),s=Vue.computed(()=>Vue.isRef(t)?t.value&&t.value.$el?t.value.$el:t.value:t),r=Vue.computed(()=>{const t=Vue.isRef(e)?e.value:e;return Number.isInteger(t)?[["compact",t]]:Array.isArray(t)?t.map((t,e)=>[e,t]).sort((t,e)=>t[1]-e[1]):Object.entries(t).sort((t,e)=>t[1]-e[1])});function o(){if(void 0===s.value.offsetWidth)return;const t=r.value.find(t=>t[1]>s.value.offsetWidth);i.value=t?t[0]:"full",n.value=i.value==r.value[0][0]}const l=new ResizeObserver(()=>{s.value&&o()});function d(){s.value&&(o(),l.observe(s.value),a.value=!0)}function c(){a.value&&l.disconnect()}return Vue.onMounted(d),Vue.onUnmounted(c),Vue.watchEffect(()=>{s.value&&(c(),d())}),{compact:n,size:i}}(t,750);return{container:t,compact:e}},mounted(){this.gridMainRef=this.$refs.grid.$refs.main},template:'\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t{{ emptyMessage }}\n\t\t\t\n\t\t\n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\t

    {{ emptyMessageDetails }}

    \n\t\t\t\n\t\t\n\t\n\t'}},props:{currentDate:{type:luxon.DateTime,required:!0}},emits:["update:currentDate","update:range","click","requestModalOpen","requestModalClose"],data(){return{focusDate:this.currentDate,rangeOffset:0}},computed:{range(){let t=this.focusDate.startOf("day"),e=this.focusDate.endOf("day");return 0!=this.rangeOffset&&(this.rangeOffset<0?t=t.plus({days:this.rangeOffset}):e=e.plus({days:this.rangeOffset})),luxon.Interval.fromDateTimes(t,e)}},watch:{currentDate(){this.currentDate.locale!=this.focusDate.locale?(this.focusDate=this.currentDate,this.$emit("update:range",this.range)):(this.rangeOffset=this.currentDate.startOf("day").diff(this.focusDate.startOf("day"),"days").days,this.rangeOffset&&(this.$refs.view.$refs.grid.disableAutoScroll(),this.$emit("update:range",this.range),this.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage)))}},methods:{prevPage(){this.rangeOffset=this.$refs.slider.target-1,this.$refs.view.$refs.grid.disableAutoScroll(),this.$emit("update:range",this.range),this.$refs.slider.prevPage().then(this.updatePage)},nextPage(){this.rangeOffset=this.$refs.slider.target+1,this.$refs.view.$refs.grid.disableAutoScroll(),this.$emit("update:range",this.range),this.$refs.slider.nextPage().then(this.updatePage)},updatePage(t){const e=this.focusDate.plus({days:t});this.focusDate=e,this.rangeOffset=0,this.$emit("update:currentDate",this.focusDate),this.$emit("update:range",this.range),this.$refs.view.$refs.grid.enableAutoScroll()},viewAttrs(t){const e=this.focusDate.plus({days:t});return{...this.$attrs,day:e}}},mounted(){this.$emit("update:range",this.range),this.$refs.view.$refs.grid.enableAutoScroll()},template:'\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t'},Ft={name:"ModeWeek",components:{BaseSlider:_t,WeekView:{name:"WeekView",components:{CalendarGrid:Et,LabelDay:Dt,LabelDow:Ct,LabelTime:Ot},inject:{timeGrid:"timeGrid",timezone:"timezone"},props:{day:{type:luxon.DateTime,required:!0},collapseEmptyDays:Boolean},computed:{start(){return this.day.startOf("week",{useLocaleWeeks:!0})},axisMain(){return Array.from({length:7},(t,e)=>this.start.plus({days:e}))},axisParts(){return this.timeGrid?this.timeGrid.map(t=>({start:luxon.Duration.fromISOTime(t.start),end:luxon.Duration.fromISOTime(t.end)})):Array.from({length:17},(t,e)=>luxon.Duration.fromObject({hours:e+7}))}},methods:{isToday(t){return t.hasSame(luxon.DateTime.now().setZone(this.timezone),"day")}},template:'\n\t
    \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    \n\t'}},props:{currentDate:{type:luxon.DateTime,required:!0}},emits:["update:currentDate","update:range","click","requestModalOpen"],data(){return{focusDate:this.currentDate,rangeOffset:0}},computed:{range(){let t=this.focusDate.startOf("week",{useLocaleWeeks:!0}),e=this.focusDate.endOf("week",{useLocaleWeeks:!0});return 0!=this.rangeOffset&&(this.rangeOffset<0?t=t.plus({weeks:this.rangeOffset}):e=e.plus({weeks:this.rangeOffset})),luxon.Interval.fromDateTimes(t,e)}},watch:{currentDate(){this.currentDate.locale!=this.focusDate.locale?(this.focusDate=this.currentDate,this.$emit("update:range",this.range)):(this.rangeOffset=this.currentDate.startOf("week",{useLocaleWeeks:!0}).diff(this.focusDate.startOf("week",{useLocaleWeeks:!0}),"weeks").weeks,this.rangeOffset&&(this.$refs.view.$refs.grid.disableAutoScroll(),this.$emit("update:range",this.range),this.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage)))}},methods:{prevPage(){this.rangeOffset=this.$refs.slider.target-1,this.$refs.view.$refs.grid.disableAutoScroll(),this.$emit("update:range",this.range),this.$refs.slider.prevPage().then(this.updatePage)},nextPage(){this.rangeOffset=this.$refs.slider.target+1,this.$refs.view.$refs.grid.disableAutoScroll(),this.$emit("update:range",this.range),this.$refs.slider.nextPage().then(this.updatePage)},updatePage(t){const e=this.focusDate.plus({weeks:t});this.focusDate=e,this.rangeOffset=0,this.$emit("update:currentDate",this.focusDate),this.$emit("update:range",this.range),this.$refs.view.$refs.grid.enableAutoScroll()},viewAttrs(t){const e=this.focusDate.plus({weeks:t});return{...this.$attrs,day:e}},handleClickDefaults(t){switch(t.detail.source){case"day":this.$emit("update:currentDate",t.detail.value);break;case"event":this.$emit("requestModalOpen",{event:t.detail.value})}}},mounted(){this.$emit("update:range",this.range),this.$refs.view.$refs.grid.enableAutoScroll()},template:'\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t'},zt={name:"ModeMonth",components:{BaseSlider:_t,MonthView:{name:"MonthView",components:{CalendarGrid:Et,LabelWeek:{name:"LabelWeek",directives:{CalClick:xt},props:{date:{type:luxon.DateTime,required:!0}},computed:{weeks(){const t=this.date.startOf("week",{useLocaleWeeks:!0}),e=this.date.endOf("week",{useLocaleWeeks:!0}),n=[{number:t.localWeekNumber,year:t.localWeekYear},{number:e.localWeekNumber,year:e.localWeekYear}];return n[0].number==n[1].number&&n.pop(),n}},template:'\n\t
    \n\t\t\n\t\t\t{{ week.number }}\n\t\t\n\t
    \n\t'},LabelDow:Ct,LabelDay:Dt},provide(){return{events:Vue.computed(()=>{const t=this.events.map(t=>{const e=t.start.startOf("day"),n=t.end.plus({days:1}).startOf("day");return{...t,start:e,end:n}});for(var e=5;e>-1;e--)for(var n=6;n>-1;n--){const i=this.axisMain[e].plus(this.axisParts[n]);t.unshift({start:i,end:i.plus({days:1}),orig:"header"})}return t})}},inject:{events:"events",timezone:"timezone"},props:{day:{type:luxon.DateTime,required:!0}},computed:{axisMain(){const t=this.day.startOf("month").startOf("week",{useLocaleWeeks:!0});return Array.from({length:6},(e,n)=>t.plus({weeks:n}))},axisParts:()=>Array.from({length:8},(t,e)=>luxon.Duration.fromObject({days:e}))},methods:{isToday(t){return t.hasSame(luxon.DateTime.now().setZone(this.timezone),"day")}},template:'\n\t
    \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    \n\t'}},props:{currentDate:{type:luxon.DateTime,required:!0}},emits:["update:currentDate","update:range","click","requestModalOpen"],data(){return{focusDate:this.currentDate,rangeOffset:0}},computed:{range(){let t=this.focusDate.startOf("month").startOf("week",{useLocaleWeeks:!0}),e=t.plus({days:41}).endOf("day");if(0!=this.rangeOffset){const n=this.focusDate.plus({months:this.rangeOffset}).startOf("month").startOf("week",{useLocaleWeeks:!0});this.rangeOffset<0?t=n:e=n.plus({days:41}).endOf("day")}return luxon.Interval.fromDateTimes(t,e)}},watch:{currentDate(){this.currentDate.locale!=this.focusDate.locale?(this.focusDate=this.currentDate,this.$emit("update:range",this.range)):(this.rangeOffset=this.currentDate.startOf("month").diff(this.focusDate.startOf("month"),"months").months,this.rangeOffset&&(this.$emit("update:range",this.range),this.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage)))}},methods:{prevPage(){this.rangeOffset=this.$refs.slider.target-1,this.$emit("update:range",this.range),this.$refs.slider.prevPage().then(this.updatePage)},nextPage(){this.rangeOffset=this.$refs.slider.target+1,this.$emit("update:range",this.range),this.$refs.slider.nextPage().then(this.updatePage)},updatePage(t){const e=this.focusDate.plus({months:t});this.focusDate=e,this.rangeOffset=0,this.$emit("update:currentDate",this.focusDate),this.$emit("update:range",this.range)},viewAttrs(t){return{day:this.focusDate.plus({months:t})}},handleClickDefaults(t){switch(t.detail.source){case"week":let e=luxon.DateTime.fromObject({localWeekNumber:t.detail.value.number,localWeekYear:t.detail.value.year},{zone:this.currentDate.zoneName,locale:this.currentDate.locale});this.focusDate.hasSame(e.startOf("week",{useLocaleWeeks:!0}),"month")?this.focusDate.hasSame(e.endOf("week",{useLocaleWeeks:!0}),"month")||this.$emit("update:currentDate",e.endOf("week",{useLocaleWeeks:!0})):this.$emit("update:currentDate",e.startOf("week",{useLocaleWeeks:!0}));break;case"day":this.$emit("update:currentDate",t.detail.value);break;case"event":this.$emit("requestModalOpen",{event:t.detail.value})}}},mounted(){this.$emit("update:range",this.range)},template:'\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t'},It={name:"CalendarLvPlan",components:{FhcCalendar:St},inject:["renderers"],props:{timezone:{type:String,required:!0},date:{type:[Date,String,Number,luxon.DateTime],default:luxon.DateTime.local()},mode:{type:String,default:"Week"},getPromiseFunc:{type:Function,required:!0}},emits:["update:date","update:mode","update:range"],data(){return{modes:{day:Vue.markRaw(Pt),week:Vue.markRaw(Ft),month:Vue.markRaw(zt)},modeOptions:{day:{emptyMessage:Vue.computed(()=>this.$p.t("lehre/noLvFound")),emptyMessageDetails:Vue.computed(()=>this.$p.t("lehre/noLvFound"))},week:{collapseEmptyDays:!1}},teachingunits:null}},computed:{backgrounds(){let t=luxon.DateTime.now().setZone(this.timezone);return"Month"==this.mode?[{class:"background-past",end:t.startOf("day")}]:[{class:"background-past",end:t,label:t.startOf("minute").toISOTime({suppressSeconds:!0,includeOffset:!1})}]}},methods:{eventStyle(t){if(t.farbe)return"--event-bg:#"+t.farbe},updateRange(t){this.rangeInterval=t,this.$emit("update:range",t)}},setup(t,e){const n=Vue.ref(null),{events:i,lv:a}=function(t,e){let n=0;const i=Vue.ref([]),a=Vue.ref([]),s=Vue.computed(()=>i.value.concat(a.value)),r=Vue.ref(null),o=[],l=(t,e)=>Array.isArray(t)?e.concat(t):(e.push(t),e),d=(t,i)=>{let s=[];if(o.length)if(o[o.length-1]+1==t.ts)o[o.length-1]=i.ts;else if(o[o.length-1]i.ts)o.unshift(t.ts,i.ts);else{let e=o.findIndex(e=>e>=t.ts);if(e%2){if(o[e]>=i.ts)return[];let n=e==o.length-1;if(n||o[e+1]>i.ts){let a=o[e]+1;t=t.plus(a-t.ts),n||o[e+1]!=i.ts+1?o[e]=i.ts:o.splice(e,2)}else{if(o[e+2]=i.ts)return[];let n=o[e+1]+1;s=l(d(t.plus(n-t.ts),i),s)}else{if(o[e+1]=i.ts?s:(a.value.push({loading_id:n++,type:"loading",isostart:t.toISODate()+"T"+t.toISOTime(),isoend:i.toISODate()+"T"+i.toISOTime()}),l(e(t,i),s))};return Vue.watchEffect(()=>{const e=Vue.toValue(t);if(!(e instanceof luxon.Interval))return;const n=d(e.start,e.end);Promise.allSettled(n).then(t=>{t.forEach(t=>{"fulfilled"===t.status&&"success"===t.value.meta.status&&(t.value.meta.lv&&(r.value=t.value.meta.lv),i.value=i.value.concat(t.value.data),a.value=[])})})}),{events:s,lv:r}}(n,t.getPromiseFunc);return Vue.watch(a,t=>{e.emit("update:lv",t)}),{rangeInterval:n,events:i,lv:a}},created(){this.$api.call($t.getStunden()).then(t=>this.teachingunits=t.data.map(t=>({id:t.stunde,start:t.beginn,end:t.ende})))},template:'\n\t\n\t\t\n\t\t\n\t'},Lt={getAuthUID:()=>({method:"get",url:"/api/frontend/v1/AuthInfo/getAuthUID"}),getAuthInfo:()=>({method:"get",url:"/api/frontend/v1/AuthInfo/getAuthInfo"})};var Mt={name:"LvPlanLehrveranstaltung",components:{FhcCalendar:It},props:{viewData:Object,propsViewData:Object},data:()=>({lv:null}),computed:{currentDay(){return!this.propsViewData?.focus_date||isNaN(new Date(this.propsViewData?.focus_date))?luxon.DateTime.now().setZone(this.viewData.timezone).toISODate():this.propsViewData?.focus_date},currentMode(){return this.propsViewData?.mode&&["day","week","month"].includes(this.propsViewData?.mode.toLowerCase())?this.propsViewData?.mode:"Week"},currentLv(){return isNaN(parseInt(this.propsViewData?.lv_id))?null:this.propsViewData.lv_id},lvTitle(){return null===this.currentLv?"":this.lv?"English"===this.$p.user_language.value?this.lv.bezeichnung_english:this.lv.bezeichnung:""}},methods:{handleChangeDate(t,e){return this.handleChangeMode(e,t)},handleChangeMode(t,e){const n=t[0].toUpperCase()+t.slice(1),i=e.toISODate();this.$router.push({name:"LvPlan",params:{mode:n,focus_date:i,lv_id:this.currentLv}})},getPromiseFunc(t,e){return[this.$api.call($t.eventsLv(this.propsViewData.lv_id,t.toISODate(),e.toISODate())),this.$api.call($t.getLvPlanReservierungen(t.toISODate(),e.toISODate()))]}},created(){null!==this.currentLv&&this.$api.call($t.getLv(this.propsViewData?.lv_id)).then(t=>{this.lv=t.data})},template:'\n\t
    \n\t\t

    \n\t\t\t{{ $p.t(\'lehre/stundenplan\') }}\n\t\t\t\n\t\t\t\t{{ lvTitle }}\n\t\t\t\n\t\t

    \n\t\t
    \n\t\t
    \n\t\t\t{{ $p.t(\'lehre/noLvFound\') }}\n\t\t
    \n\t\t\n\t
    '};var Rt={name:"LvPlanPersonal",components:{FhcCalendar:It},props:{viewData:Object,propsViewData:Object},data:()=>({studiensemester_kurzbz:null,studiensemester_start:null,studiensemester_ende:null,uid:null,isMitarbeiter:!1,isStudent:!1}),computed:{currentDay(){return!this.propsViewData?.focus_date||isNaN(new Date(this.propsViewData?.focus_date))?luxon.DateTime.now().setZone(this.viewData.timezone).toISODate():this.propsViewData?.focus_date},currentMode(){return this.propsViewData?.mode&&["day","week","month"].includes(this.propsViewData?.mode.toLowerCase())?this.propsViewData?.mode:"Week"},downloadLinks(){if(!this.studiensemester_start||!this.studiensemester_ende||!this.uid)return!1;let t=!1;if(t=this.isStudent?"student":t,t=this.isMitarbeiter?"lektor":t,!1===t)return;const e={zone:this.viewData.timezone},n=luxon.DateTime.fromISO(this.studiensemester_start,e).toUnixInteger(),i=luxon.DateTime.fromISO(this.studiensemester_ende,e).toUnixInteger(),a=FHC_JS_DATA_STORAGE_OBJECT.app_root+"cis/private/lvplan/stpl_kalender.php?type="+t+"&pers_uid="+this.uid+"&begin="+n+"&ende="+i;return[{title:"excel",icon:"fa-solid fa-file-excel",link:a+"&format=excel"},{title:"csv",icon:"fa-solid fa-file-csv",link:a+"&format=csv"},{title:"ical1",icon:"fa-regular fa-calendar",link:a+"&format=ical&version=1&target=ical"},{title:"ical2",icon:"fa-regular fa-calendar",link:a+"&format=ical&version=2&target=ical"}]}},methods:{handleChangeDate(t,e){return this.handleChangeMode(e,t)},handleChangeMode(t,e){const n=t[0].toUpperCase()+t.slice(1),i=e.toISODate();this.$router.push({name:"MyLvPlan",params:{mode:n,focus_date:i}})},updateRange(t){this.$api.call($t.studiensemesterDateInterval(t.end.startOf("week").toISODate())).then(t=>{this.studiensemester_kurzbz=t.data.studiensemester_kurzbz,this.studiensemester_start=t.data.start,this.studiensemester_ende=t.data.ende})},getPromiseFunc(t,e){return[this.$api.call($t.eventsPersonal(t.toISODate(),e.toISODate())),this.$api.call($t.getLvPlanReservierungen(t.toISODate(),e.toISODate()))]}},created(){this.$api.call(Lt.getAuthInfo()).then(t=>{this.uid=t.data.uid,this.isMitarbeiter=t.data.isMitarbeiter,this.isStudent=t.data.isStudent})},template:'\n\t
    \n\t\t

    \n\t\t\t{{ $p.t(\'lehre/stundenplan\') }}\n\t\t\t\n\t\t\t\t{{ studiensemester_kurzbz }}\n\t\t\t\n\t\t

    \n\t\t
    \n\t\t\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ title }}\n\t\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\n\t'},Nt={components:{BsModal:s},mixins:[s],props:{pruefungenData:null|Array,bezeichnung:String,onHideBsModal:Function,onHiddenBsModal:Function,onHidePreventedBsModal:Function,onShowBsModal:Function,onShownBsModal:Function},data:()=>({result:!0}),mounted(){this.modal=this.$refs.modalContainer.modal},popup(t){return s.popup.bind(this)(null,t)},template:'\n\t\t\n\t\t\n\t'},Bt={getStudentenMail:t=>({method:"get",url:"/api/frontend/v1/Lehre/lvStudentenMail",params:{lehreinheit_id:t}}),getLvInfo:(t,e)=>({method:"get",url:`/api/frontend/v1/Lehre/LV/${t}/${e}`}),getStudentPruefungen:t=>({method:"get",url:`/api/frontend/v1/Lehre/Pruefungen/${t}`})};const Ut={};var jt={props:{studien_semester:String,lehrveranstaltung_id:Number},data:()=>({bezeichnung:null,studiengang_kuerzel:null,semester:null,orgform_kurzbz:null,sprache:null,ects:null,incoming:null,result:!0,info:null}),computed:{lektorNamesLinks(){let t={};return this.info.lektoren.forEach(e=>{let n=((e.titelpre||"")+" "+(e.vorname||"")+" "+(e.nachname||"")+" "+(e.titelpost||"")).trim();t[n]=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/Cis/Profil/View/${e.uid}`}),t},lektorNames(){return this.info.lektoren.map(t=>((t.titelpre||"")+" "+(t.vorname||"")+" "+(t.nachname||"")+" "+(t.titelpost||"")).trim())},lvLeitung(){return this.info.lvLeitung&&this.info.lvLeitung.length?this.info.lvLeitung.map(t=>((t.titelpre||"")+" "+(t.vorname||"")+" "+(t.nachname||"")+" "+(t.titelpost||"")).trim()):null},oe(){return this.info.oe.organisationseinheittyp?this.info.oe.organisationseinheittyp+" "+this.info.oe.bezeichnung:""},oeLeitung(){return this.info.oeLeitung&&this.info.oeLeitung.length?this.info.oeLeitung.map(t=>((t.titelpre||"")+" "+(t.vorname||"")+" "+(t.nachname||"")+" "+(t.titelpost||"")).trim()):["-"]},koordinator(){return this.info.koordinator&&this.info.koordinator.length?this.info.koordinator.map(t=>((t.titelpre||"")+" "+(t.vorname||"")+" "+(t.nachname||"")+" "+(t.titelpost||"")).trim()):null},currentLang(){return this.info?this.info.lastLang?this.info.lastLang:this.info.lvinfo?this.info.lvinfoDefaultLang&&this.info.lvinfo[this.info.lvinfoDefaultLang]?this.info.lvinfoDefaultLang:Object.keys(this.info.lvinfo).shift():null:null}},created(){this.$api.call(Bt.getLvInfo(this.studien_semester,this.lehrveranstaltung_id)).then(t=>t.data).then(t=>{Object.assign(this,{bezeichnung:t.bezeichnung,studiengang_kuerzel:t.studiengang_kuerzel,semester:t.semester,orgform_kurzbz:t.orgform_kurzbz,sprache:t.sprache,ects:t.ects,incoming:t.incoming??"-"})}),Ut[this.lehrveranstaltung_id]?this.info=Ut[this.lehrveranstaltung_id]:axios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/components/Cis/Mylv/Info/"+this.studien_semester+"/"+this.lehrveranstaltung_id).then(t=>{this.info=Ut[this.lehrveranstaltung_id]=t.data.retval||[]}).catch(()=>this.info={})},template:'\n\t\t\t

    {{$p.t(\'lvinfo/lehrveranstaltungsinformationen\')}}

    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    {{$p.t(\'lehre/lehrveranstaltung\')}}{{bezeichnung}}
    {{$p.t(\'lehre/studiengang\')}}{{studiengang_kuerzel}}
    {{$p.t(\'lehre/semester\')}}{{semester}}
    {{$p.t(\'lehre/studiensemester\')}}{{studien_semester}}
    {{$p.t(\'lehre/organisationsform\')}}{{orgform_kurzbz}}
    {{$p.t(\'lehre/lehrbeauftragter\')}}\n\t\t\t\t\t\t\t\t
      \n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{{name}}\n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    {{$p.t(\'lehre/lvleitung\')}}\n\t\t\t\t\t\t\t\t
      \n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{{name}}\n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    {{$p.t(\'global/sprache\')}}{{sprache}}
    {{$p.t(\'lehre/ects\')}}{{ects}}
    {{$p.t(\'lehre/incomingplaetze\')}}{{incoming}}
    {{$p.t(\'lehre/organisationseinheit\')}}\n\t\t\t\t\t\t\t\t{{oe}}
    \n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t{{$p.t(\'global/leitung\')}}: {{oeLeitung.join(\', \')}}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t
    \n\t\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    '};const Ht={},Vt={};function Jt(t,e){return t.filter(t=>t.category==e).reduce((t,e)=>(t[e.phrase]||(t[e.phrase]=e.text),t),{})}function Gt(t){for(;Vt[t].length;){var e=Vt[t].pop();e[0].value=qt(t,e[1],e[2]),Vue.triggerRef(e[0])}}function qt(t,e,n){let i=Ht[t][e];return i?(n&&(i=i.replace(/\{([^}]*)\}/g,(t,e)=>void 0===n[e]?t:n[e])),i):"<< PHRASE "+e+">>"}const Wt={t_ref(t,e,n){if(void 0===n&&(Array.isArray(t)&&2==t.length||t.split&&2==t.split("/").length)&&(n=e,[t,e]=t.split?t.split("/"):t),void 0===e)return console.error("invalid input"),"";if(!Ht[t]){var i="";if(void 0!==window.FHC_JS_PHRASES_STORAGE_OBJECT){var a=Jt(FHC_JS_PHRASES_STORAGE_OBJECT,t);void 0!==a[e]&&(i=a[e])}if(!Ht[t]||0===Object.keys(Ht[t]).length){Ht[t]=void 0;let a=Vue.ref(i);return function(t,e,n,i){if(Vt[t])return Vt[t].push([e,n,i]),void(Ht[t]&&Gt(t));Vt[t]=[[e,n,i]],axios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/components/Phrasen/loadModule/"+t).then(e=>{e.data.retval?Ht[t]=Jt(e.data.retval,t):Ht[t]={},Gt(t)}).catch(t=>console.error(t))}(t,a,e,n),a}}var s=qt(t,e,n);return Vue.ref(s)},t(t,e,n){return Vue.unref(this.t_ref(t,e,n))}};var Kt={data:()=>({p:Wt})},Zt={props:{menu:{type:Array,default:null},containerStyles:Array,rowStyles:Array,hasLvPlanEintraege:{required:!1,default:!0,type:Boolean}},data:()=>({}),methods:{c4_disabled:function(t){return!this.c4_link(t)&&!t.c4_moodle_links?.length||("addon_fhtw_menu_lvplan_lva"==t.id&&!this.hasLvPlanEintraege||null)},c4_target:function(t){return t.c4_moodle_links?.length>0?null:t.c4_target??null},c4_link:t=>t?Array.isArray(t.c4_moodle_links)&&t.c4_moodle_links.length?null:t.c4_link??null:null,getMenuName(t){return t.phrase?this.$p.t(t.phrase):t.name}},template:'\n\t
    {{$p.t(\'lehre\',\'lehrveranstaltungsUnavailable\')}}
    \n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t

    {{ getMenuName(menuItem) }}

    \n\t\t\t\t\t\t
    {{text}}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t'},Yt={getLvMenu:(t,e)=>({method:"get",url:`/api/frontend/v1/LvMenu/getLvMenu/${t}/${e}`})},Xt={props:{event:{type:Object,required:!0,default:null},studiensemester:{type:String,required:!1,default:null},titel:{type:String,required:!1,default:null},preselectedMenu:{type:Object,required:!1,default:null}},data:()=>({result:!1,menu:[],isMenuSelected:!1,hasLvPlanEintraege:!0,lvEvaluierungMessage:""}),mixins:[s],components:{BsModal:s,LvMenu:Zt},inject:["studium_studiensemester"],methods:{hiddenModal:function(){this.isMenuSelected=!1},showModal:function(){if(this.preselectedMenu?this.isMenuSelected=!0:this.$api.call(Yt.getLvMenu(this.event.lehrveranstaltung_id,this.studiensemester??this.event.studiensemester_kurzbz)).then(t=>{t.data&&(this.menu=t.data)}),this.studium_studiensemester&&this.$fhcApi.factory.studium.getLvEvaluierungInfo(this.studium_studiensemester,this.event.lehreinheit_id??this.event.lehrveranstaltung_id).then(t=>t.data).then(t=>{this.lvEvaluierungMessage=t.message}),this.studiensemester&&this.event)return this.$fhcApi.factory.studium.getLvPlanForStudiensemester(this.studiensemester,this.event.lehreinheit_id??this.event.lehrveranstaltung_id).then(t=>t.data).then(t=>{Array.isArray(t)&&t.length>0?this.hasLvPlanEintraege=!0:this.hasLvPlanEintraege=!1})}},mounted(){this.modal=this.$refs.modalContainer},beforeUnmount(){this.$refs.modalContainer.hide()},template:'\n \n\n\t\t\n \n \n \n\n \n '},Qt={components:{MylvSemesterStudiengang:{components:{MylvSemesterStudiengangLv:{components:{LvUebersicht:Xt},mixins:[Kt],inject:["studien_semester"],props:{lehrveranstaltung_id:Number,bezeichnung:String,bezeichnung_eng:String,module:String,farbe:String,lvinfo:Boolean,benotung:Boolean,lvnote:String,lvnotebez:Array,znote:String,znotebez:Array,studiengang_kuerzel:String,semester:[String,Number],orgform_kurzbz:String,sprache:String,ects:String,incoming:Number,positiv:Boolean,note_index:String},data:()=>({pruefungenData:null,info:null,menu:null,preselectedMenuItem:null}),computed:{gradeColor(){if(null!=this.positiv)return this.positiv?"var(--fhc-success)":"var(--fhc-danger)"},is_organisatorische_einheit(){return"organisatorische_einheit"==this.menu},emptyMenu(){return!this.menu||!Array.isArray(this.menu)||Array.isArray(this.menu)&&0==this.menu.length},bodyStyle:()=>({}),grade(){const t="English"===this.$p.user_language.value?1:0;return this.benotung&&this.znotebez?.length?this.znotebez[t]:this.benotung&&this.lvnotebez?.length?this.lvnotebez[t]:null},LvHasPruefungenInformation(){return this.pruefungenData&&this.pruefungenData.length>0}},methods:{fetchMenu(t=this.lehrveranstaltung_id,e=this.studien_semester){return this.$api.call(Yt.getLvMenu(t,e)).then(t=>{this.menu=t.data}).catch(t=>{this.$fhcAlert.handleSystemError(t),this.menu=[]})},c4_link:t=>t?Array.isArray(t.c4_moodle_links)&&t.c4_moodle_links.length?"#":t.c4_link??null:null,openLvOption(t){"core_menu_mailanstudierende"==t.id||"core_menu_digitale_anwesenheitslisten"==t.id?window.location.href=t.c4_link:(this.preselectedMenuItem=t,Vue.nextTick(()=>{this.$refs.lvUebersicht.show()}))},openPruefungen(){this.LvHasPruefungenInformation&&Nt.popup({pruefungenData:this.pruefungenData,bezeichnung:this.bezeichnung})},openInfos(){this.info||(this.info=!0,jt.popup({lehrveranstaltung_id:this.lehrveranstaltung_id,bezeichnung:this.bezeichnung,bezeichnung_eng:this.bezeichnung_eng,studiengang_kuerzel:this.studiengang_kuerzel,semester:this.semester,studien_semester:this.studien_semester,orgform_kurzbz:this.orgform_kurzbz,sprache:this.sprache,ects:this.ects,incoming:this.incoming}).then(()=>this.info=!1).catch(()=>this.info=!1))}},watch:{studien_semester(t){this.fetchMenu(this.lehrveranstaltung_id,t)}},created(){this.$api.call(Bt.getStudentPruefungen(this.lehrveranstaltung_id)).then(t=>t.data).then(t=>{this.pruefungenData=t})},mounted(){this.fetchMenu(this.lehrveranstaltung_id,this.studien_semester)},template:'
    \n\t\t\n\n\t\t
    \n\t\t\t\x3c!-- {{module}} if the module of the lv is important then query the module from the api endpoint for LV--\x3e\n\t\t\t
    {{ $p.t(\'lehre/organisationseinheit\') }}:
    \n\t\t\t
    {{$p.user_language.value === \'English\' ? bezeichnung_eng : bezeichnung}}
    \n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t\n\t
    '}},mixins:[Kt],props:{bezeichnung:String,kuerzel:String,semester:[String,Number],lvs:Array,sg_bezeichnung_eng:String},computed:{lehrveranstaltungen(){return[...new Map(this.lvs.map(t=>[t.lehrveranstaltung_id,t])).values()]}},methods:{note:t=>t.benotung&&(t.znote||t.lvnote)||null},template:'
    \n\t\t
    \n\t\t\t

    {{$p.user_language.value === \'English\' ? sg_bezeichnung_eng : bezeichnung}} - {{kuerzel}}\n\t\t\t\t{{semester}}.{{$p.t(\'lehre/semester\')}}\n\t\t\t

    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    '}},provide(){return{studien_semester:Vue.computed(()=>this.semester)}},props:{semester:[String,Number],lvs:Array},computed:{ready(){return null!==this.lvs},studiengaenge(){return[...new Map(this.lvs.map(t=>[t.studiengang_kz+"#"+t.semester,{studiengang_kz:t.studiengang_kz,bezeichnung:t.sg_bezeichnung,sg_bezeichnung_eng:t.sg_bezeichnung_eng,kuerzel:t.studiengang_kuerzel,semester:t.semester}])).values()].sort((t,e)=>t.bezeichnung.toLowerCase()==e.bezeichnung.toLowerCase()?t.semester>e.semester:t.bezeichnung.toLowerCase()>e.bezeichnung.toLowerCase())}},methods:{lvsForStudiengang(t){return this.lvs.filter(e=>e.studiengang_kz==t.studiengang_kz&&e.semester==t.semester)}},template:'
    \n\t\t\n\t
    \n\t
    \n\t\t\n\t
    '},te={components:{MylvSemester:Qt},mixins:[Kt],data:()=>({firstLoad:!0,studiensemester:null,lvs:{},currentSemester:null}),computed:{ready(){return null!==this.studiensemester&&(!this.firstLoad||null!==this.current.lvs)},current(){return null===this.currentSemester?{semester:null,lvs:[]}:(void 0===this.lvs[this.currentSemester]&&(this.lvs[this.currentSemester]={semester:this.currentSemester,lvs:null},axios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/components/Cis/Mylv/Lvs/"+this.currentSemester).then(t=>{this.lvs[this.currentSemester].lvs=t.data.retval||[],this.firstLoad=!1})),this.lvs[this.currentSemester])},nearestSem(){let t=Date.now(),e=null,n=0;return this.studiensemester.forEach(i=>{let a=new Date(i.start),s=new Date(i.ende);if(t>=a&&t<=s)return e=i.studiensemester_kurzbz,void(n=0);let r=Math.min(Math.abs(t-a),Math.abs(t-s));(null===e||r{this.studiensemester=t.data.retval||[];const e=this.$route.params.studiensemester;e&&this.studiensemester.filter(t=>t.studiensemester_kurzbz==e).length?this.currentSemester=e:this.currentSemester=this.nearestSem})},beforeRouteUpdate(t,e,n){t.params.studiensemester&&this.studiensemester.filter(e=>e.studiensemester_kurzbz==t.params.studiensemester).length&&t.params.studiensemester!=this.currentSemester&&(this.currentSemester=t.params.studiensemester),n()},template:'\n\n\t

    {{$p.t(\'lehre/myLV\')}}

    \n\t
    \n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t\n\t\t\n\t
    \n\t
    \n\t\t\n\t
    '};const ee={emits:["dataFetched"],props:{refresh:{type:Boolean},apiFunction:{required:!0,type:Function},apiFunctionParameters:{}},watch:{refresh:function(t,e){this.fetchData()}},data:function(){return{loading:!1,error:!1,errorMessage:null}},created:function(){this.fetchData()},methods:{fetchData:function(){if(this.loading=!0,this.error=!1,this.errorMessage=null,"function"==typeof this.apiFunction){let t=this.apiFunction(this.apiFunctionParameters);t instanceof Promise?t.then(this.successHandler).catch(this.errorHandler).finally(this.finallyHandler):this.setError("The called apiFunction does not return a Promise")}else this.setError("Property apiFunction is not a function")},setError:function(t){this.loading=!1,this.error=!0,this.errorMessage=t},successHandler:function(t){this.$emit("dataFetched",t?t.data:void 0)},errorHandler:function(t){t.response?.data?.retval?this.setError(t.response.data.retval):t.data?.message?this.setError(t.data.message):this.setError(t.message)},finallyHandler:function(){this.loading=!1}},template:'\n\t\t\n\t\t\t
    Loading...
    \n\t\t
    \n\t\t\n\t\t\t
    {{ errorMessage }}
    \n\t\t
    \n\t\t\n\t'},ne="Filter Component New Filter";var ie={props:{filters:{type:Array,default:[]},columns:{type:Array,default:[]},fields:{type:Array,default:[]}},emits:{switchFilter:["filterId"],applyFilterConfig:["filterFields"],saveCustomFilter:["customFilterName"]},data:function(){return{currentFields:[]}},computed:{types(){return this.columns.reduce((t,e)=>{let n=e.type.toLowerCase();return n.indexOf("int")>=0?t[e.name]="Numeric":n.indexOf("varchar")>=0||n.indexOf("text")>=0||n.indexOf("bpchar")>=0?t[e.name]="Text":n.indexOf("timestamp")>=0||n.indexOf("date")>=0?t[e.name]="Date":t[e.name]="",t},{})}},watch:{fields(t){this.currentFields=t}},methods:{switchFilter(t){this.$emit("switchFilter",t.currentTarget.value)},applyFilterConfig(){const t=this.currentFields.filter(t=>t.name!=ne);t.filter(t=>""==t.condition).length?alert("Please fill all the filter options"):this.$emit("applyFilterConfig",t)},addField(t){this.currentFields.push({name:ne})},removeField(t){this.currentFields.splice(t,1)}},template:'\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\tFilter {{ index + 1 }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\n\t\t\t\t\t\t\x3c!-- Numeric --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\x3c!-- Text --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\x3c!-- Timestamp and date --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\n\t\t\t\t\x3c!-- Filter save options --\x3e\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t'},ae={props:{fields:Array,selected:{type:Array,default:[]},names:{type:Object,default:{}}},emits:{hide:["fieldName"],show:["fieldName"]},data:function(){return{selectedFields:[]}},watch:{selected(t){this.selectedFields=t}},methods:{toggle(t){-1!=this.selectedFields.indexOf(t)?(this.selectedFields.splice(this.selectedFields.indexOf(t),1),this.$emit("hide",t)):(this.selectedFields.push(t),this.$emit("show",t))}},template:'\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{{ names[fieldToDisplay] || fieldToDisplay }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\n\t'};const se={jsonLines:"fa-file-lines",xlsx:"fa-file-excel",pdf:"fa-file-pdf",html:"fa-file-code",json:"fa-file",csv:"fa-file-csv"},re={jsonLines:"Download as JSONLINES",xlsx:"Download as XLSX",pdf:"Download as PDF",html:"Download as HTML",json:"Download as JSON",csv:"Download as CSV "};var oe={props:{tabulator:Object,config:{type:[Boolean,String,Function,Array,Object],default:!1},iconClass:[String,Array,Object]},computed:{currentConfig(){if(!this.config)return!1;let t=this.config;if(t instanceof Function)return[t];if(null===t)return[];if(!0===this.config&&(t=["csv"]),"[object String]"===Object.prototype.toString.call(t)&&(t=t.split(",")),"object"==typeof t&&!Array.isArray(t)){let a=[];for(var e in t){var n,i=t[e];i&&("[object String]"===Object.prototype.toString.call(i)?null!==(n=this.stringToFileFormatter(i))?a.push({icon:"fa-solid "+se[n],label:i===e?re[n]:e,formatter:n}):null!==(n=this.stringToFileFormatter(e))?a.push({icon:"fa-solid "+se[n],label:i,formatter:n}):alert("neither "+e+" nor "+i+" are supported download file types"):"object"!=typeof i||Array.isArray(i)?null!==(n=this.stringToFileFormatter(e))?a.push({icon:"fa-solid "+se[n],label:re[n],formatter:n}):alert(e+" is not a supported download file type"):null!==(n=this.stringToFileFormatter(e))?(void 0===i.formatter&&(i.formatter=n),void 0===i.label&&(i.label=re[n]),void 0===i.icon&&(i.icon=se[n]),a.push(i)):(void 0===i.label&&(i.label=e),a.push(i)))}t=a}if(Array.isArray(t)){if(t=t.map(t=>{if("[object String]"===Object.prototype.toString.call(t)){let e=this.stringToFileFormatter(t);return null===e?null:{icon:"fa-solid "+se[e],label:re[e],formatter:e}}if(t instanceof Function)return{formatter:t};if("object"==typeof t&&!Array.isArray(t)&&null!==t){if(t.formatter instanceof Function)return t;if(this.validateFileFormatter(t.formatter))return t}return null}).filter(t=>null!==t),t.length<2)return t;if(t.filter(t=>t.label||t.icon).length==t.length)return t;alert("Config not valid")}return[]}},methods:{stringToFileFormatter(t){let e=t.toLowerCase();return"jsonlines"==e?"jsonLines":["xlsx","pdf","html","json","csv"].includes(e)?e:null},validateFileFormatter(t){let e=this.stringToFileFormatter(t);if(!e)return alert(t+" is not a supported file formatter"),!1;if("xlsx"==e&&!window.XLSX)return alert("XLSX Library not loaded"),!1;if("pdf"==e){if(!window.jspdf)return alert("jsPDF Library not loaded"),!1;if(!new jspdf.jsPDF({}).autoTable)return alert("jsPDF-AutoTable Plugin not loaded"),!1}return!0},download(t){this.tabulator.download(t.formatter,t.file,t.options)}},template:'\n\t\n\t'};const le=new WeakMap;var de={mounted(t,e){let n=!1;le.set(t,e=>{if(!n)return;if(t.contains(e.target))return;const i=bootstrap.Collapse.getInstance(t);i&&i.hide()}),t.addEventListener("shown.bs.collapse",()=>{n=!0}),t.addEventListener("hide.bs.collapse",()=>{n=!1}),document.addEventListener("click",le.get(t),!0)},beforeUnmount(t,e){document.removeEventListener("click",le.get(t)),delete t.collapsibleAutoHideFunc}};window.Tabulator?.extendModule("layout","modes",{fitDataStretchFrozen(t,e){var n=0,i=this.table.rowManager.element.clientWidth,a=0,s=!1;t.forEach((t,e)=>{t.widthFixed||t.reinitializeWidth(),(this.table.options.responsiveLayout?t.modules.responsive.visible:t.visible&&!t.definition.frozen)&&(s=t),t.visible&&(n+=t.getWidth())}),s?(a=i-n+s.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(s.setWidth(0),this.table.modules.responsiveLayout.update()),a>0?s.setWidth(a):s.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()}});var ce={saveCustomFilter:t=>({method:"post",url:"/api/frontend/v1/filter/saveCustomFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,customFilterName:t.customFilterName}}),removeCustomFilter:t=>({method:"post",url:"/api/frontend/v1/filter/removeCustomFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId}}),applyFilterFields:t=>({method:"post",url:"/api/frontend/v1/filter/applyFilterFields",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterFields:t.filterFields}}),addFilterField:t=>({method:"post",url:"/api/frontend/v1/filter/addFilterField",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField}}),removeFilterField:t=>({method:"post",url:"/api/frontend/v1/filter/removeFilterField",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField}}),getFilterById:t=>({method:"get",url:"/api/frontend/v1/filter/getFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId}}),getFilter:t=>({method:"get",url:"/api/frontend/v1/filter/getFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType}})},ue=0;const pe={components:{CoreFetchCmpt:ee,FilterConfig:ie,FilterColumns:ae,TableDownload:oe},directives:{collapseAutoClose:de},emits:["nwNewEntry","click:new","tableBuilt","uuidDefined"],props:{onNwNewEntry:Function,title:String,description:String,sideMenu:{type:Boolean,default:!0},filterType:{type:String},tabulatorOptions:Object,tabulatorEvents:Array,tableOnly:Boolean,noColumnFilter:Boolean,reload:Boolean,reloadBtnInfotext:String,download:{type:[Boolean,String,Function,Array,Object],default:!1},newBtnShow:Boolean,newBtnClass:[String,Array,Object],newBtnDisabled:Boolean,newBtnLabel:String,uniqueId:String,idField:String,parentIdField:String,countOnly:Boolean,useSelectionSpan:{type:Boolean,default:!0}},data:function(){return{uuid:0,filterName:null,filterActive:!1,fields:null,dataset:null,datasetMetadata:null,selectedFields:null,filterFields:null,availableFilters:null,selectedFilter:null,fetchCmptRefresh:!1,fetchCmptApiFunction:null,fetchCmptApiFunctionParams:null,fetchCmptDataFetched:null,fetchResult:null,tabulator:null,tableBuilt:!1,tabulatorHasSelector:!1,selectedData:[],persistence:{sort:!0,columns:!0,filter:!1,headerFilter:!1,group:!1,page:!1}}},computed:{notSelectedFields(){return this.fields&&this.selectedFields?this.fields.filter(t=>-1===this.selectedFields.indexOf(t)):null},filteredData(){return this.dataset?JSON.parse(JSON.stringify(this.dataset)):[]},filteredColumns(){let t=JSON.parse(JSON.stringify(this.fields))||[],e=JSON.parse(JSON.stringify(this.selectedFields))||[],n=null;if(this.tabulatorOptions&&this.tabulatorOptions.hasOwnProperty("columns")&&(n=this.tabulatorOptions.columns),!Array.isArray(n)||Array.isArray(n)&&n.length=0,n.push(t)}}else for(let i of n)i.visible=e.indexOf(i.field)>=0||-1==t.indexOf(i.field),i.hasOwnProperty("resizable")&&(i.resizable=i.visible);return n},fieldIdsForVisibilty(){return this.tableBuilt?this.tabulator.getColumns().filter(t=>{let e=t.getDefinition();return!e.frozen&&e.title&&"responsiveCollapse"!=e.formatter}).map(t=>t.getField()):[]},fieldNames(){return this.tableBuilt?this.tabulator.getColumns().reduce((t,e)=>(t[e.getField()]=e.getDefinition().title,t),{}):{}},idExtra(){return this.uuid?"-"+this.uuid:""},columnsForFilter(){if(!this.filteredColumns||!this.datasetMetadata)return[];const t=this.filteredColumns.reduce((t,e)=>(t[e.field]=e.title,t),{});return this.datasetMetadata.map(e=>({...e,title:t[e.name]}))}},methods:{reloadTable(){this.tableOnly?this.tabulator.setData():this.getFilter()},async initTabulator(){let t="< Phrasen Plugin not loaded! >";this.$p&&(await this.$p.loadCategory("ui"),t=this.$p.t("ui/keineDatenVorhanden")),this.tableOnly||await new Promise(t=>{const e=window.location.hash?window.location.hash.slice(1):null,n=e=>{this.setRenderData(e),t()};null===e?this.startFetchCmpt(t=>this.$api.call(ce.getFilter(t)),null,n):this.startFetchCmpt(t=>this.$api.call(ce.getFilterById(t)),{filterId:e},n)});let e={layout:"fitDataStretchFrozen",movableColumns:!0,columnDefaults:{tooltip:!0},placeholder:t,persistence:this.persistence,...this.tabulatorOptions||{}};if(void 0===e.height&&void 0===e.minHeight&&void 0===e.maxHeight&&(e.height=500),this.tableOnly?e.columns.forEach(t=>{void 0===t.visible&&(t.visible=!0)}):(e.data=this.filteredData,e.columns=this.filteredColumns),(e.selectable||e.columns&&e.columns.filter(t=>"rowSelection"==t.formatter).length)&&(this.tabulatorHasSelector=!0),this.idField&&(this.parentIdField&&(e.dataTree=!0),e.index=this.idField),this.tabulator=new Tabulator(this.$refs.table,e),Array.isArray(this.tabulatorEvents)&&this.tabulatorEvents.length>0)for(let t of this.tabulatorEvents)this.tabulator.on(t.event,t.handler);this.tabulator.on("tableBuilt",()=>{this.tableBuilt=!0,this.$emit("tableBuilt")}),this.tabulator.on("rowSelectionChanged",t=>{this.selectedData=t}),this.parentIdField&&this.idField&&this.tabulator.on("dataLoading",t=>{let e=[];for(let n=0;n{const t=this.tabulator.getColumns();this.fields=t.map(t=>t.getField()),this.selectedFields=t.filter(t=>t.isVisible()).map(t=>t.getField()),this.tabulator.options.persistence.headerFilter&&this._setHeaderFilter()}),this.tabulator.on("dataFiltered",t=>{this.filterActive=t.length>0})},updateTabulator(){this.tabulator&&(this.tableBuilt?this._updateTabulator():this.tabulator.on("tableBuilt",this._updateTabulator))},_updateTabulator(){this.tabulatorHasSelector=this.tabulatorOptions.selectable||this.filteredColumns.filter(t=>"rowSelection"==t.formatter).length,this.tabulator.setColumns(this.filteredColumns),this.tabulator.setData(this.filteredData),this._setHeaderFilter()},clearFilters(){this.tabulator.getHeaderFilters().forEach(t=>{this.tabulator.setHeaderFilterValue(t.field,"")}),this.tabulator.clearFilter(),this.filterActive=!1},_setHeaderFilter(){this.tabulator.getHeaderFilters().forEach(t=>{this.tabulator.setHeaderFilterValue(t.field,t.value)})},getFilter(){null===this.selectedFilter?this.startFetchCmpt(t=>this.$api.call(ce.getFilter(t)),null,this.render):this.startFetchCmpt(t=>this.$api.call(ce.getFilterById(t)),{filterId:this.selectedFilter},this.render)},setRenderData(t){this.fetchResult=t,this.filterName=t.filterName,this.dataset=t.dataset,this.datasetMetadata=t.datasetMetadata,this.fields=t.fields,this.selectedFields=t.selectedFields,this.filterFields=[];for(let e=0;ethis.$api.call(ce.saveCustomFilter(t)),{customFilterName:t},this.getFilter)},handlerRemoveCustomFilter(t){let e=t.currentTarget.getAttribute("href").substring(1);e===this.selectedFilter&&(this.selectedFilter=null),this.startFetchCmpt(t=>this.$api.call(ce.removeCustomFilter(t)),{filterId:e},this.getFilter)},handlerGetFilterById:function(t){let e=null,n=t.currentTarget.getAttribute("href");e=null==n?t.currentTarget.value:n.substring(1),this.switchFilter(e)},switchFilter(t){this.selectedFilter=t,this.getFilter()},applyFilterConfig(t){this.selectedFilter=null,this.startFetchCmpt(t=>this.$api.call(ce.applyFilterFields(t)),{filterFields:t},this.getFilter)},appendChild(t,e){let n=e[this.parentIdField];for(let i=0;i{this.tableOnly||(this.selectedFilter=window.location.hash?window.location.hash.slice(1):null,this.render(this.fetchResult))})},template:'\n\t\t\x3c!-- Load filter data --\x3e\n\t\t\n\t\t\n\n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{{ selectedData.length }} ausgewählt\n\t\t\t\t\t\t Mit {{ selectedData.length }} ausgewählten:\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t[ {{ filterName }} ]\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\n\n\t\t\x3c!-- Tabulator --\x3e\n\t\t
    \n\t'};var he={props:{data:Object,title:{type:String}},data:()=>({}),created(){},template:'\n\t'},me={props:{data:{type:String}},data:()=>({}),template:"\n
    \n
    \n {{$p.t('profil','fhAusweisStatus',[data])}}\n
    \n
    "},fe={props:{data:{type:String},title:{type:String,required:!0},mobile:{type:Boolean,default:!1}},methods:{hideCollapse:function(){this.collapseOpen=!1},showCollapse:function(){this.collapseOpen=!0}},data:()=>({collapseOpen:!1}),template:'\n
    \n \n \n
    '},ge={props:{data:Object,view:String,withZustelladresse:{type:Boolean,default:!0}},data:()=>({}),created(){},template:'\n \n
    \n \n \x3c!-- column 1 in the address row --\x3e\n
    \n \n
    \n \n
    \n
    \n
    {{$p.t(\'person\',\'strasse\')}}
    \n {{data.strasse}} \n
    \n
    \n \n \x3c!-- column 2 in the address row --\x3e\n
    \n
    \n
    {{$p.t(\'global\',\'typ\')}}
    \n {{data.typ}} \n
    \n
    \n \n
    \n
    \n
    {{$p.t(\'person\',\'ort\')}}
    \n {{data.ort}} \n
    \n
    \n
    \n
    \n
    {{$p.t(\'person\',\'plz\')}}
    \n {{data.plz}} \n
    \n
    \n\n
    \n
    \n
    {{$p.t(\'person\',\'zustelladresse\')}}
    \n
    \n \n
    \n
    \n
    \n
    \n'},ve={props:{view:String,data:Object},data:()=>({}),created(){},template:'\n\t\n'},be={data:()=>({}),props:{title:{type:String,required:!0},data:{type:Array}},template:'\n
    \n
    \n {{title}}\n
    \n
    \n \x3c!-- HIER SIND DIE EMAILS --\x3e\n
    \n
    \n\t\t\t\t\n
    \n
    \n
    \n
    '},ye={data:()=>({}),props:{data:{type:Object},title:{type:String}},inject:{studiengang_kz:{from:"studiengang_kz",default:!1}},computed:{getLinkGruppeListe(){return!1===this.studiengang_kz?"":this.data.gruppe?.value&&this.data.verband?.value&&this.data.semester?.value?FHC_JS_DATA_STORAGE_OBJECT.app_root+"cis/private/stud_in_grp.php?kz="+this.studiengang_kz+"&sem="+this.data.semester.value+"&verband="+this.data.verband.value+"&grp="+this.data.gruppe.value:""},getLinkVerbandListe(){return!1===this.studiengang_kz?"":this.data.verband?.value&&this.data.semester?.value?FHC_JS_DATA_STORAGE_OBJECT.app_root+"cis/private/stud_in_grp.php?kz="+this.studiengang_kz+"&sem="+this.data.semester.value+"&verband="+this.data.verband.value:""},getLinkSemesterListe(){return!1===this.studiengang_kz?"":this.data.semester?.value?FHC_JS_DATA_STORAGE_OBJECT.app_root+"cis/private/stud_in_grp.php?kz="+this.studiengang_kz+"&sem="+this.data.semester.value:""}},created(){},template:'\n
    \n
    {{title}}
    \n
    \n
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{entry.label }}
    \n\t\t\t\n\t\t\t\t\t\t\x3c!-- print Telefon link --\x3e\n\t\t\t\t\t\t{{entry.value ?? \'-\'}}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\x3c!-- print semester link --\x3e\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ entry.value }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\x3c!-- print verband link --\x3e\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ entry.value }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\x3c!-- print gruppe link --\x3e\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ entry.value }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\x3c!-- else print information --\x3e\n\t\t\t\t\t\t{{ entry.value ?? \'-\'}}\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    '},we={profilViewData(t){let e="/api/frontend/v1/Profil/profilViewData";return t&&(e+=`/${t}`),{method:"get",url:e}},fotoSperre:t=>({method:"get",url:`/api/frontend/v1/Profil/fotoSperre/${t}`}),isStudent:t=>({method:"get",url:"/api/frontend/v1/Profil/isStudent",params:{uid:t}}),isMitarbeiter:t=>({method:"get",url:`/api/frontend/v1/Profil/isMitarbeiter/${t}`}),getZustellAdresse:()=>({method:"get",url:"/api/frontend/v1/Profil/getZustellAdresse"}),getZustellKontakt:()=>({method:"get",url:"/api/frontend/v1/Profil/getZustellKontakt"}),getGemeinden:(t,e)=>({method:"get",url:`/api/frontend/v1/Profil/getGemeinden/${t}/${e}`}),getAllNationen:()=>({method:"get",url:"/api/frontend/v1/Profil/getAllNationen"})},_e={components:{DmsItem:{emits:["delete"],props:{modelValue:{type:[File,Object],required:!0}},data:()=>({preview:""}),watch:{modelValue(t){"application/x.fhc-dms+json"==t.type&&t.text().then(t=>{const e=JSON.parse(t);this.preview=e.preview||""})}},template:'\n\t
  • \n\t\t\n\t\t{{ modelValue.name }}\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t
  • '}},emits:["update:modelValue"],props:{modelValue:{type:[FileList,Array],required:!0},multiple:Boolean,id:String,name:String,inputClass:[String,Array,Object],noList:Boolean,accept:{type:String,default:""},disabled:{type:Boolean,default:!1}},methods:{stringifyFile:t=>JSON.stringify({lastModified:t.lastModified,lastModifiedDate:t.lastModifiedDate,name:t.name,size:t.size,type:t.type}),addFiles(t){if(!this.multiple)return this.$emit("update:modelValue",t.target.files);const e=new DataTransfer,n=[];for(var i of this.modelValue)e.items.add(i),n.push(this.stringifyFile(i));for(var i of t.target.files)n.indexOf(this.stringifyFile(i))<0&&e.items.add(i);this.$emit("update:modelValue",e.files)},removeFile(t){const e=Array.from(this.modelValue)[t],n=new DataTransfer;for(var i of this.modelValue)i!==e&&n.items.add(i);this.$emit("update:modelValue",n.files)}},watch:{modelValue(t){if(!t)return;if(t instanceof FileList){if(!this.$refs.upload)return;return this.$refs.upload.files=t}const e=new DataTransfer;for(var n of t)if(n instanceof File)e.items.add(n);else{const t=new File([JSON.stringify(n)],n.name,{type:"application/x.fhc-dms+json"});e.items.add(t)}this.$emit("update:modelValue",e.files)}},template:'\n\t
    \n\t\t\n\t\t
      \n\t\t\t\n\t\t\t\n\t\t
    \n\t
    '},ke={ //! API calls for profil update requests -getStatus:()=>({method:"get",url:"/api/frontend/v1/ProfilUpdate/getStatus"}),getTopic:()=>({method:"get",url:"/api/frontend/v1/ProfilUpdate/getTopic"}),acceptProfilRequest:({profil_update_id:t,uid:e,status_message:n,topic:i,requested_change:a})=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/acceptProfilRequest",params:{profil_update_id:t,uid:e,status_message:n,topic:i,requested_change:a}}),denyProfilRequest:({profil_update_id:t,uid:e,topic:n,status_message:i})=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/denyProfilRequest",params:{profil_update_id:t,uid:e,topic:n,status_message:i}}),insertFile:(t,e=null)=>({method:"post",url:`/api/frontend/v1/ProfilUpdate/insertFile/${e}`,params:t}),updateProfilbild:t=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/updateProfilbild",params:t}),getProfilUpdateWithPermission:t=>({method:"get",url:"/api/frontend/v1/ProfilUpdate/getProfilUpdateWithPermission"+(""!==t?"/"+encodeURIComponent(t):"")}),getProfilRequestFiles:t=>({method:"get",url:`/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${t}`}),selectProfilRequest:(t=null,e=null)=>({method:"get",url:"/api/frontend/v1/ProfilUpdate/selectProfilRequest",params:{...t?{uid:t}:{},...e?{id:e}:{}}}),insertProfilRequest:(t,e,n=null)=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/insertProfilRequest",params:{topic:t,payload:e,...n?{fileID:n}:{}}}),updateProfilRequest:(t,e,n,i=null)=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/updateProfilRequest",params:{topic:t,payload:e,ID:n,...i?{fileID:i}:{}}}),deleteProfilRequest:t=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/deleteProfilRequest",params:{requestID:t}})},be={data:()=>({dmsData:[]}),components:{Dms:ge,BsModal:s},mixins:[s],props:{titel:{type:String},files:{type:Array},updateID:{type:Boolean},onHideBsModal:Function,onHiddenBsModal:Function,onHidePreventedBsModal:Function,onShowBsModal:Function,onShownBsModal:Function},methods:{async uploadImage(){if(this.dmsData){let t=new FormData;t.append("files[]",this.dmsData[0]),await this.$api.call(ve.updateProfilbild(t)).then(t=>{this.$fhcAlert.alertSuccess(this.$p.t("global","hochgeladen")),this.modal.hide()})}}},mounted(){this.modal=this.$refs.modalContainer.modal,this.files&&(this.dmsData=this.files)},popup(t){return s.popup.bind(this),s.popup(null,t)},template:'\n\n\t\n\t\t\n\t\t\n\t\n '},ye={props:{title:{type:String},data:{type:Object},fotoStatus:{type:Boolean,default:!0}},components:{ImageUpload:be},data(){return{FotoSperre:this.data.foto_sperre}},emits:["showEditProfilModal"],inject:["isEditable"],methods:{showModal(){this.$refs.imageUpload.show()},sperre_foto_function(){this.data&&this.$api.call(fe.fotoSperre(!this.FotoSperre)).then(t=>{this.FotoSperre=t.data.foto_sperre})}},computed:{get_image_base64_src:function(){return this.data.foto?"data:image/jpeg;base64,"+this.data.foto:""},name:function(){return{vorname:this.data.Vorname,nachname:this.data.Nachname}},profilInfo:function(){let t={},e=["Vorname","Nachname","foto_sperre","foto"];return Object.keys(this.data).forEach(n=>{e.includes(n)||(t[n]=this.data[n])}),t}},template:'\n\n
    \n\t\n
    \n
    \n
    \n \n
    \n
    \n {{title}}\n
    \n
    \n
    \n
    \n
    \n \x3c!-- SQUEEZING THE IMAGE INSIDE THE FIRST INFORMATION COLUMN --\x3e\n \x3c!-- START OF THE FIRST ROW WITH THE PROFIL IMAGE --\x3e\n
    \n
    \n
    \n profile picture\n \x3c!-- LOCKING IMAGE FUNCTIONALITY --\x3e\n
    \n \n
    \n\t\t\t\t\t\t
    \n \n
    \n
    \n
    \n \x3c!-- END OF THE ROW WITH THE IMAGE --\x3e\n
    \n \x3c!-- END OF SQUEEZE --\x3e\n \x3c!-- COLUMNS WITH MULTIPLE ROWS NEXT TO PROFIL PICTURE --\x3e\n
    \n
    \n
    \n
    \n
    {{$p.t(\'profilUpdate\',\'vorname\')}}
    \n {{name.vorname}} \n
    \n
    \n
    \n
    \n
    {{$p.t(\'profilUpdate\',\'nachname\')}}
    \n {{name.nachname}} \n
    \n
    \n
    \n
    \n
    \n
    \n
    {{$p.t(\'profil\',bez)}}
    \n {{wert?wert:\'-\'}} \n
    \n
    \n
    \n
    \n
    \n'},we={name:"EditProfilSelect",components:{Kontakt:pe,EditKontakt:{props:{data:Object},data:()=>({originalValue:null,zustellKontakteCount:null}),inject:["getZustellkontakteCount"],methods:{updateValue:function(t,e){this.data[e]="zustellung"===e?t.target.checked:""===t.target.value?null:t.target.value,this.$emit("profilUpdate",this.isChanged?this.data:null),this.zustellKontakteCount=this.getZustellkontakteCount()}},computed:{showZustellKontakteWarning:function(){if(JSON.parse(this.originalValue).zustellung)return!1;const t=this.zustellKontakteCount.filter(t=>t.kontakttyp===this.data?.kontakttyp);return this.zustellKontakteCount.some(t=>t.kontakt_id===this.data.kontakt_id)?this.kontakteOfSelectedType.length>=2&&this.data.zustellung:this.data.zustellung&&t.length},isChanged:function(){return!(!this.data.kontakt||!this.data.kontakttyp)&&JSON.stringify(this.data)!==this.originalValue}},created(){this.originalValue=JSON.stringify(this.data),this.zustellKontakteCount=this.getZustellkontakteCount()},template:'\n\n
    \n\n
    \n\n\n
    \n
    {{$p.t(\'profilUpdate\',\'kontaktTyp\')}}
    \n\n \n
    \n\n
    \n
    \n\n \x3c!-- rendering KONTAKT emails --\x3e\n\n\n
    \n
    {{data.kontakttyp?data.kontakttyp:$p.t(\'global\',\'kontakt\')}}
    \n\n \n
    \n\n
    \n
    \n\n
    \n
    {{$p.t(\'global\',\'anmerkung\')}}
    \n\n \n
    \n\n
    \n\n \x3c!-- warning message for too many zustellungs Kontakte --\x3e\n
    \n
    \n {{$p.t(\'profilUpdate\',\'zustell_kontakte_warning\')}}\n
    \n
    \n \x3c!-- End of warning --\x3e\n\n
    \n {{$p.t(\'profilUpdate\',\'zustellungsKontakt\')}}\n\n \n
    \n
    \n '},Adresse:ue,EditAdresse:{components:{AutoComplete:primevue.autocomplete,Dms:ge},props:{data:Object,files:{type:Array,default:[]}},inject:["getZustelladressenCount","updateFileID","isMitarbeiter"],data:()=>({gemeinden:[],ortschaftnamen:[],selectedNation:null,nationenList:[],originalValue:null,zustellAdressenCount:null,dmsData:[],fileschanged:!1}),watch:{"data.gemeinde":function(t,e){this.$emit("profilUpdate",this.isChanged?this.data:null)},"data.ort":function(t,e){this.$emit("profilUpdate",this.isChanged?this.data:null)}},methods:{autocompleteSearchGemeinden:function(t){this.gemeinden=this.gemeinden.map(t=>t)},autocompleteSearchOrtschaftsnamen:function(t){this.ortschaftnamen=this.ortschaftnamen.map(t=>t)},getGemeinde:function(){this.data.nation&&"A"===this.data.nation&&this.data.plz&&this.data.plz>999&&this.data.plz<32e3?this.$api.call(fe.getGemeinden(this.data.nation,this.data.plz)).then(t=>{t.data.length&&(this.gemeinden=[...new Set(t.data.map(t=>t.name))],this.ortschaftnamen=[...new Set(t.data.map(t=>t.ortschaftsname))])}):this.gemeinden=[]},updateValue:function(t,e){"zustelladresse"===e?this.data[e]=t.target.checked:"files"===e?(this.dmsData.length>0&&"application/x.fhc-dms+json"!==this.dmsData[0].type&&(this.fileschanged=!0),this.updateFileID(this.dmsData)):this.data[e]=""===t.target.value?null:t.target.value,this.$emit("profilUpdate",this.isChanged?this.data:null),this.zustellAdressenCount=this.getZustelladressenCount()},deleteDmsData:function(){this.dmsData=[],this.updateValue(null,"files")}},computed:{showZustellAdressenWarning:function(){return!JSON.parse(this.originalValue).zustelladresse&&(this.zustellAdressenCount.includes(this.data.adresse_id)?this.zustellAdressenCount.length>=2&&this.data.zustelladresse:this.data.zustelladresse&&this.zustellAdressenCount.length)},isChanged:function(){if(!(this.data.strasse&&this.data.plz&&this.data.ort&&this.data.typ&&0!==this.dmsData.length))return!1;return this.originalValue!==JSON.stringify(this.data)||this.fileschanged}},created(){this.$api.call(fe.getAllNationen()).then(t=>{this.nationenList=t.data,this.getGemeinde()}),this.originalValue=JSON.stringify(this.data),this.zustellAdressenCount=this.getZustelladressenCount()},mounted(){this.files&&(this.dmsData=this.files)},template:'\n
    \n \x3c!-- warning message for too many zustellungs Adressen --\x3e\n
    \n
    \n\t {{$p.t(\'profilUpdate\',\'zustell_adressen_warning\')}}\n
    \n
    \n \x3c!-- End of warning --\x3e\n\n\n
    \n
    \n \n \n
    \n
    \n\n \x3c!-- NATION --\x3e\n
    \n
    \n
    {{$p.t(\'person\',\'nation\')}}*
    \n \n
    \n
    \n\n \x3c!-- PLZ --\x3e\n
    \n
    \n
    {{$p.t(\'person\',\'plz\')}}*
    \n \n
    \n
    \n\n \x3c!-- GEMEINDE --\x3e\n
    \n
    \n
    {{$p.t(\'person\',\'gemeinde\')}}*
    \n \n
    \n
    \n\n \x3c!-- ORT --\x3e\n
    \n
    \n
    {{$p.t(\'person\',\'ort\')}}*
    \n \n
    \n
    \n\n \x3c!-- STRASSE --\x3e\n
    \n
    \n
    {{$p.t(\'person\',\'strasse\')}}*
    \n \n
    \n
    \n \n \x3c!-- ADRESSEN TYP --\x3e\n
    \n
    \n
    {{$p.t(\'profilUpdate\',\'kontaktTyp\')}}*
    \n \n
    \n
    \n\n\t
    \n\t\t
    \n\t\t\t
    {{$p.t(\'profilUpdate\',\'meldebestaetigung\')}}*
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t
     
    \n\t\t\t\n\t\t
    \n\t
    \n\n
    \n '},Status:{components:{Adresse:ue,Kontakt:pe},inject:["profilUpdateTopic"],data:()=>({files:null}),methods:{getDocumentLink:function(t){return FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/Cis/ProfilUpdate/show/${t}`}},computed:{getComponentView:function(){return this.topic==this.profilUpdateTopic["Private Adressen"]||this.topic==this.profilUpdateTopic["Add Adresse"]||this.topic==this.profilUpdateTopic["Delete Adresse"]?"Adresse":this.topic==this.profilUpdateTopic["Private Kontakte"]||this.topic==this.profilUpdateTopic["Add Kontakt"]||this.topic==this.profilUpdateTopic["Delete Kontakt"]?"Kontakt":"text_input"},cardHeader:function(){return this.topic==this.profilUpdateTopic["Delete Addresse"]||this.topic==this.profilUpdateTopic["Delete Kontakt"]?"Delete":this.topic==this.profilUpdateTopic["Add Adresse"]||this.topic==this.profilUpdateTopic["Add Kontakt"]?"Add":"Update"}},props:{data:{type:Object},view:{type:String},status:{type:String},status_message:{type:String},status_timestamp:{type:String},updateID:{type:Number},topic:{type:String}},created(){this.$api.call(ve.getProfilRequestFiles(this.updateID)).then(t=>{this.files=t.data})},template:'\n
    \n\n
    \n
    \n
    {{$p.t(\'global\',\'status\')}}
    \n {{status}} \n
    \n
    \n\n
    \n
    \n
    {{$p.t(\'global\',\'datum\')}}
    \n {{status_timestamp}} \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    {{$p.t(\'profilUpdate\',\'statusMessage\')}}
    \n \n
    \n
    \n
    \n\n\n
    \n
    \n \n {{cardHeader}} \n
    \n
    \n \n \n \n
    \n
    \n\n\t
    \n\t\t
    {{$p.t(\'profilUpdate\',\'nachweisdokumente\')}}
    \n\t\t
    \n\t\t\t{{file.name}}\n\t\t
    \n\t
    \n '},TextInputDokument:{data:()=>({dmsData:[],originalValue:null}),components:{Dms:ge},props:{data:{type:Object},withFiles:{type:Boolean,default:!1},files:{type:Array},updateID:{type:Boolean}},inject:["updateFileID"],computed:{didFilesChange:function(){this.updateFileID(this.dmsData);let t=!1;return this.files?(Array.from(this.dmsData).forEach(e=>{this.files.some(t=>t.name!==e.name)&&(t=!0)}),!(this.dmsData.length==this.files.length)||t):!!Array.from(this.dmsData).length},didDataChange:function(){return JSON.stringify(this.data)!==this.originalValue},isChanged:function(){return this.withFiles?this.updateID?(this.didDataChange||this.didFilesChange)&&this.dmsData.length:this.didDataChange&&this.didFilesChange:this.didDataChange}},emits:["profilUpdate"],watch:{dmsData(t){this.emitChanges()}},methods:{stringifyFile:t=>JSON.stringify({lastModified:t.lastModified,lastModifiedDate:t.lastModifiedDate,name:t.name,size:t.size,type:t.type}),emitChanges:function(){this.isChanged?this.$emit("profilUpdate",{value:this.data.value}):this.$emit("profilUpdate",null)}},mounted(){this.originalValue=JSON.stringify(Vue.toRaw(this.data)),this.files&&(this.dmsData=this.files)},template:'\n\n

    {{$p.t(\'profilUpdate\',\'profilUpdateInformationMessage\',[data.titel])}}

    \n\n
    \n
    {{data.titel?data.titel:$p.t(\'global\',\'titel\')}}
    \n\n \n\n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n '}},inject:["profilUpdateTopic","isMitarbeiter"],props:{list:Object,size:{type:Number,default:null},ariaLabel:{type:String,required:!0},profilUpdate:String,topic:String,breadcrumb:String},emits:{"update:profilUpdate":null,"update:topic":null,"update:breadcrumb":null,submit:null,select:null},data(){return{view:null,data:null,breadcrumbItems:[],modal_topic:this.topic,properties:null}},methods:{addItem:function(){this.view=this.modal_topic==this.profilUpdateTopic["Private Kontakte"]?"EditKontakt":"EditAdresse",this.modal_topic=this.modal_topic==this.profilUpdateTopic["Private Kontakte"]?this.profilUpdateTopic["Add Kontakt"]:this.profilUpdateTopic["Add Adresse"],this.$emit("update:topic",this.modal_topic),this.breadcrumbItems.push(this.modal_topic),this.$emit("update:breadcrumb",this.breadcrumbItems),this.data="EditAdresse"==this.view?{add:!0,adresse_id:null,strasse:null,typ:null,plz:null,ort:null,zustelladresse:!1}:{add:!0,kontakt_id:null,kontakttyp:null,kontakt:null,anmerkung:null,zustellung:!1}},deleteItem:function(t){t.data.delete=!0,this.$emit("update:profilUpdate",t.data),this.modal_topic=this.modal_topic==this.profilUpdateTopic["Private Adressen"]?this.profilUpdateTopic["Delete Adresse"]:this.profilUpdateTopic["Delete Kontakt"],this.$emit("update:topic",this.modal_topic),this.$emit("submit")},profilUpdateEmit:function(t){this.$emit("update:profilUpdate",t)},updateOptions:function(t,e){this.properties=e,this.data=e.data,this.view=e.view,e.title?(this.modal_topic=e.topic,this.$emit("update:topic",this.modal_topic),this.breadcrumbItems.push(e.title)):e.data.kontakttyp?(this.breadcrumbItems.push(e.data.kontakttyp),this.breadcrumbItems.push(e.data.kontakt)):e.data.strasse&&this.breadcrumbItems.push(e.data.strasse),this.$emit("update:breadcrumb",this.breadcrumbItems)}},computed:{},created(){this.properties={...this.list},this.data=this.list.data?JSON.parse(JSON.stringify(this.list.data)):null,this.view=this.list.view?JSON.parse(JSON.stringify(this.list.view)):null},mounted(){},template:'\n \n \n '},_e={components:{BsModal:s},props:{timeout:{type:Number,default:300}},data:()=>({t:null,state:0}),methods:{show(){switch(this.state){case 0:return this.timeout?(this.state=1,void(this.t=window.setTimeout(()=>this.$refs.modal.show(),this.timeout))):this.$refs.modal.show();case 4:return window.setTimeout(()=>this.show(),1)}},hide(){switch(this.state){case 1:return window.clearTimeout(this.t);case 2:return window.setTimeout(()=>this.hide(),1);case 3:this.$refs.modal.hide()}}},mounted(){this.$refs.modal.$refs.modal.addEventListener("show.bs.modal",()=>{this.state=2}),this.$refs.modal.$refs.modal.addEventListener("shown.bs.modal",()=>{this.state=3}),this.$refs.modal.$refs.modal.addEventListener("hide.bs.modal",()=>{this.state=4}),this.$refs.modal.$refs.modal.addEventListener("hidden.bs.modal",()=>{this.state=0})},template:'\n\t\n\t\tLoading...\n\t'},ke={components:{BsModal:s,Alert:r,EditProfilSelect:we,Loader:_e},mixins:[s],props:{isMitarbeiter:{type:Boolean,default:!1},value:Object,titel:String,zustelladressenCount:Function,zustellkontakteCount:Function,onHideBsModal:Function,onHiddenBsModal:Function,onHidePreventedBsModal:Function,onShowBsModal:Function,onShownBsModal:Function},data(){return{topic:null,profilUpdate:null,editData:this.value,fileID:null,breadcrumb:null,loading:!1,result:!1,info:null}},inject:["setLoading"],provide(){return{updateFileID:this.updateFileIDFunction,isMitarbeiter:this.isMitarbeiter}},methods:{updateFileIDFunction:function(t){this.fileID=t},handleFailedError:function(t){console.error(t),this.loading=!1,this.setLoading(!1),this.result=!1,this.hide()},async submitProfilChange(){if(this.topic&&this.profilUpdate){if(this.fileID){const t=await this.uploadFiles(this.fileID);this.fileID=t||null}const t=t=>{t.data.error?(this.result=!1,r.popup("Ein Fehler ist aufgetreten: "+JSON.stringify(t.data.retval))):(this.result=!0,r.popup("Ihre Anfrage wurde erfolgreich gesendet. Bitte warten Sie, während sich das Team um Ihre Anfrage kümmert."))};this.loading=!0,this.setLoading(!0),this.editData.updateID?this.$api.call(ve.updateProfilRequest(this.topic,this.profilUpdate,this.editData.updateID,this.fileID?this.fileID[0]:null)).then(e=>{t(e)}).catch(t=>this.$fhcAlert.handleSystemError).finally(()=>{this.loading=!1,this.setLoading(!1),this.hide()}):this.$api.call(ve.insertProfilRequest(this.topic,this.profilUpdate,this.fileID?this.fileID[0]:null)).then(e=>{t(e)}).catch(t=>this.$fhcAlert.handleSystemError).finally(()=>{this.loading=!1,this.setLoading(!1),this.hide()})}},uploadFiles:async function(t){if("application/x.fhc-dms+json"!==t[0].type){let e=new FormData;e.append("files[]",t[0]);return this.editData.updateID?await this.$api.call(ve.insertFile(e,this.editData.updateID)).then(t=>t.data?.map(t=>t.dms_id)):await this.$api.call(ve.insertFile(e)).then(t=>t.data?.map(t=>t.dms_id))}return!1}},computed:{showFooter:function(){switch(this.value.view){case"Status":case"Kontakt":case"Adresse":return!1;default:return!0}}},created(){this.editData.topic&&(this.topic=this.editData.topic)},mounted(){this.modal=this.$refs.modalContainer.modal},popup(t){return s.popup.bind(this),s.popup(null,t)},template:'\n\n\t\n\t\n\t\x3c!-- optional footer --\x3e\n\t\n \x3c!-- end of optional footer --\x3e \n'},Ae={components:{EditProfil:ke},props:{data:{type:Object}},inject:["getZustellkontakteCount","getZustelladressenCount","profilUpdateStates","profilUpdateTopic"],emits:["fetchUpdates"],data(){return{showUpdateModal:!1,content:null,editProfilTitle:this.$p.t("profil","profilBearbeiten")}},methods:{hideEditProfilModal:function(){this.$refs.updateEditModal.result&&this.$emit("fetchUpdates"),this.showUpdateModal=!1},async showEditProfilModal(t){let e=this.getView(t.topic,t.status),n=null,i=null,a=null,s=!1;if("TextInputDokument"===e){n={titel:t.topic,value:t.requested_change.value};a=await this.$api.call(ve.getProfilRequestFiles(t.profil_update_id)).then(t=>t.data),a&&(s=!0)}else n=t.requested_change;if(i={updateID:t.profil_update_id,view:e,data:n,withFiles:s,topic:t.topic,files:a},"EditAdresse"===e){const e=await this.$api.call(fe.isMitarbeiter(t.uid)).then(t=>t.data);e&&(i.isMitarbeiter=e);a=await this.$api.call(ve.getProfilRequestFiles(t.profil_update_id)).then(t=>t.data),i.files=a}t.status!==this.profilUpdateStates.Pending&&(i.status=t.status,i.status_message=t.status_message,i.status_timestamp=t.status_timestamp),this.content=i,this.editProfilTitle=t.topic,i&&(this.showUpdateModal=!0,Vue.nextTick(()=>{this.$refs.updateEditModal.show()}))},deleteRequest:function(t){this.$api.call(ve.deleteProfilRequest(t.profil_update_id)).then(t=>{t.data.error?console.error("error happened",t.data):this.$emit("fetchUpdates")})},getView:function(t,e){if(e!==this.profilUpdateStates.Pending)return"Status";switch(t){case this.profilUpdateTopic["Private Kontakte"]:case this.profilUpdateTopic["Add Kontakt"]:return"EditKontakt";case this.profilUpdateTopic["Delete Kontakt"]:return"Kontakt";case this.profilUpdateTopic["Private Adressen"]:case this.profilUpdateTopic["Add Adresse"]:return"EditAdresse";case this.profilUpdateTopic["Delete Adresse"]:return"Adresse";default:return"TextInputDokument"}}},created(){},computed:{},template:'\n
    \n \n
    {{$p.t(\'profilUpdate\',\'profilUpdates\')}}
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {{$p.t(\'profilUpdate\',\'topic\')}}{{$p.t(\'global\',\'status\')}}{{$p.t(\'global\',\'datum\')}}{{$p.t(\'ui\',\'aktion\')}}
    {{item.topic}}{{item.status}}{{item.status_timestamp?item.status_timestamp:item.insertamum}}
    \n
    \n
    \n
    \n'};function xe(t,e,n){let i=document.createElement("div"),a=null,s=t.getValue();if(Array.isArray(s)){const t=s[0]?new Date(s[0]):null,e=s[1]?new Date(s[1]):null;a=[t,e]}return Vue.createApp({components:{PrimevueCalendar:primevue.calendar},data:()=>({val:a}),watch:{val(t){n(t)}},template:'\n\t\t\t\t '}).use(primevue.config.default).mount(i),i}primevue||console.error("PrimeVue not loaded!"),Tabulator.extendModule("filter","filters",{dates:(t,e)=>{if(!t)return!0;let n=new Date(e);if(Array.isArray(t)){let e=new Date(t[0]);if(t[1]){let i=new Date(t[1]);return i.setHours(23,59,59,999),n>=e&&n<=i}return n.toDateString()===e.toDateString()}let i=new Date(t);return n.toDateString()===i.toDateString()}});var Se={components:{CoreFilterCmpt:oe,Mailverteiler:le,AusweisStatus:de,QuickLinks:ce,Adresse:ue,Kontakt:pe,ProfilEmails:he,RoleInformation:me,ProfilInformation:ye,FetchProfilUpdates:Ae,EditProfil:ke},inject:["sortProfilUpdates","collapseFunction","language","isEditable"],data(){return{showModal:!1,collapseIconBetriebsmittel:!0,editDataFilter:null,preloadedPhrasen:{},zutrittsgruppen_table_options:{persistenceID:"filterTableStudentProfilZutrittsgruppen",persistence:{columns:!1},minHeight:200,layout:"fitColumns",columns:[{title:Vue.computed(()=>this.preloadedPhrasen.zutrittsGruppenPhrase),field:"bezeichnung"}]},betriebsmittel_table_options:{persistenceID:"filterTableStudentProfilBetriebsmittel",persistence:{columns:!1},minHeight:300,layout:"fitColumns",responsiveLayout:"collapse",responsiveLayoutCollapseUseFormatters:!1,responsiveLayoutCollapseFormatter:Vue.$collapseFormatter,columns:[{title:"",field:"collapse",headerSort:!1,headerFilter:!1,formatter:"responsiveCollapse",maxWidth:40,headerClick:this.collapseFunction},{title:Vue.computed(()=>this.preloadedPhrasen.entlehnteBetriebsmittelPhrase),field:"betriebsmittel",headerFilter:!0,minWidth:200,visible:!0},{title:Vue.computed(()=>this.preloadedPhrasen.inventarnummerPhrase),field:"Nummer",headerFilter:!0,resizable:!0,minWidth:200,visible:!0},{title:Vue.computed(()=>this.preloadedPhrasen.ausgabedatum),field:"Ausgegeben_am",headerFilterFunc:"dates",headerFilter:xe,minWidth:200,visible:!0,formatter:"datetime",formatterParams:this.datetimeFormatterParams()}]}}},props:{data:Object,editData:Object},provide(){return{studiengang_kz:Vue.computed({get:()=>this.data.studiengang_kz})}},methods:{betriebsmittelTableBuilt:function(){this.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns),this.$refs.betriebsmittelTable.tabulator.setData(this.data.mittel)},zutrittsgruppenTableBuilt:function(){this.$refs.zutrittsgruppenTable.tabulator.setColumns(this.zutrittsgruppen_table_options.columns),this.$refs.zutrittsgruppenTable.tabulator.setData(this.data.zuttritsgruppen)},fetchProfilUpdates:function(){this.$api.call(ve.selectProfilRequest()).then(t=>{!t.error&&t&&(this.data.profilUpdates=t.data?.length?t.data.sort(this.sortProfilUpdates):null)})},hideEditProfilModal:function(){this.$refs.editModal.result&&this.$api.call(ve.selectProfilRequest()).then(t=>{!t.error&&t.data?(this.data.profilUpdates=t.data,this.data.profilUpdates.sort(this.sortProfilUpdates)):console.error("Error when fetching profile updates: "+t)}).catch(t=>{console.error(t)}),this.showModal=!1,this.editDataFilter=null},showEditProfilModal(t){t&&(this.editDataFilter=t),this.showModal=!0,Vue.nextTick(()=>{this.$refs.editModal.show()})},datetimeFormatterParams:function(){return{inputFormat:"yyyy-MM-dd",outputFormat:"dd.MM.yyyy",invalidPlaceholder:"(invalid date)",timezone:FHC_JS_DATA_STORAGE_OBJECT.timezone}}},computed:{fotoStatus(){return this.data?.fotoStatus??null},filteredEditData(){return this.editDataFilter?this.editData.data[this.editDataFilter]:this.editData},profilInformation(){return this.data?{Vorname:this.data.vorname,Nachname:this.data.nachname,Username:this.data.username,Anrede:this.data.anrede,Titel:this.data.titel,Postnomen:this.data.postnomen,foto_sperre:this.data.foto_sperre,foto:this.data.foto}:{}},roleInformation(){return this.data?{geburtsdatum:{label:`${this.$p.t("profil","Geburtsdatum")}`,value:this.data.gebdatum},geburtsort:{label:`${this.$p.t("profil","Geburtsort")}`,value:this.data.gebort},personenkennzeichen:{label:`${this.$p.t("person","personenkennzeichen")}`,value:this.data.personenkennzeichen},studiengang:{label:`${this.$p.t("lehre","studiengang")}`,value:this.data.studiengang},semester:{label:`${this.$p.t("lehre","semester")}`,value:this.data.semester},verband:{label:`${this.$p.t("lehre","lehrverband")}`,value:this.data.verband},gruppe:{label:`${this.$p.t("lehre","gruppe")}`,value:this.data.gruppe.trim()}}:{}}},created(){this.$p.loadCategory("profil").then(()=>{this.preloadedPhrasen.zutrittsGruppenPhrase=this.$p.t("profil/zutrittsGruppen"),this.preloadedPhrasen.entlehnteBetriebsmittelPhrase=this.$p.t("profil/entlehnteBetriebsmittel"),this.preloadedPhrasen.inventarnummerPhrase=this.$p.t("profil/inventarnummer"),this.preloadedPhrasen.ausgabedatum=this.$p.t("profil/ausgabedatum"),this.preloadedPhrasen.loaded=!0}),this.data.profilUpdates?.sort(this.sortProfilUpdates)},watch:{"language.value"(t){this.$refs.betriebsmittelTable&&this.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns),this.$refs.zutrittsgruppenTable&&this.$refs.zutrittsgruppenTable.tabulator.setColumns(this.zutrittsgruppen_table_options.columns)}},template:'\n
    \n \n \x3c!-- ROW --\x3e\n
    \n \x3c!-- HIDDEN QUICK LINKS --\x3e\n
    \n \x3c!--TODO: uncomment when implemented\n\t\t\t
    \n
    \n \n
    \n
    --\x3e\n\n\t\t\t\x3c!-- Bearbeiten Button --\x3e\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\x3c!-- MOBILE PROFIL UPDATES --\x3e\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\x3c!-- END OF HIDDEN QUCK LINKS --\x3e\n\n\t\t\t\x3c!-- MAIN PANNEL --\x3e\n\t\t\t
    \n\t\t\t\t\x3c!-- ROW WITH PROFIL IMAGE AND INFORMATION --\x3e\n\t\t\t\t\x3c!-- INFORMATION CONTENT START --\x3e\n\t\t\t\t\x3c!-- ROW WITH THE PROFIL INFORMATION --\x3e\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\x3c!-- PROFIL INFORMATION --\x3e\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\x3c!-- STUDENT INFO --\x3e\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\x3c!-- START OF SECOND PROFIL INFORMATION COLUMN --\x3e\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\x3c!-- EMAILS --\x3e\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\x3c!-- PRIVATE KONTAKTE--\x3e\n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t{{$p.t(\'profil\',\'privateKontakte\')}}\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\x3c!-- PRIVATE ADRESSEN--\x3e\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t{{$p.t(\'profil\',\'privateAdressen\')}}\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\x3c!-- SECOND ROW UNDER THE PROFIL IMAGE AND INFORMATION WITH THE TABLES --\x3e\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\x3c!-- END OF MAIN CONTENT COL --\x3e\n\t\t
    \n\t\t\x3c!-- START OF SIDE PANEL --\x3e\n\t\t
    \n\t\t\t\x3c!--TODO: uncomment when implemented\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    --\x3e\n\t\t\t\x3c!-- Bearbeiten Button --\x3e\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\x3c!-- PROFIL UPDATES --\x3e\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\x3c!-- START OF THE SECOND ROW IN THE SIDE PANEL --\x3e\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\x3c!-- HIER SIND DIE MAILVERTEILER --\x3e\n\t\t\t\t\t\n\t\t\t\t
    \n \x3c!-- END OF THE SECOND ROW IN THE SIDE PANEL --\x3e\n
    \n \x3c!-- END OF SIDE PANEL --\x3e\n
    \n \x3c!-- END OF CONTAINER ROW--\x3e\n
    \n\x3c!-- END OF CONTAINER --\x3e\n
    \n'},$e={components:{CoreFilterCmpt:oe,EditProfil:ke,Adresse:ue,Kontakt:pe,FetchProfilUpdates:Ae,AusweisStatus:de,Mailverteiler:le,QuickLinks:ce,ProfilEmails:he,RoleInformation:me,ProfilInformation:ye},inject:["sortProfilUpdates","collapseFunction","language","isEditable"],data(){return{showModal:!1,editDataFilter:null,preloadedPhrasen:{},funktionen_table_options:{persistenceID:"filterTableMaProfilFunktionen",persistence:{columns:!1},minHeight:300,layout:"fitColumns",responsiveLayout:"collapse",responsiveLayoutCollapseUseFormatters:!1,responsiveLayoutCollapseFormatter:Vue.$collapseFormatter,columns:[{title:"",field:"collapse",headerSort:!1,headerFilter:!1,formatter:"responsiveCollapse",maxWidth:40,headerClick:this.collapseFunction,visible:!0},{title:Vue.computed(()=>this.preloadedPhrasen.bezeichnungPhrase),field:"Bezeichnung",headerFilter:!0,minWidth:200,visible:!0},{title:Vue.computed(()=>this.preloadedPhrasen.organisationseinheitPhrase),field:"Organisationseinheit",headerFilter:!0,minWidth:200,visible:!0},{title:Vue.computed(()=>this.preloadedPhrasen.gueltigVonPhrase),field:"Gültig_von",headerFilterFunc:"dates",headerFilter:xe,resizable:!0,minWidth:200,visible:!0,formatter:"datetime",formatterParams:this.datetimeFormatterParams()},{title:Vue.computed(()=>this.preloadedPhrasen.gueltigBisPhrase),field:"Gültig_bis",headerFilterFunc:"dates",headerFilter:xe,resizable:!0,minWidth:200,visible:!0,formatter:"datetime",formatterParams:this.datetimeFormatterParams()},{title:Vue.computed(()=>this.preloadedPhrasen.wochenstundenPhrase),field:"Wochenstunden",headerFilter:!0,minWidth:200,visible:!0}]},betriebsmittel_table_options:{persistenceID:"filterTableMaProfilBetriebsmittel",persistence:{columns:!1},minHeight:300,layout:"fitColumns",responsiveLayout:"collapse",responsiveLayoutCollapseUseFormatters:!1,responsiveLayoutCollapseFormatter:Vue.$collapseFormatter,data:[{betriebsmittel:"",Nummer:"",Ausgegeben_am:""}],columns:[{title:"",field:"collapse",headerSort:!1,headerFilter:!1,formatter:"responsiveCollapse",maxWidth:40,headerClick:this.collapseFunction,visible:!0},{title:Vue.computed(()=>this.preloadedPhrasen.entlehnteBetriebsmittelPhrase),field:"betriebsmittel",headerFilter:!0,minWidth:200,visible:!0},{title:Vue.computed(()=>this.preloadedPhrasen.inventarnummerPhrase),field:"Nummer",headerFilter:!0,resizable:!0,minWidth:200,visible:!0},{title:Vue.computed(()=>this.preloadedPhrasen.ausgabedatumPhrase),field:"Ausgegeben_am",headerFilterFunc:"dates",headerFilter:xe,minWidth:200,visible:!0,formatter:"datetime",formatterParams:this.datetimeFormatterParams()}]}}},props:{data:Object,editData:Object},methods:{betriebsmittelTableBuilt:function(){this.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns),this.$refs.betriebsmittelTable.tabulator.setData(this.data.mittel)},funktionenTableBuilt:function(){this.$refs.funktionenTable.tabulator.setColumns(this.funktionen_table_options.columns),this.$refs.funktionenTable.tabulator.setData(this.data.funktionen)},hideEditProfilModal:function(){this.$refs.editModal.result&&this.$api.call(ve.selectProfilRequest()).then(t=>{!t.error&&t.data?(this.data.profilUpdates=t.data,this.data.profilUpdates.sort(this.sortProfilUpdates)):console.error("Error when fetching profile updates: "+t)}).catch(t=>{console.error(t)}),this.showModal=!1,this.editDataFilter=null},showEditProfilModal(t){t&&(this.editDataFilter=t),this.showModal=!0,Vue.nextTick(()=>{this.$refs.editModal.show()})},fetchProfilUpdates:function(){this.$api.call(ve.selectProfilRequest()).then(t=>{!t.error&&t&&(this.data.profilUpdates=t.data?.length?t.data.sort(this.sortProfilUpdates):null)})},setTableColumnTitles(){this.$refs.betriebsmittelTable&&this.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns),this.$refs.funktionenTable&&this.$refs.funktionenTable.tabulator.setColumns(this.funktionen_table_options.columns)},datetimeFormatterParams:function(){return{inputFormat:"yyyy-MM-dd",outputFormat:"dd.MM.yyyy",invalidPlaceholder:"(invalid date)",timezone:FHC_JS_DATA_STORAGE_OBJECT.timezone}}},computed:{fotoStatus(){return this.data?.fotoStatus??null},getTelefonValue(){return this.data.standort_telefon?.kontakt?this.data.standort_telefon.kontakt+" "+this.data.telefonklappe:this.data.standort_telefon?this.data.standort_telefon+" "+this.data.telefonklappe:this.data.telefonklappe},filteredEditData(){return this.editDataFilter?this.editData.data[this.editDataFilter]:this.editData},profilInformation(){return this.data?{Vorname:this.data.vorname,Nachname:this.data.nachname,Username:this.data.username,Anrede:this.data.anrede,Titel:this.data.titel,Postnomen:this.data.postnomen,foto_sperre:this.data.foto_sperre,foto:this.data.foto}:{}},roleInformation(){return this.data?{geburtsdatum:{label:`${this.$p.t("profil","Geburtsdatum")}`,value:this.data.gebdatum},geburtsort:{label:`${this.$p.t("profil","Geburtsort")}`,value:this.data.gebort},personenkennzeichen:{label:`${this.$p.t("profil","Kurzzeichen")}`,value:this.data.kurzbz},telefon:{label:`${this.$p.t("profil","Telefon")}`,value:this.getTelefonValue},office:{label:`${this.$p.t("profil","Büro")}`,value:this.data.ort_kurzbz}}:{}}},created(){this.$p.loadCategory(["ui","lehre","global","profil"]).then(()=>{this.preloadedPhrasen.bezeichnungPhrase=this.$p.t("ui/bezeichnung"),this.preloadedPhrasen.organisationseinheitPhrase=this.$p.t("lehre/organisationseinheit"),this.preloadedPhrasen.gueltigVonPhrase=this.$p.t("global/gueltigVon"),this.preloadedPhrasen.gueltigBisPhrase=this.$p.t("global/gueltigBis"),this.preloadedPhrasen.wochenstundenPhrase=this.$p.t("profil/wochenstunden"),this.preloadedPhrasen.entlehnteBetriebsmittelPhrase=this.$p.t("profil/entlehnteBetriebsmittel"),this.preloadedPhrasen.inventarnummerPhrase=this.$p.t("profil/inventarnummer"),this.preloadedPhrasen.ausgabedatumPhrase=this.$p.t("profil/ausgabedatum"),this.preloadedPhrasen.loaded=!0}),this.data.profilUpdates?.sort(this.sortProfilUpdates)},watch:{"data.funktionen"(t){this.$refs.funktionenTable&&this.$refs.funktionenTable.tabulator.setData(t)},"data.mittel"(t){this.$refs.betriebsmittelTable&&this.$refs.betriebsmittelTable.tabulator.setData(t)},"language.value"(t){this.setTableColumnTitles()}},template:'\n
    \n \n
    \n
    \n \x3c!--TODO: uncomment when implemented\n
    \n
    \n \n
    \n
    --\x3e\n \x3c!-- Bearbeiten Button --\x3e\n
    \n
    \n \n
    \n
    \n
    \n
    \n \x3c!-- MOBILE PROFIL UPDATES --\x3e\n \n
    \n
    \n
    \n \x3c!-- END OF HIDDEN ROW (HIDDEN IN VIEWPORTS GREATER THEN-EQUAL MD) --\x3e\n \x3c!-- MAIN PANNEL --\x3e\n
    \n \x3c!-- ROW WITH PROFIL IMAGE AND INFORMATION --\x3e\n \x3c!-- INFORMATION CONTENT START --\x3e\n \x3c!-- ROW WITH THE PROFIL INFORMATION --\x3e\n
    \n
    \n
    \n
    \n \x3c!-- PROFIL INFORMATION --\x3e\n \n
    \n
    \n
    \n
    \n \x3c!-- MITARBEITER INFO --\x3e\n \n
    \n
    \n \x3c!-- START OF SECOND PROFIL INFORMATION COLUMN --\x3e\n
    \n
    \n
    \n
    \n \x3c!-- EMAILS --\x3e\n \n
    \n
    \n
    \n
    \n \x3c!-- PRIVATE KONTAKTE--\x3e\n
    \n
    \n
    \n
    \n \n
    \n
    \n {{$p.t(\'profil\',\'privateKontakte\')}}\n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \x3c!-- PRIVATE ADRESSEN--\x3e\n
    \n
    \n
    \n
    \n \n
    \n
    \n {{$p.t(\'profil\',\'privateAdressen\')}}\n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \x3c!-- FUNKTIONEN TABELLE --\x3e\n \n
    \n
    \n \x3c!-- BETRIEBSMITTEL TABELLE --\x3e\n \n
    \n
    \n
    \n \x3c!-- START OF SIDE PANEL --\x3e\n
    \n \x3c!--TODO: uncomment when implemented\n
    \n \n
    \n \n \n \n \n \n
    \n
    --\x3e\n \x3c!-- Bearbeiten Button --\x3e\n
    \n
    \n \n
    \n
    \n
    \n
    \n \x3c!-- PROFIL UPDATES --\x3e\n \n
    \n
    \n
    \n
    \n \x3c!-- AUSWEIS STATUS --\x3e\n \n
    \n
    \n
    \n
    \n \x3c!-- MAILVERTEILER --\x3e\n \n
    \n
    \n
    \n
    \n
    \n\n \n '},Te={data:()=>({}),components:{QuickLinks:ce,Mailverteiler:le,ProfilEmails:he,RoleInformation:me,ProfilInformation:ye},props:["data"],provide(){return{studiengang_kz:Vue.computed({get:()=>this.data.studiengang_kz})}},methods:{},computed:{fotoStatus(){return this.data?.fotoStatus??null},profilInformation(){return this.data?{Vorname:this.data.vorname,Nachname:this.data.nachname,Username:this.data.username,Anrede:this.data.anrede,Titel:this.data.titel,Postnomen:this.data.postnomen,foto_sperre:this.data.foto_sperre,foto:this.data.foto}:{}},personEmails(){return this.data?.emails?this.data.emails:[]},roleInformation(){return this.data?{geburtsdatum:{label:`${this.$p.t("profil","Geburtsdatum")}`,value:this.data.gebdatum},geburtsort:{label:`${this.$p.t("profil","Geburtsort")}`,value:this.data.gebort},personenkennzeichen:{label:`${this.$p.t("person","personenkennzeichen")}`,value:this.data.personenkennzeichen},studiengang:{label:`${this.$p.t("lehre","studiengang")}`,value:this.data.studiengang},semester:{label:`${this.$p.t("lehre","semester")}`,value:this.data.semester},verband:{label:`${this.$p.t("lehre","lehrverband")}`,value:this.data.verband},gruppe:{label:`${this.$p.t("lehre","gruppe")}`,value:this.data.gruppe.trim()}}:{}}},mounted(){},template:' \n\n
    \n \x3c!-- ROW --\x3e \n
    \n \x3c!-- HIDDEN QUICK LINKS --\x3e\n \x3c!-- uncomment when implemented\n
    \n \n \n \n
    --\x3e\n \x3c!-- END OF HIDDEN QUCK LINKS --\x3e\n \x3c!-- MAIN PANNEL --\x3e\n
    \n \x3c!-- ROW WITH PROFIL IMAGE AND INFORMATION --\x3e\n \x3c!-- INFORMATION CONTENT START --\x3e\n \x3c!-- ROW WITH THE PROFIL INFORMATION --\x3e \n
    \n \x3c!-- FIRST KAESTCHEN --\x3e\n
    \n
    \n
    \n \n
    \n
    \n \x3c!-- START OF SECOND PROFIL INFORMATION COLUMN --\x3e\n \x3c!-- END OF PROFIL INFORMATION ROW --\x3e\n \x3c!-- INFORMATION CONTENT END --\x3e\n
    \n
    \n
    \n
    \n \x3c!-- EMAILS --\x3e\n \n
    \n
    \n \x3c!-- SECOND ROW OF SECOND COLUMN IN MAIN CONTENT --\x3e\n
    \n
    \n \n
    \n
    \n \x3c!-- END OF SECOND ROW OF SECOND COLUMN IN MAIN CONTENT --\x3e\n \x3c!-- END OF THE SECOND INFORMATION COLUMN --\x3e\n
    \n \x3c!-- START OF THE SECOND PROFIL INFORMATION ROW --\x3e \n \x3c!-- ROW WITH PROFIL IMAGE AND INFORMATION END --\x3e\n
    \n \x3c!-- END OF MAIN CONTENT COL --\x3e\n
    \n \x3c!-- START OF SIDE PANEL --\x3e\n
    \n \x3c!-- SRART OF QUICK LINKS IN THE SIDE PANEL --\x3e\n \x3c!-- START OF THE FIRDT ROW IN THE SIDE PANEL --\x3e\n \x3c!-- THESE QUCK LINKS ARE ONLY VISIBLE UNTIL VIEWPORT MD --\x3e\n \x3c!--TODO: uncomment when implemented\n
    \n
    \n \n \n \n
    \n
    --\x3e\n \x3c!-- START OF THE SECOND ROW IN THE SIDE PANEL --\x3e\n
    \n
    \n \x3c!-- HIER SIND DIE MAILVERTEILER --\x3e\n \n
    \n \x3c!-- END OF THE SECOND ROW IN THE SIDE PANEL --\x3e\n
    \n \x3c!-- END OF SIDE PANEL --\x3e\n
    \n \x3c!-- END OF CONTAINER ROW--\x3e\n
    \n \x3c!-- END OF CONTAINER --\x3e\n
    \n '},Ee={components:{CoreFilterCmpt:oe,Mailverteiler:le,QuickLinks:ce,RoleInformation:me,ProfilEmails:he,ProfilInformation:ye},inject:["collapseFunction","language"],data(){return{collapseIconFunktionen:!0,preloadedPhrasen:{},funktionen_table_options:{persistenceID:"filterTableMaViewProfilFunktionen",persistence:{columns:!1},minHeight:300,layout:"fitColumns",responsiveLayout:"collapse",responsiveLayoutCollapseUseFormatters:!1,responsiveLayoutCollapseFormatter:Vue.$collapseFormatter,columns:[{title:"",field:"collapse",headerSort:!1,headerFilter:!1,formatter:"responsiveCollapse",maxWidth:40,headerClick:this.collapseFunction,visible:!0},{title:Vue.computed(()=>this.$p.t("ui/bezeichnung")),field:"Bezeichnung",headerFilter:!0,minWidth:200,visible:!0},{title:Vue.computed(()=>this.$p.t("lehre/organisationseinheit")),field:"Organisationseinheit",headerFilter:!0,minWidth:200,visible:!0},{title:Vue.computed(()=>this.$p.t("global/gueltigVon")),field:"Gültig_von",headerFilterFunc:"dates",headerFilter:xe,resizable:!0,minWidth:200,visible:!0,formatter:"datetime",formatterParams:this.datetimeFormatterParams()},{title:Vue.computed(()=>this.$p.t("global/gueltigBis")),field:"Gültig_bis",headerFilterFunc:"dates",headerFilter:xe,resizable:!0,minWidth:200,visible:!0,formatter:"datetime",formatterParams:this.datetimeFormatterParams()},{title:Vue.computed(()=>this.$p.t("profil/wochenstunden")),field:"Wochenstunden",headerFilter:!0,minWidth:200,visible:!0}]}}},props:["data"],methods:{funktionenTableBuilt:function(){this.$refs.funktionenTable.tabulator.setData(this.data.funktionen)},datetimeFormatterParams:function(){return{inputFormat:"yyyy-MM-dd",outputFormat:"dd.MM.yyyy",invalidPlaceholder:"(invalid date)",timezone:FHC_JS_DATA_STORAGE_OBJECT.timezone}}},watch:{"data.funktionen"(t){this.$refs.funktionenTable&&this.$refs.funktionenTable.tabulator.setData(t)},"language.value"(t){this.$refs.funktionenTable&&this.$refs.funktionenTable.tabulator.setColumns(this.funktionen_table_options.columns)}},computed:{getTelefonValue(){return this.data.standort_telefon?.kontakt?this.data.standort_telefon.kontakt+" "+this.data.telefonklappe:this.data.standort_telefon?this.data.standort_telefon+" "+this.data.telefonklappe:this.data.telefonklappe},fotoStatus(){return this.data?.fotoStatus??null},personEmails(){return this.data?.emails?this.data.emails:[]},profilInformation(){return this.data?{Vorname:this.data.vorname,Nachname:this.data.nachname,Username:this.data.username,Anrede:this.data.anrede,Titel:this.data.titel,Postnomen:this.data.postnomen,foto_sperre:this.data.foto_sperre,foto:this.data.foto}:{}},roleInformation(){return this.data?{geburtsdatum:{label:`${this.$p.t("profil","Geburtsdatum")}`,value:this.data.gebdatum},geburtsort:{label:`${this.$p.t("profil","Geburtsort")}`,value:this.data.gebort},personenkennzeichen:{label:`${this.$p.t("profil","Kurzzeichen")}`,value:this.data.kurzbz},telefon:{label:`${this.$p.t("profil","Telefon")}`,value:this.getTelefonValue},office:{label:`${this.$p.t("profil","Büro")}`,value:this.data.ort_kurzbz}}:{}}},created(){this.$p.loadCategory(["ui","lehre","global","profil"]).then(()=>{this.preloadedPhrasen.bezeichnungPhrase=this.$p.t("ui/bezeichnung"),this.preloadedPhrasen.organisationseinheitPhrase=this.$p.t("lehre/organisationseinheit"),this.preloadedPhrasen.gueltigVonPhrase=this.$p.t("global/gueltigVon"),this.preloadedPhrasen.gueltigBisPhrase=this.$p.t("global/gueltigBis"),this.preloadedPhrasen.wochenstundenPhrase=this.$p.t("profil/wochenstunden"),this.preloadedPhrasen.loaded=!0})},template:'\n\n
    \n \x3c!-- ROW --\x3e\n
    \n \x3c!-- HIDDEN QUICK LINKS --\x3e\n \x3c!-- TODO: uncomment when implemented\n
    \n\n \n\n
    \n --\x3e\n \x3c!-- END OF HIDDEN QUCK LINKS --\x3e\n \x3c!-- MAIN PANNEL --\x3e\n
    \n \x3c!-- ROW WITH PROFIL IMAGE AND INFORMATION --\x3e\n \x3c!-- INFORMATION CONTENT START --\x3e\n \x3c!-- ROW WITH THE PROFIL INFORMATION --\x3e\n
    \n \x3c!-- FIRST KAESTCHEN --\x3e\n
    \n
    \n
    \n \x3c!-- Profil Informationen --\x3e\n \n
    \n
    \n \x3c!-- START OF SECOND PROFIL INFORMATION COLUMN --\x3e\n \x3c!-- END OF PROFIL INFORMATION ROW --\x3e\n \x3c!-- INFORMATION CONTENT END --\x3e\n
    \n
    \n
    \n
    \n \x3c!-- EMAILS --\x3e\n \n
    \n
    \n \x3c!-- SECOND ROW OF SECOND COLUMN IN MAIN CONTENT --\x3e\n
    \n
    \n \x3c!-- roleInformation --\x3e\n \n
    \n
    \n \x3c!-- END OF SECOND ROW OF SECOND COLUMN IN MAIN CONTENT --\x3e\n \x3c!-- END OF THE SECOND INFORMATION COLUMN --\x3e\n
    \n \x3c!-- START OF THE SECOND PROFIL INFORMATION ROW --\x3e\n \x3c!-- ROW WITH PROFIL IMAGE AND INFORMATION END --\x3e\n
    \n \x3c!-- SECOND ROW UNDER THE PROFIL IMAGE AND INFORMATION WITH THE TABLES --\x3e\n
    \n \x3c!-- FIRST TABLE --\x3e\n
    \n \n
    \n \x3c!-- END OF THE ROW WITH THE TABLES UNDER THE PROFIL INFORMATION --\x3e\n
    \n \x3c!-- END OF MAIN CONTENT COL --\x3e\n
    \n \x3c!-- START OF SIDE PANEL --\x3e\n
    \n \x3c!-- VISIBLE UNTIL VIEWPORT MD --\x3e\n \x3c!--TODO: uncomment when implemented\n
    \n
    \n \n \n \n
    \n
    \n --\x3e\n
    \n
    \n \x3c!-- MAILVERTEILER --\x3e\n \n
    \n
    \n \x3c!-- END OF SIDE PANEL --\x3e\n
    \n \x3c!-- END OF CONTAINER ROW--\x3e\n
    \n \x3c!-- END OF CONTAINER --\x3e\n
    \n'};Vue.$collapseFormatter=function(t){var e=document.createElement("div");e.classList.add("tabulator-collapsed-row"),e.classList.add("text-break");var n=document.createElement("div");return n.classList.add("row"),e.appendChild(n),t.forEach(function(t){let e=document.createElement("div");e.classList.add("col-6");let i=document.createElement("div");i.classList.add("col-6"),e.innerHTML=""+t.title+"",i.innerHTML=t.value?t.value:"-",n.appendChild(e),n.appendChild(i)}),Object.keys(t).length?e:""};const De={name:"Profil",components:{StudentProfil:Se,MitarbeiterProfil:$e,ViewStudentProfil:Te,ViewMitarbeiterProfil:Ee,Loading:_e},props:{uid:{type:String,required:!1},viewData:{type:Object}},data(){return{loading:!1,profilUpdateStates:null,profilUpdateTopic:null,view:null,data:null,notFoundUID:null,isEditable:this.viewData.editable??!1}},provide(){return{isEditable:Vue.computed(()=>this.isEditable),profilUpdateStates:Vue.computed(()=>!!this.profilUpdateStates&&this.profilUpdateStates),profilUpdateTopic:Vue.computed(()=>!!this.profilUpdateTopic&&this.profilUpdateTopic),setLoading:t=>{this.loading=t},getZustellkontakteCount:this.zustellKontakteCount,getZustelladressenCount:this.zustellAdressenCount,collapseFunction:(t,e)=>{void 0===this[t.target.id]&&(this[t.target.id]=!0),this[t.target.id]=!this[t.target.id];let n=e._column.cells.map(t=>t.element.children[0]);this[t.target.id]?t.target.classList.replace("fa-angle-up","fa-angle-down"):t.target.classList.replace("fa-angle-down","fa-angle-up"),this[t.target.id]?n.filter(t=>!t.classList.contains("open")).forEach(t=>{t.click()}):n.filter(t=>t.classList.contains("open")).forEach(t=>{t.click()})},sortProfilUpdates:(t,e)=>{let n=0;return n="pending"===t.status.toLowerCase()||"accepted"===t.status.toLowerCase()&&"rejected"===e.status.toLowerCase()?-1:1,t.status===e.status&&(n=new Date(e.insertamum.split(".").reverse().join("-"))-new Date(t.insertamum.split(".").reverse().join("-"))),n}}},methods:{async load(){await this.$api.call(ve.getStatus()).then(t=>{this.profilUpdateStates=t.data}).catch(t=>{console.error(t)}),this.$api.call(ve.getTopic()).then(t=>{this.profilUpdateTopic=t.data}).catch(t=>{console.error(t)}),this.$api.call(fe.profilViewData(this.$route.params.uid??null)).then(t=>t.data).then(t=>{this.view=t?.profil_data.view,this.data=t?.profil_data.data,this.isEditable=t?.editable??!1}).catch(t=>{console.error(t)})},zustellAdressenCount(){if(!this.data||!this.data.adressen)return null;let t=[];return this.data.profilUpdates?.length&&(t=t.concat(this.data.profilUpdates.filter(t=>t.requested_change.zustelladresse).map(t=>t.requested_change.adresse_id))),this.data.profilUpdates?.length&&this.data.adressen.filter(t=>t.zustelladresse).every(t=>this.data.profilUpdates.some(e=>e.requested_change.adresse_id==t.adresse_id))||(t=t.concat(this.data.adressen.filter(t=>t.zustelladresse).map(t=>t.adresse_id))),[...new Set(t)]},zustellKontakteCount(){if(!this.data||!this.data.kontakte)return null;let t=[];return this.data.profilUpdates?.length&&(t=t.concat(this.data.profilUpdates.filter(t=>"Pending"===t.status&&t.requested_change.zustellung).map(t=>({kontakt_id:t.requested_change.kontakt_id,kontakttyp:t.requested_change.kontakttyp})))),this.data.profilUpdates?.length&&this.data.kontakte.filter(t=>t.zustellung).every(t=>this.data.profilUpdates.some(e=>"Pending"===e.status&&e.requested_change.kontakt_id==t.kontakt_id))||(t=t.concat(this.data.kontakte.filter(t=>t.zustellung).map(t=>({kontakt_id:t.kontakt_id,kontakttyp:t.kontakttyp})))),[...new Set(t)]}},computed:{filteredEditData(){if(this.data)return{view:null,data:{Personen_Informationen:{title:this.$p.t("profil","personenInformationen"),topic:"Personen_informationen",view:null,data:{vorname:{title:this.$p.t("person","vorname"),topic:this.profilUpdateTopic?.Vorname,view:"TextInputDokument",withFiles:!0,data:{titel:"vorname",value:this.data.vorname}},nachname:{title:this.$p.t("person","nachname"),topic:this.profilUpdateTopic?.Nachname,view:"TextInputDokument",withFiles:!0,data:{titel:"nachname",value:this.data.nachname}},titel:{title:this.$p.t("global","titel"),topic:this.profilUpdateTopic?.Titel,view:"TextInputDokument",withFiles:!0,data:{titel:"titel",value:this.data.titel}},postnomen:{title:this.$p.t("profil","postnomen"),topic:this.profilUpdateTopic?.Postnomen,view:"TextInputDokument",withFiles:!0,data:{titel:"postnomen",value:this.data.postnomen}}}},Private_Kontakte:{title:this.$p.t("profil","privateKontakte"),topic:this.profilUpdateTopic?.["Private Kontakte"],data:this.data.kontakte?.filter(t=>!this.data.profilUpdates?.some(e=>e.status===this.profilUpdateStates.Pending&&e.requested_change?.kontakt_id===t.kontakt_id)).map(t=>({listview:"Kontakt",view:"EditKontakt",data:t}))},Private_Adressen:{title:this.$p.t("profil","privateAdressen"),topic:this.profilUpdateTopic?.["Private Adressen"],data:this.data.adressen?.filter(t=>!this.data.profilUpdates?.some(e=>e.status===this.profilUpdateStates.Pending&&e.requested_change?.adresse_id==t.adresse_id)).map(t=>({listview:"Adresse",view:"EditAdresse",data:t}))}}}}},watch:{loading:function(t){t?this.$refs.loadingModalRef.show():this.$refs.loadingModalRef.hide()},uid(t,e){this.load()}},created(){this.load()},template:'\n\t
    \n\t\t
    \n\t\t\t

    Es wurde keine Person mit der UID {{this.notFoundUID}} gefunden

    \n\t\t
    \n\t\t
    \n \n \n\t\t
    \n\t
    '};var Ce={getContentID:t=>({method:"get",url:"/api/frontend/v1/Ort/ContentID",params:{ort_kurzbz:t}}),getRooms:(t,e,n,i,a=0)=>({method:"get",url:"/api/frontend/v1/Ort/getRooms",params:{datum:t,von:e,bis:n,typ:i,personenanzahl:a}}),getRoomTypes:()=>({method:"get",url:"/api/frontend/v1/Ort/getTypes",params:{}})};const Oe={name:"Raumsuche",props:{},components:{VueDatePicker:a,CoreFilterCmpt:oe,InputNumber:primevue.inputnumber},data(){return{phrasenPromise:null,phrasenResolved:!1,tabulatorUuid:Vue.ref(0),tableBuiltResolve:null,tableBuiltPromise:null,roomtypes:null,defaultType:{raumtyp_kurzbz:"",beschreibung:Vue.computed(()=>this.$p.t("global/alle"))},anzahl:1,selectedType:null,datum:new Date,von:Vue.ref({hours:(new Date).getHours(),minutes:(new Date).getMinutes()}),bis:Vue.ref({hours:(new Date).getHours()+1,minutes:(new Date).getMinutes()}),datepickerTextInputOptions:{enterSubmit:!0,tabSubmit:!0,selectOnFocus:!0,format:"dd.MM.yyyy",escClose:!0},timepickerTextInputOptions:{enterSubmit:!0,tabSubmit:!0,selectOnFocus:!0,format:"HH:mm",escClose:!0},raumsucheTableOptions:{height:Vue.ref(400),index:"ort_kurzbz",layout:"fitColumns",placeholder:this.$p.t("global/noDataAvailable"),columns:[{title:Vue.computed(()=>this.$p.t("rauminfo/raum_kurzbz")),field:"ort_kurzbz",widthGrow:1},{title:Vue.computed(()=>this.$p.t("global/bezeichnung")),field:"bezeichnung",widthGrow:2},{title:Vue.computed(()=>this.$p.t("rauminfo/raumnummer")),field:"nummer",widthGrow:1},{title:Vue.computed(()=>this.$p.t("rauminfo/personcap")),field:"personen",widthGrow:1},{title:Vue.computed(()=>this.$p.t("rauminfo/rauminfo")),field:"linkInfo",formatter:this.linkFormatter,widthGrow:1},{title:Vue.computed(()=>this.$p.t("rauminfo/roomReservations")),field:"linkRes",formatter:this.linkFormatter,widthGrow:1}],persistence:!1},raumsucheTableEventHandlers:[{event:"tableBuilt",handler:async()=>{this.tableBuiltResolve()}}]}},methods:{tableResolve(t){this.tableBuiltResolve=t},linkFormatter(t){const e=t.getValue(),n="linkInfo"===t.getField()?this.$p.t("rauminfo/rauminfo"):this.$p.t("rauminfo/roomReservations");return e?'
    ':'
    -
    '},roomPlanLink:t=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/CisVue/Cms/getRoomInformation/"+t.ort_kurzbz,roomInfoLink:t=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/CisVue/Cms/content/"+t.content_id,getTimeString:t=>`${String(t.hours).padStart(2,"0")}:${String(t.minutes).padStart(2,"0")}`,setupData(t){const e=t.map(t=>({ort_kurzbz:t.ort_kurzbz,bezeichnung:t.bezeichnung.replace("&","&"),nummer:t.planbezeichnung,personen:t.max_person,linkInfo:t.content_id?this.roomInfoLink(t):null,linkRes:this.roomPlanLink(t)}));this.$refs.raumsucheTable.tabulator.setData(e)},loadRoomTypes(){this.$api.call(Ce.getRoomTypes()).then(t=>{t?.data?.forEach(t=>{t.beschreibung=t.beschreibung.replace("&","&")}),this.selectedType=this.defaultType,this.roomtypes=t?.data??[]})},loadRooms(){this.$api.call(Ce.getRooms(this.datum.toISOString(),this.getTimeString(this.von),this.getTimeString(this.bis),this.selectedType?.raumtyp_kurzbz??"",this.anzahl)).then(t=>{t?.data?.retval&&this.setupData(t.data.retval)})},handleUuidDefined(t){this.tabulatorUuid=t},search(){this.loadRooms()},setRoute(t){},dateFormat:t=>`${String(t.getDate()).padStart(2,"0")}.${String(t.getMonth()+1).padStart(2,"0")}.${t.getFullYear()}`,timeFormat:t=>`${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`,async setupMounted(){this.tableBuiltPromise=new Promise(this.tableResolve),await this.tableBuiltPromise,this.loadRoomTypes(),this.loadRooms();const t=this.tabulatorUuid?"-"+this.tabulatorUuid:"",e=document.getElementById("filterTableDataset"+t);if(!e)return;const n=e.getBoundingClientRect(),i=window.visualViewport.height-n.top-100;this.$refs.raumsucheTable&&this.$refs.raumsucheTable.$refs.table.style.setProperty("height",i+"px")}},computed:{isDarkMode(){return"dark"==this.$theme.theme_name.value}},created(){this.phrasenPromise=this.$p.loadCategory(["rauminfo","global"]),this.phrasenPromise.then(()=>{this.phrasenResolved=!0})},mounted(){this.setupMounted()},template:'\n\t

    {{$p.t(\'rauminfo/roomSearch\')}}

    \n\t
    \n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t\n\t\t
    \n\t\t\t\n\t\t
    \n\t\t\n\n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t
    \n\t\n\n \n '};var Pe={components:{paginator:primevue.paginator},emits:["update:rows"],props:{maxPageCount:{type:Number,default:0},page_size:{type:Number,required:!0}},data:()=>({}),methods:{newPageEvent:function(t){}},mounted(){},template:'\n \t\x3c!-- Desktop --\x3e\n\t
    \n\t\t\n\t\t\n\t
    \n\t\x3c!-- Mobile --\x3e\n\t
    \n\t\t\n\t\t\n\t
    \n '},Fe={props:{uid:String,vorname:String,nachname:String,titelpre:String,kontakt:String,telefoneklappe:String,email:String,planbezeichnung:String,foto:String,displayWidget:{type:Boolean,default:!1}},template:'\n\t
    \n\t\t
    \n\t\t\tmitarbeiter_foto\n\t\t
    \n\t\t
    \n\t\t\t
    {{fullname}}
    \n\t\t
    \n\t\t
    \n\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t
    {{phone.number}}
    \n\n\t\t\t\t
    \n\t\t\t\t
    {{ort}}
    \n\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\n\t\t
    \n\t
    \n\t',computed:{formattedEmail:function(){if(!this.email)return null;let t=this.email.replace("mailto:","").split("@");return t[0]+"@"+t[1]},fullname:function(){return this.titelpre&&this.vorname&&this.nachname?`${this.titelpre} ${this.vorname} ${this.nachname}`:this.vorname&&this.nachname?`${this.vorname} ${this.nachname}`:this.nachname?this.vorname:null},phone:function(){return this.kontakt&&this.telefoneklappe?{link:"tel:".concat(this.kontakt).concat(" "+this.telefoneklappe),number:this.kontakt.concat(" "+this.telefoneklappe)}:this.kontakt?{link:"tel:".concat(this.kontakt),number:this.kontakt}:null},email_link:function(){return this.email?"mailto:".concat(this.email):null},base64Image:function(){return this.foto?"data:image/png;base64,".concat(this.foto):null},ort:function(){return this.planbezeichnung??null},profilViewLink:function(){return this.uid?FHC_JS_DATA_STORAGE_OBJECT.app_root.concat(FHC_JS_DATA_STORAGE_OBJECT.ci_router).concat("/Cis/Profil/View/").concat(this.uid):null}}},ze={props:{title:String,vertretungsList:Array,showBezeichnung:Boolean},template:'\n\t
    \n\t\t
    \n\t\t\t{{title}}\n\t\t
    \n\t\t
    \n\t\t\t

    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{{vertretungFormatedName(vertretung,false)}}\n\t\t\t

    \n\t\t
    \n\t
    \n\t',methods:{profilViewLink:function(t){return t?FHC_JS_DATA_STORAGE_OBJECT.app_root.concat(FHC_JS_DATA_STORAGE_OBJECT.ci_router).concat("/Cis/Profil/View/").concat(t):null},vertretungFormatedName:function(t){return t?`${t.vorname??""} ${t.nachname??""} ${t.bezeichnung&&this.showBezeichnung?"(".concat(t.bezeichnung.replace("(","").replace(")","")).concat(")"):""}`:null}}},Ie={studiengangInformation:()=>({method:"get",url:"/api/frontend/v1/Studgang/getStudiengangInfo"}),getStudiengangByKz:t=>({method:"get",url:"/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz",params:{studiengang_kz:t}})},Le={data:()=>({studiengang:null,semester:null,stg_ltg:null,gf_ltg:null,stv_ltg:null,ass:null,hochschulvertr:null,stdv:null,jahrgangsvertr:null}),props:{displayWidget:{type:Boolean,default:!1}},components:{StudiengangPerson:Fe,StudiengangVertretung:ze},template:'\n\t\t
    \n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t
    \n\t\n',computed:{collection_array:function(){let t=[];return Array.isArray(this.stg_ltg)&&1==this.stg_ltg.length&&Array.isArray(this.ass)&&1==this.ass.length?t.push({title:`${this.$p.t("global","studiengangsleitung")}/${this.$p.t("studiengangInformation","assistenz")}`,collection:[...this.stg_ltg,...this.ass]}):(t.push({title:this.$p.t("global","studiengangsleitung"),collection:this.stg_ltg}),t.push({title:this.$p.t("studiengangInformation","assistenz"),collection:this.ass})),Array.isArray(this.gf_ltg)&&1==this.gf_ltg.length&&Array.isArray(this.stv_ltg)&&1==this.stv_ltg.length?t.push({title:this.$p.t("studiengangInformation","geschaeftsfuehrende_stellvertretende_leitung"),collection:[...this.gf_ltg,...this.stv_ltg]}):(t.push({title:this.$p.t("studiengangInformation","geschaeftsfuehrende_leitung"),collection:this.gf_ltg}),t.push({title:this.$p.t("studiengangInformation","stellvertretende_leitung"),collection:this.stv_ltg})),t},moodleLink:function(){if(this.studiengang&&this.studiengang.studiengang_kz)return"https://moodle.technikum-wien.at/course/view.php?idnumber=dl"+this.studiengang.studiengang_kz}},mounted(){this.$api.call(Ie.studiengangInformation()).then(t=>t.data).then(t=>{Object.assign(this,t)})}},Me={content:(t,e=null,n=null,i=null)=>({method:"get",url:"/api/frontend/v1/Cms/content",params:{content_id:t,...e?{version:e}:{},...n?{sprache:n}:{},...i?{sichtbar:i}:{}}}),getNews:(t=1,e=10,n)=>({method:"get",url:"/api/frontend/v1/Cms/getNews",params:{page:t,page_size:e,sprache:n}}),news:t=>({method:"get",url:"/api/frontend/v1/Cms/news",params:{limit:t}}),getNewsRowCount:()=>({method:"get",url:"/api/frontend/v1/Cms/getNewsRowCount"}),getNewsExtra:()=>({method:"get",url:"/api/frontend/v1/Cms/getStudiengangInfoForNews"})},Re={name:"NewsComponent",components:{Pagination:Pe,StudiengangInformation:Le},data:()=>({content:null,maxPageCount:0,page_size:10,page:1}),watch:{"$p.user_language.value":function(t){this.fetchNews()}},computed:{sprache:function(){return this.$p.user_language.value}},methods:{fetchNews(){return this.$api.call(Me.getNews(this.page,this.page_size,this.sprache)).then(t=>t.data).then(t=>{this.content=t,document.querySelectorAll("#cms [data-confirm]").forEach(t=>{t.addEventListener("click",e=>{e.preventDefault(),o.popup(t.dataset.confirm).then(()=>{Axios.get(t.href).then(t=>{location=location}).catch(t=>console.error("ERROR:",t))}).catch(()=>{})})}),document.querySelectorAll("#cms [data-href]").forEach(t=>{t.href=t.dataset.href.replace(/^ROOT\//,FHC_JS_DATA_STORAGE_OBJECT.app_root)}),Vue.nextTick(()=>{document.querySelectorAll(".card-header").forEach(t=>{t.classList.add("fhc-primary")}),document.querySelectorAll(".row").forEach(t=>{t.classList.add("w-100"),t.classList.add("align-items-center")}),document.querySelectorAll(".row h2").forEach(t=>{t.classList.add("mb-0")})})})},loadNewPageContent(t){this.$api.call(Me.getNews(t.page,t.rows)).then(t=>t.data).then(t=>{this.content=t})}},created(){this.fetchNews(),this.$api.call(Me.getNewsRowCount()).then(t=>t.data).then(t=>{this.maxPageCount=t})},template:'\n \t

    News

    \n\t
    \n\t\n\t\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t\n\t\n '},Ne={name:"RaumComponent",data:()=>({imgContent:null}),props:{content:{type:String,required:!0},content_id:{type:[Number,String]}},methods:{sanitizeLegacyTables(t){t.querySelectorAll("table").forEach(t=>{const e=t.textContent.trim(),n=document.createElement("p");n.textContent=e,t.parentNode.replaceChild(n,t)});t.querySelectorAll("ul").forEach(t=>{Array.from(t.children).forEach(e=>{const n=document.createElement("p");n.textContent=e.textContent,t.parentNode.appendChild(n)}),t.parentNode.removeChild(t)});Array.from(t.querySelectorAll("td")).filter(t=>t.scrollWidth>100).forEach(t=>{if(t.firstChild?.nodeType===Node.TEXT_NODE&&t.firstChild.length>10){const e=document.createElement("p");e.appendChild(t.firstChild),t.appendChild(e)}});Array.from(t.querySelectorAll("th")).forEach(t=>{t.children.length>1&&(t.innerHTML=Array.from(t.childNodes).find(t=>t.textContent).textContent)});t.querySelectorAll("p").forEach(t=>{t.style.setProperty("word-wrap","break-word"),t.style.setProperty("white-space","normal"),t.style.setProperty("max-width","400px")})}},mounted(){let t=document.getElementsByClassName("tablesorter");for(let e of t)this.sanitizeLegacyTables(e),new Tabulator(e,{layout:"fitDataStretch",columnDefaults:{formatter:"html",resizable:!1,minWidth:"100px"}});let e=document.getElementsByTagName("h1");if(e=e.length?e[0]:null,e&&e.innerText){let t=e.innerText,n=new RegExp("\\w*\\s([a-zA-Z][0-9\\.]+)$"),i=t.match(n);if(i){t=i[0],t=t.replace(" ","_");let n=document.createElement("a");n.href=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/CisVue/Cms/getRoomInformation/"+t,n.appendChild(e.cloneNode(!0)),e.replaceWith(n)}else console.error(`the regular expression did not match the room name: ${t}`);return}const n=(new DOMParser).parseFromString(`
    ${this.content}
    `,"text/html").querySelector("img");if(n&&n.title){const t={};for(let e of n.attributes)t[e.name]=e.value;this.imgContent=t}console.error("was not able to get the title of the raum_contentmittitel")},template:'\n \x3c!-- div that contains the content --\x3e\n\x3c!-- TODO: test with more img content from cms--\x3e\n
    \n
    \n

    Content was not found

    \n '};const Be={relative:[{priority:1,regex:new RegExp(/^\.\.\/cms\/content\.php\?content_id=([0-9]+)/),replacement:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/CisVue/Cms/content",group_replacement_strategy:"PATH_SEGMENTS"},{priority:2,regex:new RegExp(/^\.\.\/cms\/news\.php/),replacement:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/CisVue/Cms/news"},{priority:3,regex:new RegExp(/^\.\.\/index\.ci\.php/),replacement:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router},{priority:10,regex:new RegExp(/^\.\.\//),replacement:FHC_JS_DATA_STORAGE_OBJECT.app_root}],absolute:[{}]},Ue=Be.relative.sort((t,e)=>t.priority-e.priority).map(t=>({regex:t.regex,replacement:t.replacement,group_replacement_strategy:t.group_replacement_strategy}));function je(t){for(let{regex:e,replacement:n,group_replacement_strategy:i}of Ue){let a=t.match(e);if(a){let s=t.replace(e,n);switch(i){case"QUERY_PARAMETERS":s=s.concat(`?${a[1]}`);for(let t of a.slice(2))s=s.concat(`&${t}`);break;case"PATH_SEGMENTS":for(let t of a.slice(1))s=s.concat(`/${t}`)}return s}}return t}Be.absolute.sort((t,e)=>t.priority-e.priority).map(t=>({regex:t.regex,replacement:t.replacement,group_replacement_strategy:t.group_replacement_strategy}));var He={name:"GeneralComponent",props:{content:{type:String,required:!0}},methods:{sanitizeLegacyTables(t){t.querySelectorAll("table").forEach(t=>{const e=t.textContent.trim(),n=document.createElement("p");n.textContent=e,t.parentNode.replaceChild(n,t)});t.querySelectorAll("ul").forEach(t=>{Array.from(t.children).forEach(e=>{const n=document.createElement("p");n.textContent=e.textContent,t.parentNode.appendChild(n)}),t.parentNode.removeChild(t)});Array.from(t.querySelectorAll("td")).filter(t=>t.scrollWidth>100).forEach(t=>{if(t.firstChild?.nodeType===Node.TEXT_NODE&&t.firstChild.length>10){const e=document.createElement("p");e.appendChild(t.firstChild),t.appendChild(e)}});Array.from(t.querySelectorAll("th")).forEach(t=>{t.children.length>1&&(t.innerHTML=Array.from(t.childNodes).find(t=>t.textContent).textContent)});t.querySelectorAll("p").forEach(t=>{t.style.setProperty("word-wrap","break-word"),t.style.setProperty("white-space","normal"),t.style.setProperty("max-width","400px")})},prepareContent(){Array.from(document.getElementsByClassName("tablesorter")).forEach((t,e)=>{this.sanitizeLegacyTables(t),new Tabulator(t,{index:e,layout:"fitDataFill",columnDefaults:{formatter:"html",resizable:!0,minWidth:"100px"}})}),document.querySelectorAll("#cms [data-confirm]").forEach(t=>{t.addEventListener("click",e=>{e.preventDefault(),BsConfirm.popup(t.dataset.confirm).then(()=>{Axios.get(t.href).then(t=>{location=location}).catch(t=>console.error("ERROR:",t))}).catch(()=>{})})}),document.querySelectorAll("#cms [data-href]").forEach(t=>{t.href=t.dataset.href.replace(/^ROOT\//,FHC_JS_DATA_STORAGE_OBJECT.app_root)}),document.querySelectorAll("[href]").forEach(t=>{let e=je(t.getAttribute("href"));t.href=e}),document.querySelectorAll("[style*=background-color]").forEach(t=>{"rgb(255, 255, 255)"==t.style.backgroundColor&&(t.style.backgroundColor="var(--fhc-background)"),t.querySelector("*[style*=background-color]")&&(t.style.backgroundColor="var(--fhc-tertiary)")})}},updated(){this.prepareContent()},mounted(){this.prepareContent()},template:'\n \x3c!-- div that contains the content --\x3e\n
    \n \t
    \n
    \n

    Content was not found

    \n '},Ve={name:"ContentComponent",props:{content_id:{type:[Number,String],required:!0},version:{type:[String,Number],default:null},sichtbar:{type:[String,Number],default:null}},components:{raum_contentmittitel:Ne,news_content:{name:"NewsContentType",props:{content:{type:String,required:!0}},methods:{sanitizeLegacyTables(t){t.querySelectorAll("table").forEach(t=>{const e=t.textContent.trim(),n=document.createElement("p");n.textContent=e,t.parentNode.replaceChild(n,t)});t.querySelectorAll("ul").forEach(t=>{Array.from(t.children).forEach(e=>{const n=document.createElement("p");n.textContent=e.textContent,t.parentNode.appendChild(n)}),t.parentNode.removeChild(t)});Array.from(t.querySelectorAll("td")).filter(t=>t.scrollWidth>100).forEach(t=>{if(t.firstChild?.nodeType===Node.TEXT_NODE&&t.firstChild.length>10){const e=document.createElement("p");e.appendChild(t.firstChild),t.appendChild(e)}});Array.from(t.querySelectorAll("th")).forEach(t=>{t.children.length>1&&(t.innerHTML=Array.from(t.childNodes).find(t=>t.textContent).textContent)});t.querySelectorAll("p").forEach(t=>{t.style.setProperty("word-wrap","break-word"),t.style.setProperty("white-space","normal"),t.style.setProperty("max-width","400px")})}},mounted(){Array.from(document.getElementsByClassName("tablesorter")).forEach((t,e)=>{this.sanitizeLegacyTables(t),new Tabulator(t,{index:e,layout:"fitDataFill",columnDefaults:{formatter:"html",resizable:!0,minWidth:"100px"}})}),document.querySelectorAll("#cms [data-confirm]").forEach(t=>{t.addEventListener("click",e=>{e.preventDefault(),BsConfirm.popup(t.dataset.confirm).then(()=>{Axios.get(t.href).then(t=>{location=location}).catch(t=>console.error("ERROR:",t))}).catch(()=>{})})}),document.querySelectorAll("#cms [data-href]").forEach(t=>{t.href=t.dataset.href.replace(/^ROOT\//,FHC_JS_DATA_STORAGE_OBJECT.app_root)}),document.querySelectorAll("[href]").forEach(t=>{let e=je(t.getAttribute("href"));t.href=e}),document.querySelectorAll("[style*=background-color]").forEach(t=>{"rgb(255, 255, 255)"==t.style.backgroundColor&&(t.style.backgroundColor="var(--fhc-background)"),t.querySelector("*[style*=background-color]")&&(t.style.backgroundColor="var(--fhc-tertiary)")}),Vue.nextTick(()=>{document.querySelectorAll(".card-header").forEach(t=>{t.classList.add("fhc-primary")}),document.querySelectorAll(".row").forEach(t=>{t.classList.add("w-100"),t.classList.add("align-items-center")}),document.querySelectorAll(".row h2").forEach(t=>{t.classList.add("mb-0")})})},template:'\n\t \x3c!-- div that contains the content --\x3e\n\t
    \n\t\t
    \n\t
    \n\t

    Content was not found

    \n\t '},general:He,iframe_content:{name:"iframe_content",props:{content:{type:String,required:!0}},computed:{srcUrl(){const t=(new DOMParser).parseFromString(`
    ${this.content}
    `,"text/html").querySelector("iframe[src]");if(!t)return"";return je(t.getAttribute("src")||"")}},template:'\n\t\t
    \n\t\t\t\n\t\t
    Keine URL gefunden.
    \n\t\t
    \n\t'}},data(){return{content_type:null,content:null,content_id_internal:this.content_id}},methods:{fetchContent(){this.$api.call(Me.content(this.content_id_internal,this.version,this.sprache,this.sichtbar)).then(t=>{this.$nextTick(function(){this.content=t.data.content,this.content_type=t.data.type})})}},watch:{sprache:function(t){this.fetchContent()},"$route.params.content_id"(t){this.content_id_internal=t,this.fetchContent()}},computed:{sprache(){return this.$p.user_language.value},computeContentType:function(){switch(this.content_type){case"raum_contentmittitel":return"raum_contentmittitel";case"news":return"news_content";case"iframe":return"iframe_content";default:return"general"}}},created(){this.fetchContent()},template:'\n \x3c!-- div that contains the content --\x3e\n\t
    \n \t\n\t
    \n

    No content is available to display

    \n '};const Je="Week";var Ge={name:"RoomInformation",components:{FhcCalendar:Ct},props:{viewData:Object,propsViewData:Object},computed:{currentDay(){return this.propsViewData?.focus_date||luxon.DateTime.now().setZone(this.viewData.timezone).toISODate()},currentMode(){return this.propsViewData?.mode||Je}},methods:{handleChangeDate(t,e){return this.handleChangeMode(e,t)},handleChangeMode(t,e){const n=t[0].toUpperCase()+t.slice(1),i=e.toISODate();this.$router.push({name:"RoomInformation",params:{mode:n,focus_date:i,ort_kurzbz:this.propsViewData.ort_kurzbz}})},getPromiseFunc(t,e){return[this.$api.call(_t.getRoomInfo(this.propsViewData.ort_kurzbz,t.toISODate(),e.toISODate())),this.$api.call(_t.getOrtReservierungen(this.propsViewData.ort_kurzbz,t.toISODate(),e.toISODate()))]}},template:'\n\t
    \n\t\t

    {{ $p.t(\'rauminfo/rauminfo\') }} {{ propsViewData.ort_kurzbz }}

    \n\t\t
    \n\t\t\n\t
    '};const qe=new Date,We={name:"AbgabeStudentDetail",components:{Upload:ge,BsModal:s,InputNumber:primevue.inputnumber,Checkbox:primevue.checkbox,Dropdown:primevue.dropdown,Textarea:primevue.textarea,VueDatePicker:a},props:{projektarbeit:{type:Object,default:null},viewMode:{type:Boolean,default:!1}},data:()=>({eidAkzeptiert:!1,enduploadTermin:null,allActiveLanguages:FHC_JS_DATA_STORAGE_OBJECT.server_languages,form:Vue.reactive({sprache:"",abstract:"",abstract_en:"",schlagwoerter:"",schlagwoerter_en:"",kontrollschlagwoerter:"",seitenanzahl:1})}),methods:{validate:function(t){return!!t.file.length||(this.$fhcAlert.alertWarning(this.$p.t("global/warningChooseFile")),!1)},triggerEndupload(){if(!this.validate(this.enduploadTermin))return!1;const t=new FormData;t.append("paabgabetyp_kurzbz",this.enduploadTermin.paabgabetyp_kurzbz),t.append("projektarbeit_id",this.enduploadTermin.projektarbeit_id),t.append("paabgabe_id",this.enduploadTermin.paabgabe_id),t.append("student_uid",this.projektarbeit.student_uid),t.append("bperson_id",this.projektarbeit.bperson_id),t.append("sprache",this.form.sprache.sprache),t.append("abstract",this.form.abstract),t.append("abstract_en",this.form.abstract_en),t.append("schlagwoerter",this.form.schlagwoerter),t.append("schlagwoerter_en",this.form.schlagwoerter_en),t.append("seitenanzahl",this.form.seitenanzahl);for(let e=0;e{this.handleUploadRes(t)}),this.$refs.modalContainerEnduploadZusatzdaten.hide()},downloadAbgabe(t){this.$fhcApi.factory.lehre.getStudentProjektarbeitAbgabeFile(t.paabgabe_id,this.projektarbeit.student_uid)},formatDate(t){const e=new Date(t),n=t=>String(t).padStart(2,"0"),i=n(e.getMonth()+1);return`${n(e.getDate())}.${i}.${e.getFullYear()}`},upload(t){if(!this.validate(t))return!1;if("Endupload"===t.bezeichnung)this.enduploadTermin=t,this.$refs.modalContainerEnduploadZusatzdaten.show();else{const e=new FormData;e.append("paabgabetyp_kurzbz",t.paabgabetyp_kurzbz),e.append("projektarbeit_id",this.projektarbeit.projektarbeit_id),e.append("paabgabe_id",t.paabgabe_id),e.append("student_uid",this.projektarbeit.student_uid),e.append("bperson_id",this.projektarbeit.bperson_id);for(let n=0;n{this.handleUploadRes(t)})}},handleUploadRes(t){"success"==t.meta.status?this.$fhcAlert.alertSuccess("File erfolgreich hochgeladen"):this.$fhcAlert.alertError("File upload error"),t.meta.signaturInfo&&this.$fhcAlert.alertInfo(t.meta.signaturInfo)},dateDiffInDays:(t,e)=>Math.round((new Date(t)-new Date(e))/864e5),getDateStyle(t,e){const n=new Date(t.datum),i=new Date(t.abgabedatum);let a="white",s="";return null===t.abgabedatum?nqe&&this.dateDiffInDays(n,qe)<=12&&(a="yellow",s="fa-circle-exclamation"):i>n?(a="pink",s="fa-circle-question"):(a="green",s="fa-square-check"),void 0!==e||"icon"===e?s:"abgabe-zieldatum-border-"+a},openBeurteilungLink(t){window.open(t,"_blank")},getOptionLabel:t=>t.sprache},watch:{projektarbeit(t){this.form.sprache=t.sprache?this.allActiveLanguages.find(e=>e.sprache==t.sprache):this.allActiveLanguages.find(t=>"German"==t.sprache),this.form.abstract=t.abstract,this.form.abstract_en=t.abstract_en,this.form.schlagwoerter=t.schlagwoerter,this.form.schlagwoerter_en=t.schlagwoerter_en,this.form.kontrollschlagwoerter=t.kontrollschlagwoerter,this.form.seitenanzahl=t.seitenanzahl}},computed:{getEid(){return this.$p.t("abgabetool/c4eidesstattlicheErklaerung")},getEnduploadErlaubt(){return!this.eidAkzeptiert}},created(){},mounted(){},template:'\n\t\t
    \n\t\t\n\t\t\t
    {{$p.t(\'abgabetool/c4abgabeStudentenbereich\')}}
    \n\t\t\t
    \n\t\t\t\t

    {{projektarbeit?.betreuer}}

    \n\t\t\t\t

    {{projektarbeit?.titel}}

    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    {{$p.t(\'abgabetool/c4fixtermin\')}}
    \n\t\t\t\t\t
    {{$p.t(\'abgabetool/c4zieldatum\')}}
    \n\t\t\t\t\t
    {{$p.t(\'abgabetool/c4abgabetyp\')}}
    \n\t\t\t\t\t
    {{$p.t(\'abgabetool/c4abgabekurzbz\')}}
    \n\t\t\t\t\t
    {{$p.t(\'abgabetool/c4abgabedatum\')}}
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t{{$p.t(\'abgabetool/c4fileupload\')}}\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\x3c!--\n\t\t\t\t\t\t

    \n--\x3e\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    {{ termin.bezeichnung }}
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t{{ termin.abgabedatum?.split("-").reverse().join(".") }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t \t\n\t \t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t \t\n '};var Ke={name:"VerticalSplit",data:function(){return{availHeight:0,topheight:0,bottomheight:0,mousePosY:0,resize:!1,vsplitter:null,vsplitterOffset:0,selfOffsetTop:0}},template:'\n
    \n
    \n \n

    Top Panel

    \n
    \n
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n \n

    \n \n

    \n
    \n ',mounted:function(){this.calcHeights(),this.trackVerticalSplitterOffsetTop(),window.addEventListener("resize",this.calcHeights)},updated:function(){this.trackVerticalSplitterOffsetTop()},methods:{calcHeights:function(){var t=window.innerHeight,e=this.availHeight;this.selfOffsetTop=this.$refs.verticalsplit.offsetTop,this.availHeight=t-this.selfOffsetTop-this.$refs.vsplitter.offsetHeight,0===this.topheight&&0===this.bottomheight||0===e?this.topheight=Math.floor(this.availHeight/2):this.topheight=Math.floor(100*this.topheight/e/100*this.availHeight),this.bottomheight=this.availHeight-this.topheight},collapseTop:function(){this.calcHeights(),this.topheight=0,this.bottomheight=this.availHeight},collapseBottom:function(){this.calcHeights(),this.topheight=this.availHeight,this.bottomheight=0},showBoth:function(){this.topheight=Math.floor(this.availHeight/2),this.bottomheight=Math.floor(this.availHeight/2)},isCollapsed:function(){return 0===this.topheight?"top":0===this.bottomheight&&"bottom"},dragStart:function(t){t.preventDefault(),t.stopPropagation(),window.addEventListener("mouseup",this.dragEnd),window.addEventListener("mousemove",this.drag),this.resize=!0,this.mousePosY=t.clientY},drag:function(t){if(this.resize){t.preventDefault(),t.stopPropagation();var e=t.clientY-this.mousePosY;this.topheight=this.topheight+e,this.topheight<0&&(this.topheight=0),this.topheight>this.availHeight&&(this.topheight=this.availHeight),this.bottomheight=this.availHeight-this.topheight,this.mousePosY=t.clientY}},dragEnd:function(t){t.preventDefault(),t.stopPropagation(),window.removeEventListener("mousemove",this.drag),window.removeEventListener("mouseup",this.dragEnd),this.resize=!1,this.mousePosY=t.clientY},trackVerticalSplitterOffsetTop:function(){this.vsplitterOffset=this.$refs.vsplitter.offsetTop}},computed:{topOrBottomClass:function(){return this.vsplitterOffset-this.selfOffsetTop<=Math.floor(this.availHeight/2)?"top":"bottom"},topheightcss:function(){return this.topheight+"px"},bottomheightcss:function(){return this.bottomheight+"px"}}};const Ze={name:"AbgabetoolStudent",components:{CoreFilterCmpt:oe,AbgabeDetail:We,VerticalSplit:Ke},props:{student_uid_prop:{default:null},viewData:{type:Object,required:!0,default:()=>({uid:""}),validator:t=>t&&t.uid}},data(){return{tabulatorUuid:Vue.ref(0),domain:"",student_uid:null,detail:null,projektarbeiten:null,selectedProjektarbeit:null,tableBuiltResolve:null,tableBuiltPromise:null,abgabeTableOptions:{minHeight:250,index:"projektarbeit_id",layout:"fitColumns",placeholder:this.$p.t("global/noDataAvailable"),columns:[{title:Vue.computed(()=>this.$p.t("abgabetool/c4details")),field:"details",formatter:this.detailFormatter,widthGrow:1,tooltip:!1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4beurteilung")),field:"beurteilung",formatter:this.beurteilungFormatter,widthGrow:1,tooltip:!1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4sem")),field:"sem",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4stg")),field:"stg",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4kontakt")),field:"mail",formatter:this.mailFormatter,widthGrow:1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4betreuer")),field:"betreuer",formatter:this.centeredTextFormatter,widthGrow:2},{title:Vue.computed(()=>this.$p.t("abgabetool/c4projekttyp")),field:"typ",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4titel")),field:"titel",formatter:this.centeredTextFormatter,widthGrow:8}],persistence:!1},abgabeTableEventHandlers:[{event:"tableBuilt",handler:async()=>{this.tableBuiltResolve()}},{event:"cellClick",handler:async(t,e)=>{if("details"===e.getColumn().getField()){const t=e.getValue();if("detailTermine"===t.mode)this.setDetailComponent(e.getValue());else if("beurteilungDownload"===t.mode){const e=FHC_JS_DATA_STORAGE_OBJECT.app_root+"cis/private/pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz="+t.betreuerart_kurzbz+"&projektarbeit_id="+t.projektarbeit_id+"&person_id="+t.betreuer_person_id;window.open(e,"_blank")}}else if("beurteilung"===e.getColumn().getField()){const t=e.getValue();"-"!=t&&window.open(t,"_blank")}t.stopPropagation()}}]}},methods:{isPastDate:t=>new Date(t){const n=this.projektarbeiten?.retval?.find(e=>e.projektarbeit_id==t.projektarbeit_id);n.abgabetermine=e.data[0].retval,n.abgabetermine.forEach(t=>{t.file=[],t.allowedToUpload=!0,"Endupload"==t.bezeichnung&&this.isPastDate(t.datum)}),n.betreuer=this.buildBetreuer(n),n.student_uid=this.student_uid,this.selectedProjektarbeit=n,this.$refs.verticalsplit.showBoth()})},centeredTextFormatter:t=>'

    '+t.getValue()+"

    ",detailFormatter(t){const e=t.getValue();return"detailTermine"===e.mode?'
    ':"beurteilungDownload"===e.mode?'
    ':void 0},mailFormatter:t=>'
    ',beurteilungFormatter:t=>t.getValue()?'
    ':"-",tableResolve(t){this.tableBuiltResolve=t},buildMailToLink(t){return"mailto:"+t.mitarbeiter_uid+"@"+this.domain},buildBetreuer:t=>t.betreuerart_beschreibung+": "+(t.btitelpre?t.btitelpre+" ":"")+t.bvorname+" "+t.bnachname+(t.btitelpost?" "+t.btitelpost:""),setupData(t){this.projektarbeiten=t[0],this.domain=t[1],this.student_uid=t[2];const e=t[0]?.retval?.map(t=>((t.babgeschickt||t.zweitbetreuer_abgeschickt)&&(t.beurteilungLink=FHC_JS_DATA_STORAGE_OBJECT.app_root+"cis/private/pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz="+t.betreuerart_kurzbz+"&projektarbeit_id="+t.projektarbeit_id+"&person_id="+t.bperson_id),{details:{student_uid:this.student_uid,projektarbeit_id:t.projektarbeit_id,betreuer_person_id:t.bperson_id,betreuerart_kurzbz:t.betreuerart_kurzbz,mode:"detailTermine"},beurteilung:t.beurteilungLink??null,sem:t.studiensemester_kurzbz,stg:t.kurzbzlang,mail:this.buildMailToLink(t),betreuer:this.buildBetreuer(t),typ:t.projekttypbezeichnung,titel:t.titel}));this.$refs.abgabeTable.tabulator.setColumns(this.abgabeTableOptions.columns),this.$refs.abgabeTable.tabulator.setData(e)},loadProjektarbeiten(){this.$fhcApi.factory.lehre.getStudentProjektarbeiten(this.student_uid_prop||this.viewData?.uid||null).then(t=>{t?.data&&this.setupData(t.data)})},loadAbgaben(t){return new Promise(e=>{this.$fhcApi.factory.lehre.getStudentProjektabgaben(t).then(t=>{e(t)})})},handleUuidDefined(t){this.tabulatorUuid=t},calcMaxTableHeight(){const t=this.tabulatorUuid?"-"+this.tabulatorUuid:"",e=document.getElementById("filterTableDataset"+t);if(!e)return;const n=e.getBoundingClientRect();this.abgabeTableOptions.height=window.visualViewport.height-n.top,this.$refs.abgabeTable.tabulator.setHeight(this.abgabeTableOptions.height)},async setupMounted(){this.tableBuiltPromise=new Promise(this.tableResolve),await this.tableBuiltPromise,this.loadProjektarbeiten(),this.$refs.verticalsplit.collapseBottom()}},watch:{},computed:{isViewMode(){return this.student_uid!==this.viewData.uid}},created(){},mounted(){this.setupMounted()},template:'\n\t\t\t\t\t\n\t\t\n\t\t\n\t\n '},Ye=new Date,Xe={name:"AbgabeMitarbeiterDetail",components:{BsModal:s,InputNumber:primevue.inputnumber,Checkbox:primevue.checkbox,Dropdown:primevue.dropdown,Textarea:primevue.textarea,VueDatePicker:a},props:{projektarbeit:{type:Object,default:null}},data:()=>({oldPaBeurteilungLink:"https://moodle.technikum-wien.at/mod/page/view.php?id=1005052",eidAkzeptiert:!1,enduploadTermin:null,allActiveLanguages:FHC_JS_DATA_STORAGE_OBJECT.server_languages,allAbgabeTypes:[{paabgabetyp_kurzbz:"abstract",bezeichnung:"Entwurf"},{paabgabetyp_kurzbz:"zwischen",bezeichnung:"Zwischenabgabe"},{paabgabetyp_kurzbz:"note",bezeichnung:"Benotung"},{paabgabetyp_kurzbz:"end",bezeichnung:"Endupload"},{paabgabetyp_kurzbz:"enda",bezeichnung:"Endabgabe im Sekretariat"}]}),methods:{openZusatzdatenModal(t){},saveTermin(t){const e=t.paabgabe_id;this.$fhcApi.factory.lehre.postProjektarbeitAbgabe(t).then(n=>{"success"==n?.meta?.status?(this.$fhcAlert.alertSuccess(this.$p.t("ui/gespeichert")),-1===e&&(t.paabgabe_id=n?.data?.retval,this.projektarbeit.abgabetermine.push({paabgabe_id:-1,projektarbeit_id:this.projektarbeit.projektarbeit_id,fixtermin:!1,kurzbz:"",datum:(new Date).toISOString().split("T")[0],paabgabetyp_kurzbz:"",bezeichnung:"",abgabedatum:null,insertvon:this.viewData?.uid??"",allowedToSave:!0,allowedToDelete:!0}))):"error"==n?.meta?.status&&this.$fhcAlert.alertError()})},deleteTermin(t){this.$fhcApi.factory.lehre.deleteProjektarbeitAbgabe(t.paabgabe_id).then(e=>{if("success"==e?.meta?.status){this.$fhcAlert.alertSuccess(this.$p.t("ui/genericDeleted",[this.$p.t("abgabetool/abgabe")]));const e=this.projektarbeit.abgabetermine.findIndex(e=>e.paabgabe_id===t.paabgabe_id);this.projektarbeit.abgabetermine.splice(e,1)}else"error"==e?.meta?.status&&this.$fhcAlert.alertError()})},validate:function(t){return!!t.file.length||(this.$fhcAlert.alertWarning(this.$p.t("global/warningChooseFile")),!1)},downloadAbgabe(t){this.$fhcApi.factory.lehre.getStudentProjektarbeitAbgabeFile(t.paabgabe_id,this.projektarbeit.student_uid)},dateDiffInDays:(t,e)=>Math.round((new Date(t)-new Date(e))/864e5),getDateStyle(t){const e=new Date(t.datum),n=new Date(t.abgabedatum);let i="white",a="black";return null===t.abgabedatum?eYe&&this.dateDiffInDays(e,Ye)<=12&&(i="yellow"):n>e?(i="pink",a="white"):i="green",`font-color: ${a} ; background-color: ${i}; border-radius: 50%;`},openBeurteilungLink(t){window.open(t,"_blank")},getOptionLabelSprache:t=>t.sprache,getOptionLabelAbgabetyp:t=>t.bezeichnung,formatDate(t){const e=new Date(t),n=t=>String(t).padStart(2,"0"),i=n(e.getMonth()+1);return`${n(e.getDate())}.${i}.${e.getFullYear()}`},openStudentPage(){const t=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/Cis/Abgabetool/Student/"+this.projektarbeit?.student_uid;window.open(t,"_blank")},openPlagiatcheck(){window.open("https://technikum-wien.turnitin.com/sso/sp/redwood/saml/5IyfmBr2OcSIaWQTKlFCGj/start","_blank")},openBenotung(){const t="Zweitbegutachter"==this.projektarbeit?.betreuerart_kurzbz?"ProjektarbeitsbeurteilungZweitbegutachter":"ProjektarbeitsbeurteilungErstbegutachter",e=FHC_JS_DATA_STORAGE_OBJECT.app_root+"index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/"+t;window.open(e,"_blank")}},computed:{getEid(){return this.$p.t("abgabetool/c4eidesstattlicheErklaerung")},getEnduploadErlaubt(){return!this.eidAkzeptiert},getSemesterBenotbar(){return this.projektarbeit?.isCurrent??!1},endUploadVorhanden(){return this.projektarbeit?.abgabetermine.find(t=>"end"===t.paabgabetyp_kurzbz&&null!==t.abgabedatum)}},created(){},mounted(){},template:'\n\t\t
    \n\t\t\n\n\t\t\t
    {{$p.t(\'abgabetool/c4abgabeMitarbeiterbereich\')}}
    \n\n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t

    {{projektarbeit?.student}}

    \n\t\t\t\t\t

    {{projektarbeit?.titel}}

    \n\t\t\t\t\t

    {{projektarbeit?.zweitbegutachter}}

    \n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tKein Endupload vorhanden!\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    {{$p.t(\'abgabetool/c4fixtermin\')}}
    \n\t\t\t\t\t
    {{$p.t(\'abgabetool/c4zieldatum\')}}
    \n\t\t\t\t\t
    {{$p.t(\'abgabetool/c4abgabetyp\')}}
    \n\t\t\t\t\t
    {{$p.t(\'abgabetool/c4abgabekurzbz\')}}
    \n\t\t\t\t\t
    {{$p.t(\'abgabetool/c4abgabedatum\')}}
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t
    keine Termine gefunden!
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t

    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t{{ termin.abgabedatum?.split("-").reverse().join(".") }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\n'},Qe={name:"AbgabetoolMitarbeiter",components:{BsModal:s,CoreFilterCmpt:oe,AbgabeDetail:Xe,VerticalSplit:Ke,Dropdown:primevue.dropdown,Textarea:primevue.textarea,VueDatePicker:a},props:{viewData:{type:Object,required:!0,default:()=>({name:"",uid:""}),validator:t=>t&&t.name&&t.uid}},data(){return{saving:!1,loading:!1,allAbgabeTypes:[{paabgabetyp_kurzbz:"abstract",bezeichnung:"Entwurf"},{paabgabetyp_kurzbz:"zwischen",bezeichnung:"Zwischenabgabe"},{paabgabetyp_kurzbz:"note",bezeichnung:"Benotung"},{paabgabetyp_kurzbz:"end",bezeichnung:"Endupload"},{paabgabetyp_kurzbz:"enda",bezeichnung:"Endabgabe im Sekretariat"}],serienTermin:Vue.reactive({datum:new Date,bezeichnung:{paabgabetyp_kurzbz:"zwischen",bezeichnung:"Zwischenabgabe"},kurzbz:""}),showAll:!1,tabulatorUuid:Vue.ref(0),selectedData:[],domain:"",student_uid:null,detail:null,detailOffset:0,projektarbeiten:null,selectedProjektarbeit:null,tableBuiltResolve:null,tableBuiltPromise:null,abgabeTableOptions:{height:700,index:"projektarbeit_id",layout:"fitDataStretch",placeholder:this.$p.t("global/noDataAvailable"),selectable:!0,selectableCheck:this.selectionCheck,columns:[{formatter:"rowSelection",titleFormatter:"rowSelection",titleFormatterParams:{rowRange:"active"},hozAlign:"center",headerSort:!1,frozen:!0,width:70},{title:Vue.computed(()=>this.$p.t("abgabetool/c4details")),field:"details",formatter:this.detailFormatter,widthGrow:1,tooltip:!1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4personenkennzeichen")),field:"pkz",formatter:this.pkzTextFormatter,widthGrow:1,tooltip:!1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4kontakt")),field:"mail",formatter:this.mailFormatter,widthGrow:1,tooltip:!1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4vorname")),field:"vorname",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4nachname")),field:"nachname",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4projekttyp")),field:"projekttyp_kurzbz",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4stg")),field:"stg",formatter:this.centeredTextFormatter,widthGrow:2},{title:Vue.computed(()=>this.$p.t("abgabetool/c4sem")),field:"studiensemester_kurzbz",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4titel")),field:"titel",formatter:this.centeredTextFormatter,maxWidth:500,widthGrow:8},{title:Vue.computed(()=>this.$p.t("abgabetool/c4betreuerart")),field:"betreuerart_beschreibung",formatter:this.centeredTextFormatter,widthGrow:8}],persistence:!1},abgabeTableEventHandlers:[{event:"tableBuilt",handler:async()=>{this.tableBuiltResolve()}},{event:"cellClick",handler:async(t,e)=>{"details"===e.getColumn().getField()?(this.setDetailComponent(e.getValue()),this.undoSelection(e)):"mail"===e.getColumn().getField()&&this.undoSelection(e)}},{event:"rowSelectionChanged",handler:async t=>{this.selectedData=t}}]}},methods:{getOptionLabelAbgabetyp:t=>t.bezeichnung,formatDate(t){const e=new Date(t),n=t=>String(t).padStart(2,"0"),i=n(e.getMonth()+1);return`${n(e.getDate())}.${i}.${e.getFullYear()}`},undoSelection(t){const e=t.getRow();e.isSelected()&&e.deselect()},selectionCheck(t){const e=t.getData();return"Zweitbegutachter"!=e?.betreuerart_kurzbz},showDeadlines(){const t=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/Cis/Abgabetool/Deadlines";window.open(t,"_blank")},toggleShowAll(t){this.showAll=t,this.loading=!0,this.loadProjektarbeiten(t,()=>{this.$refs.abgabeTable?.tabulator.redraw(!0),this.$refs.abgabeTable?.tabulator.setSort([]),this.loading=!1})},openAddSeriesModal(){this.$refs.modalContainerAddSeries.show()},addSeries(){this.saving=!0,this.$fhcApi.factory.lehre.postSerientermin(this.serienTermin.datum.toISOString(),this.serienTermin.bezeichnung.paabgabetyp_kurzbz,this.serienTermin.bezeichnung.bezeichnung,this.serienTermin.kurzbz,this.selectedData?.map(t=>t.projektarbeit_id)).then(t=>{"success"===t.meta.status&&t.data?(this.$fhcAlert.alertSuccess(this.$p.t("abgabetool/serienTerminGespeichert")),this.$fhcAlert.alertInfo(this.$p.t("abgabetool/serienTerminEmailSentInfo",[this.createInfoString(t.data)]))):this.$fhcAlert.alertError(this.$p.t("abgabetool/errorSerienterminSpeichern"))}).finally(()=>{this.saving=!1}),this.$refs.modalContainerAddSeries.hide()},createInfoString(t){let e="";return t.forEach(t=>{e+=t,e+="; "}),e},isPastDate:t=>new Date(t){const n=this.projektarbeiten?.retval?.find(e=>e.projektarbeit_id==t.projektarbeit_id);n.abgabetermine=e.data[0].retval,n.isCurrent=e.data[1],n.abgabetermine.push({paabgabe_id:-1,projektarbeit_id:n.projektarbeit_id,fixtermin:!1,kurzbz:"",datum:(new Date).toISOString().split("T")[0],paabgabetyp_kurzbz:"",bezeichnung:"",abgabedatum:null,insertvon:this.viewData?.uid??""}),n.abgabetermine.forEach(t=>{t.file=[],t.allowedToSave=t.insertvon==this.viewData?.uid&&"Zweitbegutachter"!=n.betreuerart_kurzbz,t.allowedToDelete=t.allowedToSave&&!t.abgabedatum,t.bezeichnung={bezeichnung:t.bezeichnung,paabgabetyp_kurzbz:t.paabgabetyp_kurzbz}}),n.betreuer=this.buildBetreuer(n),n.student_uid=t.student_uid,n.student=`${n.vorname} ${n.nachname}`,this.selectedProjektarbeit=n,this.$refs.verticalsplit.showBoth()})},centeredTextFormatter(t){const e=t.getValue();if(e)return'

    '+e+"

    "},detailFormatter:t=>'
    ',mailFormatter:t=>'
    ',beurteilungFormatter:t=>t.getValue()?'
    ':"-",pkzTextFormatter:t=>'

    '+t.getValue()+"

    ",tableResolve(t){this.tableBuiltResolve=t},buildMailToLink(t){return"mailto:"+t.uid+"@"+this.domain},buildPKZ:t=>`${t.uid} / ${t.matrikelnr}`,buildStg:t=>(t.typ+t.kurzbz)?.toUpperCase(),buildBetreuer:t=>t.betreuerart_beschreibung+": "+(t.btitelpre?t.btitelpre+" ":"")+t.bvorname+" "+t.bnachname+(t.btitelpost?" "+t.btitelpost:""),setupData(t){this.projektarbeiten=t[0],this.domain=t[1];const e=t[0]?.retval?.map(t=>({...t,details:{student_uid:t.uid,projektarbeit_id:t.projektarbeit_id},pkz:this.buildPKZ(t),beurteilung:t.beurteilungLink??null,sem:t.studiensemester_kurzbz,stg:this.buildStg(t),mail:this.buildMailToLink(t),typ:t.projekttyp_kurzbz,titel:t.titel}));this.$refs.abgabeTable.tabulator.setColumns(this.abgabeTableOptions.columns),this.$refs.abgabeTable.tabulator.setData(e)},loadProjektarbeiten(t=!1,e){this.$fhcApi.factory.lehre.getMitarbeiterProjektarbeiten(this.viewData?.uid??null,t).then(t=>{t?.data&&this.setupData(t.data)}).finally(()=>{e&&e()})},loadAbgaben(t){return new Promise(e=>{this.$fhcApi.factory.lehre.getStudentProjektabgaben(t).then(t=>{e(t)})})},handleUuidDefined(t){this.tabulatorUuid=t},calcMaxTableHeight(){const t=this.tabulatorUuid?"-"+this.tabulatorUuid:"",e=document.getElementById("filterTableDataset"+t);if(!e)return;const n=e.getBoundingClientRect();this.abgabeTableOptions.height=window.visualViewport.height-n.top,this.$refs.abgabeTable.tabulator.setHeight(this.abgabeTableOptions.height)},async setupMounted(){this.tableBuiltPromise=new Promise(this.tableResolve),await this.tableBuiltPromise,this.loadProjektarbeiten(),this.$refs.verticalsplit.collapseBottom(),this.calcMaxTableHeight()}},watch:{},computed:{},created(){},mounted(){this.setupMounted()},template:'\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\n\t \n '},tn={name:"DeadlineOverview",components:{CoreFilterCmpt:oe},props:{person_uid_prop:{default:null},viewData:{type:Object,required:!0,default:()=>({name:"",uid:""}),validator:t=>t&&t.name&&t.uid}},data(){return{fullName:null,deadlines:null,tabulatorUuid:Vue.ref(0),tableBuiltResolve:null,tableBuiltPromise:null,deadlineTableOptions:{height:700,index:"projektarbeit_id",layout:"fitColumns",placeholder:this.$p.t("global/noDataAvailable"),columns:[{title:Vue.computed(()=>this.$p.t("abgabetool/c4zieldatum")),field:"datum",formatter:this.centeredTextFormatter,widthGrow:1,tooltip:!1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4fixtermin")),field:"fixterminstring",formatter:this.centeredTextFormatter,widthGrow:1,tooltip:!1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4abgabetyp")),field:"typ_bezeichnung",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4abgabekurzbz")),field:"kurzbz",formatter:this.centeredTextFormatter,widthGrow:3},{title:Vue.computed(()=>this.$p.t("person/studentIn")),field:"student",formatter:this.centeredTextFormatter,widthGrow:2},{title:Vue.computed(()=>this.$p.t("abgabetool/c4stg")),field:"stg",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4sem")),field:"semester",formatter:this.centeredTextFormatter,widthGrow:1}],persistence:!1},deadlineTableEventHandlers:[{event:"tableBuilt",handler:async()=>{this.tableBuiltResolve()}},{event:"cellClick",handler:async(t,e)=>{if("details"===e.getColumn().getField()){const t=e.getValue();if("detailTermine"===t.mode)this.setDetailComponent(e.getValue());else if("beurteilungDownload"===t.mode){const e=FHC_JS_DATA_STORAGE_OBJECT.app_root+"cis/private/pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz="+t.betreuerart_kurzbz+"&projektarbeit_id="+t.projektarbeit_id+"&person_id="+t.betreuer_person_id;window.open(e,"_blank")}}else if("beurteilung"===e.getColumn().getField()){const t=e.getValue();"-"!=t&&window.open(t,"_blank")}t.stopPropagation()}}]}},methods:{centeredTextFormatter:t=>'

    '+t.getValue()+"

    ",tableResolve(t){this.tableBuiltResolve=t},loadDeadlines(){this.$fhcApi.factory.lehre.fetchDeadlines(this.person_uid_prop??null).then(t=>{t?.data&&this.setupData(t.data)})},setupData(t){this.deadlines=t,this.deadlines.forEach(t=>{t.student=(t.stud_titelpre?t.stud_titelpre+" ":"")+t.stud_vorname+" "+t.stud_nachname+(t.stud_titelpost?" "+t.stud_titelpost:""),t.fixterminstring=t.fixtermin?this.$p.t("abgabetool/c4yes"):this.$p.t("abgabetool/c4no")}),this.$refs.deadlineTable.tabulator.setColumns(this.deadlineTableOptions.columns),this.$refs.deadlineTable.tabulator.setData(this.deadlines)},handleUuidDefined(t){this.tabulatorUuid=t},calcMaxTableHeight(){const t=this.tabulatorUuid?"-"+this.tabulatorUuid:"",e=document.getElementById("filterTableDataset"+t);if(!e)return;const n=e.getBoundingClientRect();this.deadlineTableOptions.height=window.visualViewport.height-n.top,this.$refs.deadlineTable.tabulator.setHeight(this.deadlineTableOptions.height)},async setupMounted(){this.tableBuiltPromise=new Promise(this.tableResolve),await this.tableBuiltPromise,this.loadDeadlines(),this.calcMaxTableHeight()}},watch:{},computed:{},created(){},mounted(){this.setupMounted()},template:'\n\t\t

    {{$p.t(\'abgabetool/deadlinesTitle\')}} {{ fullName ? (\'-\' + fullName) : \'\'}}

    \n\t\t
    \n\t\t\t\n\t\t \n '};var en={data:()=>({studienSemester:[],selectedStudiensemester:null,studiengaenge:[],selectedStudiengang:null,studienOrdnung:[],selectedStudienordnung:null,semester:[],selectedSemester:null,lehrveranstaltungen:[],selectedLehrveranstaltung:null,menu:null}),provide(){return{studium_studiengang:Vue.computed(()=>this.selectedStudiengang),studium_studiensemester:Vue.computed(()=>this.selectedStudiensemester),studium_semester:Vue.computed(()=>this.selectedSemester),studium_studienordnung:Vue.computed(()=>this.selectedStudienordnung)}},components:{LvUebersicht:qt},watch:{selectedStudiensemester:function(t,e){if(t&&t!=e){const e=this.getDataFromLocalStorage("sudiensemester");t&&(!e||e&&e!=t)&&this.storeDataToLocalStorage("sudiensemester",t)}},selectedSemester:function(t,e){if(t&&t!=e){const e=this.getDataFromLocalStorage("semester");(!e||e&&e!=t)&&this.storeDataToLocalStorage("semester",t)}},selectedStudiengang:function(t,e){if(t&&t!=e){const e=this.getDataFromLocalStorage("studiengang");(!e||e&&e!=t)&&this.storeDataToLocalStorage("studiengang",JSON.stringify(t))}},selectedStudienordnung:function(t,e){if(t&&t!=e){const e=this.getDataFromLocalStorage("studienordnung");(!e||e&&e!=t)&&this.storeDataToLocalStorage("studienordnung",JSON.stringify(t))}}},methods:{changeStudiensemester(t){let e=this.$refs.studiensemester;e.selectedIndex=(e.selectedIndex+t+e.options.length)%e.options.length,this.changeSelectedStudienSemester(e.value)},changeStudiengang(t){let e=this.$refs.studiengaenge;e.selectedIndex=(e.selectedIndex+t+e.options.length)%e.options.length,this.changeSelectedStudienGang(e.value)},changeSemester(t){let e=this.$refs.semester;e.selectedIndex=(e.selectedIndex+t+e.options.length)%e.options.length,this.changeSelectedSemester(e.value)},changeStudienordnung(t){let e=this.$refs.studienordnung,n=(e.selectedIndex+t+e.options.length)%e.options.length;e.options[n].disabled&&(n=(n+t+e.options.length)%e.options.length),e.selectedIndex=n,this.changeSelectedStudienPlan(e.value)},storeDataToLocalStorage(t,e){localStorage.setItem(t,e)},getDataFromLocalStorage:t=>localStorage.getItem(t),changeSelectedStudienSemester(t){this.$fhcApi.factory.studium.getAllStudienSemester(t,this.selectedStudiengang,this.selectedSemester,this.selectedStudienordnung).then(t=>t.data).then(t=>{this.extractPropertyValues(t)})},changeSelectedStudienGang(t){this.$fhcApi.factory.studium.getAllStudienSemester(this.selectedStudiensemester,t,this.selectedSemester,this.selectedStudienordnung).then(t=>t.data).then(t=>{this.extractPropertyValues(t)})},changeSelectedSemester(t){this.$fhcApi.factory.studium.getAllStudienSemester(this.selectedStudiensemester,this.selectedStudiengang,t,this.selectedStudienordnung).then(t=>t.data).then(t=>{this.extractPropertyValues(t)})},changeSelectedStudienPlan(t){this.$fhcApi.factory.studium.getAllStudienSemester(this.selectedStudiensemester,this.selectedStudiengang,this.selectedSemester,t).then(t=>t.data).then(t=>{this.extractPropertyValues(t)})},openLvUebersicht(t){this.selectedLehrveranstaltung=t,this.selectedLehrveranstaltung.type="lehreinheit",this.selectedLehrveranstaltung.lehreinheit_id=this.selectedLehrveranstaltung.lehrveranstaltung_id,this.selectedLehrveranstaltung&&Vue.nextTick(()=>{this.$refs.lvUebersicht.show()})},sortStudienSemester(t){let e=new RegExp(/^(WS|SS)([0-9]{4})/);t.sort((t,n)=>{let[i,a,s]=t.studiensemester_kurzbz.match(e),[r,o,l]=n.studiensemester_kurzbz.match(e);return s==l?a>o?-1:1:s>l?-1:1})},setHash(t){location.hash=t},extractPropertyValues(t){let{studienSemester:e,studiengang:n,semester:i,studienplan:a,lehrveranstaltungen:s}=t;this.sortStudienSemester(e.all),this.studienSemester=e.all,this.selectedStudiensemester=e.preselected.studiensemester_kurzbz,this.studiengaenge=n.all,this.selectedStudiengang=n.preselected?.studiengang_kz,this.semester=i.all,this.selectedSemester=i?.preselected,this.studienOrdnung=a.all,this.selectedStudienordnung=a.preselected?.studienplan_id,this.lehrveranstaltungen=s,this.lehrveranstaltungen.sort((t,e)=>t.bezeichnung.toLowerCase()>e.bezeichnung.toLowerCase()?1:t.bezeichnung.toLowerCase(){t.lehrveranstaltungen.sort((t,e)=>t.bezeichnung.toLowerCase()>e.bezeichnung.toLowerCase()?1:t.bezeichnung.toLowerCase()t?`${t?.bezeichnung}-${t?.orgform_kurzbz} ( ${t?.orgform_bezeichnung}, ${t?.sprache} )`:"",studiengangTitel:t=>t?`${t?.kurzbzlang} (${t?.bezeichnung})`:"",studiensemesterTitel(t){if(!t)return"";let e=new RegExp(/^(WS|SS)([0-9]{4})/),n=t.match(e);switch(n[1]){case"WS":return`Wintersemester ${n[2]}`;case"SS":return`Sommersemester ${n[2]}`;default:return`${t}`}}},computed:{selectedLehrveranstaltungTitel(){const t=this.studiengaenge.find(t=>t.studiengang_kz==this.selectedStudiengang);return`${this.selectedLehrveranstaltung?.bezeichnung} ${this.selectedLehrveranstaltung?.lehrform_kurzbz} / ${t.kurzbzlang}-${this.selectedSemester} ${this.selectedLehrveranstaltung?.orgform_kurzbz} (${this.selectedStudiensemester})`},computedStudienOrdnung(){return this.studienOrdnung?Object.values(this.studienOrdnung).reduce((t,e)=>(t[e.bezeichnung]||(t[e.bezeichnung]=[]),t[e.bezeichnung].push(e),t),{}):null},computedStudienOrdnungSelectValues(){if(!this.computedStudienOrdnung)return null;let t=[];return Object.entries(this.computedStudienOrdnung).forEach(([e,n])=>{t.push({bezeichnung:`Studienordnung: ${e}`,disabled:!0}),n.forEach(e=>{t.push({studienplan:e,diabled:!1,bezeichnung:`${e?.bezeichnung}-${e?.orgform_kurzbz} ( ${e?.orgform_bezeichnung}, ${e?.sprache} )`})})}),t}},created(){const t=this.getDataFromLocalStorage("sudiensemester")??void 0,e=JSON.parse(this.getDataFromLocalStorage("studiengang"))??void 0,n=this.getDataFromLocalStorage("semester")??void 0,i=JSON.parse(this.getDataFromLocalStorage("studienordnung"))??void 0;this.$fhcApi.factory.studium.getAllStudienSemester(t,e,n,i).then(t=>t.data).then(t=>{this.extractPropertyValues(t)})},template:'\n\t
    \n\t

    Studium

    \n\t
    \n\t\n\t\t\n\t\n\t
    \n\t\t
    \n\t\t
    Studiensemester:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\n\t\t
    \n\t\t
    Studiengang:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\n\t\t
    \n\t\t
    Semester:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\n\t\t
    \n\t\t
    Studienordnung:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t
    \n\n\t
    \n\n\t
    \n\t\n\t
    \n\n\n\t
    \n\t\n\t'},nn={loadRenderers:()=>({method:"get",url:"/api/frontend/v1/RendererLoader/GetRenderers",params:{}})},an={info:(t,e)=>({method:"post",url:"/api/frontend/v1/RouteInfo/info",params:{app:t,path:e}})};const sn=FHC_JS_DATA_STORAGE_OBJECT.app_root.replace(/(https:|)(^|\/\/)(.*?\/)/g,"")+FHC_JS_DATA_STORAGE_OBJECT.ci_router,rn=VueRouter.createRouter({history:VueRouter.createWebHistory(`/${sn}`),routes:[{path:"/Cis/Studium",name:"Studium",component:en,props:!0},{path:"/Cis/Profil/View/:uid",name:"ProfilView",component:De,props:!0},{path:"/Cis/Profil",name:"Profil",component:De,props:!0},{path:"/Cis/Abgabetool/Student/:student_uid_prop?",name:"AbgabetoolStudent",component:Ze,props:!0},{path:"/Cis/Abgabetool/Mitarbeiter",name:"AbgabetoolMitarbeiter",component:Qe,props:!0},{path:"/Cis/Abgabetool/Deadlines/:person_uid_prop?",name:"DeadlineOverview",component:tn,props:!0},{path:"/Cis/Raumsuche",name:"Raumsuche",component:Oe,props:!0},{path:"/CisVue/Cms/getRoomInformation/:ort_kurzbz",name:"RoomInformationOld",component:Ge,redirect:t=>({name:"RoomInformation",params:{ort_kurzbz:t.params.ort_kurzbz,mode:Je,focus_date:(new Date).toISOString().split("T")[0]}})},{path:"/CisVue/Cms/getRoomInformation/:mode/:focus_date/:ort_kurzbz",name:"RoomInformation",component:Ge,props:t=>{const e=t.params.mode&&["Month","Week","Day"].includes(t.params.mode.charAt(0).toUpperCase()+t.params.mode.slice(1).toLowerCase())?t.params.mode.charAt(0).toUpperCase()+t.params.mode.slice(1).toLowerCase():Je,n=new Date(t.params.focus_date);return{propsViewData:{mode:e,focus_date:isNaN(n)?(new Date).toISOString().split("T")[0]:t.params.focus_date,ort_kurzbz:t.params.ort_kurzbz}}},beforeEnter:(t,e,n)=>{t.params.mode&&t.params.focus_date?n():n({name:"RoomInformation",params:{mode:t.params.mode||Je,focus_date:t.params.focus_date||(new Date).toISOString().split("T")[0],ort_kurzbz:route.params.ort_kurzbz}})}},{path:"/CisVue/Cms/Content/:content_id",name:"Content",component:Ve,props:!0},{path:"/CisVue/Cms/News",name:"News",component:Re,props:!0},{path:"/Cis/MyLv/:studiensemester?",name:"MyLv",component:Kt,props:!0},{path:"/Cis/MyLv/Info/:studien_semester/:lehrveranstaltung_id",name:"LvInfo",component:Mt,props:!0},{path:"/Cis/LvPlan/:lv_id(\\d+)",name:"LvPlanOld",component:Pt,redirect(t){const e=Vue.unref(rn.currentRoute),{mode:n,focus_date:i}=e.params;return{name:"LvPlan",params:{mode:n,focus_date:i,lv_id:t.params.lv_id}}}},{path:"/Cis/LvPlan/:mode?/:focus_date?/:lv_id?",name:"LvPlan",component:Pt,props:t=>({propsViewData:t.params})},{path:"/Cis/MyLvPlan/:mode?/:focus_date?",name:"MyLvPlan",component:Ft,props:t=>({propsViewData:t.params})},{path:"/Cis4",name:"Cis4",component:_,props:{dashboard:"CIS"}},{path:"/",name:"FhcDashboard",component:_,props:{dashboard:"CIS"}},{path:"/:pathMatch(.*)*",name:"Fallback",component:_,props:{dashboard:"CIS"},redirect:()=>({name:"Cis4",params:{dashboard:"CIS"}})}]}),on=Vue.createApp({name:"FhcApp",data:()=>({appSideMenuEntries:{},renderers:null}),components:{},computed:{isMobile:()=>/Mobi|Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)},provide(){return{language:Vue.computed(()=>this.$p.user_language),renderers:Vue.computed(()=>this.renderers)}},methods:{isInternalRoute(t){const e=window.location.origin;return t.startsWith(e)},handleClick(t){const e=t.target.closest("a");if("skiplink"!=e?.id&&e&&this.isInternalRoute(e.href)){const n=new URL(e.href).pathname,i=this.$router.options.history.base,a=n.replace(i,"")||"/",s=this.$router.resolve(a);if(!s?.matched?.length||"Fallback"===s.name)return;if(t.preventDefault(),this.isMobile){document.getElementById("nav-main").classList.contains("show")&&document.getElementById("nav-main-btn").click()}this.$router.push(a)}}},async created(){await this.$api.call(nn.loadRenderers()).then(t=>t.data).then(t=>{for(let i of Object.keys(t)){let a=null,s=null,r=null;if(t[i].modalTitle&&(a=Vue.markRaw(Vue.defineAsyncComponent(()=>import(t[i].modalTitle)))),t[i].modalContent&&(s=Vue.markRaw(Vue.defineAsyncComponent(()=>import(t[i].modalContent)))),t[i].calendarEvent&&(r=Vue.markRaw(Vue.defineAsyncComponent(()=>import(t[i].calendarEvent)))),t[i].calendarEventStyles){var e=document.head;if(!e.querySelector(`link[href="${t[i].calendarEventStyles}"]`)){var n=document.createElement("link");n.type="text/css",n.rel="stylesheet",n.href=t[i].calendarEventStyles,e.appendChild(n)}}null===this.renderers&&(this.renderers={}),this.renderers[i]||(this.renderers[i]={}),this.renderers[i].modalTitle=a,this.renderers[i].modalContent=s,this.renderers[i].calendarEvent=r}})},mounted(){document.addEventListener("click",this.handleClick)},beforeUnmount(){document.removeEventListener("click",this.handleClick)}});!function(){const t=/Chrome/.test(navigator.userAgent),e=/Firefox/.test(navigator.userAgent);if(t){const t=function(){const t=document.createElement("div");t.style.position="absolute",t.style.top="-9999px",t.style.width="100px",t.style.height="100px",t.style.overflow="scroll",document.body.appendChild(t);const e=t.offsetWidth-t.clientWidth;return document.body.removeChild(t),e}()+"px";document.body.style.setProperty("--scrollbar-width",t)}else e&&document.body.style.setProperty("--scrollbar-width","0px")}(),on.use(rn),on.use(primevue.config.default,{zIndex:{overlay:9e3,tooltip:8e3}}),on.directive("tooltip",primevue.tooltip),on.use(it),on.use(lt),on.directive("contrast",ut),on.mount("#fhccontent"),rn.afterEach((t,e,n)=>{on.config.globalProperties.$api.call(an.info("cis4",t.fullPath))}); +getStatus:()=>({method:"get",url:"/api/frontend/v1/ProfilUpdate/getStatus"}),getTopic:()=>({method:"get",url:"/api/frontend/v1/ProfilUpdate/getTopic"}),acceptProfilRequest:({profil_update_id:t,uid:e,status_message:n,topic:i,requested_change:a})=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/acceptProfilRequest",params:{profil_update_id:t,uid:e,status_message:n,topic:i,requested_change:a}}),denyProfilRequest:({profil_update_id:t,uid:e,topic:n,status_message:i})=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/denyProfilRequest",params:{profil_update_id:t,uid:e,topic:n,status_message:i}}),insertFile:(t,e=null)=>({method:"post",url:`/api/frontend/v1/ProfilUpdate/insertFile/${e}`,params:t}),updateProfilbild:t=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/updateProfilbild",params:t}),getProfilUpdateWithPermission:t=>({method:"get",url:"/api/frontend/v1/ProfilUpdate/getProfilUpdateWithPermission"+(""!==t?"/"+encodeURIComponent(t):"")}),getProfilRequestFiles:t=>({method:"get",url:`/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${t}`}),selectProfilRequest:(t=null,e=null)=>({method:"get",url:"/api/frontend/v1/ProfilUpdate/selectProfilRequest",params:{...t?{uid:t}:{},...e?{id:e}:{}}}),insertProfilRequest:(t,e,n=null)=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/insertProfilRequest",params:{topic:t,payload:e,...n?{fileID:n}:{}}}),updateProfilRequest:(t,e,n,i=null)=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/updateProfilRequest",params:{topic:t,payload:e,ID:n,...i?{fileID:i}:{}}}),deleteProfilRequest:t=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/deleteProfilRequest",params:{requestID:t}})},Ae={data:()=>({dmsData:[]}),components:{Dms:_e,BsModal:s},mixins:[s],props:{titel:{type:String},files:{type:Array},updateID:{type:Boolean},onHideBsModal:Function,onHiddenBsModal:Function,onHidePreventedBsModal:Function,onShowBsModal:Function,onShownBsModal:Function},methods:{async uploadImage(){if(this.dmsData){let t=new FormData;t.append("files[]",this.dmsData[0]),await this.$api.call(ke.updateProfilbild(t)).then(t=>{this.$fhcAlert.alertSuccess(this.$p.t("global","hochgeladen")),this.modal.hide()})}}},mounted(){this.modal=this.$refs.modalContainer.modal,this.files&&(this.dmsData=this.files)},popup(t){return s.popup.bind(this),s.popup(null,t)},template:'\n\n\t\n\t\t\n\t\t\n\t\n '},xe={props:{title:{type:String},data:{type:Object},fotoStatus:{type:Boolean,default:!0}},components:{ImageUpload:Ae},data(){return{FotoSperre:this.data.foto_sperre}},emits:["showEditProfilModal"],inject:["isEditable"],methods:{showModal(){this.$refs.imageUpload.show()},sperre_foto_function(){this.data&&this.$api.call(we.fotoSperre(!this.FotoSperre)).then(t=>{this.FotoSperre=t.data.foto_sperre})}},computed:{get_image_base64_src:function(){return this.data.foto?"data:image/jpeg;base64,"+this.data.foto:""},name:function(){return{vorname:this.data.Vorname,nachname:this.data.Nachname}},profilInfo:function(){let t={},e=["Vorname","Nachname","foto_sperre","foto"];return Object.keys(this.data).forEach(n=>{e.includes(n)||(t[n]=this.data[n])}),t}},template:'\n\n
    \n\t\n
    \n
    \n
    \n \n
    \n
    \n {{title}}\n
    \n
    \n
    \n
    \n
    \n \x3c!-- SQUEEZING THE IMAGE INSIDE THE FIRST INFORMATION COLUMN --\x3e\n \x3c!-- START OF THE FIRST ROW WITH THE PROFIL IMAGE --\x3e\n
    \n
    \n
    \n profile picture\n \x3c!-- LOCKING IMAGE FUNCTIONALITY --\x3e\n
    \n \n
    \n\t\t\t\t\t\t
    \n \n
    \n
    \n
    \n \x3c!-- END OF THE ROW WITH THE IMAGE --\x3e\n
    \n \x3c!-- END OF SQUEEZE --\x3e\n \x3c!-- COLUMNS WITH MULTIPLE ROWS NEXT TO PROFIL PICTURE --\x3e\n
    \n
    \n
    \n
    \n
    {{$p.t(\'profilUpdate\',\'vorname\')}}
    \n {{name.vorname}} \n
    \n
    \n
    \n
    \n
    {{$p.t(\'profilUpdate\',\'nachname\')}}
    \n {{name.nachname}} \n
    \n
    \n
    \n
    \n
    \n
    \n
    {{$p.t(\'profil\',bez)}}
    \n {{wert?wert:\'-\'}} \n
    \n
    \n
    \n
    \n
    \n'},Se={name:"EditProfilSelect",components:{Kontakt:ve,EditKontakt:{props:{data:Object},data:()=>({originalValue:null,zustellKontakteCount:null}),inject:["getZustellkontakteCount"],methods:{updateValue:function(t,e){this.data[e]="zustellung"===e?t.target.checked:""===t.target.value?null:t.target.value,this.$emit("profilUpdate",this.isChanged?this.data:null),this.zustellKontakteCount=this.getZustellkontakteCount()}},computed:{showZustellKontakteWarning:function(){if(JSON.parse(this.originalValue).zustellung)return!1;const t=this.zustellKontakteCount.filter(t=>t.kontakttyp===this.data?.kontakttyp);return this.zustellKontakteCount.some(t=>t.kontakt_id===this.data.kontakt_id)?this.kontakteOfSelectedType.length>=2&&this.data.zustellung:this.data.zustellung&&t.length},isChanged:function(){return!(!this.data.kontakt||!this.data.kontakttyp)&&JSON.stringify(this.data)!==this.originalValue}},created(){this.originalValue=JSON.stringify(this.data),this.zustellKontakteCount=this.getZustellkontakteCount()},template:'\n\n
    \n\n
    \n\n\n
    \n
    {{$p.t(\'profilUpdate\',\'kontaktTyp\')}}
    \n\n \n
    \n\n
    \n
    \n\n \x3c!-- rendering KONTAKT emails --\x3e\n\n\n
    \n
    {{data.kontakttyp?data.kontakttyp:$p.t(\'global\',\'kontakt\')}}
    \n\n \n
    \n\n
    \n
    \n\n
    \n
    {{$p.t(\'global\',\'anmerkung\')}}
    \n\n \n
    \n\n
    \n\n \x3c!-- warning message for too many zustellungs Kontakte --\x3e\n
    \n
    \n {{$p.t(\'profilUpdate\',\'zustell_kontakte_warning\')}}\n
    \n
    \n \x3c!-- End of warning --\x3e\n\n
    \n {{$p.t(\'profilUpdate\',\'zustellungsKontakt\')}}\n\n \n
    \n
    \n '},Adresse:ge,EditAdresse:{components:{AutoComplete:primevue.autocomplete,Dms:_e},props:{data:Object,files:{type:Array,default:[]}},inject:["getZustelladressenCount","updateFileID","isMitarbeiter"],data:()=>({gemeinden:[],ortschaftnamen:[],selectedNation:null,nationenList:[],originalValue:null,zustellAdressenCount:null,dmsData:[],fileschanged:!1}),watch:{"data.gemeinde":function(t,e){this.$emit("profilUpdate",this.isChanged?this.data:null)},"data.ort":function(t,e){this.$emit("profilUpdate",this.isChanged?this.data:null)}},methods:{autocompleteSearchGemeinden:function(t){this.gemeinden=this.gemeinden.map(t=>t)},autocompleteSearchOrtschaftsnamen:function(t){this.ortschaftnamen=this.ortschaftnamen.map(t=>t)},getGemeinde:function(){this.data.nation&&"A"===this.data.nation&&this.data.plz&&this.data.plz>999&&this.data.plz<32e3?this.$api.call(we.getGemeinden(this.data.nation,this.data.plz)).then(t=>{t.data.length&&(this.gemeinden=[...new Set(t.data.map(t=>t.name))],this.ortschaftnamen=[...new Set(t.data.map(t=>t.ortschaftsname))])}):this.gemeinden=[]},updateValue:function(t,e){"zustelladresse"===e?this.data[e]=t.target.checked:"files"===e?(this.dmsData.length>0&&"application/x.fhc-dms+json"!==this.dmsData[0].type&&(this.fileschanged=!0),this.updateFileID(this.dmsData)):this.data[e]=""===t.target.value?null:t.target.value,this.$emit("profilUpdate",this.isChanged?this.data:null),this.zustellAdressenCount=this.getZustelladressenCount()},deleteDmsData:function(){this.dmsData=[],this.updateValue(null,"files")}},computed:{showZustellAdressenWarning:function(){return!JSON.parse(this.originalValue).zustelladresse&&(this.zustellAdressenCount.includes(this.data.adresse_id)?this.zustellAdressenCount.length>=2&&this.data.zustelladresse:this.data.zustelladresse&&this.zustellAdressenCount.length)},isChanged:function(){if(!(this.data.strasse&&this.data.plz&&this.data.ort&&this.data.typ&&0!==this.dmsData.length))return!1;return this.originalValue!==JSON.stringify(this.data)||this.fileschanged}},created(){this.$api.call(we.getAllNationen()).then(t=>{this.nationenList=t.data,this.getGemeinde()}),this.originalValue=JSON.stringify(this.data),this.zustellAdressenCount=this.getZustelladressenCount()},mounted(){this.files&&(this.dmsData=this.files)},template:'\n
    \n \x3c!-- warning message for too many zustellungs Adressen --\x3e\n
    \n
    \n\t {{$p.t(\'profilUpdate\',\'zustell_adressen_warning\')}}\n
    \n
    \n \x3c!-- End of warning --\x3e\n\n\n
    \n
    \n \n \n
    \n
    \n\n \x3c!-- NATION --\x3e\n
    \n
    \n
    {{$p.t(\'person\',\'nation\')}}*
    \n \n
    \n
    \n\n \x3c!-- PLZ --\x3e\n
    \n
    \n
    {{$p.t(\'person\',\'plz\')}}*
    \n \n
    \n
    \n\n \x3c!-- GEMEINDE --\x3e\n
    \n
    \n
    {{$p.t(\'person\',\'gemeinde\')}}*
    \n \n
    \n
    \n\n \x3c!-- ORT --\x3e\n
    \n
    \n
    {{$p.t(\'person\',\'ort\')}}*
    \n \n
    \n
    \n\n \x3c!-- STRASSE --\x3e\n
    \n
    \n
    {{$p.t(\'person\',\'strasse\')}}*
    \n \n
    \n
    \n \n \x3c!-- ADRESSEN TYP --\x3e\n
    \n
    \n
    {{$p.t(\'profilUpdate\',\'kontaktTyp\')}}*
    \n \n
    \n
    \n\n\t
    \n\t\t
    \n\t\t\t
    {{$p.t(\'profilUpdate\',\'meldebestaetigung\')}}*
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t
     
    \n\t\t\t\n\t\t
    \n\t
    \n\n
    \n '},Status:{components:{Adresse:ge,Kontakt:ve},inject:["profilUpdateTopic"],data:()=>({files:null}),methods:{getDocumentLink:function(t){return FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/Cis/ProfilUpdate/show/${t}`}},computed:{getComponentView:function(){return this.topic==this.profilUpdateTopic["Private Adressen"]||this.topic==this.profilUpdateTopic["Add Adresse"]||this.topic==this.profilUpdateTopic["Delete Adresse"]?"Adresse":this.topic==this.profilUpdateTopic["Private Kontakte"]||this.topic==this.profilUpdateTopic["Add Kontakt"]||this.topic==this.profilUpdateTopic["Delete Kontakt"]?"Kontakt":"text_input"},cardHeader:function(){return this.topic==this.profilUpdateTopic["Delete Addresse"]||this.topic==this.profilUpdateTopic["Delete Kontakt"]?"Delete":this.topic==this.profilUpdateTopic["Add Adresse"]||this.topic==this.profilUpdateTopic["Add Kontakt"]?"Add":"Update"}},props:{data:{type:Object},view:{type:String},status:{type:String},status_message:{type:String},status_timestamp:{type:String},updateID:{type:Number},topic:{type:String}},created(){this.$api.call(ke.getProfilRequestFiles(this.updateID)).then(t=>{this.files=t.data})},template:'\n
    \n\n
    \n
    \n
    {{$p.t(\'global\',\'status\')}}
    \n {{status}} \n
    \n
    \n\n
    \n
    \n
    {{$p.t(\'global\',\'datum\')}}
    \n {{status_timestamp}} \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    {{$p.t(\'profilUpdate\',\'statusMessage\')}}
    \n \n
    \n
    \n
    \n\n\n
    \n
    \n \n {{cardHeader}} \n
    \n
    \n \n \n \n
    \n
    \n\n\t
    \n\t\t
    {{$p.t(\'profilUpdate\',\'nachweisdokumente\')}}
    \n\t\t
    \n\t\t\t{{file.name}}\n\t\t
    \n\t
    \n '},TextInputDokument:{data:()=>({dmsData:[],originalValue:null}),components:{Dms:_e},props:{data:{type:Object},withFiles:{type:Boolean,default:!1},files:{type:Array},updateID:{type:Boolean}},inject:["updateFileID"],computed:{didFilesChange:function(){this.updateFileID(this.dmsData);let t=!1;return this.files?(Array.from(this.dmsData).forEach(e=>{this.files.some(t=>t.name!==e.name)&&(t=!0)}),!(this.dmsData.length==this.files.length)||t):!!Array.from(this.dmsData).length},didDataChange:function(){return JSON.stringify(this.data)!==this.originalValue},isChanged:function(){return this.withFiles?this.updateID?(this.didDataChange||this.didFilesChange)&&this.dmsData.length:this.didDataChange&&this.didFilesChange:this.didDataChange}},emits:["profilUpdate"],watch:{dmsData(t){this.emitChanges()}},methods:{stringifyFile:t=>JSON.stringify({lastModified:t.lastModified,lastModifiedDate:t.lastModifiedDate,name:t.name,size:t.size,type:t.type}),emitChanges:function(){this.isChanged?this.$emit("profilUpdate",{value:this.data.value}):this.$emit("profilUpdate",null)}},mounted(){this.originalValue=JSON.stringify(Vue.toRaw(this.data)),this.files&&(this.dmsData=this.files)},template:'\n\n

    {{$p.t(\'profilUpdate\',\'profilUpdateInformationMessage\',[data.titel])}}

    \n\n
    \n
    {{data.titel?data.titel:$p.t(\'global\',\'titel\')}}
    \n\n \n\n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n '}},inject:["profilUpdateTopic","isMitarbeiter"],props:{list:Object,size:{type:Number,default:null},ariaLabel:{type:String,required:!0},profilUpdate:String,topic:String,breadcrumb:String},emits:{"update:profilUpdate":null,"update:topic":null,"update:breadcrumb":null,submit:null,select:null},data(){return{view:null,data:null,breadcrumbItems:[],modal_topic:this.topic,properties:null}},methods:{addItem:function(){this.view=this.modal_topic==this.profilUpdateTopic["Private Kontakte"]?"EditKontakt":"EditAdresse",this.modal_topic=this.modal_topic==this.profilUpdateTopic["Private Kontakte"]?this.profilUpdateTopic["Add Kontakt"]:this.profilUpdateTopic["Add Adresse"],this.$emit("update:topic",this.modal_topic),this.breadcrumbItems.push(this.modal_topic),this.$emit("update:breadcrumb",this.breadcrumbItems),this.data="EditAdresse"==this.view?{add:!0,adresse_id:null,strasse:null,typ:null,plz:null,ort:null,zustelladresse:!1}:{add:!0,kontakt_id:null,kontakttyp:null,kontakt:null,anmerkung:null,zustellung:!1}},deleteItem:function(t){t.data.delete=!0,this.$emit("update:profilUpdate",t.data),this.modal_topic=this.modal_topic==this.profilUpdateTopic["Private Adressen"]?this.profilUpdateTopic["Delete Adresse"]:this.profilUpdateTopic["Delete Kontakt"],this.$emit("update:topic",this.modal_topic),this.$emit("submit")},profilUpdateEmit:function(t){this.$emit("update:profilUpdate",t)},updateOptions:function(t,e){this.properties=e,this.data=e.data,this.view=e.view,e.title?(this.modal_topic=e.topic,this.$emit("update:topic",this.modal_topic),this.breadcrumbItems.push(e.title)):e.data.kontakttyp?(this.breadcrumbItems.push(e.data.kontakttyp),this.breadcrumbItems.push(e.data.kontakt)):e.data.strasse&&this.breadcrumbItems.push(e.data.strasse),this.$emit("update:breadcrumb",this.breadcrumbItems)}},computed:{},created(){this.properties={...this.list},this.data=this.list.data?JSON.parse(JSON.stringify(this.list.data)):null,this.view=this.list.view?JSON.parse(JSON.stringify(this.list.view)):null},mounted(){},template:'\n \n \n '},$e={components:{BsModal:s},props:{timeout:{type:Number,default:300}},data:()=>({t:null,state:0}),methods:{show(){switch(this.state){case 0:return this.timeout?(this.state=1,void(this.t=window.setTimeout(()=>this.$refs.modal.show(),this.timeout))):this.$refs.modal.show();case 4:return window.setTimeout(()=>this.show(),1)}},hide(){switch(this.state){case 1:return window.clearTimeout(this.t);case 2:return window.setTimeout(()=>this.hide(),1);case 3:this.$refs.modal.hide()}}},mounted(){this.$refs.modal.$refs.modal.addEventListener("show.bs.modal",()=>{this.state=2}),this.$refs.modal.$refs.modal.addEventListener("shown.bs.modal",()=>{this.state=3}),this.$refs.modal.$refs.modal.addEventListener("hide.bs.modal",()=>{this.state=4}),this.$refs.modal.$refs.modal.addEventListener("hidden.bs.modal",()=>{this.state=0})},template:'\n\t\n\t\tLoading...\n\t'},Te={components:{BsModal:s,Alert:r,EditProfilSelect:Se,Loader:$e},mixins:[s],props:{isMitarbeiter:{type:Boolean,default:!1},value:Object,titel:String,zustelladressenCount:Function,zustellkontakteCount:Function,onHideBsModal:Function,onHiddenBsModal:Function,onHidePreventedBsModal:Function,onShowBsModal:Function,onShownBsModal:Function},data(){return{topic:null,profilUpdate:null,editData:this.value,fileID:null,breadcrumb:null,loading:!1,result:!1,info:null}},inject:["setLoading"],provide(){return{updateFileID:this.updateFileIDFunction,isMitarbeiter:this.isMitarbeiter}},methods:{updateFileIDFunction:function(t){this.fileID=t},handleFailedError:function(t){console.error(t),this.loading=!1,this.setLoading(!1),this.result=!1,this.hide()},async submitProfilChange(){if(this.topic&&this.profilUpdate){if(this.fileID){const t=await this.uploadFiles(this.fileID);this.fileID=t||null}const t=t=>{t.data.error?(this.result=!1,r.popup("Ein Fehler ist aufgetreten: "+JSON.stringify(t.data.retval))):(this.result=!0,r.popup("Ihre Anfrage wurde erfolgreich gesendet. Bitte warten Sie, während sich das Team um Ihre Anfrage kümmert."))};this.loading=!0,this.setLoading(!0),this.editData.updateID?this.$api.call(ke.updateProfilRequest(this.topic,this.profilUpdate,this.editData.updateID,this.fileID?this.fileID[0]:null)).then(e=>{t(e)}).catch(t=>this.$fhcAlert.handleSystemError).finally(()=>{this.loading=!1,this.setLoading(!1),this.hide()}):this.$api.call(ke.insertProfilRequest(this.topic,this.profilUpdate,this.fileID?this.fileID[0]:null)).then(e=>{t(e)}).catch(t=>this.$fhcAlert.handleSystemError).finally(()=>{this.loading=!1,this.setLoading(!1),this.hide()})}},uploadFiles:async function(t){if("application/x.fhc-dms+json"!==t[0].type){let e=new FormData;e.append("files[]",t[0]);return this.editData.updateID?await this.$api.call(ke.insertFile(e,this.editData.updateID)).then(t=>t.data?.map(t=>t.dms_id)):await this.$api.call(ke.insertFile(e)).then(t=>t.data?.map(t=>t.dms_id))}return!1}},computed:{showFooter:function(){switch(this.value.view){case"Status":case"Kontakt":case"Adresse":return!1;default:return!0}}},created(){this.editData.topic&&(this.topic=this.editData.topic)},mounted(){this.modal=this.$refs.modalContainer.modal},popup(t){return s.popup.bind(this),s.popup(null,t)},template:'\n\n\t\n\t\n\t\x3c!-- optional footer --\x3e\n\t\n \x3c!-- end of optional footer --\x3e \n'},Ee={components:{EditProfil:Te},props:{data:{type:Object}},inject:["getZustellkontakteCount","getZustelladressenCount","profilUpdateStates","profilUpdateTopic"],emits:["fetchUpdates"],data(){return{showUpdateModal:!1,content:null,editProfilTitle:this.$p.t("profil","profilBearbeiten")}},methods:{hideEditProfilModal:function(){this.$refs.updateEditModal.result&&this.$emit("fetchUpdates"),this.showUpdateModal=!1},async showEditProfilModal(t){let e=this.getView(t.topic,t.status),n=null,i=null,a=null,s=!1;if("TextInputDokument"===e){n={titel:t.topic,value:t.requested_change.value};a=await this.$api.call(ke.getProfilRequestFiles(t.profil_update_id)).then(t=>t.data),a&&(s=!0)}else n=t.requested_change;if(i={updateID:t.profil_update_id,view:e,data:n,withFiles:s,topic:t.topic,files:a},"EditAdresse"===e){const e=await this.$api.call(we.isMitarbeiter(t.uid)).then(t=>t.data);e&&(i.isMitarbeiter=e);a=await this.$api.call(ke.getProfilRequestFiles(t.profil_update_id)).then(t=>t.data),i.files=a}t.status!==this.profilUpdateStates.Pending&&(i.status=t.status,i.status_message=t.status_message,i.status_timestamp=t.status_timestamp),this.content=i,this.editProfilTitle=t.topic,i&&(this.showUpdateModal=!0,Vue.nextTick(()=>{this.$refs.updateEditModal.show()}))},deleteRequest:function(t){this.$api.call(ke.deleteProfilRequest(t.profil_update_id)).then(t=>{t.data.error?console.error("error happened",t.data):this.$emit("fetchUpdates")})},getView:function(t,e){if(e!==this.profilUpdateStates.Pending)return"Status";switch(t){case this.profilUpdateTopic["Private Kontakte"]:case this.profilUpdateTopic["Add Kontakt"]:return"EditKontakt";case this.profilUpdateTopic["Delete Kontakt"]:return"Kontakt";case this.profilUpdateTopic["Private Adressen"]:case this.profilUpdateTopic["Add Adresse"]:return"EditAdresse";case this.profilUpdateTopic["Delete Adresse"]:return"Adresse";default:return"TextInputDokument"}}},created(){},computed:{},template:'\n
    \n \n
    {{$p.t(\'profilUpdate\',\'profilUpdates\')}}
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {{$p.t(\'profilUpdate\',\'topic\')}}{{$p.t(\'global\',\'status\')}}{{$p.t(\'global\',\'datum\')}}{{$p.t(\'ui\',\'aktion\')}}
    {{item.topic}}{{item.status}}{{item.status_timestamp?item.status_timestamp:item.insertamum}}
    \n
    \n
    \n
    \n'};function De(t,e,n){let i=document.createElement("div"),a=null,s=t.getValue();if(Array.isArray(s)){const t=s[0]?new Date(s[0]):null,e=s[1]?new Date(s[1]):null;a=[t,e]}return Vue.createApp({components:{PrimevueCalendar:primevue.calendar},data:()=>({val:a}),watch:{val(t){n(t)}},template:'\n\t\t\t\t '}).use(primevue.config.default).mount(i),i}primevue||console.error("PrimeVue not loaded!"),Tabulator.extendModule("filter","filters",{dates:(t,e)=>{if(!t)return!0;let n=new Date(e);if(Array.isArray(t)){let e=new Date(t[0]);if(t[1]){let i=new Date(t[1]);return i.setHours(23,59,59,999),n>=e&&n<=i}return n.toDateString()===e.toDateString()}let i=new Date(t);return n.toDateString()===i.toDateString()}});var Ce={components:{CoreFilterCmpt:pe,Mailverteiler:he,AusweisStatus:me,QuickLinks:fe,Adresse:ge,Kontakt:ve,ProfilEmails:be,RoleInformation:ye,ProfilInformation:xe,FetchProfilUpdates:Ee,EditProfil:Te},inject:["sortProfilUpdates","collapseFunction","language","isEditable"],data(){return{showModal:!1,collapseIconBetriebsmittel:!0,editDataFilter:null,preloadedPhrasen:{},zutrittsgruppen_table_options:{persistenceID:"filterTableStudentProfilZutrittsgruppen",persistence:{columns:!1},minHeight:200,layout:"fitColumns",columns:[{title:Vue.computed(()=>this.preloadedPhrasen.zutrittsGruppenPhrase),field:"bezeichnung"}]},betriebsmittel_table_options:{persistenceID:"filterTableStudentProfilBetriebsmittel",persistence:{columns:!1},minHeight:300,layout:"fitColumns",responsiveLayout:"collapse",responsiveLayoutCollapseUseFormatters:!1,responsiveLayoutCollapseFormatter:Vue.$collapseFormatter,columns:[{title:"",field:"collapse",headerSort:!1,headerFilter:!1,formatter:"responsiveCollapse",maxWidth:40,headerClick:this.collapseFunction},{title:Vue.computed(()=>this.preloadedPhrasen.entlehnteBetriebsmittelPhrase),field:"betriebsmittel",headerFilter:!0,minWidth:200,visible:!0},{title:Vue.computed(()=>this.preloadedPhrasen.inventarnummerPhrase),field:"Nummer",headerFilter:!0,resizable:!0,minWidth:200,visible:!0},{title:Vue.computed(()=>this.preloadedPhrasen.ausgabedatum),field:"Ausgegeben_am",headerFilterFunc:"dates",headerFilter:De,minWidth:200,visible:!0,formatter:"datetime",formatterParams:this.datetimeFormatterParams()}]}}},props:{data:Object,editData:Object},provide(){return{studiengang_kz:Vue.computed({get:()=>this.data.studiengang_kz})}},methods:{betriebsmittelTableBuilt:function(){this.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns),this.$refs.betriebsmittelTable.tabulator.setData(this.data.mittel)},zutrittsgruppenTableBuilt:function(){this.$refs.zutrittsgruppenTable.tabulator.setColumns(this.zutrittsgruppen_table_options.columns),this.$refs.zutrittsgruppenTable.tabulator.setData(this.data.zuttritsgruppen)},fetchProfilUpdates:function(){this.$api.call(ke.selectProfilRequest()).then(t=>{!t.error&&t&&(this.data.profilUpdates=t.data?.length?t.data.sort(this.sortProfilUpdates):null)})},hideEditProfilModal:function(){this.$refs.editModal.result&&this.$api.call(ke.selectProfilRequest()).then(t=>{!t.error&&t.data?(this.data.profilUpdates=t.data,this.data.profilUpdates.sort(this.sortProfilUpdates)):console.error("Error when fetching profile updates: "+t)}).catch(t=>{console.error(t)}),this.showModal=!1,this.editDataFilter=null},showEditProfilModal(t){t&&(this.editDataFilter=t),this.showModal=!0,Vue.nextTick(()=>{this.$refs.editModal.show()})},datetimeFormatterParams:function(){return{inputFormat:"yyyy-MM-dd",outputFormat:"dd.MM.yyyy",invalidPlaceholder:"(invalid date)",timezone:FHC_JS_DATA_STORAGE_OBJECT.timezone}}},computed:{fotoStatus(){return this.data?.fotoStatus??null},filteredEditData(){return this.editDataFilter?this.editData.data[this.editDataFilter]:this.editData},profilInformation(){return this.data?{Vorname:this.data.vorname,Nachname:this.data.nachname,Username:this.data.username,Anrede:this.data.anrede,Titel:this.data.titel,Postnomen:this.data.postnomen,foto_sperre:this.data.foto_sperre,foto:this.data.foto}:{}},roleInformation(){return this.data?{geburtsdatum:{label:`${this.$p.t("profil","Geburtsdatum")}`,value:this.data.gebdatum},geburtsort:{label:`${this.$p.t("profil","Geburtsort")}`,value:this.data.gebort},personenkennzeichen:{label:`${this.$p.t("person","personenkennzeichen")}`,value:this.data.personenkennzeichen},studiengang:{label:`${this.$p.t("lehre","studiengang")}`,value:this.data.studiengang},semester:{label:`${this.$p.t("lehre","semester")}`,value:this.data.semester},verband:{label:`${this.$p.t("lehre","lehrverband")}`,value:this.data.verband},gruppe:{label:`${this.$p.t("lehre","gruppe")}`,value:this.data.gruppe.trim()}}:{}}},created(){this.$p.loadCategory("profil").then(()=>{this.preloadedPhrasen.zutrittsGruppenPhrase=this.$p.t("profil/zutrittsGruppen"),this.preloadedPhrasen.entlehnteBetriebsmittelPhrase=this.$p.t("profil/entlehnteBetriebsmittel"),this.preloadedPhrasen.inventarnummerPhrase=this.$p.t("profil/inventarnummer"),this.preloadedPhrasen.ausgabedatum=this.$p.t("profil/ausgabedatum"),this.preloadedPhrasen.loaded=!0}),this.data.profilUpdates?.sort(this.sortProfilUpdates)},watch:{"language.value"(t){this.$refs.betriebsmittelTable&&this.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns),this.$refs.zutrittsgruppenTable&&this.$refs.zutrittsgruppenTable.tabulator.setColumns(this.zutrittsgruppen_table_options.columns)}},template:'\n
    \n \n \x3c!-- ROW --\x3e\n
    \n \x3c!-- HIDDEN QUICK LINKS --\x3e\n
    \n \x3c!--TODO: uncomment when implemented\n\t\t\t
    \n
    \n \n
    \n
    --\x3e\n\n\t\t\t\x3c!-- Bearbeiten Button --\x3e\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\x3c!-- MOBILE PROFIL UPDATES --\x3e\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\x3c!-- END OF HIDDEN QUCK LINKS --\x3e\n\n\t\t\t\x3c!-- MAIN PANNEL --\x3e\n\t\t\t
    \n\t\t\t\t\x3c!-- ROW WITH PROFIL IMAGE AND INFORMATION --\x3e\n\t\t\t\t\x3c!-- INFORMATION CONTENT START --\x3e\n\t\t\t\t\x3c!-- ROW WITH THE PROFIL INFORMATION --\x3e\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\x3c!-- PROFIL INFORMATION --\x3e\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\x3c!-- STUDENT INFO --\x3e\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\x3c!-- START OF SECOND PROFIL INFORMATION COLUMN --\x3e\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\x3c!-- EMAILS --\x3e\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\x3c!-- PRIVATE KONTAKTE--\x3e\n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t{{$p.t(\'profil\',\'privateKontakte\')}}\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\x3c!-- PRIVATE ADRESSEN--\x3e\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t{{$p.t(\'profil\',\'privateAdressen\')}}\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\x3c!-- SECOND ROW UNDER THE PROFIL IMAGE AND INFORMATION WITH THE TABLES --\x3e\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\x3c!-- END OF MAIN CONTENT COL --\x3e\n\t\t
    \n\t\t\x3c!-- START OF SIDE PANEL --\x3e\n\t\t
    \n\t\t\t\x3c!--TODO: uncomment when implemented\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    --\x3e\n\t\t\t\x3c!-- Bearbeiten Button --\x3e\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\x3c!-- PROFIL UPDATES --\x3e\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\x3c!-- START OF THE SECOND ROW IN THE SIDE PANEL --\x3e\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\x3c!-- HIER SIND DIE MAILVERTEILER --\x3e\n\t\t\t\t\t\n\t\t\t\t
    \n \x3c!-- END OF THE SECOND ROW IN THE SIDE PANEL --\x3e\n
    \n \x3c!-- END OF SIDE PANEL --\x3e\n
    \n \x3c!-- END OF CONTAINER ROW--\x3e\n
    \n\x3c!-- END OF CONTAINER --\x3e\n
    \n'},Oe={components:{CoreFilterCmpt:pe,EditProfil:Te,Adresse:ge,Kontakt:ve,FetchProfilUpdates:Ee,AusweisStatus:me,Mailverteiler:he,QuickLinks:fe,ProfilEmails:be,RoleInformation:ye,ProfilInformation:xe},inject:["sortProfilUpdates","collapseFunction","language","isEditable"],data(){return{showModal:!1,editDataFilter:null,preloadedPhrasen:{},funktionen_table_options:{persistenceID:"filterTableMaProfilFunktionen",persistence:{columns:!1},minHeight:300,layout:"fitColumns",responsiveLayout:"collapse",responsiveLayoutCollapseUseFormatters:!1,responsiveLayoutCollapseFormatter:Vue.$collapseFormatter,columns:[{title:"",field:"collapse",headerSort:!1,headerFilter:!1,formatter:"responsiveCollapse",maxWidth:40,headerClick:this.collapseFunction,visible:!0},{title:Vue.computed(()=>this.preloadedPhrasen.bezeichnungPhrase),field:"Bezeichnung",headerFilter:!0,minWidth:200,visible:!0},{title:Vue.computed(()=>this.preloadedPhrasen.organisationseinheitPhrase),field:"Organisationseinheit",headerFilter:!0,minWidth:200,visible:!0},{title:Vue.computed(()=>this.preloadedPhrasen.gueltigVonPhrase),field:"Gültig_von",headerFilterFunc:"dates",headerFilter:De,resizable:!0,minWidth:200,visible:!0,formatter:"datetime",formatterParams:this.datetimeFormatterParams()},{title:Vue.computed(()=>this.preloadedPhrasen.gueltigBisPhrase),field:"Gültig_bis",headerFilterFunc:"dates",headerFilter:De,resizable:!0,minWidth:200,visible:!0,formatter:"datetime",formatterParams:this.datetimeFormatterParams()},{title:Vue.computed(()=>this.preloadedPhrasen.wochenstundenPhrase),field:"Wochenstunden",headerFilter:!0,minWidth:200,visible:!0}]},betriebsmittel_table_options:{persistenceID:"filterTableMaProfilBetriebsmittel",persistence:{columns:!1},minHeight:300,layout:"fitColumns",responsiveLayout:"collapse",responsiveLayoutCollapseUseFormatters:!1,responsiveLayoutCollapseFormatter:Vue.$collapseFormatter,data:[{betriebsmittel:"",Nummer:"",Ausgegeben_am:""}],columns:[{title:"",field:"collapse",headerSort:!1,headerFilter:!1,formatter:"responsiveCollapse",maxWidth:40,headerClick:this.collapseFunction,visible:!0},{title:Vue.computed(()=>this.preloadedPhrasen.entlehnteBetriebsmittelPhrase),field:"betriebsmittel",headerFilter:!0,minWidth:200,visible:!0},{title:Vue.computed(()=>this.preloadedPhrasen.inventarnummerPhrase),field:"Nummer",headerFilter:!0,resizable:!0,minWidth:200,visible:!0},{title:Vue.computed(()=>this.preloadedPhrasen.ausgabedatumPhrase),field:"Ausgegeben_am",headerFilterFunc:"dates",headerFilter:De,minWidth:200,visible:!0,formatter:"datetime",formatterParams:this.datetimeFormatterParams()}]}}},props:{data:Object,editData:Object},methods:{betriebsmittelTableBuilt:function(){this.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns),this.$refs.betriebsmittelTable.tabulator.setData(this.data.mittel)},funktionenTableBuilt:function(){this.$refs.funktionenTable.tabulator.setColumns(this.funktionen_table_options.columns),this.$refs.funktionenTable.tabulator.setData(this.data.funktionen)},hideEditProfilModal:function(){this.$refs.editModal.result&&this.$api.call(ke.selectProfilRequest()).then(t=>{!t.error&&t.data?(this.data.profilUpdates=t.data,this.data.profilUpdates.sort(this.sortProfilUpdates)):console.error("Error when fetching profile updates: "+t)}).catch(t=>{console.error(t)}),this.showModal=!1,this.editDataFilter=null},showEditProfilModal(t){t&&(this.editDataFilter=t),this.showModal=!0,Vue.nextTick(()=>{this.$refs.editModal.show()})},fetchProfilUpdates:function(){this.$api.call(ke.selectProfilRequest()).then(t=>{!t.error&&t&&(this.data.profilUpdates=t.data?.length?t.data.sort(this.sortProfilUpdates):null)})},setTableColumnTitles(){this.$refs.betriebsmittelTable&&this.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns),this.$refs.funktionenTable&&this.$refs.funktionenTable.tabulator.setColumns(this.funktionen_table_options.columns)},datetimeFormatterParams:function(){return{inputFormat:"yyyy-MM-dd",outputFormat:"dd.MM.yyyy",invalidPlaceholder:"(invalid date)",timezone:FHC_JS_DATA_STORAGE_OBJECT.timezone}}},computed:{fotoStatus(){return this.data?.fotoStatus??null},getTelefonValue(){return this.data.standort_telefon?.kontakt?this.data.standort_telefon.kontakt+" "+this.data.telefonklappe:this.data.standort_telefon?this.data.standort_telefon+" "+this.data.telefonklappe:this.data.telefonklappe},filteredEditData(){return this.editDataFilter?this.editData.data[this.editDataFilter]:this.editData},profilInformation(){return this.data?{Vorname:this.data.vorname,Nachname:this.data.nachname,Username:this.data.username,Anrede:this.data.anrede,Titel:this.data.titel,Postnomen:this.data.postnomen,foto_sperre:this.data.foto_sperre,foto:this.data.foto}:{}},roleInformation(){return this.data?{geburtsdatum:{label:`${this.$p.t("profil","Geburtsdatum")}`,value:this.data.gebdatum},geburtsort:{label:`${this.$p.t("profil","Geburtsort")}`,value:this.data.gebort},personenkennzeichen:{label:`${this.$p.t("profil","Kurzzeichen")}`,value:this.data.kurzbz},telefon:{label:`${this.$p.t("profil","Telefon")}`,value:this.getTelefonValue},office:{label:`${this.$p.t("profil","Büro")}`,value:this.data.ort_kurzbz}}:{}}},created(){this.$p.loadCategory(["ui","lehre","global","profil"]).then(()=>{this.preloadedPhrasen.bezeichnungPhrase=this.$p.t("ui/bezeichnung"),this.preloadedPhrasen.organisationseinheitPhrase=this.$p.t("lehre/organisationseinheit"),this.preloadedPhrasen.gueltigVonPhrase=this.$p.t("global/gueltigVon"),this.preloadedPhrasen.gueltigBisPhrase=this.$p.t("global/gueltigBis"),this.preloadedPhrasen.wochenstundenPhrase=this.$p.t("profil/wochenstunden"),this.preloadedPhrasen.entlehnteBetriebsmittelPhrase=this.$p.t("profil/entlehnteBetriebsmittel"),this.preloadedPhrasen.inventarnummerPhrase=this.$p.t("profil/inventarnummer"),this.preloadedPhrasen.ausgabedatumPhrase=this.$p.t("profil/ausgabedatum"),this.preloadedPhrasen.loaded=!0}),this.data.profilUpdates?.sort(this.sortProfilUpdates)},watch:{"data.funktionen"(t){this.$refs.funktionenTable&&this.$refs.funktionenTable.tabulator.setData(t)},"data.mittel"(t){this.$refs.betriebsmittelTable&&this.$refs.betriebsmittelTable.tabulator.setData(t)},"language.value"(t){this.setTableColumnTitles()}},template:'\n
    \n \n
    \n
    \n \x3c!--TODO: uncomment when implemented\n
    \n
    \n \n
    \n
    --\x3e\n \x3c!-- Bearbeiten Button --\x3e\n
    \n
    \n \n
    \n
    \n
    \n
    \n \x3c!-- MOBILE PROFIL UPDATES --\x3e\n \n
    \n
    \n
    \n \x3c!-- END OF HIDDEN ROW (HIDDEN IN VIEWPORTS GREATER THEN-EQUAL MD) --\x3e\n \x3c!-- MAIN PANNEL --\x3e\n
    \n \x3c!-- ROW WITH PROFIL IMAGE AND INFORMATION --\x3e\n \x3c!-- INFORMATION CONTENT START --\x3e\n \x3c!-- ROW WITH THE PROFIL INFORMATION --\x3e\n
    \n
    \n
    \n
    \n \x3c!-- PROFIL INFORMATION --\x3e\n \n
    \n
    \n
    \n
    \n \x3c!-- MITARBEITER INFO --\x3e\n \n
    \n
    \n \x3c!-- START OF SECOND PROFIL INFORMATION COLUMN --\x3e\n
    \n
    \n
    \n
    \n \x3c!-- EMAILS --\x3e\n \n
    \n
    \n
    \n
    \n \x3c!-- PRIVATE KONTAKTE--\x3e\n
    \n
    \n
    \n
    \n \n
    \n
    \n {{$p.t(\'profil\',\'privateKontakte\')}}\n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \x3c!-- PRIVATE ADRESSEN--\x3e\n
    \n
    \n
    \n
    \n \n
    \n
    \n {{$p.t(\'profil\',\'privateAdressen\')}}\n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \x3c!-- FUNKTIONEN TABELLE --\x3e\n \n
    \n
    \n \x3c!-- BETRIEBSMITTEL TABELLE --\x3e\n \n
    \n
    \n
    \n \x3c!-- START OF SIDE PANEL --\x3e\n
    \n \x3c!--TODO: uncomment when implemented\n
    \n \n
    \n \n \n \n \n \n
    \n
    --\x3e\n \x3c!-- Bearbeiten Button --\x3e\n
    \n
    \n \n
    \n
    \n
    \n
    \n \x3c!-- PROFIL UPDATES --\x3e\n \n
    \n
    \n
    \n
    \n \x3c!-- AUSWEIS STATUS --\x3e\n \n
    \n
    \n
    \n
    \n \x3c!-- MAILVERTEILER --\x3e\n \n
    \n
    \n
    \n
    \n
    \n\n \n '},Pe={data:()=>({}),components:{QuickLinks:fe,Mailverteiler:he,ProfilEmails:be,RoleInformation:ye,ProfilInformation:xe},props:["data"],provide(){return{studiengang_kz:Vue.computed({get:()=>this.data.studiengang_kz})}},methods:{},computed:{fotoStatus(){return this.data?.fotoStatus??null},profilInformation(){return this.data?{Vorname:this.data.vorname,Nachname:this.data.nachname,Username:this.data.username,Anrede:this.data.anrede,Titel:this.data.titel,Postnomen:this.data.postnomen,foto_sperre:this.data.foto_sperre,foto:this.data.foto}:{}},personEmails(){return this.data?.emails?this.data.emails:[]},roleInformation(){return this.data?{geburtsdatum:{label:`${this.$p.t("profil","Geburtsdatum")}`,value:this.data.gebdatum},geburtsort:{label:`${this.$p.t("profil","Geburtsort")}`,value:this.data.gebort},personenkennzeichen:{label:`${this.$p.t("person","personenkennzeichen")}`,value:this.data.personenkennzeichen},studiengang:{label:`${this.$p.t("lehre","studiengang")}`,value:this.data.studiengang},semester:{label:`${this.$p.t("lehre","semester")}`,value:this.data.semester},verband:{label:`${this.$p.t("lehre","lehrverband")}`,value:this.data.verband},gruppe:{label:`${this.$p.t("lehre","gruppe")}`,value:this.data.gruppe.trim()}}:{}}},mounted(){},template:' \n\n
    \n \x3c!-- ROW --\x3e \n
    \n \x3c!-- HIDDEN QUICK LINKS --\x3e\n \x3c!-- uncomment when implemented\n
    \n \n \n \n
    --\x3e\n \x3c!-- END OF HIDDEN QUCK LINKS --\x3e\n \x3c!-- MAIN PANNEL --\x3e\n
    \n \x3c!-- ROW WITH PROFIL IMAGE AND INFORMATION --\x3e\n \x3c!-- INFORMATION CONTENT START --\x3e\n \x3c!-- ROW WITH THE PROFIL INFORMATION --\x3e \n
    \n \x3c!-- FIRST KAESTCHEN --\x3e\n
    \n
    \n
    \n \n
    \n
    \n \x3c!-- START OF SECOND PROFIL INFORMATION COLUMN --\x3e\n \x3c!-- END OF PROFIL INFORMATION ROW --\x3e\n \x3c!-- INFORMATION CONTENT END --\x3e\n
    \n
    \n
    \n
    \n \x3c!-- EMAILS --\x3e\n \n
    \n
    \n \x3c!-- SECOND ROW OF SECOND COLUMN IN MAIN CONTENT --\x3e\n
    \n
    \n \n
    \n
    \n \x3c!-- END OF SECOND ROW OF SECOND COLUMN IN MAIN CONTENT --\x3e\n \x3c!-- END OF THE SECOND INFORMATION COLUMN --\x3e\n
    \n \x3c!-- START OF THE SECOND PROFIL INFORMATION ROW --\x3e \n \x3c!-- ROW WITH PROFIL IMAGE AND INFORMATION END --\x3e\n
    \n \x3c!-- END OF MAIN CONTENT COL --\x3e\n
    \n \x3c!-- START OF SIDE PANEL --\x3e\n
    \n \x3c!-- SRART OF QUICK LINKS IN THE SIDE PANEL --\x3e\n \x3c!-- START OF THE FIRDT ROW IN THE SIDE PANEL --\x3e\n \x3c!-- THESE QUCK LINKS ARE ONLY VISIBLE UNTIL VIEWPORT MD --\x3e\n \x3c!--TODO: uncomment when implemented\n
    \n
    \n \n \n \n
    \n
    --\x3e\n \x3c!-- START OF THE SECOND ROW IN THE SIDE PANEL --\x3e\n
    \n
    \n \x3c!-- HIER SIND DIE MAILVERTEILER --\x3e\n \n
    \n \x3c!-- END OF THE SECOND ROW IN THE SIDE PANEL --\x3e\n
    \n \x3c!-- END OF SIDE PANEL --\x3e\n
    \n \x3c!-- END OF CONTAINER ROW--\x3e\n
    \n \x3c!-- END OF CONTAINER --\x3e\n
    \n '},Fe={components:{CoreFilterCmpt:pe,Mailverteiler:he,QuickLinks:fe,RoleInformation:ye,ProfilEmails:be,ProfilInformation:xe},inject:["collapseFunction","language"],data(){return{collapseIconFunktionen:!0,preloadedPhrasen:{},funktionen_table_options:{persistenceID:"filterTableMaViewProfilFunktionen",persistence:{columns:!1},minHeight:300,layout:"fitColumns",responsiveLayout:"collapse",responsiveLayoutCollapseUseFormatters:!1,responsiveLayoutCollapseFormatter:Vue.$collapseFormatter,columns:[{title:"",field:"collapse",headerSort:!1,headerFilter:!1,formatter:"responsiveCollapse",maxWidth:40,headerClick:this.collapseFunction,visible:!0},{title:Vue.computed(()=>this.$p.t("ui/bezeichnung")),field:"Bezeichnung",headerFilter:!0,minWidth:200,visible:!0},{title:Vue.computed(()=>this.$p.t("lehre/organisationseinheit")),field:"Organisationseinheit",headerFilter:!0,minWidth:200,visible:!0},{title:Vue.computed(()=>this.$p.t("global/gueltigVon")),field:"Gültig_von",headerFilterFunc:"dates",headerFilter:De,resizable:!0,minWidth:200,visible:!0,formatter:"datetime",formatterParams:this.datetimeFormatterParams()},{title:Vue.computed(()=>this.$p.t("global/gueltigBis")),field:"Gültig_bis",headerFilterFunc:"dates",headerFilter:De,resizable:!0,minWidth:200,visible:!0,formatter:"datetime",formatterParams:this.datetimeFormatterParams()},{title:Vue.computed(()=>this.$p.t("profil/wochenstunden")),field:"Wochenstunden",headerFilter:!0,minWidth:200,visible:!0}]}}},props:["data"],methods:{funktionenTableBuilt:function(){this.$refs.funktionenTable.tabulator.setData(this.data.funktionen)},datetimeFormatterParams:function(){return{inputFormat:"yyyy-MM-dd",outputFormat:"dd.MM.yyyy",invalidPlaceholder:"(invalid date)",timezone:FHC_JS_DATA_STORAGE_OBJECT.timezone}}},watch:{"data.funktionen"(t){this.$refs.funktionenTable&&this.$refs.funktionenTable.tabulator.setData(t)},"language.value"(t){this.$refs.funktionenTable&&this.$refs.funktionenTable.tabulator.setColumns(this.funktionen_table_options.columns)}},computed:{getTelefonValue(){return this.data.standort_telefon?.kontakt?this.data.standort_telefon.kontakt+" "+this.data.telefonklappe:this.data.standort_telefon?this.data.standort_telefon+" "+this.data.telefonklappe:this.data.telefonklappe},fotoStatus(){return this.data?.fotoStatus??null},personEmails(){return this.data?.emails?this.data.emails:[]},profilInformation(){return this.data?{Vorname:this.data.vorname,Nachname:this.data.nachname,Username:this.data.username,Anrede:this.data.anrede,Titel:this.data.titel,Postnomen:this.data.postnomen,foto_sperre:this.data.foto_sperre,foto:this.data.foto}:{}},roleInformation(){return this.data?{geburtsdatum:{label:`${this.$p.t("profil","Geburtsdatum")}`,value:this.data.gebdatum},geburtsort:{label:`${this.$p.t("profil","Geburtsort")}`,value:this.data.gebort},personenkennzeichen:{label:`${this.$p.t("profil","Kurzzeichen")}`,value:this.data.kurzbz},telefon:{label:`${this.$p.t("profil","Telefon")}`,value:this.getTelefonValue},office:{label:`${this.$p.t("profil","Büro")}`,value:this.data.ort_kurzbz}}:{}}},created(){this.$p.loadCategory(["ui","lehre","global","profil"]).then(()=>{this.preloadedPhrasen.bezeichnungPhrase=this.$p.t("ui/bezeichnung"),this.preloadedPhrasen.organisationseinheitPhrase=this.$p.t("lehre/organisationseinheit"),this.preloadedPhrasen.gueltigVonPhrase=this.$p.t("global/gueltigVon"),this.preloadedPhrasen.gueltigBisPhrase=this.$p.t("global/gueltigBis"),this.preloadedPhrasen.wochenstundenPhrase=this.$p.t("profil/wochenstunden"),this.preloadedPhrasen.loaded=!0})},template:'\n\n
    \n \x3c!-- ROW --\x3e\n
    \n \x3c!-- HIDDEN QUICK LINKS --\x3e\n \x3c!-- TODO: uncomment when implemented\n
    \n\n \n\n
    \n --\x3e\n \x3c!-- END OF HIDDEN QUCK LINKS --\x3e\n \x3c!-- MAIN PANNEL --\x3e\n
    \n \x3c!-- ROW WITH PROFIL IMAGE AND INFORMATION --\x3e\n \x3c!-- INFORMATION CONTENT START --\x3e\n \x3c!-- ROW WITH THE PROFIL INFORMATION --\x3e\n
    \n \x3c!-- FIRST KAESTCHEN --\x3e\n
    \n
    \n
    \n \x3c!-- Profil Informationen --\x3e\n \n
    \n
    \n \x3c!-- START OF SECOND PROFIL INFORMATION COLUMN --\x3e\n \x3c!-- END OF PROFIL INFORMATION ROW --\x3e\n \x3c!-- INFORMATION CONTENT END --\x3e\n
    \n
    \n
    \n
    \n \x3c!-- EMAILS --\x3e\n \n
    \n
    \n \x3c!-- SECOND ROW OF SECOND COLUMN IN MAIN CONTENT --\x3e\n
    \n
    \n \x3c!-- roleInformation --\x3e\n \n
    \n
    \n \x3c!-- END OF SECOND ROW OF SECOND COLUMN IN MAIN CONTENT --\x3e\n \x3c!-- END OF THE SECOND INFORMATION COLUMN --\x3e\n
    \n \x3c!-- START OF THE SECOND PROFIL INFORMATION ROW --\x3e\n \x3c!-- ROW WITH PROFIL IMAGE AND INFORMATION END --\x3e\n
    \n \x3c!-- SECOND ROW UNDER THE PROFIL IMAGE AND INFORMATION WITH THE TABLES --\x3e\n
    \n \x3c!-- FIRST TABLE --\x3e\n
    \n \n
    \n \x3c!-- END OF THE ROW WITH THE TABLES UNDER THE PROFIL INFORMATION --\x3e\n
    \n \x3c!-- END OF MAIN CONTENT COL --\x3e\n
    \n \x3c!-- START OF SIDE PANEL --\x3e\n
    \n \x3c!-- VISIBLE UNTIL VIEWPORT MD --\x3e\n \x3c!--TODO: uncomment when implemented\n
    \n
    \n \n \n \n
    \n
    \n --\x3e\n
    \n
    \n \x3c!-- MAILVERTEILER --\x3e\n \n
    \n
    \n \x3c!-- END OF SIDE PANEL --\x3e\n
    \n \x3c!-- END OF CONTAINER ROW--\x3e\n
    \n \x3c!-- END OF CONTAINER --\x3e\n
    \n'};Vue.$collapseFormatter=function(t){var e=document.createElement("div");e.classList.add("tabulator-collapsed-row"),e.classList.add("text-break");var n=document.createElement("div");return n.classList.add("row"),e.appendChild(n),t.forEach(function(t){let e=document.createElement("div");e.classList.add("col-6");let i=document.createElement("div");i.classList.add("col-6"),e.innerHTML=""+t.title+"",i.innerHTML=t.value?t.value:"-",n.appendChild(e),n.appendChild(i)}),Object.keys(t).length?e:""};const ze={name:"Profil",components:{StudentProfil:Ce,MitarbeiterProfil:Oe,ViewStudentProfil:Pe,ViewMitarbeiterProfil:Fe,Loading:$e},props:{uid:{type:String,required:!1},viewData:{type:Object}},data(){return{loading:!1,profilUpdateStates:null,profilUpdateTopic:null,view:null,data:null,notFoundUID:null,isEditable:this.viewData.editable??!1}},provide(){return{isEditable:Vue.computed(()=>this.isEditable),profilUpdateStates:Vue.computed(()=>!!this.profilUpdateStates&&this.profilUpdateStates),profilUpdateTopic:Vue.computed(()=>!!this.profilUpdateTopic&&this.profilUpdateTopic),setLoading:t=>{this.loading=t},getZustellkontakteCount:this.zustellKontakteCount,getZustelladressenCount:this.zustellAdressenCount,collapseFunction:(t,e)=>{void 0===this[t.target.id]&&(this[t.target.id]=!0),this[t.target.id]=!this[t.target.id];let n=e._column.cells.map(t=>t.element.children[0]);this[t.target.id]?t.target.classList.replace("fa-angle-up","fa-angle-down"):t.target.classList.replace("fa-angle-down","fa-angle-up"),this[t.target.id]?n.filter(t=>!t.classList.contains("open")).forEach(t=>{t.click()}):n.filter(t=>t.classList.contains("open")).forEach(t=>{t.click()})},sortProfilUpdates:(t,e)=>{let n=0;return n="pending"===t.status.toLowerCase()||"accepted"===t.status.toLowerCase()&&"rejected"===e.status.toLowerCase()?-1:1,t.status===e.status&&(n=new Date(e.insertamum.split(".").reverse().join("-"))-new Date(t.insertamum.split(".").reverse().join("-"))),n}}},methods:{async load(){await this.$api.call(ke.getStatus()).then(t=>{this.profilUpdateStates=t.data}).catch(t=>{console.error(t)}),this.$api.call(ke.getTopic()).then(t=>{this.profilUpdateTopic=t.data}).catch(t=>{console.error(t)}),this.$api.call(we.profilViewData(this.$route.params.uid??null)).then(t=>t.data).then(t=>{this.view=t?.profil_data.view,this.data=t?.profil_data.data,this.isEditable=t?.editable??!1}).catch(t=>{console.error(t)})},zustellAdressenCount(){if(!this.data||!this.data.adressen)return null;let t=[];return this.data.profilUpdates?.length&&(t=t.concat(this.data.profilUpdates.filter(t=>t.requested_change.zustelladresse).map(t=>t.requested_change.adresse_id))),this.data.profilUpdates?.length&&this.data.adressen.filter(t=>t.zustelladresse).every(t=>this.data.profilUpdates.some(e=>e.requested_change.adresse_id==t.adresse_id))||(t=t.concat(this.data.adressen.filter(t=>t.zustelladresse).map(t=>t.adresse_id))),[...new Set(t)]},zustellKontakteCount(){if(!this.data||!this.data.kontakte)return null;let t=[];return this.data.profilUpdates?.length&&(t=t.concat(this.data.profilUpdates.filter(t=>"Pending"===t.status&&t.requested_change.zustellung).map(t=>({kontakt_id:t.requested_change.kontakt_id,kontakttyp:t.requested_change.kontakttyp})))),this.data.profilUpdates?.length&&this.data.kontakte.filter(t=>t.zustellung).every(t=>this.data.profilUpdates.some(e=>"Pending"===e.status&&e.requested_change.kontakt_id==t.kontakt_id))||(t=t.concat(this.data.kontakte.filter(t=>t.zustellung).map(t=>({kontakt_id:t.kontakt_id,kontakttyp:t.kontakttyp})))),[...new Set(t)]}},computed:{filteredEditData(){if(this.data)return{view:null,data:{Personen_Informationen:{title:this.$p.t("profil","personenInformationen"),topic:"Personen_informationen",view:null,data:{vorname:{title:this.$p.t("person","vorname"),topic:this.profilUpdateTopic?.Vorname,view:"TextInputDokument",withFiles:!0,data:{titel:"vorname",value:this.data.vorname}},nachname:{title:this.$p.t("person","nachname"),topic:this.profilUpdateTopic?.Nachname,view:"TextInputDokument",withFiles:!0,data:{titel:"nachname",value:this.data.nachname}},titel:{title:this.$p.t("global","titel"),topic:this.profilUpdateTopic?.Titel,view:"TextInputDokument",withFiles:!0,data:{titel:"titel",value:this.data.titel}},postnomen:{title:this.$p.t("profil","postnomen"),topic:this.profilUpdateTopic?.Postnomen,view:"TextInputDokument",withFiles:!0,data:{titel:"postnomen",value:this.data.postnomen}}}},Private_Kontakte:{title:this.$p.t("profil","privateKontakte"),topic:this.profilUpdateTopic?.["Private Kontakte"],data:this.data.kontakte?.filter(t=>!this.data.profilUpdates?.some(e=>e.status===this.profilUpdateStates.Pending&&e.requested_change?.kontakt_id===t.kontakt_id)).map(t=>({listview:"Kontakt",view:"EditKontakt",data:t}))},Private_Adressen:{title:this.$p.t("profil","privateAdressen"),topic:this.profilUpdateTopic?.["Private Adressen"],data:this.data.adressen?.filter(t=>!this.data.profilUpdates?.some(e=>e.status===this.profilUpdateStates.Pending&&e.requested_change?.adresse_id==t.adresse_id)).map(t=>({listview:"Adresse",view:"EditAdresse",data:t}))}}}}},watch:{loading:function(t){t?this.$refs.loadingModalRef.show():this.$refs.loadingModalRef.hide()},uid(t,e){this.load()}},created(){this.load()},template:'\n\t
    \n\t\t
    \n\t\t\t

    Es wurde keine Person mit der UID {{this.notFoundUID}} gefunden

    \n\t\t
    \n\t\t
    \n \n \n\t\t
    \n\t
    '};var Ie={getContentID:t=>({method:"get",url:"/api/frontend/v1/Ort/ContentID",params:{ort_kurzbz:t}}),getRooms:(t,e,n,i,a=0)=>({method:"get",url:"/api/frontend/v1/Ort/getRooms",params:{datum:t,von:e,bis:n,typ:i,personenanzahl:a}}),getRoomTypes:()=>({method:"get",url:"/api/frontend/v1/Ort/getTypes",params:{}})};const Le={name:"Raumsuche",props:{},components:{VueDatePicker:a,CoreFilterCmpt:pe,InputNumber:primevue.inputnumber},data(){return{phrasenPromise:null,phrasenResolved:!1,tabulatorUuid:Vue.ref(0),tableBuiltResolve:null,tableBuiltPromise:null,roomtypes:null,defaultType:{raumtyp_kurzbz:"",beschreibung:Vue.computed(()=>this.$p.t("global/alle"))},anzahl:1,selectedType:null,datum:new Date,von:Vue.ref({hours:(new Date).getHours(),minutes:(new Date).getMinutes()}),bis:Vue.ref({hours:(new Date).getHours()+1,minutes:(new Date).getMinutes()}),datepickerTextInputOptions:{enterSubmit:!0,tabSubmit:!0,selectOnFocus:!0,format:"dd.MM.yyyy",escClose:!0},timepickerTextInputOptions:{enterSubmit:!0,tabSubmit:!0,selectOnFocus:!0,format:"HH:mm",escClose:!0},raumsucheTableOptions:{height:Vue.ref(400),index:"ort_kurzbz",layout:"fitColumns",placeholder:this.$p.t("global/noDataAvailable"),columns:[{title:Vue.computed(()=>this.$p.t("rauminfo/raum_kurzbz")),field:"ort_kurzbz",widthGrow:1},{title:Vue.computed(()=>this.$p.t("global/bezeichnung")),field:"bezeichnung",widthGrow:2},{title:Vue.computed(()=>this.$p.t("rauminfo/raumnummer")),field:"nummer",widthGrow:1},{title:Vue.computed(()=>this.$p.t("rauminfo/personcap")),field:"personen",widthGrow:1},{title:Vue.computed(()=>this.$p.t("rauminfo/rauminfo")),field:"linkInfo",formatter:this.linkFormatter,widthGrow:1},{title:Vue.computed(()=>this.$p.t("rauminfo/roomReservations")),field:"linkRes",formatter:this.linkFormatter,widthGrow:1}],persistence:!1},raumsucheTableEventHandlers:[{event:"tableBuilt",handler:async()=>{this.tableBuiltResolve()}}]}},methods:{tableResolve(t){this.tableBuiltResolve=t},linkFormatter(t){const e=t.getValue(),n="linkInfo"===t.getField()?this.$p.t("rauminfo/rauminfo"):this.$p.t("rauminfo/roomReservations");return e?'
    ':'
    -
    '},roomPlanLink:t=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/CisVue/Cms/getRoomInformation/"+t.ort_kurzbz,roomInfoLink:t=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/CisVue/Cms/content/"+t.content_id,getTimeString:t=>`${String(t.hours).padStart(2,"0")}:${String(t.minutes).padStart(2,"0")}`,setupData(t){const e=t.map(t=>({ort_kurzbz:t.ort_kurzbz,bezeichnung:t.bezeichnung.replace("&","&"),nummer:t.planbezeichnung,personen:t.max_person,linkInfo:t.content_id?this.roomInfoLink(t):null,linkRes:this.roomPlanLink(t)}));this.$refs.raumsucheTable.tabulator.setData(e)},loadRoomTypes(){this.$api.call(Ie.getRoomTypes()).then(t=>{t?.data?.forEach(t=>{t.beschreibung=t.beschreibung.replace("&","&")}),this.selectedType=this.defaultType,this.roomtypes=t?.data??[]})},loadRooms(){this.$api.call(Ie.getRooms(this.datum.toISOString(),this.getTimeString(this.von),this.getTimeString(this.bis),this.selectedType?.raumtyp_kurzbz??"",this.anzahl)).then(t=>{t?.data?.retval&&this.setupData(t.data.retval)})},handleUuidDefined(t){this.tabulatorUuid=t},search(){this.loadRooms()},setRoute(t){},dateFormat:t=>`${String(t.getDate()).padStart(2,"0")}.${String(t.getMonth()+1).padStart(2,"0")}.${t.getFullYear()}`,timeFormat:t=>`${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`,async setupMounted(){this.tableBuiltPromise=new Promise(this.tableResolve),await this.tableBuiltPromise,this.loadRoomTypes(),this.loadRooms();const t=this.tabulatorUuid?"-"+this.tabulatorUuid:"",e=document.getElementById("filterTableDataset"+t);if(!e)return;const n=e.getBoundingClientRect(),i=window.visualViewport.height-n.top-100;this.$refs.raumsucheTable&&this.$refs.raumsucheTable.$refs.table.style.setProperty("height",i+"px")}},computed:{isDarkMode(){return"dark"==this.$theme.theme_name.value}},created(){this.phrasenPromise=this.$p.loadCategory(["rauminfo","global"]),this.phrasenPromise.then(()=>{this.phrasenResolved=!0})},mounted(){this.setupMounted()},template:'\n\t

    {{$p.t(\'rauminfo/roomSearch\')}}

    \n\t
    \n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t\n\t\t
    \n\t\t\t\n\t\t
    \n\t\t\n\n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t
    \n\t\n\n \n '};var Me={components:{paginator:primevue.paginator},emits:["update:rows"],props:{maxPageCount:{type:Number,default:0},page_size:{type:Number,required:!0}},data:()=>({}),methods:{newPageEvent:function(t){}},mounted(){},template:'\n \t\x3c!-- Desktop --\x3e\n\t
    \n\t\t\n\t\t\n\t
    \n\t\x3c!-- Mobile --\x3e\n\t
    \n\t\t\n\t\t\n\t
    \n '},Re={props:{uid:String,vorname:String,nachname:String,titelpre:String,kontakt:String,telefoneklappe:String,email:String,planbezeichnung:String,foto:String,displayWidget:{type:Boolean,default:!1}},template:'\n\t
    \n\t\t
    \n\t\t\tmitarbeiter_foto\n\t\t
    \n\t\t
    \n\t\t\t
    {{fullname}}
    \n\t\t
    \n\t\t
    \n\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t
    {{phone.number}}
    \n\n\t\t\t\t
    \n\t\t\t\t
    {{ort}}
    \n\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\n\t\t
    \n\t
    \n\t',computed:{formattedEmail:function(){if(!this.email)return null;let t=this.email.replace("mailto:","").split("@");return t[0]+"@"+t[1]},fullname:function(){return this.titelpre&&this.vorname&&this.nachname?`${this.titelpre} ${this.vorname} ${this.nachname}`:this.vorname&&this.nachname?`${this.vorname} ${this.nachname}`:this.nachname?this.vorname:null},phone:function(){return this.kontakt&&this.telefoneklappe?{link:"tel:".concat(this.kontakt).concat(" "+this.telefoneklappe),number:this.kontakt.concat(" "+this.telefoneklappe)}:this.kontakt?{link:"tel:".concat(this.kontakt),number:this.kontakt}:null},email_link:function(){return this.email?"mailto:".concat(this.email):null},base64Image:function(){return this.foto?"data:image/png;base64,".concat(this.foto):null},ort:function(){return this.planbezeichnung??null},profilViewLink:function(){return this.uid?FHC_JS_DATA_STORAGE_OBJECT.app_root.concat(FHC_JS_DATA_STORAGE_OBJECT.ci_router).concat("/Cis/Profil/View/").concat(this.uid):null}}},Ne={props:{title:String,vertretungsList:Array,showBezeichnung:Boolean},template:'\n\t
    \n\t\t
    \n\t\t\t{{title}}\n\t\t
    \n\t\t
    \n\t\t\t

    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{{vertretungFormatedName(vertretung,false)}}\n\t\t\t

    \n\t\t
    \n\t
    \n\t',methods:{profilViewLink:function(t){return t?FHC_JS_DATA_STORAGE_OBJECT.app_root.concat(FHC_JS_DATA_STORAGE_OBJECT.ci_router).concat("/Cis/Profil/View/").concat(t):null},vertretungFormatedName:function(t){return t?`${t.vorname??""} ${t.nachname??""} ${t.bezeichnung&&this.showBezeichnung?"(".concat(t.bezeichnung.replace("(","").replace(")","")).concat(")"):""}`:null}}},Be={studiengangInformation:()=>({method:"get",url:"/api/frontend/v1/Studgang/getStudiengangInfo"}),getStudiengangByKz:t=>({method:"get",url:"/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz",params:{studiengang_kz:t}})},Ue={data:()=>({studiengang:null,semester:null,stg_ltg:null,gf_ltg:null,stv_ltg:null,ass:null,hochschulvertr:null,stdv:null,jahrgangsvertr:null}),props:{displayWidget:{type:Boolean,default:!1}},components:{StudiengangPerson:Re,StudiengangVertretung:Ne},template:'\n\t\t
    \n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t
    \n\t\n',computed:{collection_array:function(){let t=[];return Array.isArray(this.stg_ltg)&&1==this.stg_ltg.length&&Array.isArray(this.ass)&&1==this.ass.length?t.push({title:`${this.$p.t("global","studiengangsleitung")}/${this.$p.t("studiengangInformation","assistenz")}`,collection:[...this.stg_ltg,...this.ass]}):(t.push({title:this.$p.t("global","studiengangsleitung"),collection:this.stg_ltg}),t.push({title:this.$p.t("studiengangInformation","assistenz"),collection:this.ass})),Array.isArray(this.gf_ltg)&&1==this.gf_ltg.length&&Array.isArray(this.stv_ltg)&&1==this.stv_ltg.length?t.push({title:this.$p.t("studiengangInformation","geschaeftsfuehrende_stellvertretende_leitung"),collection:[...this.gf_ltg,...this.stv_ltg]}):(t.push({title:this.$p.t("studiengangInformation","geschaeftsfuehrende_leitung"),collection:this.gf_ltg}),t.push({title:this.$p.t("studiengangInformation","stellvertretende_leitung"),collection:this.stv_ltg})),t},moodleLink:function(){if(this.studiengang&&this.studiengang.studiengang_kz)return"https://moodle.technikum-wien.at/course/view.php?idnumber=dl"+this.studiengang.studiengang_kz}},mounted(){this.$api.call(Be.studiengangInformation()).then(t=>t.data).then(t=>{Object.assign(this,t)})}},je={content:(t,e=null,n=null,i=null)=>({method:"get",url:"/api/frontend/v1/Cms/content",params:{content_id:t,...e?{version:e}:{},...n?{sprache:n}:{},...i?{sichtbar:i}:{}}}),getNews:(t=1,e=10,n)=>({method:"get",url:"/api/frontend/v1/Cms/getNews",params:{page:t,page_size:e,sprache:n}}),news:t=>({method:"get",url:"/api/frontend/v1/Cms/news",params:{limit:t}}),getNewsRowCount:()=>({method:"get",url:"/api/frontend/v1/Cms/getNewsRowCount"}),getNewsExtra:()=>({method:"get",url:"/api/frontend/v1/Cms/getStudiengangInfoForNews"})},He={name:"NewsComponent",components:{Pagination:Me,StudiengangInformation:Ue},data:()=>({content:null,maxPageCount:0,page_size:10,page:1}),watch:{"$p.user_language.value":function(t){this.fetchNews()}},computed:{sprache:function(){return this.$p.user_language.value}},methods:{fetchNews(){return this.$api.call(je.getNews(this.page,this.page_size,this.sprache)).then(t=>t.data).then(t=>{this.content=t,document.querySelectorAll("#cms [data-confirm]").forEach(t=>{t.addEventListener("click",e=>{e.preventDefault(),o.popup(t.dataset.confirm).then(()=>{Axios.get(t.href).then(t=>{location=location}).catch(t=>console.error("ERROR:",t))}).catch(()=>{})})}),document.querySelectorAll("#cms [data-href]").forEach(t=>{t.href=t.dataset.href.replace(/^ROOT\//,FHC_JS_DATA_STORAGE_OBJECT.app_root)}),Vue.nextTick(()=>{document.querySelectorAll(".card-header").forEach(t=>{t.classList.add("fhc-primary")}),document.querySelectorAll(".row").forEach(t=>{t.classList.add("w-100"),t.classList.add("align-items-center")}),document.querySelectorAll(".row h2").forEach(t=>{t.classList.add("mb-0")})})})},loadNewPageContent(t){this.$api.call(je.getNews(t.page,t.rows)).then(t=>t.data).then(t=>{this.content=t})}},created(){this.fetchNews(),this.$api.call(je.getNewsRowCount()).then(t=>t.data).then(t=>{this.maxPageCount=t})},template:'\n \t

    News

    \n\t
    \n\t\n\t\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t\n\t\n '},Ve={name:"RaumComponent",data:()=>({imgContent:null}),props:{content:{type:String,required:!0},content_id:{type:[Number,String]}},methods:{sanitizeLegacyTables(t){t.querySelectorAll("table").forEach(t=>{const e=t.textContent.trim(),n=document.createElement("p");n.textContent=e,t.parentNode.replaceChild(n,t)});t.querySelectorAll("ul").forEach(t=>{Array.from(t.children).forEach(e=>{const n=document.createElement("p");n.textContent=e.textContent,t.parentNode.appendChild(n)}),t.parentNode.removeChild(t)});Array.from(t.querySelectorAll("td")).filter(t=>t.scrollWidth>100).forEach(t=>{if(t.firstChild?.nodeType===Node.TEXT_NODE&&t.firstChild.length>10){const e=document.createElement("p");e.appendChild(t.firstChild),t.appendChild(e)}});Array.from(t.querySelectorAll("th")).forEach(t=>{t.children.length>1&&(t.innerHTML=Array.from(t.childNodes).find(t=>t.textContent).textContent)});t.querySelectorAll("p").forEach(t=>{t.style.setProperty("word-wrap","break-word"),t.style.setProperty("white-space","normal"),t.style.setProperty("max-width","400px")})}},mounted(){let t=document.getElementsByClassName("tablesorter");for(let e of t)this.sanitizeLegacyTables(e),new Tabulator(e,{layout:"fitDataStretch",columnDefaults:{formatter:"html",resizable:!1,minWidth:"100px"}});let e=document.getElementsByTagName("h1");if(e=e.length?e[0]:null,e&&e.innerText){let t=e.innerText,n=new RegExp("\\w*\\s([a-zA-Z][0-9\\.]+)$"),i=t.match(n);if(i){t=i[0],t=t.replace(" ","_");let n=document.createElement("a");n.href=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/CisVue/Cms/getRoomInformation/"+t,n.appendChild(e.cloneNode(!0)),e.replaceWith(n);let a=document.querySelectorAll('.menubox a[href*="stpl_week.php"]');for(let t of a)t.href=n.href}else console.error(`the regular expression did not match the room name: ${t}`);return}const n=(new DOMParser).parseFromString(`
    ${this.content}
    `,"text/html").querySelector("img");if(n&&n.title){const t={};for(let e of n.attributes)t[e.name]=e.value;this.imgContent=t}console.error("was not able to get the title of the raum_contentmittitel")},template:'\n \x3c!-- div that contains the content --\x3e\n\x3c!-- TODO: test with more img content from cms--\x3e\n
    \n
    \n

    Content was not found

    \n '};const Je={relative:[{priority:1,regex:new RegExp(/^\.\.\/cms\/content\.php\?content_id=([0-9]+)/),replacement:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/CisVue/Cms/content",group_replacement_strategy:"PATH_SEGMENTS"},{priority:2,regex:new RegExp(/^\.\.\/cms\/news\.php/),replacement:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/CisVue/Cms/news"},{priority:3,regex:new RegExp(/^\.\.\/index\.ci\.php/),replacement:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router},{priority:10,regex:new RegExp(/^\.\.\//),replacement:FHC_JS_DATA_STORAGE_OBJECT.app_root}],absolute:[{}]},Ge=Je.relative.sort((t,e)=>t.priority-e.priority).map(t=>({regex:t.regex,replacement:t.replacement,group_replacement_strategy:t.group_replacement_strategy}));function qe(t){for(let{regex:e,replacement:n,group_replacement_strategy:i}of Ge){let a=t.match(e);if(a){let s=t.replace(e,n);switch(i){case"QUERY_PARAMETERS":s=s.concat(`?${a[1]}`);for(let t of a.slice(2))s=s.concat(`&${t}`);break;case"PATH_SEGMENTS":for(let t of a.slice(1))s=s.concat(`/${t}`)}return s}}return t}Je.absolute.sort((t,e)=>t.priority-e.priority).map(t=>({regex:t.regex,replacement:t.replacement,group_replacement_strategy:t.group_replacement_strategy}));var We={name:"GeneralComponent",props:{content:{type:String,required:!0}},methods:{sanitizeLegacyTables(t){t.querySelectorAll("table").forEach(t=>{const e=t.textContent.trim(),n=document.createElement("p");n.textContent=e,t.parentNode.replaceChild(n,t)});t.querySelectorAll("ul").forEach(t=>{Array.from(t.children).forEach(e=>{const n=document.createElement("p");n.textContent=e.textContent,t.parentNode.appendChild(n)}),t.parentNode.removeChild(t)});Array.from(t.querySelectorAll("td")).filter(t=>t.scrollWidth>100).forEach(t=>{if(t.firstChild?.nodeType===Node.TEXT_NODE&&t.firstChild.length>10){const e=document.createElement("p");e.appendChild(t.firstChild),t.appendChild(e)}});Array.from(t.querySelectorAll("th")).forEach(t=>{t.children.length>1&&(t.innerHTML=Array.from(t.childNodes).find(t=>t.textContent).textContent)});t.querySelectorAll("p").forEach(t=>{t.style.setProperty("word-wrap","break-word"),t.style.setProperty("white-space","normal"),t.style.setProperty("max-width","400px")})},prepareContent(){Array.from(document.getElementsByClassName("tablesorter")).forEach((t,e)=>{this.sanitizeLegacyTables(t),new Tabulator(t,{index:e,layout:"fitDataFill",columnDefaults:{formatter:"html",resizable:!0,minWidth:"100px"}})}),document.querySelectorAll("#cms [data-confirm]").forEach(t=>{t.addEventListener("click",e=>{e.preventDefault(),BsConfirm.popup(t.dataset.confirm).then(()=>{Axios.get(t.href).then(t=>{location=location}).catch(t=>console.error("ERROR:",t))}).catch(()=>{})})}),document.querySelectorAll("#cms [data-href]").forEach(t=>{t.href=t.dataset.href.replace(/^ROOT\//,FHC_JS_DATA_STORAGE_OBJECT.app_root)}),document.querySelectorAll("[href]").forEach(t=>{let e=qe(t.getAttribute("href"));t.href=e}),document.querySelectorAll("[style*=background-color]").forEach(t=>{"rgb(255, 255, 255)"==t.style.backgroundColor&&(t.style.backgroundColor="var(--fhc-background)"),t.querySelector("*[style*=background-color]")&&(t.style.backgroundColor="var(--fhc-tertiary)")})}},updated(){this.prepareContent()},mounted(){this.prepareContent()},template:'\n \x3c!-- div that contains the content --\x3e\n
    \n \t
    \n
    \n

    Content was not found

    \n '},Ke={name:"ContentComponent",props:{content_id:{type:[Number,String],required:!0},version:{type:[String,Number],default:null},sichtbar:{type:[String,Number],default:null}},components:{raum_contentmittitel:Ve,news_content:{name:"NewsContentType",props:{content:{type:String,required:!0}},methods:{sanitizeLegacyTables(t){t.querySelectorAll("table").forEach(t=>{const e=t.textContent.trim(),n=document.createElement("p");n.textContent=e,t.parentNode.replaceChild(n,t)});t.querySelectorAll("ul").forEach(t=>{Array.from(t.children).forEach(e=>{const n=document.createElement("p");n.textContent=e.textContent,t.parentNode.appendChild(n)}),t.parentNode.removeChild(t)});Array.from(t.querySelectorAll("td")).filter(t=>t.scrollWidth>100).forEach(t=>{if(t.firstChild?.nodeType===Node.TEXT_NODE&&t.firstChild.length>10){const e=document.createElement("p");e.appendChild(t.firstChild),t.appendChild(e)}});Array.from(t.querySelectorAll("th")).forEach(t=>{t.children.length>1&&(t.innerHTML=Array.from(t.childNodes).find(t=>t.textContent).textContent)});t.querySelectorAll("p").forEach(t=>{t.style.setProperty("word-wrap","break-word"),t.style.setProperty("white-space","normal"),t.style.setProperty("max-width","400px")})}},mounted(){Array.from(document.getElementsByClassName("tablesorter")).forEach((t,e)=>{this.sanitizeLegacyTables(t),new Tabulator(t,{index:e,layout:"fitDataFill",columnDefaults:{formatter:"html",resizable:!0,minWidth:"100px"}})}),document.querySelectorAll("#cms [data-confirm]").forEach(t=>{t.addEventListener("click",e=>{e.preventDefault(),BsConfirm.popup(t.dataset.confirm).then(()=>{Axios.get(t.href).then(t=>{location=location}).catch(t=>console.error("ERROR:",t))}).catch(()=>{})})}),document.querySelectorAll("#cms [data-href]").forEach(t=>{t.href=t.dataset.href.replace(/^ROOT\//,FHC_JS_DATA_STORAGE_OBJECT.app_root)}),document.querySelectorAll("[href]").forEach(t=>{let e=qe(t.getAttribute("href"));t.href=e}),document.querySelectorAll("[style*=background-color]").forEach(t=>{"rgb(255, 255, 255)"==t.style.backgroundColor&&(t.style.backgroundColor="var(--fhc-background)"),t.querySelector("*[style*=background-color]")&&(t.style.backgroundColor="var(--fhc-tertiary)")}),Vue.nextTick(()=>{document.querySelectorAll(".card-header").forEach(t=>{t.classList.add("fhc-primary")}),document.querySelectorAll(".row").forEach(t=>{t.classList.add("w-100"),t.classList.add("align-items-center")}),document.querySelectorAll(".row h2").forEach(t=>{t.classList.add("mb-0")})})},template:'\n\t \x3c!-- div that contains the content --\x3e\n\t
    \n\t\t
    \n\t
    \n\t

    Content was not found

    \n\t '},general:We,iframe_content:{name:"iframe_content",props:{content:{type:String,required:!0}},computed:{srcUrl(){const t=(new DOMParser).parseFromString(`
    ${this.content}
    `,"text/html").querySelector("iframe[src]");if(!t)return"";return qe(t.getAttribute("src")||"")}},template:'\n\t\t
    \n\t\t\t\n\t\t
    Keine URL gefunden.
    \n\t\t
    \n\t'}},data(){return{content_type:null,content:null,content_id_internal:this.content_id}},methods:{fetchContent(){this.$api.call(je.content(this.content_id_internal,this.version,this.sprache,this.sichtbar)).then(t=>{this.$nextTick(function(){this.content=t.data.content,this.content_type=t.data.type})})}},watch:{sprache:function(t){this.fetchContent()},"$route.params.content_id"(t){this.content_id_internal=t,this.fetchContent()}},computed:{sprache(){return this.$p.user_language.value},computeContentType:function(){switch(this.content_type){case"raum_contentmittitel":return"raum_contentmittitel";case"news":return"news_content";case"iframe":return"iframe_content";default:return"general"}}},created(){this.fetchContent()},template:'\n \x3c!-- div that contains the content --\x3e\n\t
    \n \t\n\t
    \n

    No content is available to display

    \n '};const Ze="Week";var Ye={name:"RoomInformation",components:{FhcCalendar:It},props:{viewData:Object,propsViewData:Object},computed:{currentDay(){return this.propsViewData?.focus_date||luxon.DateTime.now().setZone(this.viewData.timezone).toISODate()},currentMode(){return this.propsViewData?.mode||Ze}},methods:{handleChangeDate(t,e){return this.handleChangeMode(e,t)},handleChangeMode(t,e){const n=t[0].toUpperCase()+t.slice(1),i=e.toISODate();this.$router.push({name:"RoomInformation",params:{mode:n,focus_date:i,ort_kurzbz:this.propsViewData.ort_kurzbz}})},getPromiseFunc(t,e){return[this.$api.call($t.getRoomInfo(this.propsViewData.ort_kurzbz,t.toISODate(),e.toISODate())),this.$api.call($t.getOrtReservierungen(this.propsViewData.ort_kurzbz,t.toISODate(),e.toISODate()))]}},template:'\n\t
    \n\t\t

    {{ $p.t(\'rauminfo/rauminfo\') }} {{ propsViewData.ort_kurzbz }}

    \n\t\t
    \n\t\t\n\t
    '};const Xe=new Date,Qe={name:"AbgabeStudentDetail",components:{Upload:_e,BsModal:s,InputNumber:primevue.inputnumber,Checkbox:primevue.checkbox,Dropdown:primevue.dropdown,Textarea:primevue.textarea,VueDatePicker:a},props:{projektarbeit:{type:Object,default:null},viewMode:{type:Boolean,default:!1}},data:()=>({eidAkzeptiert:!1,enduploadTermin:null,allActiveLanguages:FHC_JS_DATA_STORAGE_OBJECT.server_languages,form:Vue.reactive({sprache:"",abstract:"",abstract_en:"",schlagwoerter:"",schlagwoerter_en:"",kontrollschlagwoerter:"",seitenanzahl:1})}),methods:{validate:function(t){return!!t.file.length||(this.$fhcAlert.alertWarning(this.$p.t("global/warningChooseFile")),!1)},triggerEndupload(){if(!this.validate(this.enduploadTermin))return!1;const t=new FormData;t.append("paabgabetyp_kurzbz",this.enduploadTermin.paabgabetyp_kurzbz),t.append("projektarbeit_id",this.enduploadTermin.projektarbeit_id),t.append("paabgabe_id",this.enduploadTermin.paabgabe_id),t.append("student_uid",this.projektarbeit.student_uid),t.append("bperson_id",this.projektarbeit.bperson_id),t.append("sprache",this.form.sprache.sprache),t.append("abstract",this.form.abstract),t.append("abstract_en",this.form.abstract_en),t.append("schlagwoerter",this.form.schlagwoerter),t.append("schlagwoerter_en",this.form.schlagwoerter_en),t.append("seitenanzahl",this.form.seitenanzahl);for(let e=0;e{this.handleUploadRes(t)}),this.$refs.modalContainerEnduploadZusatzdaten.hide()},downloadAbgabe(t){this.$fhcApi.factory.lehre.getStudentProjektarbeitAbgabeFile(t.paabgabe_id,this.projektarbeit.student_uid)},formatDate(t){const e=new Date(t),n=t=>String(t).padStart(2,"0"),i=n(e.getMonth()+1);return`${n(e.getDate())}.${i}.${e.getFullYear()}`},upload(t){if(!this.validate(t))return!1;if("Endupload"===t.bezeichnung)this.enduploadTermin=t,this.$refs.modalContainerEnduploadZusatzdaten.show();else{const e=new FormData;e.append("paabgabetyp_kurzbz",t.paabgabetyp_kurzbz),e.append("projektarbeit_id",this.projektarbeit.projektarbeit_id),e.append("paabgabe_id",t.paabgabe_id),e.append("student_uid",this.projektarbeit.student_uid),e.append("bperson_id",this.projektarbeit.bperson_id);for(let n=0;n{this.handleUploadRes(t)})}},handleUploadRes(t){"success"==t.meta.status?this.$fhcAlert.alertSuccess("File erfolgreich hochgeladen"):this.$fhcAlert.alertError("File upload error"),t.meta.signaturInfo&&this.$fhcAlert.alertInfo(t.meta.signaturInfo)},dateDiffInDays:(t,e)=>Math.round((new Date(t)-new Date(e))/864e5),getDateStyle(t,e){const n=new Date(t.datum),i=new Date(t.abgabedatum);let a="white",s="";return null===t.abgabedatum?nXe&&this.dateDiffInDays(n,Xe)<=12&&(a="yellow",s="fa-circle-exclamation"):i>n?(a="pink",s="fa-circle-question"):(a="green",s="fa-square-check"),void 0!==e||"icon"===e?s:"abgabe-zieldatum-border-"+a},openBeurteilungLink(t){window.open(t,"_blank")},getOptionLabel:t=>t.sprache},watch:{projektarbeit(t){this.form.sprache=t.sprache?this.allActiveLanguages.find(e=>e.sprache==t.sprache):this.allActiveLanguages.find(t=>"German"==t.sprache),this.form.abstract=t.abstract,this.form.abstract_en=t.abstract_en,this.form.schlagwoerter=t.schlagwoerter,this.form.schlagwoerter_en=t.schlagwoerter_en,this.form.kontrollschlagwoerter=t.kontrollschlagwoerter,this.form.seitenanzahl=t.seitenanzahl}},computed:{getEid(){return this.$p.t("abgabetool/c4eidesstattlicheErklaerung")},getEnduploadErlaubt(){return!this.eidAkzeptiert}},created(){},mounted(){},template:'\n\t\t
    \n\t\t\n\t\t\t
    {{$p.t(\'abgabetool/c4abgabeStudentenbereich\')}}
    \n\t\t\t
    \n\t\t\t\t

    {{projektarbeit?.betreuer}}

    \n\t\t\t\t

    {{projektarbeit?.titel}}

    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    {{$p.t(\'abgabetool/c4fixtermin\')}}
    \n\t\t\t\t\t
    {{$p.t(\'abgabetool/c4zieldatum\')}}
    \n\t\t\t\t\t
    {{$p.t(\'abgabetool/c4abgabetyp\')}}
    \n\t\t\t\t\t
    {{$p.t(\'abgabetool/c4abgabekurzbz\')}}
    \n\t\t\t\t\t
    {{$p.t(\'abgabetool/c4abgabedatum\')}}
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t{{$p.t(\'abgabetool/c4fileupload\')}}\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\x3c!--\n\t\t\t\t\t\t

    \n--\x3e\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    {{ termin.bezeichnung }}
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t{{ termin.abgabedatum?.split("-").reverse().join(".") }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t \t\n\t \t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t \t\n '};var tn={name:"VerticalSplit",data:function(){return{availHeight:0,topheight:0,bottomheight:0,mousePosY:0,resize:!1,vsplitter:null,vsplitterOffset:0,selfOffsetTop:0}},template:'\n
    \n
    \n \n

    Top Panel

    \n
    \n
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n \n

    \n \n

    \n
    \n ',mounted:function(){this.calcHeights(),this.trackVerticalSplitterOffsetTop(),window.addEventListener("resize",this.calcHeights)},updated:function(){this.trackVerticalSplitterOffsetTop()},methods:{calcHeights:function(){var t=window.innerHeight,e=this.availHeight;this.selfOffsetTop=this.$refs.verticalsplit.offsetTop,this.availHeight=t-this.selfOffsetTop-this.$refs.vsplitter.offsetHeight,0===this.topheight&&0===this.bottomheight||0===e?this.topheight=Math.floor(this.availHeight/2):this.topheight=Math.floor(100*this.topheight/e/100*this.availHeight),this.bottomheight=this.availHeight-this.topheight},collapseTop:function(){this.calcHeights(),this.topheight=0,this.bottomheight=this.availHeight},collapseBottom:function(){this.calcHeights(),this.topheight=this.availHeight,this.bottomheight=0},showBoth:function(){this.topheight=Math.floor(this.availHeight/2),this.bottomheight=Math.floor(this.availHeight/2)},isCollapsed:function(){return 0===this.topheight?"top":0===this.bottomheight&&"bottom"},dragStart:function(t){t.preventDefault(),t.stopPropagation(),window.addEventListener("mouseup",this.dragEnd),window.addEventListener("mousemove",this.drag),this.resize=!0,this.mousePosY=t.clientY},drag:function(t){if(this.resize){t.preventDefault(),t.stopPropagation();var e=t.clientY-this.mousePosY;this.topheight=this.topheight+e,this.topheight<0&&(this.topheight=0),this.topheight>this.availHeight&&(this.topheight=this.availHeight),this.bottomheight=this.availHeight-this.topheight,this.mousePosY=t.clientY}},dragEnd:function(t){t.preventDefault(),t.stopPropagation(),window.removeEventListener("mousemove",this.drag),window.removeEventListener("mouseup",this.dragEnd),this.resize=!1,this.mousePosY=t.clientY},trackVerticalSplitterOffsetTop:function(){this.vsplitterOffset=this.$refs.vsplitter.offsetTop}},computed:{topOrBottomClass:function(){return this.vsplitterOffset-this.selfOffsetTop<=Math.floor(this.availHeight/2)?"top":"bottom"},topheightcss:function(){return this.topheight+"px"},bottomheightcss:function(){return this.bottomheight+"px"}}};const en={name:"AbgabetoolStudent",components:{CoreFilterCmpt:pe,AbgabeDetail:Qe,VerticalSplit:tn},props:{student_uid_prop:{default:null},viewData:{type:Object,required:!0,default:()=>({uid:""}),validator:t=>t&&t.uid}},data(){return{tabulatorUuid:Vue.ref(0),domain:"",student_uid:null,detail:null,projektarbeiten:null,selectedProjektarbeit:null,tableBuiltResolve:null,tableBuiltPromise:null,abgabeTableOptions:{minHeight:250,index:"projektarbeit_id",layout:"fitColumns",placeholder:this.$p.t("global/noDataAvailable"),columns:[{title:Vue.computed(()=>this.$p.t("abgabetool/c4details")),field:"details",formatter:this.detailFormatter,widthGrow:1,tooltip:!1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4beurteilung")),field:"beurteilung",formatter:this.beurteilungFormatter,widthGrow:1,tooltip:!1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4sem")),field:"sem",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4stg")),field:"stg",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4kontakt")),field:"mail",formatter:this.mailFormatter,widthGrow:1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4betreuer")),field:"betreuer",formatter:this.centeredTextFormatter,widthGrow:2},{title:Vue.computed(()=>this.$p.t("abgabetool/c4projekttyp")),field:"typ",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4titel")),field:"titel",formatter:this.centeredTextFormatter,widthGrow:8}],persistence:!1},abgabeTableEventHandlers:[{event:"tableBuilt",handler:async()=>{this.tableBuiltResolve()}},{event:"cellClick",handler:async(t,e)=>{if("details"===e.getColumn().getField()){const t=e.getValue();if("detailTermine"===t.mode)this.setDetailComponent(e.getValue());else if("beurteilungDownload"===t.mode){const e=FHC_JS_DATA_STORAGE_OBJECT.app_root+"cis/private/pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz="+t.betreuerart_kurzbz+"&projektarbeit_id="+t.projektarbeit_id+"&person_id="+t.betreuer_person_id;window.open(e,"_blank")}}else if("beurteilung"===e.getColumn().getField()){const t=e.getValue();"-"!=t&&window.open(t,"_blank")}t.stopPropagation()}}]}},methods:{isPastDate:t=>new Date(t){const n=this.projektarbeiten?.retval?.find(e=>e.projektarbeit_id==t.projektarbeit_id);n.abgabetermine=e.data[0].retval,n.abgabetermine.forEach(t=>{t.file=[],t.allowedToUpload=!0,"Endupload"==t.bezeichnung&&this.isPastDate(t.datum)}),n.betreuer=this.buildBetreuer(n),n.student_uid=this.student_uid,this.selectedProjektarbeit=n,this.$refs.verticalsplit.showBoth()})},centeredTextFormatter:t=>'

    '+t.getValue()+"

    ",detailFormatter(t){const e=t.getValue();return"detailTermine"===e.mode?'
    ':"beurteilungDownload"===e.mode?'
    ':void 0},mailFormatter:t=>'
    ',beurteilungFormatter:t=>t.getValue()?'
    ':"-",tableResolve(t){this.tableBuiltResolve=t},buildMailToLink(t){return"mailto:"+t.mitarbeiter_uid+"@"+this.domain},buildBetreuer:t=>t.betreuerart_beschreibung+": "+(t.btitelpre?t.btitelpre+" ":"")+t.bvorname+" "+t.bnachname+(t.btitelpost?" "+t.btitelpost:""),setupData(t){this.projektarbeiten=t[0],this.domain=t[1],this.student_uid=t[2];const e=t[0]?.retval?.map(t=>((t.babgeschickt||t.zweitbetreuer_abgeschickt)&&(t.beurteilungLink=FHC_JS_DATA_STORAGE_OBJECT.app_root+"cis/private/pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz="+t.betreuerart_kurzbz+"&projektarbeit_id="+t.projektarbeit_id+"&person_id="+t.bperson_id),{details:{student_uid:this.student_uid,projektarbeit_id:t.projektarbeit_id,betreuer_person_id:t.bperson_id,betreuerart_kurzbz:t.betreuerart_kurzbz,mode:"detailTermine"},beurteilung:t.beurteilungLink??null,sem:t.studiensemester_kurzbz,stg:t.kurzbzlang,mail:this.buildMailToLink(t),betreuer:this.buildBetreuer(t),typ:t.projekttypbezeichnung,titel:t.titel}));this.$refs.abgabeTable.tabulator.setColumns(this.abgabeTableOptions.columns),this.$refs.abgabeTable.tabulator.setData(e)},loadProjektarbeiten(){this.$fhcApi.factory.lehre.getStudentProjektarbeiten(this.student_uid_prop||this.viewData?.uid||null).then(t=>{t?.data&&this.setupData(t.data)})},loadAbgaben(t){return new Promise(e=>{this.$fhcApi.factory.lehre.getStudentProjektabgaben(t).then(t=>{e(t)})})},handleUuidDefined(t){this.tabulatorUuid=t},calcMaxTableHeight(){const t=this.tabulatorUuid?"-"+this.tabulatorUuid:"",e=document.getElementById("filterTableDataset"+t);if(!e)return;const n=e.getBoundingClientRect();this.abgabeTableOptions.height=window.visualViewport.height-n.top,this.$refs.abgabeTable.tabulator.setHeight(this.abgabeTableOptions.height)},async setupMounted(){this.tableBuiltPromise=new Promise(this.tableResolve),await this.tableBuiltPromise,this.loadProjektarbeiten(),this.$refs.verticalsplit.collapseBottom()}},watch:{},computed:{isViewMode(){return this.student_uid!==this.viewData.uid}},created(){},mounted(){this.setupMounted()},template:'\n\t\t\t\t\t\n\t\t\n\t\t\n\t\n '},nn=new Date,an={name:"AbgabeMitarbeiterDetail",components:{BsModal:s,InputNumber:primevue.inputnumber,Checkbox:primevue.checkbox,Dropdown:primevue.dropdown,Textarea:primevue.textarea,VueDatePicker:a},props:{projektarbeit:{type:Object,default:null}},data:()=>({oldPaBeurteilungLink:"https://moodle.technikum-wien.at/mod/page/view.php?id=1005052",eidAkzeptiert:!1,enduploadTermin:null,allActiveLanguages:FHC_JS_DATA_STORAGE_OBJECT.server_languages,allAbgabeTypes:[{paabgabetyp_kurzbz:"abstract",bezeichnung:"Entwurf"},{paabgabetyp_kurzbz:"zwischen",bezeichnung:"Zwischenabgabe"},{paabgabetyp_kurzbz:"note",bezeichnung:"Benotung"},{paabgabetyp_kurzbz:"end",bezeichnung:"Endupload"},{paabgabetyp_kurzbz:"enda",bezeichnung:"Endabgabe im Sekretariat"}]}),methods:{openZusatzdatenModal(t){},saveTermin(t){const e=t.paabgabe_id;this.$fhcApi.factory.lehre.postProjektarbeitAbgabe(t).then(n=>{"success"==n?.meta?.status?(this.$fhcAlert.alertSuccess(this.$p.t("ui/gespeichert")),-1===e&&(t.paabgabe_id=n?.data?.retval,this.projektarbeit.abgabetermine.push({paabgabe_id:-1,projektarbeit_id:this.projektarbeit.projektarbeit_id,fixtermin:!1,kurzbz:"",datum:(new Date).toISOString().split("T")[0],paabgabetyp_kurzbz:"",bezeichnung:"",abgabedatum:null,insertvon:this.viewData?.uid??"",allowedToSave:!0,allowedToDelete:!0}))):"error"==n?.meta?.status&&this.$fhcAlert.alertError()})},deleteTermin(t){this.$fhcApi.factory.lehre.deleteProjektarbeitAbgabe(t.paabgabe_id).then(e=>{if("success"==e?.meta?.status){this.$fhcAlert.alertSuccess(this.$p.t("ui/genericDeleted",[this.$p.t("abgabetool/abgabe")]));const e=this.projektarbeit.abgabetermine.findIndex(e=>e.paabgabe_id===t.paabgabe_id);this.projektarbeit.abgabetermine.splice(e,1)}else"error"==e?.meta?.status&&this.$fhcAlert.alertError()})},validate:function(t){return!!t.file.length||(this.$fhcAlert.alertWarning(this.$p.t("global/warningChooseFile")),!1)},downloadAbgabe(t){this.$fhcApi.factory.lehre.getStudentProjektarbeitAbgabeFile(t.paabgabe_id,this.projektarbeit.student_uid)},dateDiffInDays:(t,e)=>Math.round((new Date(t)-new Date(e))/864e5),getDateStyle(t){const e=new Date(t.datum),n=new Date(t.abgabedatum);let i="white",a="black";return null===t.abgabedatum?enn&&this.dateDiffInDays(e,nn)<=12&&(i="yellow"):n>e?(i="pink",a="white"):i="green",`font-color: ${a} ; background-color: ${i}; border-radius: 50%;`},openBeurteilungLink(t){window.open(t,"_blank")},getOptionLabelSprache:t=>t.sprache,getOptionLabelAbgabetyp:t=>t.bezeichnung,formatDate(t){const e=new Date(t),n=t=>String(t).padStart(2,"0"),i=n(e.getMonth()+1);return`${n(e.getDate())}.${i}.${e.getFullYear()}`},openStudentPage(){const t=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/Cis/Abgabetool/Student/"+this.projektarbeit?.student_uid;window.open(t,"_blank")},openPlagiatcheck(){window.open("https://technikum-wien.turnitin.com/sso/sp/redwood/saml/5IyfmBr2OcSIaWQTKlFCGj/start","_blank")},openBenotung(){const t="Zweitbegutachter"==this.projektarbeit?.betreuerart_kurzbz?"ProjektarbeitsbeurteilungZweitbegutachter":"ProjektarbeitsbeurteilungErstbegutachter",e=FHC_JS_DATA_STORAGE_OBJECT.app_root+"index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/"+t;window.open(e,"_blank")}},computed:{getEid(){return this.$p.t("abgabetool/c4eidesstattlicheErklaerung")},getEnduploadErlaubt(){return!this.eidAkzeptiert},getSemesterBenotbar(){return this.projektarbeit?.isCurrent??!1},endUploadVorhanden(){return this.projektarbeit?.abgabetermine.find(t=>"end"===t.paabgabetyp_kurzbz&&null!==t.abgabedatum)}},created(){},mounted(){},template:'\n\t\t
    \n\t\t\n\n\t\t\t
    {{$p.t(\'abgabetool/c4abgabeMitarbeiterbereich\')}}
    \n\n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t

    {{projektarbeit?.student}}

    \n\t\t\t\t\t

    {{projektarbeit?.titel}}

    \n\t\t\t\t\t

    {{projektarbeit?.zweitbegutachter}}

    \n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tKein Endupload vorhanden!\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    {{$p.t(\'abgabetool/c4fixtermin\')}}
    \n\t\t\t\t\t
    {{$p.t(\'abgabetool/c4zieldatum\')}}
    \n\t\t\t\t\t
    {{$p.t(\'abgabetool/c4abgabetyp\')}}
    \n\t\t\t\t\t
    {{$p.t(\'abgabetool/c4abgabekurzbz\')}}
    \n\t\t\t\t\t
    {{$p.t(\'abgabetool/c4abgabedatum\')}}
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t
    keine Termine gefunden!
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t

    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t{{ termin.abgabedatum?.split("-").reverse().join(".") }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\n'},sn={name:"AbgabetoolMitarbeiter",components:{BsModal:s,CoreFilterCmpt:pe,AbgabeDetail:an,VerticalSplit:tn,Dropdown:primevue.dropdown,Textarea:primevue.textarea,VueDatePicker:a},props:{viewData:{type:Object,required:!0,default:()=>({name:"",uid:""}),validator:t=>t&&t.name&&t.uid}},data(){return{saving:!1,loading:!1,allAbgabeTypes:[{paabgabetyp_kurzbz:"abstract",bezeichnung:"Entwurf"},{paabgabetyp_kurzbz:"zwischen",bezeichnung:"Zwischenabgabe"},{paabgabetyp_kurzbz:"note",bezeichnung:"Benotung"},{paabgabetyp_kurzbz:"end",bezeichnung:"Endupload"},{paabgabetyp_kurzbz:"enda",bezeichnung:"Endabgabe im Sekretariat"}],serienTermin:Vue.reactive({datum:new Date,bezeichnung:{paabgabetyp_kurzbz:"zwischen",bezeichnung:"Zwischenabgabe"},kurzbz:""}),showAll:!1,tabulatorUuid:Vue.ref(0),selectedData:[],domain:"",student_uid:null,detail:null,detailOffset:0,projektarbeiten:null,selectedProjektarbeit:null,tableBuiltResolve:null,tableBuiltPromise:null,abgabeTableOptions:{height:700,index:"projektarbeit_id",layout:"fitDataStretch",placeholder:this.$p.t("global/noDataAvailable"),selectable:!0,selectableCheck:this.selectionCheck,columns:[{formatter:"rowSelection",titleFormatter:"rowSelection",titleFormatterParams:{rowRange:"active"},hozAlign:"center",headerSort:!1,frozen:!0,width:70},{title:Vue.computed(()=>this.$p.t("abgabetool/c4details")),field:"details",formatter:this.detailFormatter,widthGrow:1,tooltip:!1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4personenkennzeichen")),field:"pkz",formatter:this.pkzTextFormatter,widthGrow:1,tooltip:!1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4kontakt")),field:"mail",formatter:this.mailFormatter,widthGrow:1,tooltip:!1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4vorname")),field:"vorname",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4nachname")),field:"nachname",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4projekttyp")),field:"projekttyp_kurzbz",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4stg")),field:"stg",formatter:this.centeredTextFormatter,widthGrow:2},{title:Vue.computed(()=>this.$p.t("abgabetool/c4sem")),field:"studiensemester_kurzbz",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4titel")),field:"titel",formatter:this.centeredTextFormatter,maxWidth:500,widthGrow:8},{title:Vue.computed(()=>this.$p.t("abgabetool/c4betreuerart")),field:"betreuerart_beschreibung",formatter:this.centeredTextFormatter,widthGrow:8}],persistence:!1},abgabeTableEventHandlers:[{event:"tableBuilt",handler:async()=>{this.tableBuiltResolve()}},{event:"cellClick",handler:async(t,e)=>{"details"===e.getColumn().getField()?(this.setDetailComponent(e.getValue()),this.undoSelection(e)):"mail"===e.getColumn().getField()&&this.undoSelection(e)}},{event:"rowSelectionChanged",handler:async t=>{this.selectedData=t}}]}},methods:{getOptionLabelAbgabetyp:t=>t.bezeichnung,formatDate(t){const e=new Date(t),n=t=>String(t).padStart(2,"0"),i=n(e.getMonth()+1);return`${n(e.getDate())}.${i}.${e.getFullYear()}`},undoSelection(t){const e=t.getRow();e.isSelected()&&e.deselect()},selectionCheck(t){const e=t.getData();return"Zweitbegutachter"!=e?.betreuerart_kurzbz},showDeadlines(){const t=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/Cis/Abgabetool/Deadlines";window.open(t,"_blank")},toggleShowAll(t){this.showAll=t,this.loading=!0,this.loadProjektarbeiten(t,()=>{this.$refs.abgabeTable?.tabulator.redraw(!0),this.$refs.abgabeTable?.tabulator.setSort([]),this.loading=!1})},openAddSeriesModal(){this.$refs.modalContainerAddSeries.show()},addSeries(){this.saving=!0,this.$fhcApi.factory.lehre.postSerientermin(this.serienTermin.datum.toISOString(),this.serienTermin.bezeichnung.paabgabetyp_kurzbz,this.serienTermin.bezeichnung.bezeichnung,this.serienTermin.kurzbz,this.selectedData?.map(t=>t.projektarbeit_id)).then(t=>{"success"===t.meta.status&&t.data?(this.$fhcAlert.alertSuccess(this.$p.t("abgabetool/serienTerminGespeichert")),this.$fhcAlert.alertInfo(this.$p.t("abgabetool/serienTerminEmailSentInfo",[this.createInfoString(t.data)]))):this.$fhcAlert.alertError(this.$p.t("abgabetool/errorSerienterminSpeichern"))}).finally(()=>{this.saving=!1}),this.$refs.modalContainerAddSeries.hide()},createInfoString(t){let e="";return t.forEach(t=>{e+=t,e+="; "}),e},isPastDate:t=>new Date(t){const n=this.projektarbeiten?.retval?.find(e=>e.projektarbeit_id==t.projektarbeit_id);n.abgabetermine=e.data[0].retval,n.isCurrent=e.data[1],n.abgabetermine.push({paabgabe_id:-1,projektarbeit_id:n.projektarbeit_id,fixtermin:!1,kurzbz:"",datum:(new Date).toISOString().split("T")[0],paabgabetyp_kurzbz:"",bezeichnung:"",abgabedatum:null,insertvon:this.viewData?.uid??""}),n.abgabetermine.forEach(t=>{t.file=[],t.allowedToSave=t.insertvon==this.viewData?.uid&&"Zweitbegutachter"!=n.betreuerart_kurzbz,t.allowedToDelete=t.allowedToSave&&!t.abgabedatum,t.bezeichnung={bezeichnung:t.bezeichnung,paabgabetyp_kurzbz:t.paabgabetyp_kurzbz}}),n.betreuer=this.buildBetreuer(n),n.student_uid=t.student_uid,n.student=`${n.vorname} ${n.nachname}`,this.selectedProjektarbeit=n,this.$refs.verticalsplit.showBoth()})},centeredTextFormatter(t){const e=t.getValue();if(e)return'

    '+e+"

    "},detailFormatter:t=>'
    ',mailFormatter:t=>'
    ',beurteilungFormatter:t=>t.getValue()?'
    ':"-",pkzTextFormatter:t=>'

    '+t.getValue()+"

    ",tableResolve(t){this.tableBuiltResolve=t},buildMailToLink(t){return"mailto:"+t.uid+"@"+this.domain},buildPKZ:t=>`${t.uid} / ${t.matrikelnr}`,buildStg:t=>(t.typ+t.kurzbz)?.toUpperCase(),buildBetreuer:t=>t.betreuerart_beschreibung+": "+(t.btitelpre?t.btitelpre+" ":"")+t.bvorname+" "+t.bnachname+(t.btitelpost?" "+t.btitelpost:""),setupData(t){this.projektarbeiten=t[0],this.domain=t[1];const e=t[0]?.retval?.map(t=>({...t,details:{student_uid:t.uid,projektarbeit_id:t.projektarbeit_id},pkz:this.buildPKZ(t),beurteilung:t.beurteilungLink??null,sem:t.studiensemester_kurzbz,stg:this.buildStg(t),mail:this.buildMailToLink(t),typ:t.projekttyp_kurzbz,titel:t.titel}));this.$refs.abgabeTable.tabulator.setColumns(this.abgabeTableOptions.columns),this.$refs.abgabeTable.tabulator.setData(e)},loadProjektarbeiten(t=!1,e){this.$fhcApi.factory.lehre.getMitarbeiterProjektarbeiten(this.viewData?.uid??null,t).then(t=>{t?.data&&this.setupData(t.data)}).finally(()=>{e&&e()})},loadAbgaben(t){return new Promise(e=>{this.$fhcApi.factory.lehre.getStudentProjektabgaben(t).then(t=>{e(t)})})},handleUuidDefined(t){this.tabulatorUuid=t},calcMaxTableHeight(){const t=this.tabulatorUuid?"-"+this.tabulatorUuid:"",e=document.getElementById("filterTableDataset"+t);if(!e)return;const n=e.getBoundingClientRect();this.abgabeTableOptions.height=window.visualViewport.height-n.top,this.$refs.abgabeTable.tabulator.setHeight(this.abgabeTableOptions.height)},async setupMounted(){this.tableBuiltPromise=new Promise(this.tableResolve),await this.tableBuiltPromise,this.loadProjektarbeiten(),this.$refs.verticalsplit.collapseBottom(),this.calcMaxTableHeight()}},watch:{},computed:{},created(){},mounted(){this.setupMounted()},template:'\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\n\t \n '},rn={name:"DeadlineOverview",components:{CoreFilterCmpt:pe},props:{person_uid_prop:{default:null},viewData:{type:Object,required:!0,default:()=>({name:"",uid:""}),validator:t=>t&&t.name&&t.uid}},data(){return{fullName:null,deadlines:null,tabulatorUuid:Vue.ref(0),tableBuiltResolve:null,tableBuiltPromise:null,deadlineTableOptions:{height:700,index:"projektarbeit_id",layout:"fitColumns",placeholder:this.$p.t("global/noDataAvailable"),columns:[{title:Vue.computed(()=>this.$p.t("abgabetool/c4zieldatum")),field:"datum",formatter:this.centeredTextFormatter,widthGrow:1,tooltip:!1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4fixtermin")),field:"fixterminstring",formatter:this.centeredTextFormatter,widthGrow:1,tooltip:!1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4abgabetyp")),field:"typ_bezeichnung",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4abgabekurzbz")),field:"kurzbz",formatter:this.centeredTextFormatter,widthGrow:3},{title:Vue.computed(()=>this.$p.t("person/studentIn")),field:"student",formatter:this.centeredTextFormatter,widthGrow:2},{title:Vue.computed(()=>this.$p.t("abgabetool/c4stg")),field:"stg",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$p.t("abgabetool/c4sem")),field:"semester",formatter:this.centeredTextFormatter,widthGrow:1}],persistence:!1},deadlineTableEventHandlers:[{event:"tableBuilt",handler:async()=>{this.tableBuiltResolve()}},{event:"cellClick",handler:async(t,e)=>{if("details"===e.getColumn().getField()){const t=e.getValue();if("detailTermine"===t.mode)this.setDetailComponent(e.getValue());else if("beurteilungDownload"===t.mode){const e=FHC_JS_DATA_STORAGE_OBJECT.app_root+"cis/private/pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz="+t.betreuerart_kurzbz+"&projektarbeit_id="+t.projektarbeit_id+"&person_id="+t.betreuer_person_id;window.open(e,"_blank")}}else if("beurteilung"===e.getColumn().getField()){const t=e.getValue();"-"!=t&&window.open(t,"_blank")}t.stopPropagation()}}]}},methods:{centeredTextFormatter:t=>'

    '+t.getValue()+"

    ",tableResolve(t){this.tableBuiltResolve=t},loadDeadlines(){this.$fhcApi.factory.lehre.fetchDeadlines(this.person_uid_prop??null).then(t=>{t?.data&&this.setupData(t.data)})},setupData(t){this.deadlines=t,this.deadlines.forEach(t=>{t.student=(t.stud_titelpre?t.stud_titelpre+" ":"")+t.stud_vorname+" "+t.stud_nachname+(t.stud_titelpost?" "+t.stud_titelpost:""),t.fixterminstring=t.fixtermin?this.$p.t("abgabetool/c4yes"):this.$p.t("abgabetool/c4no")}),this.$refs.deadlineTable.tabulator.setColumns(this.deadlineTableOptions.columns),this.$refs.deadlineTable.tabulator.setData(this.deadlines)},handleUuidDefined(t){this.tabulatorUuid=t},calcMaxTableHeight(){const t=this.tabulatorUuid?"-"+this.tabulatorUuid:"",e=document.getElementById("filterTableDataset"+t);if(!e)return;const n=e.getBoundingClientRect();this.deadlineTableOptions.height=window.visualViewport.height-n.top,this.$refs.deadlineTable.tabulator.setHeight(this.deadlineTableOptions.height)},async setupMounted(){this.tableBuiltPromise=new Promise(this.tableResolve),await this.tableBuiltPromise,this.loadDeadlines(),this.calcMaxTableHeight()}},watch:{},computed:{},created(){},mounted(){this.setupMounted()},template:'\n\t\t

    {{$p.t(\'abgabetool/deadlinesTitle\')}} {{ fullName ? (\'-\' + fullName) : \'\'}}

    \n\t\t
    \n\t\t\t\n\t\t \n '};var on={data:()=>({studienSemester:[],selectedStudiensemester:null,studiengaenge:[],selectedStudiengang:null,studienOrdnung:[],selectedStudienordnung:null,semester:[],selectedSemester:null,lehrveranstaltungen:[],selectedLehrveranstaltung:null,menu:null}),provide(){return{studium_studiengang:Vue.computed(()=>this.selectedStudiengang),studium_studiensemester:Vue.computed(()=>this.selectedStudiensemester),studium_semester:Vue.computed(()=>this.selectedSemester),studium_studienordnung:Vue.computed(()=>this.selectedStudienordnung)}},components:{LvUebersicht:Xt},watch:{selectedStudiensemester:function(t,e){if(t&&t!=e){const e=this.getDataFromLocalStorage("sudiensemester");t&&(!e||e&&e!=t)&&this.storeDataToLocalStorage("sudiensemester",t)}},selectedSemester:function(t,e){if(t&&t!=e){const e=this.getDataFromLocalStorage("semester");(!e||e&&e!=t)&&this.storeDataToLocalStorage("semester",t)}},selectedStudiengang:function(t,e){if(t&&t!=e){const e=this.getDataFromLocalStorage("studiengang");(!e||e&&e!=t)&&this.storeDataToLocalStorage("studiengang",JSON.stringify(t))}},selectedStudienordnung:function(t,e){if(t&&t!=e){const e=this.getDataFromLocalStorage("studienordnung");(!e||e&&e!=t)&&this.storeDataToLocalStorage("studienordnung",JSON.stringify(t))}}},methods:{changeStudiensemester(t){let e=this.$refs.studiensemester;e.selectedIndex=(e.selectedIndex+t+e.options.length)%e.options.length,this.changeSelectedStudienSemester(e.value)},changeStudiengang(t){let e=this.$refs.studiengaenge;e.selectedIndex=(e.selectedIndex+t+e.options.length)%e.options.length,this.changeSelectedStudienGang(e.value)},changeSemester(t){let e=this.$refs.semester;e.selectedIndex=(e.selectedIndex+t+e.options.length)%e.options.length,this.changeSelectedSemester(e.value)},changeStudienordnung(t){let e=this.$refs.studienordnung,n=(e.selectedIndex+t+e.options.length)%e.options.length;e.options[n].disabled&&(n=(n+t+e.options.length)%e.options.length),e.selectedIndex=n,this.changeSelectedStudienPlan(e.value)},storeDataToLocalStorage(t,e){localStorage.setItem(t,e)},getDataFromLocalStorage:t=>localStorage.getItem(t),changeSelectedStudienSemester(t){this.$fhcApi.factory.studium.getAllStudienSemester(t,this.selectedStudiengang,this.selectedSemester,this.selectedStudienordnung).then(t=>t.data).then(t=>{this.extractPropertyValues(t)})},changeSelectedStudienGang(t){this.$fhcApi.factory.studium.getAllStudienSemester(this.selectedStudiensemester,t,this.selectedSemester,this.selectedStudienordnung).then(t=>t.data).then(t=>{this.extractPropertyValues(t)})},changeSelectedSemester(t){this.$fhcApi.factory.studium.getAllStudienSemester(this.selectedStudiensemester,this.selectedStudiengang,t,this.selectedStudienordnung).then(t=>t.data).then(t=>{this.extractPropertyValues(t)})},changeSelectedStudienPlan(t){this.$fhcApi.factory.studium.getAllStudienSemester(this.selectedStudiensemester,this.selectedStudiengang,this.selectedSemester,t).then(t=>t.data).then(t=>{this.extractPropertyValues(t)})},openLvUebersicht(t){this.selectedLehrveranstaltung=t,this.selectedLehrveranstaltung.type="lehreinheit",this.selectedLehrveranstaltung.lehreinheit_id=this.selectedLehrveranstaltung.lehrveranstaltung_id,this.selectedLehrveranstaltung&&Vue.nextTick(()=>{this.$refs.lvUebersicht.show()})},sortStudienSemester(t){let e=new RegExp(/^(WS|SS)([0-9]{4})/);t.sort((t,n)=>{let[i,a,s]=t.studiensemester_kurzbz.match(e),[r,o,l]=n.studiensemester_kurzbz.match(e);return s==l?a>o?-1:1:s>l?-1:1})},setHash(t){location.hash=t},extractPropertyValues(t){let{studienSemester:e,studiengang:n,semester:i,studienplan:a,lehrveranstaltungen:s}=t;this.sortStudienSemester(e.all),this.studienSemester=e.all,this.selectedStudiensemester=e.preselected.studiensemester_kurzbz,this.studiengaenge=n.all,this.selectedStudiengang=n.preselected?.studiengang_kz,this.semester=i.all,this.selectedSemester=i?.preselected,this.studienOrdnung=a.all,this.selectedStudienordnung=a.preselected?.studienplan_id,this.lehrveranstaltungen=s,this.lehrveranstaltungen.sort((t,e)=>t.bezeichnung.toLowerCase()>e.bezeichnung.toLowerCase()?1:t.bezeichnung.toLowerCase(){t.lehrveranstaltungen.sort((t,e)=>t.bezeichnung.toLowerCase()>e.bezeichnung.toLowerCase()?1:t.bezeichnung.toLowerCase()t?`${t?.bezeichnung}-${t?.orgform_kurzbz} ( ${t?.orgform_bezeichnung}, ${t?.sprache} )`:"",studiengangTitel:t=>t?`${t?.kurzbzlang} (${t?.bezeichnung})`:"",studiensemesterTitel(t){if(!t)return"";let e=new RegExp(/^(WS|SS)([0-9]{4})/),n=t.match(e);switch(n[1]){case"WS":return`Wintersemester ${n[2]}`;case"SS":return`Sommersemester ${n[2]}`;default:return`${t}`}}},computed:{selectedLehrveranstaltungTitel(){const t=this.studiengaenge.find(t=>t.studiengang_kz==this.selectedStudiengang);return`${this.selectedLehrveranstaltung?.bezeichnung} ${this.selectedLehrveranstaltung?.lehrform_kurzbz} / ${t.kurzbzlang}-${this.selectedSemester} ${this.selectedLehrveranstaltung?.orgform_kurzbz} (${this.selectedStudiensemester})`},computedStudienOrdnung(){return this.studienOrdnung?Object.values(this.studienOrdnung).reduce((t,e)=>(t[e.bezeichnung]||(t[e.bezeichnung]=[]),t[e.bezeichnung].push(e),t),{}):null},computedStudienOrdnungSelectValues(){if(!this.computedStudienOrdnung)return null;let t=[];return Object.entries(this.computedStudienOrdnung).forEach(([e,n])=>{t.push({bezeichnung:`Studienordnung: ${e}`,disabled:!0}),n.forEach(e=>{t.push({studienplan:e,diabled:!1,bezeichnung:`${e?.bezeichnung}-${e?.orgform_kurzbz} ( ${e?.orgform_bezeichnung}, ${e?.sprache} )`})})}),t}},created(){const t=this.getDataFromLocalStorage("sudiensemester")??void 0,e=JSON.parse(this.getDataFromLocalStorage("studiengang"))??void 0,n=this.getDataFromLocalStorage("semester")??void 0,i=JSON.parse(this.getDataFromLocalStorage("studienordnung"))??void 0;this.$fhcApi.factory.studium.getAllStudienSemester(t,e,n,i).then(t=>t.data).then(t=>{this.extractPropertyValues(t)})},template:'\n\t
    \n\t

    Studium

    \n\t
    \n\t\n\t\t\n\t\n\t
    \n\t\t
    \n\t\t
    Studiensemester:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\n\t\t
    \n\t\t
    Studiengang:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\n\t\t
    \n\t\t
    Semester:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\n\t\t
    \n\t\t
    Studienordnung:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t
    \n\n\t
    \n\n\t
    \n\t\n\t
    \n\n\n\t
    \n\t\n\t'},ln={loadRenderers:()=>({method:"get",url:"/api/frontend/v1/RendererLoader/GetRenderers",params:{}})},dn={info:(t,e)=>({method:"post",url:"/api/frontend/v1/RouteInfo/info",params:{app:t,path:e}})};const cn=FHC_JS_DATA_STORAGE_OBJECT.app_root.replace(/(https:|)(^|\/\/)(.*?\/)/g,"")+FHC_JS_DATA_STORAGE_OBJECT.ci_router,un=VueRouter.createRouter({history:VueRouter.createWebHistory(`/${cn}`),routes:[{path:"/Cis/Studium",name:"Studium",component:on,props:!0},{path:"/Cis/Profil/View/:uid",name:"ProfilView",component:ze,props:!0},{path:"/Cis/Profil",name:"Profil",component:ze,props:!0},{path:"/Cis/Abgabetool/Student/:student_uid_prop?",name:"AbgabetoolStudent",component:en,props:!0},{path:"/Cis/Abgabetool/Mitarbeiter",name:"AbgabetoolMitarbeiter",component:sn,props:!0},{path:"/Cis/Abgabetool/Deadlines/:person_uid_prop?",name:"DeadlineOverview",component:rn,props:!0},{path:"/Cis/Raumsuche",name:"Raumsuche",component:Le,props:!0},{path:"/CisVue/Cms/getRoomInformation/:ort_kurzbz",name:"RoomInformationOld",component:Ye,redirect:t=>({name:"RoomInformation",params:{ort_kurzbz:t.params.ort_kurzbz,mode:Ze,focus_date:(new Date).toISOString().split("T")[0]}})},{path:"/CisVue/Cms/getRoomInformation/:mode/:focus_date/:ort_kurzbz",name:"RoomInformation",component:Ye,props:t=>{const e=t.params.mode&&["Month","Week","Day"].includes(t.params.mode.charAt(0).toUpperCase()+t.params.mode.slice(1).toLowerCase())?t.params.mode.charAt(0).toUpperCase()+t.params.mode.slice(1).toLowerCase():Ze,n=new Date(t.params.focus_date);return{propsViewData:{mode:e,focus_date:isNaN(n)?(new Date).toISOString().split("T")[0]:t.params.focus_date,ort_kurzbz:t.params.ort_kurzbz}}},beforeEnter:(t,e,n)=>{t.params.mode&&t.params.focus_date?n():n({name:"RoomInformation",params:{mode:t.params.mode||Ze,focus_date:t.params.focus_date||(new Date).toISOString().split("T")[0],ort_kurzbz:route.params.ort_kurzbz}})}},{path:"/CisVue/Cms/Content/:content_id",name:"Content",component:Ke,props:!0},{path:"/CisVue/Cms/News",name:"News",component:He,props:!0},{path:"/Cis/MyLv/:studiensemester?",name:"MyLv",component:te,props:!0},{path:"/Cis/MyLv/Info/:studien_semester/:lehrveranstaltung_id",name:"LvInfo",component:jt,props:!0},{path:"/Cis/LvPlan/:lv_id(\\d+)",name:"LvPlanOld",component:Mt,redirect(t){const e=Vue.unref(un.currentRoute),{mode:n,focus_date:i}=e.params;return{name:"LvPlan",params:{mode:n,focus_date:i,lv_id:t.params.lv_id}}}},{path:"/Cis/LvPlan/:mode?/:focus_date?/:lv_id?",name:"LvPlan",component:Mt,props:t=>({propsViewData:t.params})},{path:"/Cis/MyLvPlan/:mode?/:focus_date?",name:"MyLvPlan",component:Rt,props:t=>({propsViewData:t.params})},{path:"/Cis4",name:"Cis4",component:_,props:{dashboard:"CIS"}},{path:"/",name:"FhcDashboard",component:_,props:{dashboard:"CIS"}},{path:"/:pathMatch(.*)*",name:"Fallback",component:_,props:{dashboard:"CIS"},redirect:()=>({name:"Cis4",params:{dashboard:"CIS"}})}]}),pn=Vue.createApp({name:"FhcApp",data:()=>({appSideMenuEntries:{},renderers:null}),components:{},computed:{isMobile:()=>/Mobi|Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)},provide(){return{language:Vue.computed(()=>this.$p.user_language),renderers:Vue.computed(()=>this.renderers)}},methods:{isInternalRoute(t){const e=window.location.origin;return t.startsWith(e)},handleClick(t){const e=t.target.closest("a");if("skiplink"!=e?.id&&e&&this.isInternalRoute(e.href)){const n=new URL(e.href).pathname,i=this.$router.options.history.base,a=n.replace(i,"")||"/",s=this.$router.resolve(a);if(!s?.matched?.length||"Fallback"===s.name)return;if(t.preventDefault(),this.isMobile){document.getElementById("nav-main").classList.contains("show")&&document.getElementById("nav-main-btn").click()}this.$router.push(a)}}},async created(){await this.$api.call(ln.loadRenderers()).then(t=>t.data).then(t=>{for(let i of Object.keys(t)){let a=null,s=null,r=null;if(t[i].modalTitle&&(a=Vue.markRaw(Vue.defineAsyncComponent(()=>import(t[i].modalTitle)))),t[i].modalContent&&(s=Vue.markRaw(Vue.defineAsyncComponent(()=>import(t[i].modalContent)))),t[i].calendarEvent&&(r=Vue.markRaw(Vue.defineAsyncComponent(()=>import(t[i].calendarEvent)))),t[i].calendarEventStyles){var e=document.head;if(!e.querySelector(`link[href="${t[i].calendarEventStyles}"]`)){var n=document.createElement("link");n.type="text/css",n.rel="stylesheet",n.href=t[i].calendarEventStyles,e.appendChild(n)}}null===this.renderers&&(this.renderers={}),this.renderers[i]||(this.renderers[i]={}),this.renderers[i].modalTitle=a,this.renderers[i].modalContent=s,this.renderers[i].calendarEvent=r}})},mounted(){document.addEventListener("click",this.handleClick)},beforeUnmount(){document.removeEventListener("click",this.handleClick)}});!function(){const t=/Chrome/.test(navigator.userAgent),e=/Firefox/.test(navigator.userAgent);if(t){const t=function(){const t=document.createElement("div");t.style.position="absolute",t.style.top="-9999px",t.style.width="100px",t.style.height="100px",t.style.overflow="scroll",document.body.appendChild(t);const e=t.offsetWidth-t.clientWidth;return document.body.removeChild(t),e}()+"px";document.body.style.setProperty("--scrollbar-width",t)}else e&&document.body.style.setProperty("--scrollbar-width","0px")}(),pn.config.globalProperties.$capitalize=function(t){return t?t[0].toUpperCase()+t.slice(1):""},pn.use(un),pn.use(primevue.config.default,{zIndex:{overlay:9e3,tooltip:8e3}}),pn.directive("tooltip",primevue.tooltip),pn.use(it),pn.use(lt),pn.directive("contrast",ut),pn.mount("#fhccontent"),un.afterEach((t,e,n)=>{pn.config.globalProperties.$api.call(dn.info("cis4",t.fullPath))}); //# sourceMappingURL=Fhc.js.map diff --git a/public/dist/js/apps/Dashboard/Fhc.js.map b/public/dist/js/apps/Dashboard/Fhc.js.map index 8344de818..ae33d112f 100644 --- a/public/dist/js/apps/Dashboard/Fhc.js.map +++ b/public/dist/js/apps/Dashboard/Fhc.js.map @@ -1 +1 @@ -{"version":3,"file":"Fhc.js","sources":["../../../../js/components/Bootstrap/Modal.js","../../../../js/components/Bootstrap/Alert.js","../../../../js/components/Bootstrap/Confirm.js","../../../../js/components/Drop/Grid/Item.js","../../../../js/composables/GridLogic.js","../../../../js/components/Drop/Grid.js","../../../../js/composables/Dashboard/CachedWidgetLoader.js","../../../../js/components/Dashboard/Item.js","../../../../js/components/Tranistion/HeightTransition.js","../../../../js/components/Dashboard/Widget/WidgetIcon.js","../../../../js/components/Dashboard/Section.js","../../../../js/components/Dashboard/Widget/Picker.js","../../../../js/helpers/ObjectUtils.js","../../../../js/api/factory/cis/dashboard.js","../../../../js/components/Dashboard/Dashboard.js","../../../../js/api/search.js","../../../../js/api/phrasen.js","../../../../js/api/navigation.js","../../../../js/api/filter.js","../../../../js/api/studstatus.js","../../../../js/api/profil.js","../../../../js/api/profilUpdate.js","../../../../js/api/lvPlan.js","../../../../js/api/stv.js","../../../../js/api/stv/verband.js","../../../../js/api/stv/students.js","../../../../js/api/stv/filter.js","../../../../js/api/stv/konto.js","../../../../js/api/stv/group.js","../../../../js/api/stv/kontakt.js","../../../../js/api/stv/prestudent.js","../../../../js/api/stv/status.js","../../../../js/api/stv/details.js","../../../../js/api/stv/exam.js","../../../../js/api/stv/abschlusspruefung.js","../../../../js/api/stv/grades.js","../../../../js/api/stv/mobility.js","../../../../js/api/stv/archiv.js","../../../../js/api/stv/documents.js","../../../../js/api/stv/exemptions.js","../../../../js/api/stv/jointstudies.js","../../../../js/api/stv/courselist.js","../../../../js/api/notiz.js","../../../../js/api/notiz/person.js","../../../../js/api/betriebsmittel.js","../../../../js/api/betriebsmittel/person.js","../../../../js/api/checkperson.js","../../../../js/api/ort.js","../../../../js/api/cms.js","../../../../js/api/lehre.js","../../../../js/api/addons.js","../../../../js/api/messages.js","../../../../js/api/messages/person.js","../../../../js/api/vorlagen.js","../../../../js/api/studium.js","../../../../js/api/fhcapifactory.js","../../../../js/api/dashboard.js","../../../../js/api/bookmark.js","../../../../js/api/ampeln.js","../../../../js/api/studiengang.js","../../../../js/api/menu.js","../../../../js/api/authinfo.js","../../../../js/api/language.js","../../../../js/plugin/OldFhcApi.js","../../../../js/RESTClient.js","../../../../js/plugins/FhcAlert.js","../../../../js/plugins/Api.js","../../../../js/api/factory/phrasen.js","../../../../js/plugins/Phrasen.js","../../../../js/plugins/Theme.js","../../../../js/directives/contrast.js","../../../../js/helpers/DragAndDrop.js","../../../../js/directives/Calendar/DragAndDrop.js","../../../../js/components/Calendar/Base/DragAndDrop.js","../../../../js/components/Calendar/Base/Header.js","../../../../js/components/Calendar/Base/Header/Datepicker.js","../../../../js/components/Calendar/Base/Slider.js","../../../../js/directives/Calendar/Click.js","../../../../js/components/Calendar/Base.js","../../../../js/api/factory/lvPlan.js","../../../../js/components/Calendar/Base/Grid/Line/Event.js","../../../../js/components/Calendar/Base/Grid.js","../../../../js/components/Calendar/Base/Grid/Line.js","../../../../js/components/Calendar/Base/Grid/Line/Background.js","../../../../js/components/Calendar/Base/Label/Day.js","../../../../js/components/Calendar/Base/Label/Dow.js","../../../../js/components/Calendar/Base/Label/Time.js","../../../../js/components/Calendar/Mode/Day/View.js","../../../../js/components/Calendar/Mode/Day.js","../../../../js/composables/Responsive.js","../../../../js/components/Calendar/Mode/Week.js","../../../../js/components/Calendar/Mode/Week/View.js","../../../../js/components/Calendar/Mode/Month.js","../../../../js/components/Calendar/Mode/Month/View.js","../../../../js/components/Calendar/Base/Label/Week.js","../../../../js/components/Calendar/LvPlan.js","../../../../js/composables/EventLoader.js","../../../../js/api/factory/authinfo.js","../../../../js/components/Cis/LvPlan/Lehrveranstaltung.js","../../../../js/components/Cis/LvPlan/Personal.js","../../../../js/components/Cis/Mylv/Semester/Studiengang/Lv/Pruefungen.js","../../../../js/api/factory/lehre.js","../../../../js/components/Cis/Mylv/Semester/Studiengang/Lv/Info.js","../../../../js/mixins/Phrasen.js","../../../../js/components/Cis/Mylv/LvMenu.js","../../../../js/api/factory/addons.js","../../../../js/components/Cis/Mylv/LvUebersicht.js","../../../../js/components/Cis/Mylv/Semester.js","../../../../js/components/Cis/Mylv/Semester/Studiengang.js","../../../../js/components/Cis/Mylv/Semester/Studiengang/Lv.js","../../../../js/components/Cis/Mylv/Student.js","../../../../js/components/Fetch.js","../../../../js/components/filter/Filter/Config.js","../../../../js/components/filter/Filter/Columns.js","../../../../js/components/filter/Table/Download.js","../../../../js/directives/collapseAutoClose.js","../../../../js/tabulator/layouts/fitDataStretchFrozen.js","../../../../js/api/factory/filter.js","../../../../js/components/filter/Filter.js","../../../../js/components/Cis/Profil/ProfilComponents/Mailverteiler.js","../../../../js/components/Cis/Profil/ProfilComponents/FhAusweisStatus.js","../../../../js/components/Cis/Profil/ProfilComponents/QuickLinks.js","../../../../js/components/Cis/Profil/ProfilComponents/Adresse.js","../../../../js/components/Cis/Profil/ProfilComponents/Kontakt.js","../../../../js/components/Cis/Profil/ProfilComponents/ProfilEmails.js","../../../../js/components/Cis/Profil/ProfilComponents/RoleInformation.js","../../../../js/api/factory/profil.js","../../../../js/components/Form/Upload/Dms.js","../../../../js/components/Form/Upload/Dms/Item.js","../../../../js/api/factory/profilUpdate.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfilComponents/ImageUpload.js","../../../../js/components/Cis/Profil/ProfilComponents/ProfilInformation.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfilSelect.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfilComponents/EditKontakt.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfilComponents/EditAdresse.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfilComponents/Status.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfilComponents/TextInputDokument.js","../../../../js/components/Loader.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfil.js","../../../../js/components/Cis/Profil/ProfilComponents/FetchProfilUpdates.js","../../../../js/tabulator/filters/Dates.js","../../../../js/components/Cis/Profil/StudentProfil.js","../../../../js/components/Cis/Profil/MitarbeiterProfil.js","../../../../js/components/Cis/Profil/StudentViewProfil.js","../../../../js/components/Cis/Profil/MitarbeiterViewProfil.js","../../../../js/components/Cis/Profil/Profil.js","../../../../js/api/factory/ort.js","../../../../js/components/Cis/Raumsuche/Raumsuche.js","../../../../js/components/Pagination/Pagination.js","../../../../js/components/Cis/Cms/StudiengangInformation/StudiengangPerson.js","../../../../js/components/Cis/Cms/StudiengangInformation/StudiengangVertretung.js","../../../../js/api/factory/studiengang.js","../../../../js/components/Cis/Cms/StudiengangInformation/StudiengangInformation.js","../../../../js/api/factory/cms.js","../../../../js/components/Cis/Cms/News.js","../../../../js/components/Cis/Cms/Content_types/Raum_contentmittitel.js","../../../../js/helpers/LegacyLinkReplaceHelper.js","../../../../js/components/Cis/Cms/Content_types/General.js","../../../../js/components/Cis/Cms/Content.js","../../../../js/components/Cis/Cms/Content_types/News_content.js","../../../../js/components/Cis/Cms/Content_types/Iframe_content.js","../../../../js/components/Cis/Mylv/RoomInformation.js","../../../../js/components/Cis/Abgabetool/AbgabeStudentDetail.js","../../../../js/components/verticalsplit/verticalsplit.js","../../../../js/components/Cis/Abgabetool/AbgabetoolStudent.js","../../../../js/components/Cis/Abgabetool/AbgabeMitarbeiterDetail.js","../../../../js/components/Cis/Abgabetool/AbgabetoolMitarbeiter.js","../../../../js/components/Cis/Abgabetool/DeadlineOverview.js","../../../../js/components/Cis/Studium/Studium.js","../../../../js/api/factory/renderers.js","../../../../js/api/factory/routeinfo.js","../../../../js/apps/Dashboard/Fhc.js","../../../../js/helpers/CssVarCalcHelpers.js"],"sourcesContent":["//import Phrasen from '../../plugin/Phrasen.js';\n\nexport default {\n\tname: 'BootstrapModal',\n\tdata: () => ({\n\t\tmodal: null,\n\t\tfullscreen: false\n\t}),\n\tprops: {\n\t\tbackdrop: {\n\t\t\ttype: [Boolean,String],\n\t\t\tdefault: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['static', true, false].includes(value);\n\t\t\t}\n\t\t},\n\t\tfocus: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tkeyboard: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tnoCloseBtn: Boolean,\n\t\tdialogClass: [String,Array,Object],\n\t\theaderClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tbodyClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: 'px-4 py-5'\n\t\t},\n\t\tfooterClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tallowFullscreenExpand: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\temits: [\n\t\t\"hideBsModal\",\n\t\t\"hiddenBsModal\",\n\t\t\"hidePreventedBsModal\",\n\t\t\"showBsModal\",\n\t\t\"shownBsModal\"\n\t],\n\tmethods: {\n\t\tdispose() {\n\t\t\treturn this.modal.dispose();\n\t\t},\n\t\thandleUpdate() {\n\t\t\treturn this.modal.handleUpdate();\n\t\t},\n\t\thide() {\n\t\t\treturn this.modal.hide();\n\t\t},\n\t\tshow(relatedTarget) {\n\t\t\treturn this.modal.show(relatedTarget);\n\t\t},\n\t\ttoggle() {\n\t\t\treturn this.modal.toggle();\n\t\t},\n\t\ttoggleFullscreen() {\n\t\t\tthis.fullscreen = !this.fullscreen\n\t\t}\n\t},\n\tmounted() {\n\t\tif (this.$refs.modal)\n\t\t\tthis.modal = new bootstrap.Modal(this.$refs.modal, {\n\t\t\t\tbackdrop: this.backdrop,\n\t\t\t\tfocus: this.focus,\n\t\t\t\tkeyboard: this.keyboard\n\t\t\t});\n\t},\n\tpopup(body, options, title, footer) {\n\t\tconst BsModal = this,\n\t\t\tslots = {};\n\t\tif (body !== undefined)\n\t\t\tslots.default = () => body;\n\t\tif (title !== undefined)\n\t\t\tslots.title = () => title;\n\t\tif (footer !== undefined)\n\t\t\tslots.footer = () => footer;\n\n\t\t// little hack to check whether primevue is included in the app or not\n\t\tlet includedPrimevue = false;\n\t\tif(typeof primevue !== 'undefined'){\n\t\t\tincludedPrimevue = true;\n\t\t}\n\n\t\treturn new Promise((resolve,reject) => {\n\t\t\tconst instance = Vue.createApp({\n\t\t\t\tname: 'ModalTmpApp',\n\t\t\t\tsetup() {\n\t\t\t\t\treturn () => Vue.h(BsModal, {...{\n\t\t\t\t\t\tclass: 'fade'\n\t\t\t\t\t},...options, ...{\n\t\t\t\t\t\tref: 'modal',\n\t\t\t\t\t\t'onHidden.bs.modal': instance.unmount\n\t\t\t\t\t}}, slots);\n\t\t\t\t},\n\t\t\t\tmounted() {\n\t\t\t\t\tthis.$refs.modal.show();\n\t\t\t\t\t\n\t\t\t\t},\n\t\t\t\tbeforeUnmount() {\n\t\t\t\t\tif (this.$refs.modal)\n\t\t\t\t\t\tthis.$refs.modal.result !== false ? resolve(this.$refs.modal.result) : reject();\n\t\t\t\t},\n\t\t\t\tunmounted() {\n\t\t\t\t\twrapper.parentElement.removeChild(wrapper);\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst wrapper = document.createElement(\"div\");\n\t\t\t\n\t\t\t// if(primevue) --> won't work because primevue is not defined in this scope and promise would be rejected\n\t\t\tif (includedPrimevue){\n\t\t\t\tinstance.use(primevue.config.default, {zIndex: {overlay: 9999}})\n\t\t\t}\n\t\t\t\t \n\t\t\t//instance.use(Phrasen); // TODO(chris): find a more dynamic way\n\t\t\timport('../../plugins/Phrasen.js').then((Phrasen) => {\n\t\t\t\tinstance.use(Phrasen.default);\n\t\t\t\tinstance.mount(wrapper);\n\t\t\t\tdocument.body.appendChild(wrapper);\n\t\t\t});\n\t\t});\n\t},\n\ttemplate: `
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    `\n}\n","import BsModal from './Modal.js';\n\nexport default {\n\tname: 'BootstrapAlert',\n\tcomponents: {\n\t\tBsModal\n\t},\n\tmixins: [\n\t\tBsModal\n\t],\n\tprops: {\n\t\tdialogClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: 'modal-dialog-centered'\n\t\t},\n\t\t/*\n\t\t * NOTE(chris):\n\t\t * Hack to expose in \"emits\" declared events to $props which we use\n\t\t * in the v-bind directive to forward all events.\n\t\t * @see: https://github.com/vuejs/core/issues/3432\n\t\t*/\n\t\tonHideBsModal: Function,\n\t\tonHiddenBsModal: Function,\n\t\tonHidePreventedBsModal: Function,\n\t\tonShowBsModal: Function,\n\t\tonShownBsModal: Function\n\t},\n\tdata: () => ({\n\t\tresult: true\n\t}),\n\tmounted() {\n\t\tthis.modal = this.$refs.modalContainer.modal;\n\t},\n\tpopup(msg, options) {\n\t\treturn BsModal.popup.bind(this)(msg, options);\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t`\n}\n","import BsAlert from './Alert.js';\n\nexport default {\n\tname: 'BootstrapConfirm',\n\tmixins: [\n\t\tBsAlert\n\t],\n\tdata: () => ({\n\t\tresult: false\n\t}),\n\tpopup(msg, options) {\n\t\treturn BsAlert.popup.bind(this)(msg, options);\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t`\n}\n","export default {\n\tname:'GridItem',\n\tcomponents: {\n\t},\n\tinject: {\n\t},\n\tprops: {\n\t\titem: Object,\n\t\tactive: Boolean\n\t},\n\temits: [\n\t\t\"mouseDown\",\n\t\t\"mouseUp\",\n\t\t\"startMove\",\n\t\t\"startResize\",\n\t\t\"dragging\",\n\t\t\"endDrag\",\n\t\t\"dropDrag\",\n\t\t\"item\",\n\t\t\"touchStart\",\n\t\t\"touchEnd\",\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tdragAction: '',\n\t\t\tdragging: false\n\t\t}\n\t},\n\tcomputed: {\n\t},\n\tmethods: {\n\t\tregisterDragAction(evt) {\n\t\t\tthis.$emit('mouseDown', evt);\n\t\t\tif (evt.target.hasAttribute('drag-action')) {\n\t\t\t\tthis.dragAction = evt.target.getAttribute('drag-action');\n\t\t\t} else {\n\t\t\t\tlet parent = evt.target.closest('[drag-action]');\n\t\t\t\tif (parent) {\n\t\t\t\t\tthis.dragAction = parent.getAttribute('drag-action');\n\t\t\t\t} else {\n\t\t\t\t\tthis.dragAction = '';\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttryDragStart(evt, item) {\n\t\t\tlet dragAction = this.dragAction || evt.target.getAttribute('drag-action');\n\t\t\tif (dragAction) {\n\t\t\t\tthis.dragging = true;\n\t\t\t\tif (dragAction == 'move')\n\t\t\t\t\treturn this.$emit('startMove', evt, item);\n\t\t\t\telse if (dragAction == 'resize')\n\t\t\t\t\treturn this.$emit('startResize', evt, item);\n\t\t\t}\n\t\t\t//evt.preventDefault();\n\t\t},\n\t\ttouchDragEnd(evt) {\n\t\t\tif (!this.dragging)\n\t\t\t\treturn;\n\t\t\tthis.dragging = false;\n\t\t\tthis.$emit('touchEnd', evt);\n\t\t},\n\t\ttouchStart(event){\n\t\t\tthis.$emit('touchStart', event); \n\t\t\tthis.registerDragAction(event); \n\t\t\tthis.tryDragStart(event, this.item);\n\t\t},\n\t\ttouchMove(event){\n\t\t\tif(this.dragging){\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.$emit('dragging', event);\n\t\t\t}\n\t\t}\n\t\t\n\t},\n\ttemplate: `\n\t
    \n\t\t\n\t
    `\n}\n","// TODO(chris): Comments\n\nconst DIR_UP = 0;\nconst DIR_LEFT = 1;\nconst DIR_RIGHT = 2;\nconst DIR_DOWN = 3;\n\nclass GridLogic {\n\tconstructor(w) {\n\t\tif (w.w) {\n\t\t\tthis.w = w.w;\n\t\t\tthis.h = w.h;\n\t\t\tthis.data = [...w.data];\n\t\t\tthis.grid = [...w.grid];\n\t\t} else {\n\t\t\tthis.w = w;\n\t\t\tthis.h = 1;\n\t\t\tthis.data = [];\n\t\t\tthis.grid = [];\n\t\t}\n\t}\n\tisFreeSlot(x, y) {\n\t\tconst i = y*this.w + x;\n\t\treturn !this.grid[i] && this.grid[i] !== 0;\n\t}\n\tgetMaxY(){\n\t\treturn this.data.reduce((acc, item) => { \n\t\t\tif (item?.y > acc) {\n\t\t\t\t acc = item.y; \n\t\t\t} \n\t\t\treturn acc; \n\t\t}, 0);\n\t}\n\tgetFreeSlots() {\n\t\tconst freeSlots = [];\n\t\tlet biggestY = this.getMaxY();\n\t\tlet totalSpaces = this.w * (biggestY+1);\n\t\tfor(let i=0; i < totalSpaces; i++){\n\t\t\tif (!this.grid[i] && this.grid[i] !== 0){\n\t\t\t\tthis.grid[i] = undefined;\n\t\t\t}\n\t\t}\n\t\tfor(let i =0; i < this.grid.length; i++){\n\t\t\tif (!this.grid[i] && this.grid[i] !== 0){\n\t\t\t\tlet x = i % this.w;\n\t\t\t\tlet y = Math.floor(i / this.w);\n\t\t\t\tfreeSlots.push({x, y});\n\t\t\t}\n\t\t}\n\t\treturn freeSlots;\n\t}\n\tadd(item, prefer) {\n\t\tlet occupiers = this.getItemsInFrame(item.frame);\n\t\tif (!occupiers.length) {\n\t\t\titem.frame.forEach(f => this.grid[f] = item.index);\n\t\t\tthis.data[item.index] = item;\n\t\t\tthis.h = Math.max(this.h, item.y + item.h);\n\t\t\treturn [];\n\t\t} else {\n\t\t\tconst intermGrid = new GridLogic(this);\n\t\t\t\n\t\t\titem.frame.forEach(f => intermGrid.grid[f] = -1);\n\n\t\t\tconst possiblities = intermGrid.tryMoving(occupiers, prefer);\n\t\t\tif (possiblities.length) {\n\t\t\t\tconst bestOption = possiblities.sort((a,b) => {\n\t\t\t\t\tif (a.cost === undefined)\n\t\t\t\t\t\ta.cost = a.moves.reduce((a, v) => a * v.cost, 1);\n\t\t\t\t\tif (b.cost === undefined)\n\t\t\t\t\t\tb.cost = b.moves.reduce((a, v) => a * v.cost, 1);\n\t\t\t\t\treturn a.cost > b.cost;\n\t\t\t\t});\n\t\t\t\tconst result = [];\n\t\t\t\tbestOption[0].moves.forEach(move => {\n\t\t\t\t\tconst currItem = {...this.data[move.index]};\n\t\t\t\t\tcurrItem.x += move.x;\n\t\t\t\t\tcurrItem.y += move.y;\n\t\t\t\t\tcurrItem.frame = this.getItemFrame(currItem);\n\t\t\t\t\tthis.h = Math.max(this.h, currItem.y + currItem.h);\n\t\t\t\t\tthis.remove(currItem);\n\t\t\t\t\tcurrItem.frame.forEach(f => this.grid[f] = currItem.index);\n\t\t\t\t\tthis.data[move.index] = currItem;\n\t\t\t\t\tresult[move.index] = {\n\t\t\t\t\t\tindex: currItem.index,\n\t\t\t\t\t\tx: currItem.x,\n\t\t\t\t\t\ty: currItem.y\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\titem.frame.forEach(f => this.grid[f] = item.index);\n\t\t\t\tthis.data[item.index] = item;\n\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\tconsole.error('FATAL', \"can't arrange item on grid\");\n\t\t\t}\n\t\t}\n\t}\n\tmove(item, x, y) {\n\t\tif (item.data.place[this.w]?.pinned)\n\t\t\treturn [];\n\t\tif (item.x == x && item.y == y)\n\t\t\treturn [];\n\t\t\n\t\tthis.remove(item);\n\n\t\tlet prefer = undefined;\n\t\tif (item.x == x) {\n\t\t\tif (y-item.y > 0)\n\t\t\t\tprefer = DIR_UP;\n\t\t\telse\n\t\t\t\tprefer = DIR_DOWN;\n\t\t} else if (item.y == y) {\n\t\t\tif (x-item.x > 0)\n\t\t\t\tprefer = DIR_LEFT;\n\t\t\telse\n\t\t\t\tprefer = DIR_RIGHT;\n\t\t}\n\n\t\tconst originalFrame = Array.isArray(item.frame) ? [...item.frame] : [item.frame];\n\n\t\tconst currItem = {...item};\n\t\tcurrItem.x = x;\n\t\tcurrItem.y = y;\n\t\tcurrItem.frame = this.getItemFrame(currItem);\n\t\tlet occupiers = this.getItemsInFrame(currItem.frame);\n\t\t\n\t\t// does not update if the target conatins pinned widgets\n\t\tif (occupiers.some(frame => this.data[frame]?.data.place[this.w]?.pinned)) {\n\t\t\treturn [];\n\t\t}\n\t\t\n\t\t// checks if target contains widget with the same high and width\n\t\tlet occupiersData = occupiers.map(occupier => this.data[occupier]);\n\t\tlet occupiersFrame = occupiersData.map(occupier => occupier.frame).flat();\n\t\tif (!occupiersFrame.some(frame => !currItem.frame.includes(frame)) && !occupiersFrame.some(frame => originalFrame.includes(frame))){\n\t\t\tlet replaceUpdate = [];\n\t\t\tlet newOccupierFrames = [];\n\t\t\tfor(let f of originalFrame){\n\t\t\t\tif(newOccupierFrames.includes(f)){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tlet occ = occupiersData.shift();\n\t\t\t\tif(occ){\n\t\t\t\t\tnewOccupierFrames = [...newOccupierFrames, ...this.getItemFrame({ ...occ, ...this.getSingleFramePosition(f) })];\n\t\t\t\t\treplaceUpdate[occ.index] = { index: occ.index, ...this.getSingleFramePosition(f)}\n\t\t\t\t}\n\t\t\t}\n\t\t\treplaceUpdate[item.index] = { index: item.index, x, y };\n\t\t\t\n\t\t\treturn replaceUpdate;\n\t\t}\n\t\t\n\t\tconst updates = this.add(currItem, prefer);\n\t\tupdates[item.index] = {index: item.index, x, y};\n\t\treturn updates;\n\t}\n\tresize(item, w, h) {\n\t\tif (item.w == w && item.h == h)\n\t\t\treturn [];\n\t\tthis.remove(item);\n\n\t\tconst currItem = {...item};\n\t\tcurrItem.w = w;\n\t\tcurrItem.h = h;\n\t\tcurrItem.frame = this.getItemFrame(currItem);\n\t\t\n\t\tconst updates = this.add(currItem);\n\t\tif(updates)\n\t\t\tupdates[item.index] = {index: item.index, w, h, x:item.x, y:item.y, resize:true};\n\n\t\treturn updates;\n\t}\n\ttryMoving(index, prefer) {\n\t\tif (Array.isArray(index)) {\n\t\t\tindex.forEach(i => this.remove({index:i}));\n\t\t\tlet possiblities = [{grid: this, moves: []}];\n\t\t\tindex.forEach(i => {\n\t\t\t\tlet newPoss = [];\n\t\t\t\tpossiblities.forEach(possiblity => {\n\t\t\t\t\tpossiblity.grid.tryMoving(i, prefer).forEach(p => {\n\t\t\t\t\t\tpossiblity.moves\n\t\t\t\t\t\tp.moves = [...p.moves, ...possiblity.moves];\n\t\t\t\t\t\tnewPoss.push(p)\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tpossiblities = newPoss;\n\t\t\t});\n\t\t\treturn possiblities;\n\t\t}\n\t\tconst directions = [DIR_UP, DIR_DOWN, DIR_LEFT, DIR_RIGHT];\n\n\t\tthis.remove({index});\n\n\t\tconst weight = 1 + .2*(this.data[index].weight || 0);\n\n\t\treturn directions.reduce((result, dir) => {\n\t\t\tlet res = this.tryMovingInDirection(dir, index, 1, (prefer === dir ? .5 : 1 + dir*.1) * weight);\n\t\t\tif (!res)\n\t\t\t\treturn result;\n\t\t\treturn [...result, ...res];\n\t\t}, []).filter(p => p);\n\t}\n\ttryMovingInDirection(dir, index, amount, cost) {\n\t\tconst move = {index, x:0, y: 0, cost: cost};\n\t\tlet targetframe;\n\t\tswitch(dir) {\n\t\t\tcase DIR_UP:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned || this.data[index].y - amount < 0)\n\t\t\t\t\treturn false;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i-this.w*amount);\n\t\t\t\tmove.y = -amount;\n\t\t\t\tbreak;\n\t\t\tcase DIR_DOWN:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned)\n\t\t\t\t\treturn false;\n\t\t\t\tif (this.data[index].y + this.data[index].h + amount > this.h)\n\t\t\t\t\tcost += .4;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i+this.w*amount);\n\t\t\t\tmove.y = amount;\n\t\t\t\tbreak;\n\t\t\tcase DIR_LEFT:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned || this.data[index].x - amount < 0)\n\t\t\t\t\treturn false;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i-amount);\n\t\t\t\tmove.x = -amount;\n\t\t\t\tbreak;\n\t\t\tcase DIR_RIGHT:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned || this.data[index].x + this.data[index].w + amount > this.w)\n\t\t\t\t\treturn false;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i+amount);\n\t\t\t\tmove.x = amount;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tconst occupiers = this.getItemsInFrame(targetframe);\n\t\tif (occupiers.includes(-1)) {\n\t\t\treturn this.tryMovingInDirection(dir, index, amount+1, cost);\n\t\t}\n\t\t\n\t\tconst intermGrid = new GridLogic(this);\n\t\ttargetframe.forEach(f => intermGrid.grid[f] = -1);\n\t\t\n\t\tif (!occupiers.length) {\n\t\t\treturn [{grid: intermGrid, moves: [move]}];\n\t\t}\n\t\tconst possiblities = intermGrid.tryMoving(occupiers).map(possiblity => possiblity.moves.unshift(move) && possiblity);\n\t\treturn possiblities.length ? possiblities : false;\n\t}\n\tclearWeights() {\n\t\tthis.data.forEach(item => item.weight = undefined);\n\t}\n\tgetItemsInFrame(frame) {\n\t\treturn frame.map(i => this.grid[i]).filter((v,i,a) => (v || v === 0) && a.indexOf(v) === i);\n\t}\n\tremove(item) {\n\t\tthis.grid = this.grid.map(i => i != item.index ? i : undefined);\n\t}\n\tgetItemFrame(item) {\n\t\tconst frame = [];\n\t\tfor (let i = 0; i < item.w; i++)\n\t\t\tfor (let j = 0; j < item.h; j++)\n\t\t\t\tframe.push(i + item.x + (j + item.y) * this.w);\n\t\treturn frame;\n\t}\n\tgetSingleFramePosition(frame){\n\t\treturn { x: frame % this.w, y: Math.floor(frame / this.w)};\n\t}\n\tdebug() {\n\t\treturn this.grid;\n\t}\n}\n\nexport default GridLogic;","// TODO(chris): Comments\n\nimport GridItem from './Grid/Item.js';\nimport GridLogic from '../../composables/GridLogic.js';\n\nconst MODE_IDLE = 0;\nconst MODE_MOVE = 1;\nconst MODE_RESIZE = 2;\nconst MODE_MOUSE_DOWN = 3;\n\nexport default {\n\tname: 'Grid',\n\tcomponents: {\n\t\tGridItem,\n\t},\n\tprops: {\n\t\tcols: Number,\n\t\titems: Array,\n\t\titemsSetup: Object,\n\t\tresizeLimit: Function,\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tmarginForExtraRow: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0\n\t\t},\n\t\tadditionalRow:{\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t}\n\t},\n\temits: [\n\t\t\"rearrangeItems\",\n\t\t\"newItem\",\n\t\t\"gridHeight\",\n\t\t\"draggedItem\",\n\t\t\"update:additionalRow\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tx: -1,\n\t\t\ty: -1,\n\t\t\tclientX:0,\n\t\t\tclientY: 0,\n\t\t\tmode: MODE_IDLE,\n\t\t\tgrid: null,\n\t\t\tdragGrid: null,\n\t\t\tpermUpdates: [],\n\t\t\tpositionUpdates: null,\n\t\t\tfixedPositionUpdates: null,\n\t\t\tdraggedOffset: [0,0],\n\t\t\tdraggedItem: null,\n\t\t\tdraggedNode: null,\n\t\t\treorderedItems:[],\n\t\t\tclonedWidget:null,\n\t\t}\n\t},\n\tinject:{\n\t\tsectionName: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tcomputed: {\n\t\tadditionalRowComputed: {\n\t\t\tget() {\n\t\t\t\treturn this.additionalRow;\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tthis.$emit('update:additionalRow', value);\n\t\t\t}\n\t\t},\n\t\titems_hashmap() {\n\t\t\tlet items = {};\n\t\t\tthis.items.forEach(item => {\n\t\t\t\tif (this.reorderedItems.length > 0 && this.needsReordering(item)){\n\t\t\t\t\t\tlet rearrangedPosition = this.reorderedItems.filter(widget => widget.data.widgetid == item.widgetid)?.pop();\n\t\t\t\t\t\tif (rearrangedPosition) {\t\t\t\n\t\t\t\t\t\t\titem.x = rearrangedPosition.x;\n\t\t\t\t\t\t\titem.y = rearrangedPosition.y;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\titems[`x${item.x}y${item.y}`] = item;\n\t\t\t});\t\n\t\t\treturn items\n\t\t},\n\t\titems_placeholders(){\n\t\t\tlet placeholders = [];\n\t\t\tlet col_max = this.cols;\n\t\t\tlet rows_max = this.rows;\n\n\t\t\t// occupied hashmap to keep track of the occupied cells\n\t\t\tlet occupied = {};\n\n\t\t\tfor (let y = 0; y < rows_max; y++) {\n\t\t\t\tfor (let x = 0; x < col_max; x++) {\n\t\t\t\t\t// skip current position if it was registered as occupied\n\t\t\t\t\tif (Object.keys(occupied).length && occupied[`x${x}y${y}`]) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tlet current_item = this.items_hashmap[`x${x}y${y}`];\n\t\t\t\t\tif (current_item) {\n\t\t\t\t\t\t//calculate the occupied cells from the width and the height from the items \n\t\t\t\t\t\tlet width = current_item.w;\n\t\t\t\t\t\tlet height = current_item.h;\n\t\t\t\t\t\tlet max_x = x + width - 1;\n\t\t\t\t\t\tlet max_y = y + height - 1;\n\t\t\t\t\t\tif(x != max_x || y != max_y){\n\t\t\t\t\t\t\tfor (let occupied_y = y; occupied_y <= max_y; occupied_y++) {\n\t\t\t\t\t\t\t\tfor (let occupied_x = x; occupied_x <= max_x; occupied_x++) {\n\t\t\t\t\t\t\t\t\tif (occupied_x != x || occupied_y != y) {\n\t\t\t\t\t\t\t\t\t\toccupied[`x${occupied_x}y${occupied_y}`]=true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tplaceholders.push({ x: x, y: y, w: 1, h: 1, placeholder: true, \n\t\t\t\t\t\t\tdata: { id: 'placeholder_' + String(placeholders.length).padStart(4, \"0\") } });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn placeholders;\n\t\t},\n\t\tplacedItems_withPlaceholders() {\n\t\t\treturn [...this.placedItems, ...this.items_placeholders];\n\t\t},\n\t\trows() {\n\t\t\tif (this.additionalRowComputed) {\n\t\t\t\t\treturn this.grid ? (this.grid.h+1) : 1;\n\t\t\t}\n\t\t\treturn this.grid ? this.grid.h : 1;\n\t\t\t\n\t\t},\n\t\tgridStyle() {\n\t\t\tconst addH = this.active ? this.marginForExtraRow : 0;\n\t\t\treturn {\n\t\t\t\t'--fhc-dg-row-height': 100/(this.rows + addH) + '%',\n\t\t\t\t'--fhc-dg-col-width': 100/this.cols + '%',\n\t\t\t\t'--fhc-dg-item-padding-horizontal': '0.25%',\n\t\t\t\t'--fhc-dg-item-padding-top': '0.5%',\n\t\t\t\t'padding-bottom': 100 * (this.rows + addH)/this.cols + '%'\n\t\t\t}\n\t\t},\n\t\tindexedItems() {\n\t\t\treturn this.items.map(\n\t\t\t\t(item, index) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\tx: item.x,\n\t\t\t\t\t\ty: item.y,\n\t\t\t\t\t\tw: item.w,\n\t\t\t\t\t\th: item.h,\n\t\t\t\t\t\tweight: item.weight || 0,\n\t\t\t\t\t\tdata: item\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\tprePlacedItems() {\n\t\t\tif (!this.fixedPositionUpdates)\n\t\t\t\treturn this.indexedItems;\n\t\t\treturn this.indexedItems.map(item => {\n\t\t\t\tif (!this.fixedPositionUpdates[item.index])\n\t\t\t\t\treturn item;\n\t\t\t\treturn {\n\t\t\t\t\tindex: item.index,\n\t\t\t\t\tweight: item.weight,\n\t\t\t\t\tdata: item.data,\n\t\t\t\t\tx: this.fixedPositionUpdates[item.index].x === undefined ? item.x : this.fixedPositionUpdates[item.index].x,\n\t\t\t\t\ty: this.fixedPositionUpdates[item.index].y === undefined ? item.y : this.fixedPositionUpdates[item.index].y,\n\t\t\t\t\tw: this.fixedPositionUpdates[item.index].w === undefined ? item.w : this.fixedPositionUpdates[item.index].w,\n\t\t\t\t\th: this.fixedPositionUpdates[item.index].h === undefined ? item.h : this.fixedPositionUpdates[item.index].h\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\tplacedItems() {\n\t\t\tif (!this.positionUpdates)\n\t\t\t\treturn this.prePlacedItems;\n\t\t\tlet mappedPlacedItems= this.prePlacedItems.map(item => {\n\t\t\t\tif (!this.positionUpdates[item.index] )\n\t\t\t\t\treturn item;\n\t\t\t\tlet height_diff = this.positionUpdates[item.index]?.h - item.h;\n\t\t\t\tlet width_diff = this.positionUpdates[item.index]?.w - item.w;\n\t\t\t\treturn {\n\t\t\t\t\tresize: this.positionUpdates[item.index]?.resize,\n\t\t\t\t\tindex: item.index,\n\t\t\t\t\tweight: item.weight,\n\t\t\t\t\tdata: item.data,\n\t\t\t\t\tx: this.positionUpdates[item.index].x === undefined ? item.x : this.positionUpdates[item.index].x,\n\t\t\t\t\ty: this.positionUpdates[item.index].y === undefined ? item.y : this.positionUpdates[item.index].y,\n\t\t\t\t\tw: width_diff>0?item.w:this.positionUpdates[item.index].w === undefined ? item.w : this.positionUpdates[item.index].w,\n\t\t\t\t\th: height_diff > 0 ?item.h:this.positionUpdates[item.index].h === undefined ? item.h : this.positionUpdates[item.index].h\n\t\t\t\t\t\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tlet temporaryResizeItems = [];\n\t\t\tmappedPlacedItems.forEach(item=>{\n\t\t\t\tif(item.resize){\n\t\t\t\t\tlet newItem = {\n\t\t\t\t\t\t...item,\n\t\t\t\t\t\tw:this.positionUpdates[item.index].w === undefined ? item.w : this.positionUpdates[item.index].w,\n\t\t\t\t\t\th:this.positionUpdates[item.index].h === undefined ? item.h : this.positionUpdates[item.index].h,\n\t\t\t\t\t\tresizeOverlay:true,\n\t\t\t\t\t\tblank:true,\n\t\t\t\t\t};\n\t\t\t\t\ttemporaryResizeItems.push(newItem)\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn [...mappedPlacedItems, ...temporaryResizeItems];\n\t\t},\n\t\tshowEmptyTileHover() {\n\t\t\tif (!this.active || !this.grid || this.mode != MODE_IDLE || this.x < 0 || this.y < 0 || this.x >= this.cols || this.y >= this.rows)\n\t\t\t\treturn false;\n\t\t\treturn this.grid.isFreeSlot(this.x, this.y);\n\t\t},\n\t\twidgetSetup(){\n\t\t\tif (!this.widgetsSetup)\n\t\t\t\treturn;\n\t\t\treturn this.widgetsSetup.reduce((acc, ele) => { \n\t\t\t\tacc[ele.widget_id] =ele;\n\t\t\t\treturn acc;\n\t\t\t} ,{});\n\t\t},\n\t},\n\twatch: {\n\t\tactive(active) {\n\t\t\tif (!active)\n\t\t\t\tthis.dragCancel();\n\t\t},\n\t\tcols() {\n\t\t\tthis.dragCancel();\n\t\t},\n\t rows: {\n\t\t\thandler(value) {\n\t\t\t\tthis.$emit('gridHeight', value);\n\t\t\t},\n\t\t\timmediate: true\n\t\t},\n\t\tindexedItems: {\n\t\t\thandler(value) {\n\t\t\t\tthis.dragCancel();\n\n\t\t\t\tconst updated = this.createNewGrid(value);\n\n\t\t\t\tthis.fixedPositionUpdates = updated;\n\t\t\t\tif (updated.length)\n\t\t\t\t\tthis.$emit('rearrangeItems', updated.filter(v => v));\n\t\t\t},\n\t\t\timmediate: true,\n\t\t\tdeep: true\n\t\t}\n\t},\n\tmethods: {\n\t\tneedsReordering(item){\n\t\t\tif (!item?.data?.place[this.cols]){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\ttoggleDraggedItemOverlay(condition){\n\t\t\tif(!this.draggedNode)\n\t\t\t\treturn;\n\t\t\tif(condition){\n\t\t\t\tthis.draggedNode.firstElementChild.classList.add(\"dashboard-item-overlay\");\n\t\t\t}else{\n\t\t\t\tthis.draggedNode.firstElementChild.classList.remove(\"dashboard-item-overlay\");\n\t\t\t}\n\t\t},\n\t\tdragging(event){\n\t\t\tif(this.mode == MODE_MOVE){\n\t\t\t\tthis.toggleDraggedItemOverlay(true);\n\t\t\t\t\n\t\t\t\tconst containerRect = this.$refs.container.getBoundingClientRect();\n\t\t\t\tconst clonedWidgetRect = this.clonedWidget.getBoundingClientRect();\n\t\t\t\t\n\t\t\t\tlet desiredTop = this.clientY - 20;\n\t\t\t\tlet desiredLeft = this.clientX - 15;\n\t\t\t\t\n\t\t\t\tconst minTop = 0;\n\t\t\t\tconst maxTop = containerRect.height - clonedWidgetRect.height;\n\t\t\t\tconst minLeft = 0;\n\t\t\t\tconst maxLeft = containerRect.width - clonedWidgetRect.width;\n\t\t\t\t\n\t\t\t\tconst constrainedTop = Math.max(minTop, Math.min(maxTop, desiredTop));\n\t\t\t\tconst constrainedLeft = Math.max(minLeft, Math.min(maxLeft, desiredLeft));\n\t\t\t\t\n\t\t\t\tthis.clonedWidget.style.top = `${constrainedTop}px`;\n\t\t\t\tthis.clonedWidget.style.left = `${constrainedLeft}px`;\n\t\t\t}\n\t\t},\n\t\tcreateNewGrid(items) {\n\t\t\tthis.grid = new GridLogic(this.cols);\n\t\t\tconst result = [];\n\t\t\tlet sortedItems = [...items].sort((a, b) => {\n\t\t\t\tif(this.needsReordering(a) && this.needsReordering(b)){\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\telse if(this.needsReordering(a)){\n\t\t\t\t\treturn 999;\n\t\t\t\t}\n\t\t\t\telse if(this.needsReordering(b)){\n\t\t\t\t\treturn -999;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn a.weight > b.weight;\n\t\t\t}); \n\t\t\tlet reorderedItems = [];\n\t\t\tsortedItems.forEach(item => {\n\t\t\t\tlet freeSlots = this.grid.getFreeSlots();\n\t\t\t\t\n\t\t\t\tif(this.needsReordering(item)){\n\t\t\t\t\tlet firstFreeSlot = freeSlots.shift();\n\t\t\t\t\tif (!firstFreeSlot) {\n\t\t\t\t\t\titem.x = 0;\n\t\t\t\t\t\titem.y = this.grid.h;\n\t\t\t\t\t}else{\n\t\t\t\t\t\titem.x = firstFreeSlot.x;\n\t\t\t\t\t\titem.y = firstFreeSlot.y;\n\t\t\t\t\t}\n\t\t\t\t\treorderedItems.push(item);\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tif (item.x + item.w > this.cols) {\n\t\t\t\t\tlet targetW = this.cols-item.x,\n\t\t\t\t\t\ttargetX = undefined;\n\t\t\t\t\tif (this.resizeLimit) {\n\t\t\t\t\t\t[targetW] = this.resizeLimit(item.data, targetW, item.h);\n\t\t\t\t\t}\n\t\t\t\t\tif (targetW < 1)\n\t\t\t\t\t\ttargetW = 1;\n\t\t\t\t\tif (targetW > this.cols)\n\t\t\t\t\t\ttargetW = this.cols;\n\t\t\t\t\tif (item.x + targetW > this.cols) {\n\t\t\t\t\t\ttargetX = this.cols - targetW;\n\t\t\t\t\t}\n\t\t\t\t\tif (targetW == item.w)\n\t\t\t\t\t\ttargetW = undefined;\n\t\t\t\t\tresult[item.index] = {\n\t\t\t\t\t\titem: item.data,\n\t\t\t\t\t\tx: targetX,\n\t\t\t\t\t\tw: targetW\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\titem.frame = this.grid.getItemFrame(item);\n\t\t\t\tthis.convertGridResultToUpdate(this.grid.add(item), result, items);\n\t\t\t});\n\t\t\tthis.reorderedItems = reorderedItems;\n\t\t\tthis.grid.clearWeights();\n\t\t\treturn result;\n\t\t},\n\t\tconvertGridResultToUpdate(input, output, baseArray) {\n\t\t\t\n\t\t\tif (!input)\n\t\t\t\treturn;\n\t\t\tif (!baseArray)\n\t\t\t\tbaseArray = this.indexedItems;\n\t\t\tinput.forEach(item => {\n\t\t\t\tlet result = {\n\t\t\t\t\titem: baseArray[item.index].data\n\t\t\t\t};\n\t\t\t\tif (item.x !== undefined)\n\t\t\t\t\tresult.x = item.x;\n\t\t\t\tif (item.y !== undefined)\n\t\t\t\t\tresult.y = item.y;\n\t\t\t\tif (item.w !== undefined)\n\t\t\t\t\tresult.w = item.w;\n\t\t\t\tif (item.h !== undefined)\n\t\t\t\t\tresult.h = item.h;\n\t\t\t\toutput[item.index] = result;\n\t\t\t});\n\t\t},\n\t\tmouseLeave() {\n\t\t\t/* if (this.mode == MODE_IDLE) {\n\t\t\t\tthis.x = -1;\n\t\t\t\tthis.y = -1;\n\t\t\t\t\n\t\t\t} */\n\t\t},\n\t\tupdateCursor(evt) {\n\t\t\tif (!this.active) {\n\t\t\t\tthis.x = this.y = -1;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst addH = this.active ? this.marginForExtraRow : 0;\n\t\t\tconst rect = this.$refs.container.getBoundingClientRect();\n\t\t\t\n\t\t\tif (!evt.clientX && !evt.clientY && evt.touches){\n\t\t\t\tevt.clientX = evt.touches[0].clientX;\n\t\t\t\tevt.clientY = evt.touches[0].clientY;\n\t\t\t}\n\n\t\t\tthis.clientX = (evt.clientX - rect.left);\n\t\t\tthis.clientY = (evt.clientY - rect.top);\n\t\t\tconst gridX = Math.floor(this.cols * (evt.clientX - rect.left) / this.$refs.container.clientWidth);\n\t\t\tconst gridY = Math.floor((this.rows + addH) * (evt.clientY - rect.top) / this.$refs.container.clientHeight);\n\t\t\t\n\t\t\tif (this.x == gridX && this.y == gridY)\n\t\t\t\treturn false;\n\t\t\t\n\t\t\tthis.x = gridX;\n\t\t\tthis.y = gridY;\n\n\t\t\treturn true;\n\t\t},\n\t\t_dragStart(evt, item) {\n\t\t\tif (evt.dataTransfer) {\n\t\t\t\tevt.dataTransfer.setDragImage(evt.target, -99999, -99999);\n\t\t\t\tevt.dataTransfer.dropEffect = 'move';\n\t\t\t\tevt.dataTransfer.effectAllowed = 'move';\n\t\t\t}\n\t\t},\n\t\tstartMove(evt, item) {\n\t\t\t\n\t\t\tif (!this.active)\n\t\t\t\treturn;\n\t\t\t\n\t\t\tthis.mode = MODE_MOVE;\n\t\t\t\n\t\t\tthis.draggedItem = item;\n\t\t\t\n\t\t\tthis.$emit('draggedItem', item);\n\t\t\t// workaround for chrome fireing event dragend when styles are manipulated during dragging\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.draggedNode = evt.target.closest(\".drop-grid-item\");\n\t\t\t\t//clones the widget for the drag Image\n\t\t\t\t\n\t\t\t\tlet clone = evt.target.closest(\".drop-grid-item\")?.cloneNode(true);\n\n\t\t\t\tclone.style.zIndex = 5;\n\t\t\t\tclone.classList.add(\"widgetClone\");\n\t\t\t\tthis.$refs.container.appendChild(clone);\n\t\t\t\tconst hiddenWidget = clone.querySelector(\"[style='display: none;']\");\n\t\t\t\thiddenWidget.style.removeProperty(\"display\");\n\t\t\t\tthis.clonedWidget = clone;\n\t\t\t}, 0);\n\n\t\t\tthis.draggedOffset = [item.x - this.x, item.y - this.y];\n\t\t\tthis._dragStart(evt, item);\n\t\t},\n\t\tstartResize(evt, item) {\n\t\t\tif (!this.active)\n\t\t\t\treturn;\n\t\t\tthis.mode = MODE_RESIZE;\n\t\t\tthis.draggedItem = item;\n\t\t\tthis.$emit('draggedItem', item);\n\t\t\tthis._dragStart(evt);\n\t\t},\n\t\tdragOver(evt) {\n\t\t\tif ((this.y + 1) > this.rows && (this.mode == MODE_MOVE || this.mode == MODE_RESIZE)) {\n\t\t\t\tthis.dragCancel();\n\t\t\t\t\n\t\t\t}\n\t\t\tif (!this.active)\n\t\t\t\treturn this.dragCancel();\n\t\t\tthis.checkPinnedWidgetAnimation();\n\t\t\tif(this.mode == MODE_RESIZE){\n\t\t\t\tthis.checkWidgetSizeLimitAnimation();\n\t\t\t}\n\t\t\tif (this.updateCursor(evt)) {\n\t\t\t\tswitch(this.mode) {\n\t\t\t\t\tcase MODE_MOVE: {\n\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\tthis.dragGrid = new GridLogic(this.grid);\n\t\t\t\t\t\tlet x = this.x + this.draggedOffset[0];\n\t\t\t\t\t\tlet y = this.y + this.draggedOffset[1];\n\t\t\t\t\t\tif (x < 0) {\n\t\t\t\t\t\t\tthis.draggedOffset[0] += x;\n\t\t\t\t\t\t\tx = 0;\n\t\t\t\t\t\t} else if (x + this.draggedItem.w > this.cols) {\n\t\t\t\t\t\t\tthis.draggedOffset[0] += this.cols - this.draggedItem.w - x;\n\t\t\t\t\t\t\tx = this.cols - this.draggedItem.w;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (y < 0) {\n\t\t\t\t\t\t\tthis.draggedOffset[1] += y;\n\t\t\t\t\t\t\ty = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.positionUpdates= this.dragGrid.move(this.draggedItem, x, y);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase MODE_RESIZE: {\n\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\tthis.dragGrid = new GridLogic(this.grid);\n\t\t\t\t\t\tlet w = Math.min(this.cols - this.draggedItem.x, Math.max(1, this.x - this.draggedItem.x + 1));\n\t\t\t\t\t\tlet h = Math.max(1, this.y - this.draggedItem.y + 1);\n\t\t\t\t\t\tif (this.resizeLimit)\n\t\t\t\t\t\t\t[w, h] = this.resizeLimit(this.draggedItem.data, w, h);\n\t\t\t\t\t\tthis.positionUpdates = this.dragGrid.resize(this.draggedItem, w, h);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdragCancel() {\n\t\t\tthis.removeWidgetClones();\n\t\t\tthis.additionalRowComputed = false;\n\t\t\tthis.toggleDraggedItemOverlay(false);\n\t\t\tthis.mode = MODE_IDLE;\n\t\t\tthis.positionUpdates = null;\n\t\t\tthis.draggedOffset = [0,0],\n\t\t\tthis.draggedItem = null;\n\t\t\tthis.$emit('draggedItem',null);\n\t\t\tthis.draggedNode = null;\n\t\t\t\n\t\t},\n\t\tdragEnd() {\n\t\t\tthis.removeWidgetClones();\n\t\t\tthis.toggleDraggedItemOverlay(false);\n\t\t\t\n\t\t\tif (this.mode == MODE_IDLE){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// clean up unused classes\n\t\t\tlet draggedItemNode = document.getElementById(this.draggedItem.data.widgetid);\n\t\t\tdraggedItemNode.classList.remove(\"border-danger\");\n\t\t\tArray.from(document.getElementsByClassName(\"denied-dragging-animation\"))?.forEach(ele => {\n\t\t\t\tele.classList.remove(\"denied-dragging-animation\");\n\t\t\t})\n\t\t\t\n\t\t\t//if (!this.active || this.x < 0 || this.y < 0 || this.x >= this.cols)\n\t\t\t\t//return this.dragCancel();\n\n\t\t\tthis.mode = MODE_IDLE;\n\t\t\tlet updated = [];\n\t\t\tthis.convertGridResultToUpdate(this.positionUpdates, updated);\n\t\t\tupdated = this._updateFixedPositions(updated);\n\t\t\tif (updated.length)\n\t\t\t\tthis.$emit('rearrangeItems', updated.filter(v => v));\n\n\t\t\tthis.draggedItem = null;\n\t\t\tthis.draggedNode = null;\n\t\t\tthis.$emit('draggedItem', null);\n\t\t},\n\t\t_updateFixedPositions(updated) {\n\t\t\tupdated.forEach((item, index) => {\n\t\t\t\tif (!this.fixedPositionUpdates[index])\n\t\t\t\t\tthis.fixedPositionUpdates[index] = item;\n\t\t\t\telse\n\t\t\t\t\tthis.fixedPositionUpdates[index] = {...this.fixedPositionUpdates[index], ...item};\n\t\t\t});\n\t\t\tlet additionalUpdates = this.createNewGrid(this.prePlacedItems);\n\t\t\tif (additionalUpdates.length) {\n\t\t\t\t// NOTE(chris): this should never happen but it's here for safety\n\t\t\t\tadditionalUpdates.forEach((item, index) => updated[index] = item);\n\t\t\t\treturn this._updateFixedPositions(updated);\n\t\t\t}\n\t\t\treturn updated;\n\t\t},\n\t\temptyTileClicked() {\n\t\t\tthis.additionalRowComputed = false;\n\t\t\tthis.$emit('newItem', this.x, this.y);\n\t\t},\n\t\tupdateCursorOnMouseMove(evt){\n\t\t\tif(this.mode == MODE_IDLE){\n\t\t\t\tthis.updateCursor(evt);\n\t\t\t}\n\t\t},\n\t\tcheckPinnedWidgetAnimation(){\n\t\t\tlet itemAtPosition=[];\n\t\t\tswitch(this.mode){\n\t\t\t\tcase MODE_RESIZE:\n\t\t\t\t\tfor (let x = this.draggedItem.x; x <= this.x; x++) {\n\t\t\t\t\t\tfor (let y = this.draggedItem.y; y <= this.y; y++) {\n\t\t\t\t\t\t\tthis.items.forEach(item => {\n\t\t\t\t\t\t\t\tif (item.x == x && item.y == y) {\n\t\t\t\t\t\t\t\t\titemAtPosition.push(item);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase MODE_MOVE:\n\t\t\t\t\titemAtPosition = this.items.filter(item=>item.x == this.x && item.y == this.y);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tArray.from(document.getElementsByClassName(\"denied-dragging-animation\"))?.forEach(ele => {\n\t\t\t\tele.classList.remove(\"denied-dragging-animation\");\n\t\t\t})\n\n\t\t\titemAtPosition.forEach(item=>{\n\t\t\t\tif (item.place[this.cols] && item.place[this.cols].pinned) {\n\t\t\t\t\tlet pinnedWidget = document.getElementById(item.widgetid);\n\t\t\t\t\tlet pinNode = pinnedWidget.querySelector(\"[pinned='true']\");\n\t\t\t\t\tif (!pinNode.classList.contains(\"denied-dragging-animation\")) {\n\t\t\t\t\t\tpinNode.classList.add(\"denied-dragging-animation\");\n\t\t\t\t\t}\n\t\t\t\t}\t\n\t\t\t})\n\t\t},\n\t\tcheckWidgetSizeLimitAnimation() {\n\n\t\t\tlet draggedItemSetup = this.itemsSetup[this.draggedItem.data.widget];\n\t\t\tlet draggedItemMaxWidth = draggedItemSetup.width.max ?? draggedItemSetup.width;\n\t\t\tlet draggedItemMinWidth = draggedItemSetup.width.min ?? draggedItemSetup.width;\n\t\t\tlet draggedItemMaxHeight = draggedItemSetup.height.max ?? draggedItemSetup.height;\n\t\t\tlet draggedItemMinHeight = draggedItemSetup.height.min ?? draggedItemSetup.height;\n\t\t\tlet draggedItemNode = document.getElementById(this.draggedItem.data.widgetid);\n\n\t\t\tlet width_after_resize = this.x - this.draggedItem.x + 1; \n\t\t\tlet height_after_resize = this.y - this.draggedItem.y + 1; \n\t\t\tif( \n\t\t\t\t(width_after_resize > 0 && (width_after_resize > draggedItemMaxWidth\n\t\t\t\t|| width_after_resize < draggedItemMinWidth)\n\t\t\t\t)\n\t\t\t\t||\n\t\t\t\t(height_after_resize > 0 && (height_after_resize > draggedItemMaxHeight\n\t\t\t\t|| height_after_resize < draggedItemMinHeight)\n\t\t\t\t)\n\t\t\t){\n\t\t\t\tdraggedItemNode.classList.add(\"border-danger\");\n\t\t\t}else{\n\t\t\t\tdraggedItemNode.classList.remove(\"border-danger\");\n\t\t\t}\n\t\t},\n\t\tremoveWidgetClones(){\n\t\t\tlet widgetClones = Array.from(document.getElementsByClassName(\"widgetClone\"));\n\t\t\tfor (let i = 0; i < widgetClones.length; i++) {\n\t\t\t\tthis.$refs.container.removeChild(widgetClones[i]);\n\t\t\t}\n\t\t},\n\t\tmouseDown(){\n\t\t\tthis.mode = MODE_MOUSE_DOWN;\n\t\t},\n\t\tmouseUp() {\n\t\t\tthis.mode = MODE_IDLE;\n\t\t},\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t`\n}\n\n/*\nOLD VERSION - ON HOVER\n\n\t\n\n*/","let __widgets = {};\nlet __widgetsStarted = {};\nlet __path = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/dashboard/Widget';\n\nexport default {\n\tgetWidget(id) {\n\t\treturn __widgets[id];\n\t},\n\tloadWidget(id) {\n\t\tif (__widgets[id])\n\t\t\treturn Promise.resolve(__widgets[id]);\n\t\tif (__widgetsStarted[id])\n\t\t\treturn __widgetsStarted[id];\n\t\tif (!__path)\n\t\t\treturn Promise.reject('Widget could not be loaded because there is no path yet!');\n\n\t\t__widgetsStarted[id] = new Promise((resolve, reject) => {\n\t\t\taxios.get(__path, {params:{id}}).then(res => {\n\t\t\t\tres.data.retval.arguments = JSON.parse(res.data.retval.arguments);\n\t\t\t\tres.data.retval.setup = JSON.parse(res.data.retval.setup);\n\t\t\t\t__widgets[id] = res.data.retval;\n\t\t\t\t__widgetsStarted[id] = undefined;\n\t\t\t\tresolve(__widgets[id]);\n\t\t\t}).catch(error => reject(error.response.data.retval.error));\n\t\t});\n\t\treturn __widgetsStarted[id];\n\t},\n\tsetPath(path) {\n\t\t__path = path;\n\t}\n}","import BsModal from \"../Bootstrap/Modal.js\";\nimport CachedWidgetLoader from \"../../composables/Dashboard/CachedWidgetLoader.js\";\nimport HeightTransition from \"../Tranistion/HeightTransition.js\";\n\nexport default {\n\tname: 'Item',\n\tcomponents: {\n\t\tBsModal,\n\t\tHeightTransition\n\t},\n\tdata: () => ({\n\t\tcomponent: \"\",\n\t\targuments: null,\n\t\ttarget: false,\n\t\twidget: null,\n\t\ttmpConfig: {},\n\t\tisLoading: false,\n\t\thasConfig: false,\n\t\tsharedData: null,\n\t}),\n\temits: [\n\t\t\"change\",\n\t\t\"remove\",\n\t\t\"dragstart\",\n\t\t\"resizestart\",\n\t\t\"configOpened\",\n\t\t\"configClosed\",\n\t\t\"pinItem\",\n\t\t\"unPinItem\"\n\t],\n\tprops: [\n\t\t\"id\",\n\t\t\"widgetID\",\n\t\t\"config\",\n\t\t\"width\",\n\t\t\"height\",\n\t\t\"custom\",\n\t\t\"hidden\",\n\t\t\"editMode\",\n\t\t\"loading\",\n\t\t\"item_data\",\n\t\t\"place\",\n\t\t\"setup\",\n\t\t\"dragstate\",\n\t\t\"resizeOverlay\",\n\t\t\"additionalRow\"\n\t],\n\tcomputed: {\n\t\tmaxHeight(){\n\t\t\treturn this.setup?.height?.max;\n\t\t},\n\t\tmaxWidth(){\n\t\t\tif (Object.prototype.toString.call(this.setup?.width) == \"[object Number]\"){\n\t\t\t\treturn this.setup?.width;\n\t\t\t}\n\t\t\treturn this.setup?.width?.max;\n\t\t},\n\t\tminHeight() {\n\t\t\treturn this.setup?.height?.min;\n\t\t},\n\t\tminWidth() {\n\t\t\treturn this.setup?.width?.min;\n\t\t},\n\t\tisResizeable(){\n\t\t\treturn this.maxWidth >1 || this.maxHeight >1;\n\t\t},\n\t\tisPinned(){\n\t\t\treturn this.place?.pinned ? true : false;\n\t\t},\n\t\tready() {\n\t\t\treturn this.component && this.arguments !== null;\n\t\t},\n\t},\n\tmethods: {\n\t\tunpin(){\n\t\t\t// Unpinning is only possible in edit mode\n\t\t\tif(!this.editMode)\n\t\t\t\treturn;\n\t\t\tlet result = { item: this.item_data, x: this.item_data.x, y: this.item_data.y };\n\t\t\tthis.$emit('unPinItem', [result]);\n\t\t},\n\t\tpinItem(){\n\t\t\tlet result = { item: this.item_data, x: this.item_data.x, y: this.item_data.y};\n\t\t\tthis.$emit('pinItem',[result]);\n\t\t},\n\t\tgetWidgetC4Link(widget) {\n\t\t\treturn (FHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router + widget.setup.cis4link)\n\t\t},\n\t\thandleShowBsModal() {\n\t\t\tthis.$emit('configOpened')\n\t\t},\n\t\thandleHideBsModal() {\n\t\t\tthis.$emit('configClosed')\n\t\t},\n\t\tmouseDown(e) {\n\t\t\tthis.target = e.target;\n\t\t},\n\t\tstartDrag(e) {\n\t\t\tif (this.$refs.dragHandle.contains(this.target)) {\n\t\t\t\tthis.$emit(\"dragstart\", e);\n\t\t\t} else if (\n\t\t\t\tthis.isResizeable &&\n\t\t\t\tthis.$refs.resizeHandle.contains(this.target)\n\t\t\t) {\n\t\t\t\tif (this.isResizeable) this.$emit(\"resizestart\", e);\n\t\t\t\telse e.preventDefault();\n\t\t\t} else {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\topenConfig() {\n\t\t\tthis.tmpConfig = { ...this.arguments };\n\t\t\tthis.$refs.config.show();\n\t\t},\n\t\tsetConfig(hasConfig) {\n\t\t\tthis.hasConfig = hasConfig;\n\t\t},\n\t\tchangeConfig() {\n\t\t\tthis.isLoading = true;\n\t\t\tlet config = { ...this.tmpConfig };\n\t\t\tthis.sendChangeConfig(config);\n\t\t},\n\t\tchangeConfigManually() {\n\t\t\tlet config = { ...this.arguments };\n\t\t\tthis.sendChangeConfig(config);\n\t\t},\n\t\tsendChangeConfig(config) {\n\t\t\tfor (var k in config) {\n\t\t\t\tif (this.widget.arguments[k] == config[k]) {\n\t\t\t\tdelete config[k];\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$emit(\"change\", config);\n\t\t},\n\t},\n\twatch: {\n\t\tconfig() {\n\t\t\tthis.arguments = { ...this.widget?.arguments, ...this.config };\n\t\t\tthis.tmpConfig = { ...this.arguments };\n\t\t\tthis.$refs.config && this.$refs.config.hide();\n\t\t\tthis.isLoading = false;\n\t\t},\n\t},\n\tasync created() {\n\t\tthis.widget = await CachedWidgetLoader.loadWidget(this.id);\n\t\tlet component = (await import(FHC_JS_DATA_STORAGE_OBJECT.app_root + this.widget.setup.file + '?' + FHC_JS_DATA_STORAGE_OBJECT.fhcomplete_build_version)).default;\n\t\tthis.$options.components[\"widget\" + this.widget.widget_id] = component;\n\t\tthis.component = \"widget\" + this.widget.widget_id;\n\t\tthis.arguments = { ...this.widget.arguments, ...this.config };\n\t\tthis.tmpConfig = { ...this.arguments };\n\t},\n\ttemplate: /*html*/ `\n\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t
    \n\t
    \n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{{ widget.setup.name }}\n\t\t\t\n\t\t\t\n\t\t\t\n \t\t\n \t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t
    \n\t
    `,\n};\n","export default {\n\tdata(){\n\t\treturn {\n\n\t\t}\n\t},\n\tmethods:{\n\t\tonEnter(el,done){\n\t\t\tel.style.height = '0';\n\t\t\tel.style.height = el.scrollHeight + 'px';\n\t\t},\n\t\tonLeave(el,done){\n\t\t\tel.style.height = el.scrollHeight + 'px';\n\t\t\tel.style.height = '0';\n\t\t}\n\t},\n\ttemplate:\n\t/*html*/`\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t`,\n};","export default {\n\tdata(){\n\t\treturn {\n\n\t\t}\n\t},\n\tprops:{\n\t\twidget:{\n\t\t\ttype:Object,\n\t\t\trequired:true,\n\t\t}\n\t},\n\tmethods:{\n\t\tpath(src) {\n\t\t\tif (src[0] == '/')\n\t\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + src;\n\t\t\treturn src;\n\t\t}\n\t},\n\temits:[\"select\"],\n\ttemplate: /*html */`\n\t
    \n\t\t\n\t\t
    \n\t\t\t
    {{ widget.setup.name || widget.widget_kurzbz }}
    \n\t\t\t

    {{ widget.beschreibung }}

    \n\t\t
    \n\t
    `,\n}","import BsConfirm from \"../Bootstrap/Confirm.js\";\nimport DropGrid from '../Drop/Grid.js'\nimport DashboardItem from \"./Item.js\";\nimport CachedWidgetLoader from \"../../composables/Dashboard/CachedWidgetLoader.js\";\nimport WidgetIcon from \"./Widget/WidgetIcon.js\"\n\nexport default {\n\tname: 'Section',\n\tcomponents: {\n\t\tDropGrid,\n\t\tDashboardItem,\n\t\tWidgetIcon,\n\t},\n\tinject: {\n\t\twidgetsSetup:{\n\t\t\ttype: Array,\n\t\t\tdefault: [],\n\t\t},\n\t\tadminMode: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\teditMode: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\tprops: [\n\t\t\"name\",\n\t\t\"widgets\"\n\t],\n\temits: [\n\t\t\"widgetAdd\",\n\t\t\"widgetUpdate\",\n\t\t\"widgetRemove\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tconfigOpened: false,\n\t\t\tgridWidth: 1,\n\t\t\tgridHeight: null,\n\t\t\tdraggedItem:null,\n\t\t\tadditionalRow:false,\n\t\t}\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\teditModeIsActive: Vue.computed(() =>\n\t\t\t\tthis.editModeIsActive\n\t\t\t),\t\n\t\t\tsectionName: Vue.computed(() => this.name),\t\n\t\t}\n\t},\n\tcomputed: {\n\t\tcomputedWidgetsSetup(){\n\t\t\tif(!this.widgetsSetup) return {};\n\t\t\treturn this.widgetsSetup.reduce((acc, setup)=>{\n\t\t\t\tacc[setup.widget_id] = setup.setup;\n\t\t\t\treturn acc;\n\t\t\t},{})\n\t\t},\n\t\teditModeIsActive() {\n\t\t\treturn (this.editMode || this.adminMode) && !this.configOpened\t\n\t\t},\n\t\tgetSectionStyle() {\n\t\t\treturn 'margin-bottom: 8px;';\n\t\t},\n\t\titems() {\n\t\t\t// reuses the nearest placement of the widget from another viewport \n\t\t\t/* const computeNearestPlace = (item, gridWidth) =>{\n\t\t\t\tlet place;\n\t\t\t\tif (Object.keys(item.place).length > 0) {\n\t\t\t\t\tconst nearestIndex = Object.keys(item.place)\n\t\t\t\t\t\t\t\t\t\t\t .sort((a, b) => Math.abs(a - gridWidth) - Math.abs(b - gridWidth))\n\t\t\t\t\t\t\t\t\t\t\t .shift();\n\t\t\t\t\tplace = item.place[nearestIndex];\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tplace = { x: 0, y: 0, w: 1, h: 1 };\n\t\t\t\t}\n\t\t\t\treturn place;\n\t\t\t} */\n\t\t\t\n\t\t\tlet placedItems = this.widgets.map(item => {\n\t\t\t\tif(!item?.widgetid && item?.id){\n\t\t\t\t\titem.widgetid = item.id;\n\t\t\t\t}\n\t\t\t\treturn { ...item, reorder: false, ...(item.place[this.gridWidth] || { reorder: true, ...{ x: 0, y: 0, w: 1, h: 1 } })};\n\t\t\t});\n\t\t\treturn placedItems;\n\t\t\t\n\t\t},\n\t\t\n\t},\n\tmethods: {\n\t\tsectionNameTranslation(){\n\t\t\tswitch(this.name){\n\t\t\t\tcase \"general\": \n\t\t\t\t\treturn this.$p.t('dashboard',this.name); \n\t\t\t\t\tbreak;\n\t\t\t\tcase \"custom\":\n\t\t\t\t\treturn this.$p.t('dashboard',this.name);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn this.name;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tshowSectionInformation(){\n\t\t\tif (this.name == \"general\"){\n\t\t\t\treturn this.$p.t('dashboard', 'dashboardGeneralSectionDescription'); \n\t\t\t}\n\t\t\telse if(this.name == \"custom\"){\n\t\t\t\treturn this.$p.t('dashboard', 'dashboardCustomSectionDescription');\n\t\t\t}\n\t\t\telse{\n\t\t\t\treturn this.$p.t('dashboard', 'dashboardSectionDescription', [this.name]);\n\t\t\t}\n\t\t},\n\t\thandleConfigOpened() {\n\t\t\tthis.configOpened = true\n\t\t},\n\t\thandleConfigClosed() {\n\t\t\tthis.configOpened = false\n\t\t},\n\t\tcheckResizeLimit(item, w, h) {\n\t\t\t// NOTE(chris): widgets needs to be loaded for this to work\n\t\t\tlet widget = CachedWidgetLoader.getWidget(item.widget);\n\t\t\tif (widget) {\n\t\t\t\tlet minmaxW = widget.setup.width;\n\t\t\t\tif (minmaxW.max)\n\t\t\t\t\tminmaxW.min = minmaxW.min || 1;\n\t\t\t\telse\n\t\t\t\t\tminmaxW = {min:minmaxW,max:minmaxW};\n\t\t\t\tif (w < minmaxW.min)\n\t\t\t\t\tw = minmaxW.min; \n\t\t\t\tif (w > minmaxW.max)\n\t\t\t\t\tw = minmaxW.max;\n\n\t\t\t\tlet minmaxH = widget.setup.height;\n\t\t\t\tif (minmaxH.max)\n\t\t\t\t\tminmaxH.min = minmaxH.min || 1;\n\t\t\t\telse\n\t\t\t\t\tminmaxH = {min:minmaxH,max:minmaxH};\n\t\t\t\tif (h < minmaxH.min)\n\t\t\t\t\th = minmaxH.min;\n\t\t\t\tif (h > minmaxH.max)\n\t\t\t\t\th = minmaxH.max;\n\t\t\t}\n\t\t\treturn [w, h];\n\t\t},\n\t\tremoveWidget(item, revert) {\n\t\t\tif (item.custom) {\n\t\t\t\tBsConfirm.popup('Are you sure you want to delete this widget?').then(() => this.$emit('widgetRemove', this.name, item.id));\n\t\t\t} else {\n\t\t\t\tlet update = {};\n\t\t\t\tupdate[item.id] = { hidden: !revert };\n\t\t\t\tthis.updatePreset(update);\n\t\t\t}\n\t\t},\n\t\tsaveConfig(config, item) {\n\t\t\tlet payload = {};\n\t\t\tpayload[item.id] = { config };\n\t\t\tthis.updatePreset(payload);\n\t\t},\n\t\tupdatePositions(updated, pinned=false) {\n\t\t\tlet result = {};\n\t\t\tupdated.forEach(update => {\n\t\t\t\t\n\t\t\t\tlet item = {...update.item};\n\t\t\t\tif (!item.placeholder) {\n\t\t\t\tif (!item.place[this.gridWidth])\n\t\t\t\t\titem.place[this.gridWidth] = {x: 0, y: 0, w: 1, h: 1};\n\t\t\t\tdelete item.x;\n\t\t\t\tdelete item.y;\n\t\t\t\tdelete item.w;\n\t\t\t\tdelete item.h;\n\t\t\t\tdelete item.place[this.gridWidth].pinned;\n\t\t\t\tif (update.x !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].x = update.x;\n\t\t\t\tif (update.y !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].y = update.y;\n\t\t\t\tif (update.w !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].w = update.w;\n\t\t\t\tif (update.h !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].h = update.h;\n\t\t\t\tif (pinned){\n\t\t\t\t\titem.place[this.gridWidth].pinned = true;\n\t\t\t\t}\n\n\t\t\t\tresult[item.id] = item;\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.updatePreset(result);\n\t\t},\n\t\tupdatePreset(update) {\n\t\t\tlet payload = {};\n\t\t\tpayload[this.name] = update;\n\t\t\tthis.$emit('widgetUpdate', this.name, payload);\n\t\t}\n\t},\n\tmounted() {\n\t\tlet self = this;\n\t\tlet cont = self.$refs.container;\n\t\tself.gridWidth = parseInt(window.getComputedStyle(cont).getPropertyValue('--fhc-dashboard-grid-size'));\n\t\t\n\t\twindow.addEventListener('resize', () => {\n\t\t\tself.gridWidth = parseInt(window.getComputedStyle(cont).getPropertyValue('--fhc-dashboard-grid-size'));\n\t\t});\n\t},\n\ttemplate: `\n\t
    \n\t\t

    \n\t\t\t\n\t\t\t{{sectionNameTranslation()}}:\n\t\t

    \n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    `\n}\n\n/*\nOLD VERSION - ON HOVER\n\n*/","import BsModal from \"../../Bootstrap/Modal.js\";\nimport WidgetIcon from \"./WidgetIcon.js\";\n\nexport default {\n\tcomponents: {\n\t\tBsModal,\n\t\tWidgetIcon,\n\t},\n\tprops: [\n\t\t\"widgets\"\n\t],\n\tdata: () => ({\n\t\tcallbacks: {}\n\t}),\n\tmethods: {\n\t\tgetWidget() {\n\t\t\treturn new Promise((resolve,reject) => {\n\t\t\t\tthis.callbacks = {resolve,reject};\n\t\t\t\tthis.$refs.modal.show();\n\t\t\t});\n\t\t},\n\t\tclose() {\n\t\t\tif (this.callbacks.reject)\n\t\t\t\tthis.callbacks.reject();\n\t\t\tthis.callbacks = {};\n\t\t},\n\t\tpick(widget_id) {\n\t\t\tif (this.callbacks.resolve)\n\t\t\t\tthis.callbacks.resolve(widget_id);\n\t\t\tthis.callbacks = {};\n\t\t\tthis.$refs.modal.hide();\n\t\t},\n\t\t\n\t},\n\ttemplate: `
    \n\t\t 0}\" @hiddenBsModal=\"close\">\n\t\t\t\n\t\t\t\n\t\t\n\t
    `\n}\n","export default {\n\t/**\n\t* Performs a deep merge of objects and returns new object. Does not modify\n\t* objects (immutable) and merges arrays via concatenation.\n\t*\n\t* @param {...object} objects - Objects to merge\n\t* @returns {object} New object with merged key/values\n\t*/\n\tmergeDeep(...objects) {\n\t\tconst isObject = obj => obj && typeof obj === 'object';\n\t\t\n\t\treturn objects.reduce((prev, obj) => {\n\t\t\tObject.keys(obj).forEach(key => {\n\t\t\t\tconst pVal = prev[key];\n\t\t\t\tconst oVal = obj[key];\n\t\t\t\t\n\t\t\t\tif (Array.isArray(pVal) && Array.isArray(oVal)) {\n\t\t\t\t\tprev[key] = pVal.concat(...oVal);\n\t\t\t\t}\n\t\t\t\telse if (isObject(pVal) && isObject(oVal)) {\n\t\t\t\t\tprev[key] = this.mergeDeep(pVal, oVal);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tprev[key] = oVal;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\treturn prev;\n\t\t}, {});\n\t}\n}","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetViewData() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Cis4FhcApi/getViewData'\n\t\t};\n\t}\n};","import DashboardSection from \"./Section.js\";\nimport DashboardWidgetPicker from \"./Widget/Picker.js\";\nimport ObjectUtils from \"../../helpers/ObjectUtils.js\";\n\nimport ApiDashboard from '../../api/factory/cis/dashboard.js';\n\nexport default {\n\tname: 'Dashboard',\n\tcomponents: {\n\t\tDashboardSection,\n\t\tDashboardWidgetPicker\n\t},\n\tprops: {\n\t\tdashboard: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tdefault: 'CIS'\n\t\t},\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn value && value.name && value.uid && value.timezone\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tsections: [],\n\t\t\twidgets: null,\n\t\t\teditMode: false,\n\t\t\tviewDataInternal: this.viewData\n\t\t}\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\teditMode: Vue.computed(()=>this.editMode),\n\t\t\twidgetsSetup: Vue.computed(() => this.widgets),\n\t\t\ttimezone: Vue.computed(() => this.viewData.timezone)\n\t\t}\n\t},\n\tcomputed: {\n\t\tapiurl() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/dashboard';\n\t\t}\n\t},\n\tmethods: {\n\t\twidgetAdd(section_name, widget) {\n\t\t\tif (this.widgets === null) {\n\t\t\t\taxios.get(this.apiurl + '/Widget/getWidgetsForDashboard', {params:{\n\t\t\t\t\tdb: this.dashboard\n\t\t\t\t}}).then(res => {\n\t\t\t\t\tres.data.retval.forEach(widget => {\n\t\t\t\t\t\twidget.arguments = JSON.parse(widget.arguments);\n\t\t\t\t\t\twidget.setup = JSON.parse(widget.setup);\n\t\t\t\t\t});\n\t\t\t\t\tthis.widgets = res.data.retval;\n\t\t\t\t}).catch(err => console.error('ERROR:', err));\n\t\t\t}\n\t\t\tthis.$refs.widgetpicker.getWidget().then(widget_id => {\n\t\t\t\twidget.widget = widget_id;\n\t\t\t\twidget.id = 'loading_' + String((new Date()).valueOf());\n\t\t\t\tlet loading = {...widget};\n\t\t\t\tloading.loading = true;\n\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\tif (section.name == section_name)\n\t\t\t\t\t\tsection.widgets.push(loading);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\taxios.post(this.apiurl + '/Config/addWidgetsToUserOverride', {\n\t\t\t\t\tdb: this.dashboard,\n\t\t\t\t\tfunktion_kurzbz: section_name,\n\t\t\t\t\twidgets: [widget]\n\t\t\t\t}).then(result => {\n\t\t\t\t\tlet newId = Object.keys(result.data.retval.data[section_name].widgets).pop();\n\t\t\t\t\twidget.id = newId;\n\t\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\t\tif (section.name == section_name) {\n\t\t\t\t\t\t\tsection.widgets.splice(section.widgets.indexOf(loading),1);\n\t\t\t\t\t\t\tsection.widgets.push(widget);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}).catch(error => {\n\t\t\t\t\tconsole.error('ERROR: ', error);\n\t\t\t\t\talert('ERROR: ' + error.response.data.retval);\n\t\t\t\t});\n\t\t\t}).catch(() => {});\n\t\t},\n\t\twidgetUpdate(section_name, payload) {\n\t\t\tpayload = payload[section_name];\n\t\t\tfor (var k in payload) {\n\t\t\t\tfor (var i in this.sections) {\n\t\t\t\t\tif (this.sections[i].name == section_name) {\n\t\t\t\t\t\tfor (var wid in this.sections[i].widgets) {\n\t\t\t\t\t\t\tif (this.sections[i].widgets[wid].id == k) {\n\t\t\t\t\t\t\t\tpayload[k] = ObjectUtils.mergeDeep(this.sections[i].widgets[wid], payload[k]);\n\t\t\t\t\t\t\t\t// NOTE(chris): remove internal props\n\t\t\t\t\t\t\t\tfor (var prop in {_x:1,_y:1,_w:1,_h:1,index:1,id:1,preset:1})\n\t\t\t\t\t\t\t\t\tif (payload[k][prop])\n\t\t\t\t\t\t\t\t\t\tdelete payload[k][prop];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpayload[k].widgetid = k;\n\t\t\t}\n\t\t\taxios.post(this.apiurl + '/Config/addWidgetsToUserOverride', {\n\t\t\t\tdb: this.dashboard,\n\t\t\t\tfunktion_kurzbz: section_name,\n\t\t\t\twidgets: payload\n\t\t\t}).then(() => {\n\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\tif (section.name == section_name) {\n\t\t\t\t\t\tsection.widgets.forEach((widget, i) => {\n\t\t\t\t\t\t\tif (payload[widget.id]) {\n\t\t\t\t\t\t\t\tpayload[widget.id].id = widget.id;\n\t\t\t\t\t\t\t\tpayload[widget.id].index = widget.index;\n\t\t\t\t\t\t\t\tsection.widgets[i] = payload[widget.id];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}).catch(error => {\n\t\t\t\t// TODO(chris): revert placement on failure\n\t\t\t\tconsole.error('ERROR: ', error);\n\t\t\t\talert('ERROR: ' + error.response.data.retval);\n\t\t\t});\n\t\t},\n\t\twidgetRemove(section_name, id) {\n\t\t\taxios.post(this.apiurl + '/Config/removeWidgetFromUserOverride', {\n\t\t\t\tdb: this.dashboard,\n\t\t\t\tfunktion_kurzbz: section_name,\n\t\t\t\twidgetid: id\n\t\t\t}).then(() => {\n\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\tif (section.name == section_name)\n\t\t\t\t\t\tsection.widgets = section.widgets.filter(widget => widget.id != id);\n\t\t\t\t});\n\t\t\t}).catch(error => {\n\t\t\t\tconsole.error('ERROR: ', error);\n\t\t\t\talert('ERROR: ' + error.response.data.retval);\n\t\t\t});\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.$p.loadCategory('dashboard');\n\t\taxios.get(this.apiurl + '/Widget/getWidgetsForDashboard', {\n\t\t\tparams: {\n\t\t\t\tdb: this.dashboard\n\t\t\t}\n\t\t}).then(res => {\n\t\t\tres.data.retval.forEach(widget => {\n\t\t\t\twidget.arguments = JSON.parse(widget.arguments);\n\t\t\t\twidget.setup = JSON.parse(widget.setup);\n\t\t\t});\n\t\t\tthis.widgets = res.data.retval;\n\t\t}).catch(err => console.error('ERROR:', err));\n\n\t\taxios.get(this.apiurl + '/Config', {params:{\n\t\t\tdb: this.dashboard\n\t\t}}).then(res => {\n\t\t\tfor (var name in res.data.retval) {\n\t\t\t\tlet widgets = [];\n\t\t\t\tlet remove = [];\n\t\t\t\tfor (var wid in res.data.retval[name].widgets) {\n\t\t\t\t\tres.data.retval[name].widgets[wid].id = wid;\n\t\t\t\t\tif (res.data.retval[name].widgets[wid].custom || res.data.retval[name].widgets[wid].preset)\n\t\t\t\t\t\twidgets.push(res.data.retval[name].widgets[wid]);\n\t\t\t\t\telse\n\t\t\t\t\t\tremove.push(wid);\n\t\t\t\t}\n\t\t\t\tthis.sections.push({\n\t\t\t\t\tname: name,\n\t\t\t\t\twidgets: widgets\n\t\t\t\t});\n\t\t\t\tremove.forEach(wid => this.widgetRemove(name, wid));\n\t\t\t}\n\t\t\tthis.sections = this.sections.sort((section1, section2) => {\n\t\t\t\tif(section1.name == 'custom')\n\t\t\t\t\treturn 1;\n\t\t\t\tif (section2.name == 'custom')\n\t\t\t\t\treturn -1;\n\t\t\t\treturn section2.widgets.length - section1.widgets.length;\n\t\t\t});\n\t\t}).catch(err => console.error('ERROR:', err));\n\t},\n\tasync beforeMount() {\n\t\tif (!this.viewData.name || !this.viewData.uid) {\n\t\t\tconst res = await this.$api.call(ApiDashboard.getViewData());\n\t\t\tthis.viewDataInternal = res.data\n\t\t}\t\n\t},\n\ttemplate: `\n\t
    \n\t\t

    \n\t\t\t{{ $p.t('global/personalGreeting', [ viewDataInternal?.name ]) }}\n\t\t\t\n\t\t

    \n\t\t\n\t\t\n\t
    `\n}\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsearch(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/search';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchAdvanced(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/searchAdvanced';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchdummy(searchsettings) {\n\t\tconst url = 'public/js/apps/api/dummyapi.php/Search';\n\t\treturn this.$fhcApi.post(url, searchsettings);\n\t}\n};\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/loadModule/' + category);\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst payload = {categories, language}\n\t\treturn this.$fhcApi.post('/api/frontend/v1/phrasen/setLanguage', payload);\n\t},\n\tgetLanguage() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getLanguage', {});\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getAllLanguages', {});\n\t}\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetHeader(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/header',\n\t\t\t{ navigation_page }\n\t\t);\n\t},\n\tgetMenu: function(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/menu',\n\t\t\t{ navigation_page }\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/saveCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t);\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/applyFilterFields',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t);\n\t},\n\taddFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/addFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tgetFilter(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tabmeldung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/abmeldung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(stdsem, prestudent_id, grund) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/abmeldung/createAntrag', {\n\t\t\t\tstudiensemester: stdsem,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\tif (!Array.isArray(antrag_id))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t\t{ antrag_id }\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag_id.map(antrag => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t{ antrag_id: antrag.studierendenantrag_id },\n\t\t\t\t{ errorHeader: '#' + antrag.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t},\n\tunterbrechung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/unterbrechung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(studiensemester, prestudent_id, grund, datum_wiedereinstieg, attachment) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/createAntrag', {\n\t\t\t\tstudiensemester,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund,\n\t\t\t\tdatum_wiedereinstieg,\n\t\t\t\tattachment\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/cancelAntrag', {\n\t\t\t\tantrag_id\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t}\n\t},\n\twiederholung: {\n\t\tgetDetails(prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/' + prestudent_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tgetLvs(antrag_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getLvs/' + antrag_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tcreate(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/createAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/cancelAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tsaveLvs(forbiddenLvs, mandatoryLvs) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/saveLvs', {\n\t\t\t\tforbiddenLvs,\n\t\t\t\tmandatoryLvs\n\t\t\t});\n\t\t}\n\t},\n\tleitung: {\n\t\tgetStgs() {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getActiveStgs');\n\t\t},\n\t\tgetAntraege(url, config, params) {\n\t\t\treturn this.$fhcApi\n\t\t\t\t.get('/api/frontend/v1/studstatus/leitung/getAntraege/' + url)\n\t\t\t\t.then(res => res.data); // Return data for tabulator\n\t\t},\n\t\tgetHistory(antrag_id) {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getHistory/' + antrag_id)\n\t\t},\n\t\tgetPrestudents(query, signal) {\n\t\t\treturn this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/getPrestudents',\n\t\t\t\t{ query },\n\t\t\t\t{\n signal: signal,\n timeout: 30000\n }\n\t\t\t);\n\t\t},\n\t\tapprove(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treopen(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tunpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tobject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tapproveObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tdenyObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t}\n};","export default {\n\n getView: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getView/${uid}`,{}\n );\n },\n\n fotoSperre: function (value) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/fotoSperre/${value}`,\n {}\n );\n \n },\n\n isStudent: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isStudent`,\n {\n uid:uid,\n }\n );\n },\n\n isMitarbeiter: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isMitarbeiter/${uid}`,\n {}\n );\n },\n\n getZustellAdresse: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellAdresse`,{}\n );\n },\n\n getZustellKontakt: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellKontakt`,{}\n );\n },\n\n getGemeinden: function(nation,zip){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getGemeinden/${nation}/${zip}`,\n {}\n );\n \n },\n getAllNationen:function(){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Profil/getAllNationen\",{}\n );\n },\n}","export default {\n //! API calls for profil update requests\n \n getStatus: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getStatus`,{});\n },\n \n getTopic: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getTopic`,{});\n },\n \n acceptProfilRequest: function ({profil_update_id, uid, status_message, topic, requested_change}) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/acceptProfilRequest\",{profil_update_id, uid, status_message, topic, requested_change});\n },\n \n denyProfilRequest: function ({profil_update_id, uid, topic, status_message}) {\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/denyProfilRequest\",{profil_update_id,uid,topic,status_message});\n },\n \n insertFile: function (dms, replace = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n dms);\n\n },\n \n getProfilRequestFiles: function (requestID) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`,{});\n },\n \n selectProfilRequest: function (uid = null, id = null) {\n\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/selectProfilRequest`,\n {...(uid?{uid}:{}),\n ...(id?{id}:{})\n });\n },\n \n insertProfilRequest: function (topic, payload, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/insertProfilRequest\",\n {\n topic,\n payload,\n ...(fileID ? { fileID } : {}),\n });\n },\n \n updateProfilRequest: function (topic, payload, ID, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/updateProfilRequest`,\n {\n topic,\n payload,\n ID,\n ...(fileID ? { fileID: fileID } : {}),\n });\n },\n \n deleteProfilRequest: function (requestID) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/deleteProfilRequest`,\n {\n requestID,\n });\n },\n };\n ","\nexport default {\n\tgetRoomInfo(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getRoomplan',\n\t\t\t{ ort_kurzbz, start_date, end_date}\n\t\t);\n\t},\n\tgetStunden() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/Stunden',\n\t\t\t{}\n\t\t);\n\t},\n\tgetOrtReservierungen(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/LvPlan/getReservierungen/${ort_kurzbz}`,\n\t\t\t{ start_date, end_date}\n\t\t);\n\t},\n\tgetLvPlanReservierungen(start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getReservierungen',\n\t\t\t{ start_date, end_date }\n\t\t);\n\t},\n\tgetLehreinheitStudiensemester(lehreinheit_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${lehreinheit_id}`,\n\t\t\t{}\n\t\t);\n\t},\n\tstudiensemesterDateInterval(date) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${date}`,\n\t\t\t{}\n\t\t);\n\t},\n\tLvPlanEvents(start_date, end_date, lv_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/LvPlanEvents',\n\t\t\t{ start_date, end_date, lv_id }\n\t\t);\n\t},\n\t\n\t\n};","import verband from './stv/verband.js';\nimport students from './stv/students.js';\nimport filter from './stv/filter.js';\nimport konto from './stv/konto.js';\nimport group from './stv/group.js';\nimport kontakt from './stv/kontakt.js';\nimport prestudent from './stv/prestudent.js';\nimport status from './stv/status.js';\nimport details from './stv/details.js';\nimport exam from './stv/exam.js';\nimport abschlusspruefung from './stv/abschlusspruefung.js';\nimport grades from './stv/grades.js';\nimport mobility from './stv/mobility.js';\nimport archiv from './stv/archiv.js';\nimport documents from './stv/documents.js';\nimport exemptions from './stv/exemptions.js';\nimport jointstudies from \"./stv/jointstudies.js\";\nimport courselist from './stv/courselist.js';\n\nexport default {\n\tverband,\n\tstudents,\n\tfilter,\n\tkonto,\n\tgroup,\n\tkontakt,\n\tprestudent,\n\tstatus,\n\tdetails,\n\texam,\n\tabschlusspruefung,\n\tgrades,\n\tmobility,\n\tarchiv,\n\tdocuments,\n\texemptions,\n\tjointstudies,\n\tcourselist,\n\tconfigStudent() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/student');\n\t},\n\tconfigStudents() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/students');\n\t}\n};\n","export default {\n\tget() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/verband');\n\t},\n\tfavorites: {\n\t\tget() {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/stv/favorites');\n\t\t},\n\t\tset(favorites) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/stv/favorites/set', {\n\t\t\t\tfavorites\n\t\t\t});\n\t\t}\n\t}\n}","export default {\n\tuid(uid, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/uid/'\n\t\t\t+ encodeURIComponent(uid);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tprestudent(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/prestudent/'\n\t\t\t+ encodeURIComponent(prestudent_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tperson(person_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/person/'\n\t\t\t+ encodeURIComponent(person_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tverband(relative_path) {\n\t\treturn this.$fhcApi.getUri('api/frontend/v1/stv/students/' + relative_path);\n\t}\n}","export default {\n\tgetStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/filter/getStg');\n\t},\n\tsetStg(studiengang_kz) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/filter/setStg', {\n\t\t\tstudiengang_kz\n\t\t});\n\t}\n};","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/konto/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id),\n\t\t\t\tonly_open: self.filter,\n\t\t\t\tstudiengang_kz: self.studiengang_kz_intern ? self.stg_kz : ''\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tcheckDoubles(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/checkDoubles', data, {\n\t\t\tconfirmErrorHandler: error => true\n\t\t});\n\t},\n\tinsert(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/insert', data);\n\t},\n\tcounter(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/counter', data);\n\t},\n\tedit(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/update', data);\n\t},\n\tdelete(buchungsnr) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/delete', {buchungsnr});\n\t},\n\tgetBuchungstypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/konto/getBuchungstypen');\n\t}\n};","export default {\n\tgetGruppen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/Gruppen/getGruppen/' + params.id);\n\t},\n\tdeleteGroup(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/Gruppen/deleteGruppe/', params);\n\t}\n}","export default {\n\t//------------- address.js-----------\n\tgetAdressen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressen/' + params.id);\n\t},\n\taddNewAddress(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewAddress/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadAddress(address_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadAddress/', {address_id});\n\t},\n\tupdateAddress(form, address_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateAddress/' + address_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteAddress(address_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteAddress/', {address_id});\n\t},\n\tgetPlaces(plz) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getPlaces/' + plz);\n\t},\n\tgetFirmen(searchString) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getFirmen/' + searchString);\n\t},\n\tgetNations() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getNations/');\n\t},\n\tgetAdressentypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressentypen/');\n\t},\n\n\t//------------- bankverbindung.js-----------\n\tgetBankverbindung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getBankverbindung/' + params.id);\n\t},\n\taddNewBankverbindung(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewBankverbindung/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadBankverbindung(bankverbindung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadBankverbindung/', {bankverbindung_id});\n\t},\n\tupdateBankverbindung(form, bankverbindung_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateBankverbindung/' + bankverbindung_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteBankverbindung(bankverbindung_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteBankverbindung/', {bankverbindung_id});\n\t},\n\n\t//------------- contact.js-----------\n\tgetKontakte (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakte/' + params.id);\n\t},\n\taddNewContact(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewContact/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadContact(kontakt_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadContact/', {kontakt_id});\n\t},\n\tupdateContact(form, kontakt_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateContact/' + kontakt_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteContact(kontakt_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteContact/', {kontakt_id});\n\t},\n\tgetStandorteByFirma(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getStandorteByFirma/' + searchString);\n\t},\n\tgetKontakttypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakttypen/');\n\t}\n};","export default {\n\n//------------- Prestudent.js------------------------------------------------------\n\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\treturn \tthis.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/prestudent/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t);\n\t},\n\tupdatePrestudent(form, prestudent_id, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/prestudent/updatePrestudent/' + prestudent_id,\n\t\t\tdata\n\t\t);\n\t},\n\tgetBezeichnungZGV() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungZGV/');\n\t},\n\tgetBezeichnungMZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungMZgv/');\n\t},\n\tgetBezeichnungDZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungDZgv/');\n\t},\n\tgetStgs() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStgs/');\n\t},\n\tgetAusbildung() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAusbildung/');\n\t},\n\tgetAufmerksamdurch() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAufmerksamdurch/');\n\t},\n\tgetBerufstaetigkeit() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBerufstaetigkeit/');\n\t},\n\tgetTypenStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getTypenStg/');\n\t},\n\tgetBisstandort() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBisstandort/');\n\t},\n\n//------------- MultiStatus.js------------------------------------------------------\n\tgetHistoryPrestudent (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getHistoryPrestudent/' + params.id);\n\t},\n\tgetMaxSem(studiengang_kzs) {\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/status/getMaxSemester/', {studiengang_kzs});\n\t},\n\tadvanceStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/advanceStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tconfirmStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/confirmStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tisLastStatus(id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/isLastStatus/' + id);\n\t},\n\tdeleteStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/deleteStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tgetLastBismeldestichtag() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getLastBismeldestichtag/');\n\t},\n\n//------------- History.js------------------------------------------------------\n\tgetHistoryPrestudents (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getHistoryPrestudents/' + params.id);\n\t},\n\n}","export default {\n\n//------------- Modal.js------------------------------------------------------\n\n\tinsertStatus(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/status/insertStatus/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/status/loadStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tupdateStatus(form, {prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}, data) {\n\t\treturn this.$fhcApi.post(\n\t\t\tform,\n\t\t\t'api/frontend/v1/stv/status/updateStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester,\n\t\t\tdata\n\t\t);\n\t},\n\tgetStudienplaene(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudienplaene/' + prestudent_id);\n\t},\n\tgetStudiengang(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudiengang/' + prestudent_id);\n\t},\n\tgetStatusgruende() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusgruende/');\n\t},\n\tgetStati() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStati/');\n\t},\n\n//------------- Dropdown.js------------------------------------------------------\n\n\taddStudent(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/addStudent/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tchangeStatus(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/changeStatus/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tgetStatusarray() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusarray/');\n\t}\n}","export default {\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/student/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(url);\n\t},\n\tsave(form, prestudent_id, studiensemester_kurzbz, data) {\n\t\tlet url = 'api/frontend/v1/stv/student/save/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(form, url, data);\n\t},\n}\n","export default {\n\tgetPruefungen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getPruefungen/' + params.id);\n\t},\n\tloadPruefung(pruefung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/loadPruefung/' + pruefung_id);\n\t},\n\tgetTypenPruefungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getTypenPruefungen');\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/getAllLehreinheiten/', data)\n\t},\n\tgetLvsByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsByStudent/' + uid)\n\t},\n\tgetLvsandLesByStudent(uid, semester){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsandLesByStudent/' + uid + '/' + semester);\n\t},\n\tgetLvsAndMas(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsAndMas/' + uid)\n\t},\n\tgetMitarbeiterLv(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getMitarbeiterLv/' + id)\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getNoten');\n\t},\n\tcheckZeugnisnoteLv(data){\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/', data)\n\t},\n\taddPruefung(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/insertPruefung/', data);\n\t},\n\tupdatePruefung(form, id, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/updatePruefung/' + id, data);\n\t},\n\tdeletePruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/deletePruefung/' + id)\n\t}\n}","export default {\n\n\tgetAbschlusspruefung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/' + params.id);\n\t},\n\taddNewAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/', data\n\t\t);\n\t},\n\tloadAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/', {id});\n\t},\n\tupdateAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/', data\n\t\t);\n\t},\n\tdeleteAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/', {id});\n\t},\n\tgetTypenAbschlusspruefung(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/');\n\t},\n\tgetTypenAntritte(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/');\n\t},\n\tgetBeurteilungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/');\n\t},\n\tgetAkadGrade(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getAkadGrade/', {studiengang_kz});\n\t},\n\tgetTypStudiengang(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/', {studiengang_kz});\n\t},\n\tgetMitarbeiter(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/' + searchString);\n\t},\n\tgetPruefer(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getPruefer/' + searchString);\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getNoten/');\n\t},\n\tcheckForExistingExams(uids) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/', {uids}\n\t\t);\n\t}\n}","export default {\n\tlist() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/grades/list');\n\t},\n\tgetCertificate(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getCertificate/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetTeacherProposal(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getTeacherProposal/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetRepeaterGrades(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getRepeaterGrades/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tupdateCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, note, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/updateCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz,\n\t\t\t\tnote\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tdeleteCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/deleteCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyTeacherProposalToCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyTeacherProposalToCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id, lv_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate',\n\t\t\t{\n\t\t\t\tstudierendenantrag_lehrveranstaltung_id\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lv_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tgetGradeFromPoints(points, lehrveranstaltung_id, studiensemester_kurzbz, manualErrorHandling) {\n\t\tconst config = manualErrorHandling ? {errorHandling: false} : {};\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/grades/getGradeFromPoints',\n\t\t\t{\n\t\t\t\t\"points\": points,\n\t\t\t\t\"lehrveranstaltung_id\": lehrveranstaltung_id,\n\t\t\t\t\"studiensemester_kurzbz\": studiensemester_kurzbz\n\t\t\t},\n\t\t\tconfig\n\t\t\t);\n\t}\n}","export default {\n\tgetMobilitaeten (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getMobilitaeten/' + params.id);\n\t},\n\tgetProgramsMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getProgramsMobility/');\n\t},\n\taddNewMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/insertMobility/', data);\n\t},\n\tloadMobility(bisio_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/loadMobility/' + bisio_id);\n\t},\n\tupdateMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/updateMobility/', data);\n\t},\n\tdeleteMobility(bisio_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobility/' + bisio_id);\n\t},\n\tgetLVList(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLVList/' + studiengang_kz);\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/getAllLehreinheiten/', data)\n\t},\n\tgetLvsandLesByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLvsandLesByStudent/' + uid);\n\t},\n\tgetPurposes(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getPurposes/' + params.id);\n\t},\n\tgetSupports(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getSupports/' + params.id);\n\t},\n\tgetListPurposes() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListPurposes/');\n\t},\n\tgetListSupports() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListSupports/');\n\t},\n\tdeleteMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilityPurpose/' + params.bisio_id, params);\n\t},\n\taddMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilityPurpose/' + params.bisio_id, params);\n\t},\n\tdeleteMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilitySupport/' + params.bisio_id, params);\n\t},\n\taddMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilitySupport/' + params.bisio_id, params);\n\t},\n\n}","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/archiv/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id)\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tgetArchivVorlagen() {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/getArchivVorlagen');\n\t},\n\tarchive(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archive',\n\t\t\tdata\n\t\t);\n\t},\n\tarchiveSigned(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archiveSigned',\n\t\t\tdata\n\t\t);\n\t},\n\tupdate(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/update', data);\n\t},\n\tdelete({akte_id, studiengang_kz}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/delete', {akte_id, studiengang_kz});\n\t}\n};\n","export default {\n\tgetDocumentsUnaccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tgetDocumentsAccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsAccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tdeleteZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteZuordnung/' + params.prestudent_id + '/' + params.dokument_kurzbz);\n\t},\n\tcreateZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/createZuordnung/'\n\t\t\t+ params.prestudent_id + '/'\n\t\t\t+ params.dokument_kurzbz);\n\t},\n\tloadAkte(akte_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/loadAkte/' + akte_id);\n\t},\n\tgetDoktypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDoktypen/');\n\t},\n\tupdateFile(akte_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/updateAkte/' + akte_id,\n\t\t\tdata);\n\t},\n\tdeleteFile(akte_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteAkte/' + akte_id);\n\t},\n\tuploadFile(prestudent_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/uploadDokument/' + prestudent_id,\n\t\t\tdata);\n\t},\n}","export default {\n\tgetAnrechnungen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getAnrechnungen/' + params.id);\n\t},\n\tgetLehrveranstaltungen(prestudent_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/' + prestudent_id);\n\t},\n\tgetBegruendungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getBegruendungen/');\n\t},\n\tgetLvsKompatibel(lv_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLvsKompatibel/' + lv_id);\n\t},\n\tgetLektoren(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLektoren/' + studiengang_kz);\n\t},\n\taddNewAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/insertAnrechnung/', data);\n\t},\n\tloadAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/loadAnrechnung/' + anrechnung_id);\n\t},\n\teditAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/updateAnrechnung/', data);\n\t},\n\tdeleteAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/anrechnungen/deleteAnrechnung/' + anrechnung_id);\n\t},\n}","export default {\n\tgetStudies(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudien/' + params.id);\n\t},\n\tgetTypenMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/');\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/');\n\t},\n\tgetStudyprograms(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/');\n\t},\n\tgetListPartner(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/');\n\t},\n\tgetStatiPrestudent(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/');\n\t},\n\tloadStudy(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/loadStudie/' + id);\n\t},\n\tinsertStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/insertStudie/', data);\n\t},\n\tupdateStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/updateStudie/', data);\n\t},\n\tdeleteStudy(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/GemeinsameStudien/deleteStudie/' + id);\n\t},\n\n}","export default {\n\tgetCourselist(url, config, params) {\n\t\t//corresponding logic controller Stundenplan.php\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStundenplan/'\n\t\t\t+ params.student_uid + '/'\n\t\t\t+ params.start_date + '/'\n\t\t\t+ params.end_date + '/'\n\t\t\t+ params.group_consecutiveHours + '/'\n\t\t\t+ params.dbStundenplanTable\n\t\t);\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStudiensemester/');\n\t},\n}","import person from \"./notiz/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetNotizen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getUid/');\n\t},\n\taddNewNotiz(form, id, formData) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(form, notiz_id, formData){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getMitarbeiter/' + event);\n\t},\n\tisBerechtigt(id, type_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/isBerechtigt/');\n\t}\n}","import person from \"./betriebsmittel/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetAllBetriebsmittel(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/' + params.type + '/' + params.id);\n\t},\n\taddNewBetriebsmittel(form, person_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/' +\n\t\t\tperson_id, formData\n\t\t);\n\t},\n\tloadBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/' + betriebsmittelperson_id);\n\t},\n\tupdateBetriebsmittel(form, betriebsmittelperson_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/' + betriebsmittelperson_id,\n\t\t\tformData);\n\t},\n\tdeleteBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/' +\tbetriebsmittelperson_id);\n\t},\n\tgetTypenBetriebsmittel(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/');\n\t},\n\tloadInventarliste(query){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/' +\tquery);\n\t}\n}","export default {\n\tupdatePersonUnrulyStatus(person_id, unrulyParam) {\n\n\t\ttry {\n\t\t\tconst payload = {person_id, unruly: unrulyParam}\n\t\t\tconst url = '/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus';\n\t\t\treturn this.$fhcApi.post(url, payload, null);\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t},\n\tfilterPerson(payload, base = ''){\n\n\t\ttry {\n\t\t\tconst url = base + '/api/frontend/v1/checkperson/CheckPerson/filterPerson';\n\t\t\treturn axios.post(url, payload)\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t}\n}","export default {\n getContentID(ort_kurbz) {\n\t\treturn this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Ort/ContentID\",\n\t\t\t{ ort_kurzbz: ort_kurbz }\n\t\t);\n\t},\n\tgetRooms(datum, von, bis, typ, personenanzahl = 0) {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getRooms\",\n\t\t\t{ datum, von, bis, typ, personenanzahl }\n\t\t);\n\t},\n\tgetRoomTypes() {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getTypes\"\n\t\t);\n\t}\n}","export default {\n content(content_id, version=null, sprache=null, sichtbar=null) {\n return this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/content\",\n\t\t\t{ \n\t\t\t\tcontent_id: content_id,\n\t\t\t\t...(version?{version}:{}),\n\t\t\t\t...(sprache?{sprache}:{}),\n\t\t\t\t...(sichtbar?{sichtbar}:{}),\n }\n );\n },\n\t//api function used for the news View that renders the html\n\tgetNews(page = 1, page_size = 10, sprache) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNews\",\n\t\t\t{\n\t\t\t\tpage,\n\t\t\t\tpage_size,\n\t\t\t\tsprache,\n\t\t\t},\n\t\t);\n\t},\n\t//api function used for the widget component\n\tnews(limit) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/news\",\n\t\t\t{\n\t\t\t\tlimit: limit\n\t\t\t}\n\t\t);\n\t},\n\tgetNewsRowCount: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNewsRowCount\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetNewsExtra: function(){\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getStudiengangInfoForNews\",\n\t\t\t{}\n\t\t);\n\t}\n }","export default {\n getStudentenMail(lehreinheit_id) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Lehre/lvStudentenMail\",\n { lehreinheit_id: lehreinheit_id }\n );\n },\n\tgetLvInfo(studiensemester_kurzbz, lehrveranstaltung_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/LV/${studiensemester_kurzbz}/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentPruefungen(lehrveranstaltung_id){\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentProjektarbeiten(uid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getStudentProjektarbeiten/${uid}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentProjektabgaben(detail) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getStudentProjektabgaben`\n\t\t\t, {\n\t\t\t\tprojektarbeit_id: detail.projektarbeit_id,\n\t\t\t\tstudent_uid: detail.student_uid\n\t\t\t}\n\t\t);\n\t},\n\tpostStudentProjektarbeitEndupload(formData) {\n\t\tconst url = '/api/frontend/v1/Lehre/postStudentProjektarbeitEndupload';\n\t\tconst headers = {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\treturn this.$fhcApi.post(url, formData, headers)\n\t},\n\tpostStudentProjektarbeitZwischenabgabe(formData) {\n\t\tconst url = '/api/frontend/v1/Lehre/postStudentProjektarbeitZwischenabgabe';\n\t\tconst headers = {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\treturn this.$fhcApi.post(url, formData, headers)\n\t},\n\tgetStudentProjektarbeitAbgabeFile(paabgabe_id, student_uid) {\n\t\tconst url = `/Cis/Abgabetool/getStudentProjektarbeitAbgabeFile?paabgabe_id=${paabgabe_id}&student_uid=${student_uid}`;\n\n\t\twindow.location = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + url\n\t},\n\tgetMitarbeiterProjektarbeiten(uid, all) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getMitarbeiterProjektarbeiten?showall=${all}`\n\t\t\t, {}\n\t\t);\n\t},\n\tpostProjektarbeitAbgabe(termin) {\n\t\tconst payload = {\n\t\t\tpaabgabe_id: termin.paabgabe_id,\n\t\t\tpaabgabetyp_kurzbz: termin.bezeichnung.paabgabetyp_kurzbz,\n\t\t\tdatum: termin.datum,\n\t\t\tfixtermin: termin.fixtermin,\n\t\t\tinsertvon: termin.insertvon,\n\t\t\tkurzbz: termin.kurzbz,\n\t\t\tprojektarbeit_id: termin.projektarbeit_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/postProjektarbeitAbgabe';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t\t\n\t},\n\tdeleteProjektarbeitAbgabe(paabgabe_id) {\n\t\tconst payload = {\n\t\t\tpaabgabe_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/deleteProjektarbeitAbgabe';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t},\n\tpostSerientermin(datum, paabgabetyp_kurzbz, bezeichnung, kurzbz, projektarbeit_ids) {\n\t\tconst payload = {\n\t\t\tdatum, paabgabetyp_kurzbz, bezeichnung, kurzbz, projektarbeit_ids\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/postSerientermin';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t},\n\tfetchDeadlines(person_id) {\n\t\tconst payload = {\n\t\t\tperson_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/fetchDeadlines';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t}\n }","export default {\n getLvMenu(lvid, studiensemester_kurzbz) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/LvMenu/getLvMenu/${lvid}/${studiensemester_kurzbz}`,\n {}\n );\n },\n\n \n }","import person from \"./messages/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\t\tgetMessages(url, config, params) {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessages/' + params.id + '/' + params.type + '/' + params.size + '/' + params.page);\n\t\t},\n\t\tgetVorlagen(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagen/');\n\t\t},\n\t\tgetMsgVarsLoggedInUser(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/');\n\t\t},\n\t\tgetMessageVarsPerson(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessageVarsPerson/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetMsgVarsPrestudent(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsPrestudent/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPersonId(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getPersonId/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetUid(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getUid/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetVorlagentext(vorlage_kurzbz){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagentext/' + vorlage_kurzbz);\n\t\t},\n\t\tgetNameOfDefaultRecipient(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getNameOfDefaultRecipient/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPreviewText(params, data){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/getPreviewText/' + params.id + '/' + params.type_id,\n\t\t\t\tdata);\n\t\t},\n\t\tgetReplyData(messageId){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getReplyData/' + messageId);\n\t\t},\n\t\tsendMessageFromModalContext(form, id, data) {\n\t\t\treturn this.$fhcApi.post(form,'api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tsendMessage(id, data) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tdeleteMessage(messageId){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/deleteMessage/' + messageId);\n\t\t}\n}","export default {\n\tgetVorlagen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagen/');\n\t},\n\tgetVorlagenByLoggedInUser() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/');\n\t}\n}","export default {\n\n\tgetStudiensemester: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/components/Cis/Mylv/Studiensemester',\n\t\t\t{}\n\t\t);\n\t},\n\n\tgetAllStudienSemester: function (studiensemester=undefined, studiengang=undefined, semester=undefined, studienplan=undefined) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/Studium/getStudienAllSemester',\n\t\t\t{studiensemester, studiengang, semester, studienplan}\n\t\t);\n\t},\n\n\tgetStudiengaengeForStudienSemester: function (studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${studiensemester}`,\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudienplaeneBySemester: function (studiengang, studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudienplaeneBySemester`,\n\t\t\t{\n\t\t\t\tstudiengang,\n\t\t\t\tstudiensemester,\n\t\t\t}\n\t\t);\n\t},\n\tgetLvPlanForStudiensemester: function (studiensemester, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${studiensemester}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\tgetLvEvaluierungInfo: function (studiensemester_kurzbz, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getLvEvaluierungInfo/${studiensemester_kurzbz}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\t\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport search from \"./search.js\";\nimport phrasen from \"./phrasen.js\";\nimport navigation from \"./navigation.js\";\nimport filter from \"./filter.js\";\nimport studstatus from \"./studstatus.js\";\nimport profil from \"./profil.js\";\nimport profilUpdate from \"./profilUpdate.js\";\nimport lvPlan from \"./lvPlan.js\";\nimport bookmark from \"./bookmark.js\";\nimport stv from \"./stv.js\";\nimport notiz from \"./notiz.js\";\nimport betriebsmittel from \"./betriebsmittel.js\";\nimport checkperson from \"./checkperson.js\";\nimport ampeln from \"./ampeln.js\";\nimport ort from \"./ort.js\";\nimport cms from \"./cms.js\";\nimport lehre from \"./lehre.js\";\nimport addons from \"./addons.js\";\nimport messages from \"./messages.js\";\nimport vorlagen from \"./vorlagen.js\";\nimport studiengang from \"./studiengang.js\";\nimport menu from \"./menu.js\";\nimport dashboard from \"./dashboard.js\";\nimport authinfo from \"./authinfo.js\";\nimport studium from \"./studium.js\";\nimport language from \"./language.js\";\n\nexport default {\n search,\n phrasen,\n navigation,\n dashboard,\n filter,\n studstatus,\n profil,\n profilUpdate,\n lvPlan,\n bookmark,\n stv,\n notiz,\n betriebsmittel,\n checkperson,\n ampeln,\n ort,\n cms,\n lehre,\n addons,\n messages,\n vorlagen,\n addons,\n\tstudiengang,\n\tmenu,\n\tauthinfo,\n\tstudium,\n language\n};\n","export default {\n\tasync getViewData() {\n\t\tconst url = `/api/frontend/v1/Cis4FhcApi/getViewData`;\n\t\treturn this.$fhcApi.get(url, null, null)\n\t},\n}","export default {\n\n getBookmarks: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/getBookmarks`\n ,{}\n );\n },\n \n delete: function (bookmark_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/delete/${bookmark_id}`\n ,{}\n ); \n },\n\n\tupdate: function ({ bookmark_id, url, title, tag=null}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/Bookmark/update/${bookmark_id}`\n\t\t\t, {\n\t\t\t\turl: url,\n\t\t\t\ttitle: title\n\t\t\t}\n\t\t);\n\t},\n\n insert: function ({url, title, tag}) {\n return this.$fhcApi.post(\n `/api/frontend/v1/Bookmark/insert`\n ,{\n url: url,\n title: title,\n tag: tag\n }\n ); \n },\n}","export default {\n \n open: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/open`,{});\n },\n\n all: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/all`,{});\n },\n\n confirm: function (ampel_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/confirm/${ampel_id}`,{});\n },\n\n}","export default {\n\tstudiengangInformation: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Studgang/getStudiengangInfo\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudiengangByKz: function (studiengang_kz) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz\",\n\t\t\t{\n\t\t\t\t\"studiengang_kz\": studiengang_kz\n\t\t\t}\n\t\t);\n\t}\n}","export default {\n\tgetMenu: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/CisMenu/getMenu\",\n\t\t\t{}\n\t\t);\n\t}\n\n}","\nexport default {\n\tgetAuthUID() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthUID',\n\t\t\t{ }\n\t\t);\n\t},\n\tgetAuthInfo() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthInfo',\n\t\t\t{}\n\t\t);\n\t},\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAll() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/language/get');\n\t}\n};","/** TODO(chris):\n * when deleting this file be sure to\n * remove line 1 & 90 from ../plugins/Phrasen.js\n */\nimport FhcApiFactory from '../api/fhcapifactory.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$fhcApi) {\n\t\t\t/* Deprecated Code start */\n\t\t\tif (options?.factory) {\n\t\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\t\tapp.config.globalProperties.$fhcApi.factory.addEndpoints(options.factory);\n\t\t\t}\n\t\t\t/* Deprecated Code end */\n\t\t\treturn;\n\t\t}\n\n\t\tfunction _get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\n\t\tfunction _clean_return_value(response) {\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = {response};\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tconst baseURL = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\";\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(response => {\n\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\treturn _clean_return_value(response);\n\n\t\t\t// NOTE(chris): loop through errors\n\t\t\tif (response.data.errors)\n\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t);\n\n\t\t\treturn _clean_return_value(response);\n\t\t}, error => {\n\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\n\t\t\tif (error.config?.errorHandling == 'off'\n\t\t\t\t|| error.config?.errorHandling === false\n\t\t\t\t|| error.config?.errorHandling == 'success')\n\t\t\t\treturn Promise.reject(error);\n\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL, true);\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t\t}\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\terror.response.data.errors = error.response.data.errors.filter(\n\t\t\t\t\terr => (error.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, error.config)\n\t\t\t\t);\n\t\t\t\tif (!error.response.data.errors.length)\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else if (error.request) {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertError(error.message);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t}\n\n\t\t\treturn Promise.reject(error);\n\t\t});\n\n\t\tapp.config.globalProperties.$fhcApi = {\n\t\t\tgetUri(url) {\n\t\t\t\tconsole.warn('$fhcApi.getUri is DEPRECATED! Use $api.getUri instead.');\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\tconsole.warn('$fhcApi.get is DEPRECATED! Use $api.get instead.');\n\t\t\t\t[uri, params, config] = _get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\tconsole.warn('$fhcApi.post is DEPRECATED! Use $api.post instead.');\n\t\t\t\t[uri, data, config] = _get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\t_defaultErrorHandlers: {\n\t\t\t\tvalidation(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form) {\n\t\t\t\t\t\tconfig.form.clearValidation();\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.messages);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(error.messages)) {\n\t\t\t\t\t\terror.messages.forEach($fhcAlert.alertError);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (typeof error.messages == 'object') {\n\t\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t\tObject.values(error.messages).forEach(\n\t\t\t\t\t\t\t\tvalue => $fhcAlert.alertDefault(\n\t\t\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tObject.entries(error.messages).forEach(\n\t\t\t\t\t\t\t\t([key, value]) => $fhcAlert.alertDefault('error', key, value, true)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tgeneral(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form)\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.message);\n\t\t\t\t\telse if (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertError(error.message);\n\t\t\t\t},\n\t\t\t\tphp(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('warn', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('info', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\texception(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tdb(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tauth(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertDefault('error', error.message, message);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/* Deprecated Code start */\n\t\tclass FhcApiFactoryWrapper {\n\t\t\tconstructor(factorypart, root) {\n\t\t\t\tif (root === undefined) {\n\t\t\t\t\tthis.$fhcApi = {\n\t\t\t\t\t\tgetUri(url) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.getUri(url);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget(form, uri, params, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.get(form, uri, params, config);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpost(form, uri, data, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.post(form, uri, data, config);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tObject.defineProperty(this.$fhcApi, 'factory', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.factory;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tapp.config.globalProperties.$fhcApi.factory = this;\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty(this, '$fhcApi', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\treturn (root || this).$fhcApi;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.addEndpoints(factorypart, true)\n\t\t\t}\n\n\t\t\taddEndpoints(factorypart, noWarn) {\n\t\t\t\tObject.keys(factorypart).forEach(key => {\n\t\t\t\t\tObject.defineProperty(this, key, {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tif (typeof factorypart[key] == 'function')\n\t\t\t\t\t\t\t\treturn factorypart[key].bind(this);\n\t\t\t\t\t\t\treturn new FhcApiFactoryWrapper(factorypart[key], this.$fhcApi.factory);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tif (!noWarn) console.warn('$fhcApi.factory.addEndpoints() is DEPRECATED!');\n\t\t\t}\n\t\t}\n\n\t\tconst factory = new FhcApiFactoryWrapper(FhcApiFactory);\n\t\tif (options?.factory) {\n\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\tfactory.addEndpoints(options.factory);\n\t\t}\n\n\t\tapp.config.globalProperties.$fhcApi.factory = factory;\n\t\t/* Deprecated Code end */\n\t\t\n\t\tapp.provide('$fhcApi', app.config.globalProperties.$fhcApi);\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n//--------------------------------------------------------------------------------------------------------------------\n// Configs\n\n// To see debug messages into the browser console set this parameter as true\nconst CORE_REST_CLIENT_DEBUG = false;\n\n// Default timeout (milliseconds)\nconst CORE_REST_CLIENT_TIMEOUT = 5000;\n\n//--------------------------------------------------------------------------------------------------------------------\n// Constants\n\n// Success\nconst CORE_REST_CLIENT_SUCCESS = 0;\n\n// Properties present in a response\nconst CORE_REST_CLIENT_ERROR = \"error\";\nconst CORE_REST_CLIENT_RETVAL = \"retval\";\n\n// HTTP method parameters\nconst CRC_HTTP_GET_METHOD = \"get\";\nconst CRC_HTTP_POST_METHOD = \"post\";\n\n/**\n * Definition and initialization of the object CoreRESTClient\n */\nexport const CoreRESTClient = {\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Public methods\n\n\t/**\n\t * Performs a call using the HTTP GET method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tget: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_GET_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Performs a call using the HTTP POST method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tpost: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_POST_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Checks if the response is a success\n\t */\n\tisSuccess: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR)\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL) && response.error == CORE_REST_CLIENT_SUCCESS)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Checks if the response is an error\n\t */\n\tisError: function(response) {\n\t\treturn !CoreRESTClient.isSuccess(response);\n\t},\n\n\t/**\n\t * Checks if the response has data\n\t */\n\thasData: function(response) {\n\n\t\tif (CoreRESTClient.isSuccess(response))\n\t\t{\n\t\t\tif ((typeof response[CORE_REST_CLIENT_RETVAL] === \"object\" && Object.keys(response[CORE_REST_CLIENT_RETVAL]).length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"array\" && response[CORE_REST_CLIENT_RETVAL].length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"string\" && response[CORE_REST_CLIENT_RETVAL].trim() != \"\")\n\t\t\t\t|| typeof response[CORE_REST_CLIENT_RETVAL] === \"number\")\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Retrives data from response object\n\t */\n\tgetData: function(response) {\n\n\t\tif (CoreRESTClient.hasData(response))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Retrives error message from response object\n\t */\n\tgetError: function(response) {\n\n\t\tif (typeof response === \"object\"\n\t\t\t&& Object.keys(response).length > 0\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn \"Generic error\";\n\t},\n\n\t/**\n\t * Retrives code from response object\n\t */\n\tgetErrorCode: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_ERROR];\n\t\t}\n\n\t\treturn 1; // Generic error\n\t},\n\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Private methods\n\n\t/**\n\t * Generate the router URI using the connection parameters\n\t */\n\t_generateRouterURI: function(wsURL) {\n\t\tvar uri = null;\n\n\t\t// Checks if global JS object FHC_JS_DATA_STORAGE_OBJECT exists\n\t\tif (typeof FHC_JS_DATA_STORAGE_OBJECT !== \"undefined\")\n\t\t{\n\t\t\turi = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\" + wsURL;\n\t\t}\n\n\t\treturn uri;\n\t},\n\n\t/**\n\t * Method to print debug info after a controller has been called\n\t */\n\t_printDebug: function(parameters, response, errorThrown) {\n\n\t\tif (CORE_REST_CLIENT_DEBUG === true) // If global const CORE_REST_CLIENT_DEBUG is true, but really true!\n\t\t{\n\t\t\t// Print info about called controller\n\t\t\tconsole.log(\"Called controller: \" + parameters.remoteController);\n\t\t\tconsole.log(\"Call parameters:\"); // parameters given to this call\n\t\t\tconsole.log(parameters);\n\n\t\t\tif (response != null) // if there is a response...\n\t\t\t{\n\t\t\t\tconsole.log(\"Controller Response:\");\n\t\t\t\tconsole.log(response); // ...print it\n\t\t\t}\n\t\t\tif (errorThrown != null) // if there is a jQuery error...\n\t\t\t{\n\t\t\t\tconsole.log(\"jQuery error:\");\n\t\t\t\tconsole.log(errorThrown); // ...print it\n\t\t\t}\n\t\t\tconsole.log(\"--------------------------------------------------------------------------------------------\");\n\t\t}\n\t},\n\n\t/**\n\t * Performs a call to the server were the CI PHP layer is running\n\t * - wsURL: alias of the core controller to call\n\t * - wsParameters: parameters to give to the called controller\n\t * - type: POST or GET HTTP method\n\t * - axiosParameters: an object to configure the axios call\n\t */\n\t_axiosCall: function(wsURL, wsParameters, type, axiosParameters) {\n\n\t\t// Axios config object\n\t\tlet axiosCallObj = {\n\t\t\tmethod: type,\n\t\t\turl: CoreRESTClient._generateRouterURI(wsURL),\n\t\t\ttimeout: CORE_REST_CLIENT_TIMEOUT // default time out\n\t\t};\n\n\t\t// The ajax call is HTTP GET\n\t\tif (type == CRC_HTTP_GET_METHOD)\n\t\t{\n\t\t\taxiosCallObj.params = wsParameters;\n\t\t}\n\t\t// The ajax call is HTTP POST\n\t\telse\n\t\t{\n\t\t\taxiosCallObj.data = wsParameters;\n\t\t}\n\n\t\t// Check if axiosParameters is an object\n\t\tif (typeof axiosParameters === \"object\")\n\t\t{\n\t\t\t// And then copies the its properties into axiosCallObj\n\t\t\tfor (var prop in axiosParameters) axiosCallObj[prop] = axiosParameters[prop];\n\t\t}\n\n\t\t// Perform the ajax call via axios\n\t\treturn axios(axiosCallObj);\n\t}\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n * \n * @usage:\n * Preperations:\n * Be sure to have PrimeVue loaded with the toast and confirmdialog\n * components as primevue variable\n * Install:\n * Import this Plugin and install it with the app.use() function.\n * Use:\n * In your component you can call now the global property $fhcAlert\n * which has the following functions:\n * \n * alertSuccess\n * ------------\n * Displays a success message\n * @param string\tmessage\n * @return void\n * \n * alertInfo\n * ---------\n * Displays an info message\n * @param string\tmessage\n * @return void\n * \n * alertWarning\n * ------------\n * Displays a warning\n * @param string\tmessage\n * @return void\n * \n * alertError\n * ----------\n * Displays an error\n * @param string\tmessage\n * @return void\n * \n * alertSystemError\n * ----------------\n * Displays an alert with the error details and a button to mail\n * the error to the Support Team\n * @param string\tmessage\n * @return void\n * \n * confirmDelete\n * -------------\n * Displays a confirmation dialog and returns a Promise which resolves\n * with true or false depending und the pressed button.\n * @return Promise\n * \n * alertDefault\n * ------------\n * Displays an alert\n * @param string\tseverity\t\tcan be 'success', 'info', 'warning', 'error'\n * @param string\ttitle\n * @param string\tmessage\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * alertMultiple\n * -------------\n * Displays multiple alerts\n * @param array\t\tmessageArray\n * @param string\tseverity\t\t(optional) defaults to 'info'\n * @param string\ttitle\t\t\t(optional) defaults to 'Info'\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * handleSystemError\n * -----------------\n * Automatiticly determine how to display an system error and display it.\n * This would be used in a catch block of an ajax call.\n * @param mixed\t\terror\n * @return void\n * \n * handleSystemMessage\n * -------------------\n * Automatiticly determine how to display a message and display it.\n * @param mixed\t\tmessage\n * @return void\n */\nimport PvConfig from \"../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js\";\nimport PvToast from \"../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js\";\nimport PvConfirm from \"../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js\";\nimport PvConfirmationService from \"../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js\";\nimport FhcPhrasen from \"./Phrasen.js\";\n\nimport {CoreRESTClient} from '../RESTClient.js';\n\nconst helperAppContainer = document.createElement('div');\n\nconst helperApp = Vue.createApp({\n\tname: \"FhcAlertApp\",\n\tcomponents: {\n\t\tPvToast,\n\t\tPvConfirm\n\t},\n\tmethods: {\n\t\tmailToUrl(slotProps) {\n\t\t\tlet mailTo = FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto;\n\t\t\tlet subject = 'Meldung%20Systemfehler';\n\t\t\tlet body = `\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: ` + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method + `%0D%0A\n\t\t\t\tFehler Meldung: ` + slotProps.message.detail + `%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!`\n\n\t\t\treturn \"mailto:\" + mailTo + \"?subject=\" + subject + \"&body=\" + body;\n\t\t},\n\t\topenMessagecard(e) {\n\t\t\tbootstrap.Collapse.getOrCreateInstance(e.target.getAttribute('href')).toggle();\n\t\t}\n\t},\n\tunmounted() {\n\t\thelperAppContainer.parentElement.removeChild(helperAppContainer);\n\t},\n\tcomputed: {\n\t\tshowmaillink: function() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto !== '';\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t`\n});\n\nhelperApp.use(PvConfig);\nhelperApp.use(PvConfirmationService);\n//helperApp.use(FhcPhrasen);\n\nconst helperAppInstance = helperApp.mount(helperAppContainer);\n\ndocument.body.appendChild(helperAppContainer);\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (!app.config.globalProperties.$p)\n\t\t\tapp.use(FhcPhrasen);\n\n\t\tconst $fhcAlert = {\n\t\t\talertSuccess(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSuccess);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'success', summary: 'Info', detail: message, life: 1000});\n\t\t\t},\n\t\t\talertInfo(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertInfo);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'info', summary: 'Info', detail: message, life: 3000 });\n\t\t\t},\n\t\t\talertWarning(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertWarning);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'warn', summary: 'Achtung', detail: message});\n\t\t\t},\n\t\t\talertError(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertError);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'error', summary: 'Achtung', detail: message });\n\t\t\t},\n\t\t\talertSystemError(message) {\n\t\t\t\t//TODO(Manu) for translation of content of template: restructure in data\n\t\t\t\t//and update definitions with translations\n\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSystemError);\n\t\t\t\thelperAppInstance.$refs.alert.add({\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t\tsummary: Vue.computed(() => app.config.globalProperties.$p.t('alert/systemerror')),\n\t\t\t\t\tdetail: message});\n\t\t\t},\n\t\t\tconfirmDelete() {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: 'fhcAlertConfirm',\n\t\t\t\t\t\theader: Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: Vue.computed(() => app.config.globalProperties.$p.t('alert/confirm_delete')),\n\t\t\t\t\t\tacceptLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/loeschen')),\n\t\t\t\t\t\tacceptClass: 'p-button-danger',\n\t\t\t\t\t\trejectLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: 'p-button-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tconfirm(options) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: options?.group ?? 'fhcAlertConfirm',\n\t\t\t\t\t\theader: options?.header ?? Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: options?.message ?? '',\n\t\t\t\t\t\tacceptLabel: options?.acceptLabel ?? 'Ok',\n\t\t\t\t\t\tacceptClass: options?.acceptClass ?? 'btn btn-primary',\n\t\t\t\t\t\trejectLabel: options?.rejectLabel ?? Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: options?.rejectClass ?? 'btn btn-outline-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\talertDefault(severity, title, message, sticky = false, html = false) {\n\t\t\t\tlet options = { severity: severity, summary: title, detail: message, html };\n\t\t\t\t\n\t\t\t\tif (!sticky)\n\t\t\t\t\toptions.life = 3000;\n\n\t\t\t\thelperAppInstance.$refs.toast.add(options);\n\t\t\t},\n\t\t\talertMultiple(messageArray, severity = 'info', title = 'Info', sticky = false, html = false){\n\t\t\t\t// Check, if array has only string values\n\t\t\t\tif (messageArray.every(message => typeof message === 'string')) {\n\t\t\t\t\tmessageArray.forEach(message => this.alertDefault(severity, title, message, sticky, html));\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\thandleSystemError(error) {\n\t\t\t\t// don't show an error message to the user if the error was an aborted request\n\t\t\t\tif(error.hasOwnProperty('name') && error.name.toLowerCase() === \"AbortError\".toLowerCase())\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is string\n\t\t\t\tif (typeof error === 'string')\n\t\t\t\t\treturn $fhcAlert.alertSystemError(error);\n\n\t\t\t\t// Error is array of strings\n\t\t\t\tif (Array.isArray(error) && error.every(err => typeof err === 'string'))\n\t\t\t\t\treturn error.every($fhcAlert.alertSystemError);\n\n\t\t\t\t// Error has been handled already\n\t\t\t\tif (error.hasOwnProperty('handled') && error.handled)\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is object\n\t\t\t\tif (typeof error === 'object' && error !== null) {\n\t\t\t\t\tlet errMsg = '';\n\n\n\t\t\t\t\tif (error.hasOwnProperty('response') && error.response?.data?.retval)\n\t\t\t\t\t\terrMsg += 'Error Message: ' + (error.response.data.retval.message || error.response.data.retval) + '\\r\\n';\n\t\t\t\t\telse if (error.hasOwnProperty('message'))\n\t\t\t\t\t\terrMsg += 'Error Message: ' + error.message.toUpperCase() + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('config') && error.config.hasOwnProperty('url'))\n\t\t\t\t\t\terrMsg += 'Error ConfigURL: ' + error.config.url + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('stack'))\n\t\t\t\t\t\terrMsg += 'Error Stack: ' + error.stack + '\\r\\n';\n\t\t\t\t\t\n\t\t\t\t\t// Fallback object error message\n\t\t\t\t\tif (errMsg == '')\n\t\t\t\t\t\terrMsg = 'Error Message: ' + JSON.stringify(error) + '\\r\\n';\n\n\t\t\t\t\terrMsg += 'Error Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\n\t\t\t\t\treturn $fhcAlert.alertSystemError(errMsg);\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\thandleSystemMessage(message) {\n\t\t\t\t// Message is string\n\t\t\t\tif (typeof message === 'string')\n\t\t\t\t\treturn $fhcAlert.alertWarning(message);\n\n\t\t\t\t// Message is array of strings\n\t\t\t\tif (Array.isArray(message)) {\n\t\t\t\t\t// If Array has only Strings\n\t\t\t\t\tif (message.every(msg => typeof msg === 'string'))\n\t\t\t\t\t\treturn message.every($fhcAlert.alertWarning);\n\n\t\t\t\t\t// If Array has only Objects\n\t\t\t\t\tif (message.every(msg => typeof msg === 'object') && msg !== null) {\n\t\t\t\t\t\treturn message.every(msg => {\n\t\t\t\t\t\t\tif (msg.hasOwnProperty('data') && msg.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(msg.data.retval));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(msg));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Message is Object with data property\n\t\t\t\tif (typeof message === 'object' && message !== null){\n\t\t\t\t\tif (message.hasOwnProperty('data') && message.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t// NOTE(chris): changed: alertSystemError => alertWarning\n\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(message.data.retval));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(message));\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\tresetFormValidation(form) {\n\t\t\t\tconst event = new Event('fhc-form-reset');\n\t\t\t\tform.querySelectorAll(['[data-fhc-form-validate],[data-fhc-form-error]']).forEach(el => el.dispatchEvent(event));\n\t\t\t\t/*const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\tif (alert) {\n\t\t\t\t\talert.innerHTML = '';\n\t\t\t\t\talert.classList.add('d-none');\n\t\t\t\t}\n\t\t\t\tform.querySelectorAll('.invalid-feedback').forEach(n => n.remove());\n\t\t\t\tform.querySelectorAll('.is-invalid').forEach(n => n.classList.remove('is-invalid'));\n\t\t\t\tform.querySelectorAll('.is-valid').forEach(n => n.classList.remove('is-valid'));*/\n\t\t\t},\n\t\t\thandleFormValidation(error, form) {\n\t\t\t\tif (form === undefined) {\n\t\t\t\t\tif (error && error.nodeType === Node.ELEMENT_NODE)\n\t\t\t\t\t\treturn err => $fhcAlert.handleFormValidation(err, error);\n\t\t\t\t} else {\n\t\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t\tif (typeof errors !== \"object\")\n\t\t\t\t\t\t\terrors = error.response.data;\n\n\t\t\t\t\t\t// NOTE(chris): reset form validation\n\t\t\t\t\t\t$fhcAlert.resetFormValidation(form);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// NOTE(chris): set form input validation\n\t\t\t\t\t\tconst notFound = Object.entries(errors).filter(([key, detail]) => {\n\t\t\t\t\t\t\tconst input = form.querySelector('[data-fhc-form-validate=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\tinput.dispatchEvent(new CustomEvent('fhc-form-invalidate', {detail}));\n\n\t\t\t\t\t\t\t/*const input = form.querySelector('[name=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\tinput.classList.add('is-invalid');\n\t\t\t\t\t\t\tconst feedback = document.createElement('div');\n\t\t\t\t\t\t\tfeedback.classList.add('invalid-feedback');\n\t\t\t\t\t\t\tfeedback.innerHTML = detail;\n\t\t\t\t\t\t\tinput.after(feedback);*/\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}).map(arr => arr[1]);\n\n\n\t\t\t\t\t\t//const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\t\t\tconst alert = form.querySelector('[data-fhc-form-error]');\n\t\t\t\t\t\tif (alert && notFound.length) {\n\t\t\t\t\t\t\talert.dispatchEvent(new CustomEvent('fhc-form-error', {detail: notFound}));\n\t\t\t\t\t\t\t/*notFound.forEach(txt => {\n\t\t\t\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\t\t\t\tp.innerHTML = txt;\n\t\t\t\t\t\t\t\talert.append(p);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (notFound.length) {\n\t\t\t\t\t\t\t\talert.lastChild.classList.add('mb-0');\n\t\t\t\t\t\t\t\talert.classList.remove('d-none');\n\t\t\t\t\t\t\t}*/\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnotFound.forEach($fhcAlert.alertError);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t$fhcAlert.alertError((typeof errors === 'object') ? Object.values(errors) : errors);\n\t\t\t\t} else {\n\t\t\t\t\t$fhcAlert.handleSystemError(error);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tapp.config.globalProperties.$fhcAlert = $fhcAlert;\n\t\tapp.provide('$fhcAlert', app.config.globalProperties.$fhcAlert);\n\t}\n}","import FhcAlert from './FhcAlert.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$api) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!app.config.globalProperties.$fhcAlert)\n\t\t\tapp.use(FhcAlert);\n\n\t\tfunction _send_array_or_object(errors, func) {\n\t\t\tif (Array.isArray(errors))\n\t\t\t\terrors.forEach(func);\n\t\t\telse\n\t\t\t\tObject.entries(errors).forEach(\n\t\t\t\t\t([title, errs]) => errs.forEach(\n\t\t\t\t\t\terror => func(error, title)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t}\n\t\tlet DEFAULT_ERROR_CONFIG = {\n\t\t\tsuccess: true,\n\t\t\tfail: true,\n\t\t\tcombine: {\n\t\t\t\tform: ['validation', 'general'],\n\t\t\t\ttoast: ['validation', 'general', 'not_found', 'site_failed']\n\t\t\t},\n\t\t\thandler: {\n\t\t\t\tform(form, errors) {\n\t\t\t\t\tform.clearValidation();\n\t\t\t\t\terrors.forEach(err => form.setFeedback(\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\terr.messages || err.message\n\t\t\t\t\t));\n\t\t\t\t},\n\t\t\t\tasync toast(errors) {\n\t\t\t\t\tconst $p = app.config.globalProperties.$p;\n\t\t\t\t\tif (!$p)\n\t\t\t\t\t\treturn Promise.reject('Phrasen plugin not loaded!');\n\t\t\t\t\n\t\t\t\t\tasync function _format_toast(errors) {\n\t\t\t\t\t\terrors = errors.reduce((result, err) => {\n\t\t\t\t\t\t\tswitch (err.type) {\n\t\t\t\t\t\t\tcase 'not_found':\n\t\t\t\t\t\t\tcase 'site_failed':\n\t\t\t\t\t\t\t\tif (err.message)\n\t\t\t\t\t\t\t\t\tresult[err.message] = [err.url];\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tresult._default = [err.url];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'general':\n\t\t\t\t\t\t\t\tif (!result._default)\n\t\t\t\t\t\t\t\t\tresult._default = [];\n\t\t\t\t\t\t\t\tresult._default.push(err.message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'validation':\n\t\t\t\t\t\t\t\tObject.entries(err.messages)\n\t\t\t\t\t\t\t\t\t.forEach(([field, msg]) => {\n\t\t\t\t\t\t\t\t\t\tif (!result[field])\n\t\t\t\t\t\t\t\t\t\t\tresult[field] = [];\n\t\t\t\t\t\t\t\t\t\tif (Array.isArray(msg))\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(...msg);\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(msg);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}, {});\n\t\t\t\t\t\tlet counter = 0;\n\t\t\t\t\t\tconst msgs = await Promise.all(Object.entries(errors)\n\t\t\t\t\t\t\t.sort((a, b) => ['_default'].indexOf(b[0]) - ['_default'].indexOf(a[0])) // sort _default first\n\t\t\t\t\t\t\t.map(async ([field, msgs]) => {\n\t\t\t\t\t\t\t\tif (field == '_default') {\n\t\t\t\t\t\t\t\t\tawait $p.loadCategory('dashboard');\n\t\t\t\t\t\t\t\t\tconst general = $p.t('dashboard/general');\n\t\t\t\t\t\t\t\t\tfield = '
    ' + general + '
    ';\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfield = '
    ' + field + '
    ';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcounter += msgs.length;\n\t\t\t\t\t\t\t\treturn field\n\t\t\t\t\t\t\t\t\t+ '
    '\n\t\t\t\t\t\t\t\t\t+ msgs.join('
    ')\n\t\t\t\t\t\t\t\t\t+ '
    ';\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcounter,\n\t\t\t\t\t\t\tmsgs\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet counter, msgs;\n\t\t\t\t\tif (Array.isArray(errors)) {\n\t\t\t\t\t\t({ counter, msgs } = await _format_toast(errors));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t({ counter, msgs } = await Object.entries(errors)\n\t\t\t\t\t\t\t.reduce(async (res, [title, errs]) => {\n\t\t\t\t\t\t\t\tconst result = await res;\n\t\t\t\t\t\t\t\tconst { counter, msgs } = await _format_toast(errs);\n\t\t\t\t\t\t\t\tresult.counter += counter;\n\t\t\t\t\t\t\t\tresult.msgs.push('
    '\n\t\t\t\t\t\t\t\t\t+ title\n\t\t\t\t\t\t\t\t\t+ '
    '\n\t\t\t\t\t\t\t\t\t+ msgs.join('')\n\t\t\t\t\t\t\t\t\t+ '
    ');\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}, Promise.resolve({ counter: 0, msgs: []})));\n\t\t\t\t\t}\n\n\t\t\t\t\tawait $p.loadCategory('ui');\n\t\t\t\t\tconst n_errors = $p.t('ui/n_errors', { n: counter });\n\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\tn_errors,\n\t\t\t\t\t\t'
    ' + msgs.join('') + '
    ',\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tphp(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('warn', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('info', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\tmessage = title + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\texception(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tdb(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tauth(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\ttitle += ': ' + error.message;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ttitle = error.message;\n\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (options?.errorHandling !== undefined)\n\t\t\tDEFAULT_ERROR_CONFIG = _merge_error_config(options.errorHandling);\n\t\t\n\t\tfunction get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\t\tfunction clean_return_value(response) {\n\t\t\tif (typeof response.data === 'string' || response.data instanceof String)\n\t\t\t\treturn clean_return_value({ data: response });\n\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result)\n\t\t\t\treturn {meta: {response}, data: null};\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = { response };\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tfunction _merge_error_config(config) {\n\t\t\tif (config === false || config === 'off')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false, fail: false };\n\t\t\t\n\t\t\tif (!config || config === true)\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tif (config === 'success')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, fail: false };\n\t\t\t\n\t\t\tif (config === 'fail')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false };\n\t\t\t\n\t\t\tconst { success, fail, handler, combine } = config;\n\t\t\t\n\t\t\tconfig = { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tObject.entries({ fail, success }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = value;\n\t\t\t});\n\t\t\tObject.entries({ handler, combine }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = { ...config[key], ...value };\n\t\t\t});\n\n\t\t\treturn config;\n\t\t}\n\t\tfunction get_error_handler(config) {\n\t\t\tconst result = _merge_error_config(config?.errorHandling);\n\n\t\t\tif (!config?.form) {\n\t\t\t\tresult.combine = { ...result.combine, form: [] };\n\t\t\t} else {\n\t\t\t\tconst formHandler = result.handler.form;\n\t\t\t\tresult.handler = { ...result.handler, form: errors => formHandler(config.form, errors) };\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t\tfunction get_error_list(error) {\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\treturn [{\n\t\t\t\t\t\ttype: 'not_found',\n\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t\t}];\n\t\t\t\t} else {\n\t\t\t\t\tif (error.response.data.errors == undefined) return [];\n\t\t\t\t\treturn error.response.data.errors;\n\t\t\t\t}\n\t\t\t} else if (error.request) {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'site_failed',\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t}];\n\t\t\t} else {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'script',\n\t\t\t\t\tmessage: error.message\n\t\t\t\t}];\n\t\t\t}\n\t\t}\n\t\tfunction popHandleableErrors(errorHandling, errors) {\n\t\t\tconst result = {};\n\t\t\tconst copy = [];\n\n\t\t\tif (errors == undefined) return {};\n\n\t\t\twhile (errors.length)\n\t\t\t\tcopy.push(errors.pop());\n\t\t\tfor (var error of copy) {\n\t\t\t\tlet type = error.type;\n\t\t\t\tlet newType = null;\n\t\t\t\tfor (var t in errorHandling.combine) {\n\t\t\t\t\tlet newTypeCombinesType = errorHandling\n\t\t\t\t\t\t.combine[t]\n\t\t\t\t\t\t.includes(type);\n\t\t\t\t\tlet newTypeHasHandler = errorHandling.handler[t];\n\t\t\t\t\tif (newTypeCombinesType && newTypeHasHandler) {\n\t\t\t\t\t\tnewType = t;\n\t\t\t\t\t\tif (newType == 'form')\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (newType)\n\t\t\t\t\ttype = newType;\n\t\t\t\tconst handler = errorHandling.handler[type];\n\t\t\t\tif (handler) {\n\t\t\t\t\tif (!result[type])\n\t\t\t\t\t\tresult[type] = [];\n\t\t\t\t\tif (Array.isArray(error))\n\t\t\t\t\t\tresult[type].push(...error);\n\t\t\t\t\telse\n\t\t\t\t\t\tresult[type].push(error);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\terrors.push(error);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t+ FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(\n\t\t\tresponse => {\n\t\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\t\treturn clean_return_value(response);\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\tif (response.data.errors)\n\t\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$api._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t\t);\n\n\t\t\t\treturn clean_return_value(response);\n\t\t\t},\n\t\t\terror => {\n\t\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\n\t\t\t\tconst errorConfig = get_error_handler(error.config);\n\n\t\t\t\tif (!errorConfig.fail)\n\t\t\t\t\treturn Promise.reject(error);\n\n\t\t\t\tconst remaining = get_error_list(error);\n\n\t\t\t\tconst errors = popHandleableErrors(errorConfig, remaining);\n\n\t\t\t\tfor (var type in errors) {\n\t\t\t\t\terrorConfig.handler[type](errors[type]);\n\t\t\t\t}\n\n\t\t\t\tif (remaining.length)\n\t\t\t\t\treturn Promise.reject(error);\n\t\t\t\t\n\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\t\t\t}\n\t\t);\n\n\t\tapp.config.globalProperties.$api = {\n\t\t\tgetUri(url) {\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\t[uri, params, config] = get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\t[uri, data, config] = get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\tcall(factory, configoverwrite, form) {\n\t\t\t\tif (Array.isArray(factory)) {\n\t\t\t\t\tconst $api = app.config.globalProperties.$api;\n\n\t\t\t\t\treturn Promise\n\t\t\t\t\t\t.allSettled(factory.map((config, index) => {\n\t\t\t\t\t\t\tif (!Array.isArray(config))\n\t\t\t\t\t\t\t\tconfig = ['#' + index, config];\n\t\t\t\t\t\t\treturn $api.call(config[1], {\n\t\t\t\t\t\t\t\terrorHeader: config[0],\n\t\t\t\t\t\t\t\terrorHandling: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}))\n\t\t\t\t\t\t.then(result => {\n\t\t\t\t\t\t\tconst [ , , config ] = get_config(form, undefined, undefined, configoverwrite || {});\n\t\t\t\t\t\t\tconst errorConfig = get_error_handler(config);\n\n\t\t\t\t\t\t\tif (!errorConfig.success && !errorConfig.fail) {\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst typedErrors = {};\n\t\t\t\t\t\t\tfor (var res of result) {\n\t\t\t\t\t\t\t\tconst [ allowed, item ] = res.status === 'fulfilled'\n\t\t\t\t\t\t\t\t\t? [ errorConfig.success, res.value ]\n\t\t\t\t\t\t\t\t\t: [ errorConfig.fail, res.reason ];\n\t\t\t\t\t\t\t\tif (!allowed)\n\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\tconst errors = popHandleableErrors(errorConfig, get_error_list(item));\n\n\t\t\t\t\t\t\t\tfor (var type in errors) {\n\t\t\t\t\t\t\t\t\tif (!typedErrors[type])\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type] = {\n\t\t\t\t\t\t\t\t\t\t\t[item.config.errorHeader]: errors[type]\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type][item.config.errorHeader] = errors[type];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfor (var errType in typedErrors) {\n\t\t\t\t\t\t\t\terrorConfig.handler[errType](typedErrors[errType]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tlet { method, url, params, config } = factory;\n\t\t\t\tif (configoverwrite !== undefined) {\n\t\t\t\t\tconfig = configoverwrite;\n\t\t\t\t}\n\t\t\t\tif (!method) {\n\t\t\t\t\tmethod = 'get';\n\t\t\t\t}\n\t\t\t\tif (method.toLowerCase)\n\t\t\t\t\tmethod = method.toLowerCase();\n\t\t\t\tif (method == 'get') {\n\t\t\t\t\treturn this.get(form, url, params, config);\n\t\t\t\t} else if (method == 'post') {\n\t\t\t\t\treturn this.post(form, url, params, config);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"FhcApi: method not allowed:\", method);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tapp.provide('$api', app.config.globalProperties.$api);\n\t}\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/loadModule/' + category\n\t\t};\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst params = {categories, language}\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/phrasen/setLanguage',\n\t\t\tparams\n\t\t};\n\t},\n\tgetLanguage() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getLanguage'\n\t\t};\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getAllLanguages'\n\t\t};\n\t}\n};","import OldFhcApi from '../plugin/OldFhcApi.js'; // TODO(chris): remove at some point\nimport PluginsApi from './Api.js';\nimport ApiPhrasen from '../api/factory/phrasen.js';\n\nconst categories = Vue.reactive({});\nconst loadingModules = {};\nlet user_language = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language);\nexport let user_locale = Vue.computed(()=>{\n\tif(!user_language.value) return null;\n\treturn FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(language => language.sprache == user_language.value).LC_Time;\n});\n\nfunction extractCategory(obj, category) {\n\treturn obj.filter(e => e.category == category).reduce((res, elem) => {\n\t\tif (!res[elem.phrase])\n\t\t\tres[elem.phrase] = elem.text;\n\t\treturn res;\n\t}, {});\n}\nfunction getValueForLoadedPhrase(category, phrase, params) {\n\tlet result = categories[category][phrase];\n\tif (!result)\n\t\treturn '<< PHRASE ' + phrase + '>>';\n\tif (params)\n\t\tresult = result.replace(/\\{([^}]*)\\}/g, (match, p1) => params[p1] === undefined ? match : params[p1]);\n\treturn result;\n}\n\nconst phrasen = {\n\tuser_language,\n\tuser_locale,\n\tsetLanguage(language) {\n\t\tconst catArray = Object.keys(categories)\n\t\treturn this.config.globalProperties.$api\n\t\t\t.call(ApiPhrasen.setLanguage(catArray, language))\n\t\t\t.then(res => {\n\t\t\t\tres.data.forEach(row => {\n\t\t\t\t\tcategories[row.category][row.phrase] = row.text\n\t\t\t\t})\n\n\t\t\t\t// update the reactive data that holds the current active user_language\n\t\t\t\tuser_language.value = language;\n\n\t\t\t\treturn res\n\t\t\t})\n\t},\n\tloadCategory(category) {\n\t\tif (Array.isArray(category))\n\t\t\treturn Promise.all(category.map(this.config.globalProperties\n\t\t\t\t.$p.loadCategory));\n\n\t\tif (!loadingModules[category])\n\t\t\tloadingModules[category] = this.config.globalProperties.$api\n\t\t\t\t.call(ApiPhrasen.loadCategory(category))\n\t\t\t\t.then(res => res?.data ? extractCategory(res.data, category) : {})\n\t\t\t\t.then(res => {\n\t\t\t\t\tcategories[category] = res;\n\t\t\t\t});\n\t\treturn loadingModules[category];\n\t},\n\tt_ref(category, phrase, params) {\n\t\tconsole.warn('deprecated');\n\t\treturn Vue.computed(() => this.t(category, phrase, params));\n\t},\n\tt(category, phrase, params) {\n\t\tif (params === undefined && (\n\t\t\t(Array.isArray(category) && category.length == 2) ||\n\t\t\t(category.split && category.split('/').length == 2))\n\t\t\t) {\n\t\t\tparams = phrase;\n\t\t\t[category, phrase] = category.split ? category.split('/') : category;\n\t\t}\n\t\tif (phrase === undefined) {\n\t\t\tconsole.error('invalid input', category, phrase, params);\n\t\t\treturn '';\n\t\t}\n\t\tlet val = Vue.computed(() => {\n\t\t\tif (!categories[category])\n\t\t\t\treturn '';\n\t\t\treturn getValueForLoadedPhrase(category, phrase, params);\n\t\t});\n\t\tif (!categories[category])\n\t\t\tthis.loadCategory(category);\n\t\treturn val.value;\n\t}\n};\n\nexport default {\n\tinstall(app, options) {\n\t\tif (!app.config.globalProperties.$fhcApi)\n\t\t\tapp.use(OldFhcApi); // TODO(chris): remove at some point\n\t\tif (!app.config.globalProperties.$api)\n\t\t\tapp.use(PluginsApi);\n\t\tapp.config.globalProperties.$p = {\n\t\t\tt: phrasen.t,\n\t\t\tloadCategory: cat => phrasen.loadCategory.call(app, cat),\n\t\t\tsetLanguage: lang => phrasen.setLanguage.call(app, lang),\n\t\t\tuser_language: user_language,\n\t\t\tuser_locale,\n\t\t\tt_ref: phrasen.t_ref\n\t\t};\n\t\tapp.provide('$p', app.config.globalProperties.$p);\n\t}\n}","let theme_name = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.theme.name);\nconst theme_modes = FHC_JS_DATA_STORAGE_OBJECT.theme.modes;\n\nconst toggleTheme = (theme)=>{\n\tif (!theme) return;\n\n\tfor (const theme of theme_modes) {\n\t\tdocument.documentElement.classList.remove(theme);\n\t}\n\ttheme_name.value = theme;\n\tdocument.documentElement.classList.add(theme);\n\n\tdocument.body.setAttribute(\"data-bs-theme\", theme);\n\n\tlet stylesheet = document.querySelector('link[href*=\"primevue/resources/themes\"]');\n\tif (theme == \"dark\") {\n\t\tstylesheet.attributes.href.value = stylesheet.attributes.href.value.replace(\"bootstrap4-light-blue\", \"bootstrap4-dark-blue\");\n\t} else if (theme == \"light\") {\n\t\tstylesheet.attributes.href.value = stylesheet.attributes.href.value.replace(\"bootstrap4-dark-blue\", \"bootstrap4-light-blue\");\n\t}\n\telse{\n\t\tif (stylesheet.attributes.href.value.includes(\"bootstrap4-dark-blue\"))\n\t\t\tstylesheet.attributes.href.value = stylesheet.attributes.href.value.replace(\"bootstrap4-dark-blue\", \"bootstrap4-light-blue\");\n\t}\n\n\tlocalStorage.setItem(\"theme\", theme);\n}\n\nconst initializeTheme = ()=>{\n\t\n\tlet theme = localStorage.getItem(\"theme\");\n\tif (!theme || !theme_modes.includes(theme)) {\n\t\t// set the first theme mode as default\n\t\ttheme = theme_modes[0];\n\t\tlocalStorage.setItem(\"theme\",theme);\n\t}\n\ttoggleTheme(theme);\n}\n\n\nexport default {\n\tinstall: (app,options)=>{\n\t\t\n\t\tdocument.documentElement.classList.add(theme_name.value);\n\n\t\tinitializeTheme();\n\n\t\tapp.config.globalProperties.$theme = {\n\t\t\ttheme_name,\n\t\t\ttheme_modes,\n\t\t\tswitchTheme: (theme) => {\n\t\t\t\ttoggleTheme(theme);\n\t\t\t}, \n\t\t} \n\t}\n}","const rgbToHex = (value) => {\n\tconst hex = value.toString(16);\n\treturn hex.length === 1 ? '0' + hex : hex;\n};\n\nfunction getContrastYIQ(hexcolor) {\n\t\n\tvar r = parseInt(hexcolor.substring(1, 3), 16);\n\tvar g = parseInt(hexcolor.substring(3, 5), 16);\n\tvar b = parseInt(hexcolor.substring(5, 7), 16);\n\tvar yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;\n\treturn (yiq >= 128) ? 'black' : 'white';\n}\n\nexport default {\n\tmounted(element, binding){\n\t\tconst bgColor = window.getComputedStyle(element).backgroundColor;\n\t\tlet rgbRegEx = new RegExp(/^rgba?\\s*\\(([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,?\\s*([0-9]+.?[0-9]?)?\\s*\\)/);\n\t\tlet isRgb = bgColor.match(rgbRegEx);\n\t\tif (isRgb) {\n\t\t\tif (isRgb.length < 3) {\n\t\t\t\tconsole.error(\"Invalid RGB color format\");\n\t\t\t}\n\t\t\tlet r = parseInt(isRgb[1], 10);\n\t\t\tlet g = parseInt(isRgb[2], 10);\n\t\t\tlet b = parseInt(isRgb[3], 10);\n\t\t\tlet hexColor = `#${rgbToHex(r)}${rgbToHex(g)}${rgbToHex(b)}`;\n\t\t\telement.style.color = getContrastYIQ(hexColor);\n\t\t}\n\t\telse\n\t\t{\n\t\t\telement.style.color = getContrastYIQ(bgColor);\n\t\t}\n\t},\n}","/**\n * TODO(chris): This is only a prototype!!!\n */\nconst DragAndDrop = {\n\tTYPE_LE: \"lehreinheit\",\n\tTYPE_VEVENT: \"vevent\",\n\n\tgetValidTransferData(event, allowedTypes) {\n\t\tconst json = event.dataTransfer.getData('text');\n\t\tlet obj;\n\t\ttry {\n\t\t\tobj = JSON.parse(json);\n\t\t\tif (!obj.type)\n\t\t\t\treturn null;\n\t\t\tif (allowedTypes && !allowedTypes.includes(obj.type))\n\t\t\t\treturn null;\n\t\t} catch (error) {\n\t\t\treturn null;\n\t\t}\n\t\treturn obj;\n\t},\n\tisValidTransferData(event, allowedTypes) {\n\t\treturn this.getValidTransferData(event, allowedTypes) ? true : false;\n\t},\n\tgetTransferData(event) {\n\t\tconst json = event.dataTransfer.getData('text');\n\t\treturn JSON.parse(json);\n\t},\n\tsetTransferData(event, data) {\n\t\tswitch (data.type) {\n\t\t\tcase DragAndDrop.TYPE_LE:\n\t\t\t\tdata = DragAndDrop.fromLe(data);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tif (data.dtstart && data.dtend && data.uid && data.summary) {\n\t\t\t\t\tdata = DragAndDrop.fromVEvent(data);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn false; // No type found => abort\n\t\t}\n\t\t\n\t\tevent.dataTransfer.setData('text', JSON.stringify(data));\n\t\treturn true;\n\t},\n\tfromLe(data) {\n\t\tconst {\n\t\t\ttype = DragAndDrop.TYPE_LE,\n\t\t\tlehreinheit_id: id,\n\t\t\tstundenblockung\n\t\t} = data;\n\t\t\n\t\treturn { type, id, stundenblockung };\n\t},\n\tfromVEvent(data) {\n\t\tconst {\n\t\t\ttype = DragAndDrop.TYPE_VEVENT,\n\t\t\tuid: id,\n\t\t\tdtstart,\n\t\t\tdtend,\n\t\t\tsummary\n\t\t} = data;\n\t\t\n\t\treturn { type, id, dtstart, dtend, summary };\n\t}\n};\n\nexport default DragAndDrop;\n","/**\n * TODO(chris): This needs serious rework!!!\n */\nexport default {\n\tmounted(el, binding, vnode) {\n\t\tif (binding.arg == 'draggable') {\n\t\t\tel.addEventListener('update-my-value', evt => {\n\t\t\t\tevt.preventDefault();\n\t\t\t\tbinding.value = evt.detail.item;\n\t\t\t});\n\t\t\tel.addEventListener('dragstart', evt => {\n\t\t\t\tel.dispatchEvent(new CustomEvent('calendar-dragstart', {\n\t\t\t\t\tcancelable: true,\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\titem: binding.value,\n\t\t\t\t\t\tx: evt.offsetX / el.offsetWidth,\n\t\t\t\t\t\ty: evt.offsetY / el.offsetHeight,\n\t\t\t\t\t\toriginalEvent: evt\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t});\n\t\t\tel.addEventListener('dragend', evt => {\n\t\t\t\tel.dispatchEvent(new CustomEvent('calendar-dragend', {\n\t\t\t\t\tcancelable: true,\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\titem: binding.value,\n\t\t\t\t\t\toriginalEvent: evt\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t});\n\t\t} else if (binding.arg == 'dropcage') {\n\t\t\tlet hitbox = null;\n\t\t\tel.addEventListener('dragover', evt => {\n\t\t\t\tif (hitbox)\n\t\t\t\t\treturn;\n\t\t\t\thitbox = el.getBoundingClientRect();\n\t\t\t\treturn el.dispatchEvent(new CustomEvent('calendar-dragenter', {\n\t\t\t\t\tdetail: { originalEvent: evt }\n\t\t\t\t}));\n\t\t\t});\n\t\t\twindow.addEventListener('dragleave', evt => {\n\t\t\t\tif (!hitbox)\n\t\t\t\t\treturn;\n\t\t\t\tlet pos;\n\t\t\t\tif (typeof evt.clientX === 'undefined')\n\t\t\t\t\tpos = {\n\t\t\t\t\t\tx: evt.pageX + document.documentElement.scrollLeft,\n\t\t\t\t\t\ty: evt.pageY + document.documentElement.scrollTop\n\t\t\t\t\t};\n\t\t\t\telse\n\t\t\t\t\tpos = {\n\t\t\t\t\t\tx: evt.clientX + document.body.scrollLeft + document.documentElement.scrollLeft,\n\t\t\t\t\t\ty: evt.clientY + document.body.scrollTop + document.documentElement.scrollTop\n\t\t\t\t\t};\n\t\t\t\tif (pos.x > hitbox.left + hitbox.width - 1 || pos.x < hitbox.left || pos.y > hitbox.top + hitbox.height - 1 || pos.y < hitbox.top) {\n\t\t\t\t\thitbox = null;\n\t\t\t\t\treturn el.dispatchEvent(new CustomEvent('calendar-dragleave', {\n\t\t\t\t\t\tdetail: { originalEvent: evt }\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t});\n\t\t\twindow.addEventListener('drop', evt => {\n\t\t\t\tif (!hitbox)\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\thitbox = null;\n\t\t\t\treturn el.dispatchEvent(new CustomEvent('calendar-dragleave', {\n\t\t\t\t\tdetail: { originalEvent: evt }\n\t\t\t\t}));\n\t\t\t});\n\t\t} else if (binding.arg == 'dropzone') {\n\t\t\tel.addEventListener(\n\t\t\t\tbinding.modifiers.once ? 'dragenter' : 'dragover',\n\t\t\t\tevt => {\n\t\t\t\t\tconst timestamp = binding.value instanceof Function\n\t\t\t\t\t\t? binding.value(evt)\n\t\t\t\t\t\t: binding.value;\n\t\t\t\t\tconst detail = timestamp.timestamp ? timestamp : { timestamp };\n\t\t\t\t\tel.dispatchEvent(new CustomEvent('calendar-dragchange', {\n\t\t\t\t\t\tcancelable: true,\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tdetail\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t},\n\tupdated(el, binding, vnode, prevVnode) {\n\t\tif (binding.arg == 'draggable') {\n\t\t\tel.dispatchEvent(new CustomEvent('update-my-value', {\n\t\t\t\tcancelable: true,\n\t\t\t\tdetail: {\n\t\t\t\t\titem: binding.value\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\t}\n}","import DragAndDrop from '../../../helpers/DragAndDrop.js';\n\nimport CalDnd from '../../../directives/Calendar/DragAndDrop.js';\n\n/**\n * TODO(chris): this needs serious rework!\n */\n\nexport default {\n\tname: \"CalendarDragAndDrop\",\n\tdirectives: {\n\t\tCalDnd\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tevents: Vue.computed(() => this.correctedEvents),\n\t\t\tbackgrounds: Vue.computed(() => this.backgrounds),\n\t\t\tdropAllowed: Vue.computed(() => this.dragging && this.dropAllowed)\n\t\t};\n\t},\n\tinject: {\n\t\tmode: \"mode\",\n\t\tdropableEvents: \"dropableEvents\"\n\t},\n\tprops: {\n\t\tevents: Array,\n\t\tbackgrounds: Array\n\t},\n\temits: [\n\t\t\"drop\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tdragging: false,\n\t\t\tallowed: false,\n\t\t\tdraggedInternalEvent: null,\n\t\t\tdraggedExternalEvent: null,\n\t\t\ttargetTimestamp: 0,\n\t\t\ttargetGridEnds: null,\n\t\t\tdropAllowed: false,\n\n\t\t\tshadowPreview: false // TODO(chris): IMPLEMENT! (use background instead of event as preview)\n\t\t};\n\t},\n\tcomputed: {\n\t\tcorrectedEvents() {\n\t\t\tif (this.dragging) {\n\t\t\t\tif (this.draggedInternalEvent) {\n\t\t\t\t\tconst index = this.events.findIndex(e => e.id == this.draggedInternalEvent.id);\n\t\t\t\t\tif (this.previewEvent && !this.shadowPreview)\n\t\t\t\t\t\treturn this.events.toSpliced(index, 1, this.previewEvent);\n\t\t\t\t\telse\n\t\t\t\t\t\treturn this.events.toSpliced(index, 1);\n\t\t\t\t}\n\t\t\t\tif (this.previewEvent && !this.shadowPreview)\n\t\t\t\t\treturn [...this.events, this.previewEvent];\n\t\t\t}\n\n\t\t\treturn this.events;\n\t\t},\n\t\tcorrectedBackgrounds() {\n\t\t\tif (this.dragging) {\n\t\t\t\tif (this.shadowPreview) {\n\t\t\t\t\t// TODO(chris): how to get the length\n\t\t\t\t\treturn [...this.backgrounds, {\n\t\t\t\t\t\tstart: new Date(this.targetTimestamp),\n\t\t\t\t\t\tclass: 'shadow-preview'\n\t\t\t\t\t}];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.backgrounds;\n\t\t},\n\t\tpreviewEvent() {\n\t\t\tif (!this.dragging || !this.dropAllowed)\n\t\t\t\treturn null;\n\t\t\tif (!this.targetTimestamp)\n\t\t\t\treturn null;\n\n\t\t\tconst event = this.draggedInternalEvent || this.draggedExternalEvent;\n\n\t\t\tif (!event)\n\t\t\t\treturn null;\n\t\t\t\n\t\t\t// TODO(chris): calculate length correctly from orig\n\t\t\tlet length = event.end - event.start;\n\t\t\tif (this.targetGridEnds)\n\t\t\t\tlength = this.targetGridEnds.find(end => end >= this.targetTimestamp + length) - this.targetTimestamp;\n\t\t\t\n\t\t\treturn {\n\t\t\t\torig: event.orig,\n\t\t\t\tstart: this.targetTimestamp,\n\t\t\t\tend: this.targetTimestamp + length\n\t\t\t};\n\t\t}\n\t},\n\tmethods: {\n\t\tonDragstart(evt) {\n\t\t\tDragAndDrop.setTransferData(evt.detail.originalEvent, evt.detail.item.orig);\n\t\t\tthis.draggedInternalEvent = evt.detail.item;\n\t\t},\n\t\tonDragend() {\n\t\t\tthis.draggedInternalEvent = null;\n\t\t\tthis.dragging = false;\n\t\t},\n\t\tonDragenter(evt) {\n\t\t\tthis.dragging = true;\n\n\t\t\tif (!this.draggedInternalEvent) {\n\t\t\t\tconst event = DragAndDrop.getValidTransferData(evt.detail.originalEvent);\n\t\t\t\tif (event) {\n\t\t\t\t\tthis.draggedExternalEvent = {\n\t\t\t\t\t\tid: event.id,\n\t\t\t\t\t\ttype: event.type,\n\t\t\t\t\t\tstart: event.isostart\n\t\t\t\t\t\t\t? luxon.DateTime.fromISO(event.isostart).setZone(this.timezone)\n\t\t\t\t\t\t\t: luxon.DateTime.local().setZone(this.timezone),\n\t\t\t\t\t\tend: event.isoend\n\t\t\t\t\t\t\t? luxon.DateTime.fromISO(event.isoend).setZone(this.timezone)\n\t\t\t\t\t\t\t: luxon.DateTime.local().setZone(this.timezone),\n\t\t\t\t\t\torig: event\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tthis.draggedExternalEvent = null;\n\t\t\t\t}\n\t\t\t\tthis.dropAllowed = this.dropableEvents(event, this.mode);\n\t\t\t} else {\n\t\t\t\tthis.dropAllowed = this.dropableEvents(this.draggedInternalEvent, this.mode);\n\t\t\t}\n\t\t},\n\t\tonDragleave() {\n\t\t\tthis.dragging = false;\n\t\t},\n\t\tonDragchange(evt) {\n\t\t\tthis.targetTimestamp = evt.detail.timestamp;\n\t\t\t\n\t\t\tthis.targetGridEnds = evt.detail.ends || null;\n\t\t},\n\t\tonDrop(evt) {\n\t\t\tif (!this.dragging || !this.dropAllowed)\n\t\t\t\treturn;\n\n\t\t\tthis.$emit('drop', evt, this.previewEvent.start, this.previewEvent.end);\n\t\t\tthis.dropAllowed = false;\n\t\t\tthis.dragging = false;\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\n\t`\n}\n","/**\n * TODO(chris): use click-directive\n */\nimport DatePicker from './Header/Datepicker.js';\n\nexport default {\n\tname: \"CalendarHeader\",\n\tcomponents: {\n\t\tDatePicker\n\t},\n\tprops: {\n\t\tdate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tmode: {\n\t\t\ttype: String,\n\t\t\trequired: true\n\t\t},\n\t\tmodeOptions: {\n\t\t\ttype: Object,\n\t\t\tdefault: {}\n\t\t},\n\t\tbtnMonth: Boolean,\n\t\tbtnWeek: Boolean,\n\t\tbtnDay: Boolean,\n\t\tbtnList: Boolean\n\t},\n\temits: [\n\t\t\"next\",\n\t\t\"prev\",\n\t\t\"click:mode\",\n\t\t\"update:date\",\n\t\t\"update:mode\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\topen: false\n\t\t};\n\t},\n\tmethods: {\n\t\tclickMode(evt, mode) {\n\t\t\tthis.$emit('click:mode', evt);\n\t\t\tif (!evt.defaultPrevented)\n\t\t\t\tthis.$emit('update:mode', mode);\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t
    \n\t`\n}\n","// TODO(chris): translate aria-labels\n\nexport default {\n\tname: \"CalendarHeaderDatepicker\",\n\tcomponents: {\n\t\tVueDatePicker\n\t},\n\tinject: [\n\t\t\"locale\",\n\t\t\"timezone\"\n\t],\n\tprops: {\n\t\tdate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tmode: {\n\t\t\ttype: String,\n\t\t\trequired: true\n\t\t},\n\t\tlistLength: {\n\t\t\ttype: Number,\n\t\t\tdefault: 7\n\t\t}\n\t},\n\temits: [\n\t\t\"update:date\"\n\t],\n\tcomputed: {\n\t\tconvertedDate() {\n\t\t\t// convert to target TZ then strip TZ Information\n\t\t\t// so the datepicker can work with local times\n\t\t\treturn this.date.setZone(this.timezone).setZone('local', { keepLocalTime: true });\n\t\t},\n\t\tcurrent() {\n\t\t\tswitch (this.mode) {\n\t\t\tcase \"month\":\n\t\t\t\treturn {month: this.convertedDate.month-1, year: this.convertedDate.year};\n\t\t\tcase \"list\":\n\t\t\t\treturn [this.convertedDate.startOf('day').ts, this.convertedDate.startOf('day').plus({ days: this.listLength }).ts - 1];\n\t\t\tcase \"week\":\n\t\t\t\treturn [this.convertedDate.startOf('week', { useLocaleWeeks: true }).ts, this.convertedDate.endOf('week', { useLocaleWeeks: true }).ts];\n\t\t\tcase \"day\":\n\t\t\t\treturn this.convertedDate;\n\t\t\tdefault:\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t\ttitle() {\n\t\t\tswitch (this.mode) {\n\t\t\tcase \"month\":\n\t\t\t\treturn this.date.toLocaleString({ month: 'long', year: 'numeric' });\n\t\t\tcase \"week\":\n\t\t\t\tvar year = this.date.localWeekYear;\n\t\t\t\tvar week = this.date.toFormat('nn');\n\t\t\t\treturn this.$p.t('calendar/year_kw', { year, week });\n\t\t\tcase \"list\":\n\t\t\t\treturn this.date.toLocaleString(luxon.DateTime.DATE_FULL) + '-' + this.date.plus({ days: this.listLength - 1 }).toLocaleString(luxon.DateTime.DATE_FULL);\n\t\t\tcase \"day\":\n\t\t\t\treturn this.date.toLocaleString(luxon.DateTime.DATE_FULL);\n\t\t\tdefault:\n\t\t\t\treturn 'View not Supported';\n\t\t\t}\n\t\t},\n\t\tweekStart() {\n\t\t\treturn luxon.Info.getStartOfWeek(this.date)%7;\n\t\t}\n\t},\n\tmethods: {\n\t\tupdate(value) {\n\t\t\tlet date;\n\t\t\tswitch (this.mode) {\n\t\t\tcase \"month\":\n\t\t\t\tvalue.month++;\n\t\t\t\tdate = luxon.DateTime.fromObject(value).setZone(this.timezone, { keepLocalTime: true }).setLocale(this.locale);\n\t\t\t\tbreak;\n\t\t\tcase \"list\":\n\t\t\tcase \"week\":\n\t\t\t\tdate = luxon.DateTime.fromJSDate(value[0]).setZone(this.timezone, { keepLocalTime: true }).setLocale(this.locale);\n\t\t\t\tbreak;\n\t\t\tcase \"day\":\n\t\t\t\tdate = luxon.DateTime.fromJSDate(value).setZone(this.timezone, { keepLocalTime: true }).setLocale(this.locale);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn; // Don't update if the value is invalid!\n\t\t\t}\n\t\t\tthis.$emit(\"update:date\", date);\n\t\t},\n\t\tweekNumbers(date) {\n\t\t\treturn luxon.DateTime.fromJSDate(date, { locale: this.locale }).localWeekNumber;\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t title\"\n\t\t:month-picker=\"mode == 'month'\"\n\t\t:week-picker=\"mode == 'week'\"\n\t\t:range=\"mode == 'list' ? { autoRange: listLength - 1 } : false\"\n\t\t:text-input=\"mode == 'day'\"\n\t\t:week-start=\"weekStart\"\n\t\t:week-numbers=\"{ type: weekNumbers }\"\n\t\t:clearable=\"false\"\n\t\t:enable-time-picker=\"false\"\n\t\t:config=\"{ keepActionRow: mode != 'month' }\"\n\t\t:action-row=\"{ showSelect: false, showCancel: false, showNow: mode != 'month', showPreview: false }\"\n\t\tauto-apply\n\t\tsix-weeks\n\t\tteleport\n\t\t:locale=\"locale\"\n\t\t:now-button-label=\"$p.t('calendar/today')\"\n\t\t:week-num-name=\"$p.t('calendar/kw')\"\n\t/>\n\t`\n}\n","export default {\n\tname: 'CalendarSlider',\n\tinject: {\n\t\ttime: {\n\t\t\tfrom: \"sliderTime\",\n\t\t\tdefault: \".3s\"\n\t\t}\n\t},\n\temits: [\n\t\t'slid'\n\t],\n\tdata() {\n\t\treturn {\n\t\t\ttarget: 0,\n\t\t\textrasAfter: 0,\n\t\t\textrasBefore: 0,\n\t\t\trunning: false,\n\t\t\tpromiseResolve: null\n\t\t}\n\t},\n\tcomputed: {\n\t\titemsAfter() {\n\t\t\treturn [...Array(this.extrasAfter)].map((i, k) => 1+k);\n\t\t},\n\t\titemsBefore() {\n\t\t\treturn [...Array(this.extrasBefore)].map((i, k) => k-this.extrasBefore);\n\t\t},\n\t\tstyleSlider() {\n\t\t\tconst style = {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\twidth: '100%',\n\t\t\t\theight: '100%'\n\t\t\t};\n\t\t\tif (this.running) {\n\t\t\t\tstyle.left = (-this.target * 100) + '%';\n\t\t\t\tstyle.transition = 'left ' + this.time + ' ease-in-out';\n\t\t\t}\n\t\t\treturn style;\n\t\t},\n\t\tstyleBefore() {\n\t\t\treturn {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: 0,\n\t\t\t\theight: '100%',\n\t\t\t\tdisplay: 'flex',\n\t\t\t\tright: '100%',\n\t\t\t\twidth: (this.extrasBefore * 100) + '%'\n\t\t\t};\n\t\t},\n\t\tstyleAfter() {\n\t\t\treturn {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: 0,\n\t\t\t\theight: '100%',\n\t\t\t\tdisplay: 'flex',\n\t\t\t\tleft: '100%',\n\t\t\t\twidth: (this.extrasAfter * 100) + '%'\n\t\t\t};\n\t\t}\n\t},\n\tmethods: {\n\t\tprevPage() {\n\t\t\treturn this.slidePages(-1);\n\t\t},\n\t\tnextPage() {\n\t\t\treturn this.slidePages(1);\n\t\t},\n\t\tslidePages(dir) {\n\t\t\treturn new Promise(resolve => {\n\t\t\t\tthis.promiseResolve = resolve;\n\t\t\t\tthis.running = true;\n\t\t\t\tconst newTarget = this.target + dir;\n\t\t\t\tif (newTarget > 0) {\n\t\t\t\t\tif (this.extrasAfter < newTarget)\n\t\t\t\t\t\tthis.extrasAfter = newTarget;\n\t\t\t\t} else if (newTarget < 0) {\n\t\t\t\t\tif (-this.extrasBefore > newTarget)\n\t\t\t\t\t\tthis.extrasBefore = -newTarget;\n\t\t\t\t}\n\t\t\t\tthis.target = newTarget;\n\t\t\t});\n\t\t},\n\t\tendSlide() {\n\t\t\tif (this.promiseResolve) {\n\t\t\t\tthis.promiseResolve(this.target);\n\t\t\t\tthis.promiseResolve = null;\n\t\t\t}\n\t\t\tthis.$emit('slid', this.target);\n\t\t\tthis.running = false;\n\t\t\tthis.target = 0;\n\t\t\tthis.extrasAfter = this.extrasBefore = 0;\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\n\t\n\t`\n}\n","const clickListeners = [];\n\nfunction saveAddClickListener(el, source, value) {\n\tconst index = clickListeners.findIndex(data => data.el == el);\n\tif (index >= 0) {\n\t\tel.removeEventListener('click', clickListeners[index].listener);\n\t\tclickListeners.splice(index, 1);\n\t}\n\tconst listener = evt => {\n\t\tevt.preventDefault();\n\t\tevt.stopPropagation();\n\t\tconst customEvent = new CustomEvent('cal-click', {\n\t\t\tcancelable: true,\n\t\t\tbubbles: true,\n\t\t\tdetail: { source, value }\n\t\t});\n\t\tevt.target.dispatchEvent(customEvent);\n\t}\n\tclickListeners.push({el, listener});\n\tel.addEventListener('click', listener);\n}\n\nexport default {\n\tmounted(el, binding, vnode) {\n\t\tif (binding.arg == 'container') {\n\t\t\tel.addEventListener('cal-click', evt => {\n\t\t\t\tconst customEvent = new Event('click:' + evt.detail.source, {\n\t\t\t\t\tcancelable: true\n\t\t\t\t});\n\t\t\t\tbinding.instance.$emit('click:' + evt.detail.source, customEvent, evt.detail.value);\n\t\t\t\tif (!customEvent.defaultPrevented) {\n\t\t\t\t\tconst finalEvent = new CustomEvent('cal-click-default', {\n\t\t\t\t\t\tcancelable: true,\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tdetail: evt.detail\n\t\t\t\t\t});\n\t\t\t\t\tevt.target.dispatchEvent(finalEvent);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsaveAddClickListener(el, binding.arg, binding.value);\n\t\t}\n\t},\n\tupdated(el, binding, vnode, prevVnode) {\n\t\tif (binding.arg != 'container') {\n\t\t\tsaveAddClickListener(el, binding.arg, binding.value);\n\t\t}\n\t}\n}","import BaseDraganddrop from './Base/DragAndDrop.js';\nimport BaseHeader from './Base/Header.js';\nimport BaseSlider from './Base/Slider.js';\nimport BsModal from '../Bootstrap/Modal.js';\n\nimport CalClick from '../../directives/Calendar/Click.js';\n\nexport default {\n\tname: \"CalendarBase\",\n\tcomponents: {\n\t\tBaseDraganddrop,\n\t\tBaseHeader,\n\t\tBaseSlider,\n\t\tBsModal\n\t},\n\tdirectives: {\n\t\tCalClick\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tlocale: Vue.computed(() => this.locale),\n\t\t\ttimezone: Vue.computed(() => this.timezone),\n\t\t\ttimeGrid: Vue.computed(() => this.timeGrid),\n\t\t\tdraggableEvents: Vue.computed(() => {\n\t\t\t\tif (!this.draggableEvents)\n\t\t\t\t\treturn () => false;\n\n\t\t\t\tif (Array.isArray(this.draggableEvents))\n\t\t\t\t\treturn event => this.draggableEvents.includes(event.type);\n\t\t\t\tif (this.draggableEvents instanceof Function)\n\t\t\t\t\treturn this.draggableEvents;\n\t\t\t\t\n\t\t\t\treturn () => true;\n\t\t\t}),\n\t\t\tdropableEvents: Vue.computed(() => {\n\t\t\t\tif (!this.onDrop)\n\t\t\t\t\treturn () => false;\n\n\t\t\t\tif (Array.isArray(this.dropableEvents))\n\t\t\t\t\treturn item => this.dropableEvents.includes(item.type);\n\t\t\t\tif (this.dropableEvents instanceof Function)\n\t\t\t\t\treturn this.dropableEvents;\n\n\t\t\t\treturn () => true;\n\t\t\t}),\n\t\t\thasDragoverFunc: Vue.computed(() => this.onDragover),\n\t\t\tmode: Vue.computed(() => this.mode)\n\t\t};\n\t},\n\tprops: {\n\t\tlocale: {\n\t\t\ttype: String,\n\t\t\tdefault: 'de'\n\t\t},\n\t\ttimezone: {\n\t\t\ttype: String,\n\t\t\trequired: true\n\t\t},\n\t\tdate: {\n\t\t\ttype: [Date, String, Number, luxon.DateTime],\n\t\t\tdefault: props => luxon.DateTime.now().setZone(props.timezone).startOf('day')\n\t\t},\n\t\tmodes: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: {}\n\t\t\t// TODO(chris): verfication functions\n\t\t},\n\t\tmode: String,\n\t\tmodeOptions: Object,\n\t\tevents: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tbackgrounds: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tshowBtns: Boolean,\n\t\tbtnMonth: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: undefined\n\t\t},\n\t\tbtnWeek: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: undefined\n\t\t},\n\t\tbtnDay: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: undefined\n\t\t},\n\t\tbtnList: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: undefined\n\t\t},\n\t\ttimeGrid: Array,\n\t\tdraggableEvents: [Boolean, Array, Function],\n\t\tdropableEvents: [Boolean, Array, Function],\n\t\tonDragover: Function,\n\t\tonDrop: Function\n\t},\n\temits: [\n\t\t\"click:next\",\n\t\t\"click:prev\",\n\t\t\"click:mode\",\n\t\t\"click:event\",\n\t\t\"click:day\",\n\t\t\"click:week\",\n\t\t\"update:date\",\n\t\t\"update:mode\",\n\t\t\"update:range\",\n\t\t\"drop\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tinternalView: null,\n\t\t\tinternalDate: null,\n\t\t\tmodalEvent: null\n\t\t};\n\t},\n\tcomputed: {\n\t\tconvertedEvents() {\n\t\t\treturn this.events.map(orig => ({\n\t\t\t\tid: orig.type + orig[orig.type + '_id'],\n\t\t\t\ttype: orig.type,\n\t\t\t\tstart: luxon.DateTime.fromISO(orig.isostart).setZone(this.timezone),\n\t\t\t\tend: luxon.DateTime.fromISO(orig.isoend).setZone(this.timezone),\n\t\t\t\torig\n\t\t\t}));\n\t\t},\n\t\tconvertedBackgrounds() {\n\t\t\treturn this.backgrounds.map(bg => {\n\t\t\t\tconst res = { ...bg };\n\t\t\t\tif (res.start) {\n\t\t\t\t\tif (Number.isInteger(res.start))\n\t\t\t\t\t\tres.start = luxon.DateTime.fromMillis(res.start, { zone: this.timezone, locale: this.locale });\n\t\t\t\t\telse if (res.start instanceof Date)\n\t\t\t\t\t\tres.start = luxon.DateTime.fromJSDate(res.start, { zone: this.timezone, locale: this.locale });\n\t\t\t\t\telse if (typeof res.start === \n\t\t\t\t\t\t'string' || res.start instanceof String)\n\t\t\t\t\t\tres.start = luxon.DateTime.fromISO(res.start, { zone: this.timezone, locale: this.locale });\n\t\t\t\t}\n\t\t\t\tif (res.end) {\n\t\t\t\t\tif (Number.isInteger(res.end))\n\t\t\t\t\t\tres.end = luxon.DateTime.fromMillis(res.end, { zone: this.timezone, locale: this.locale });\n\t\t\t\t\telse if (res.end instanceof Date)\n\t\t\t\t\t\tres.end = luxon.DateTime.fromJSDate(res.end, { zone: this.timezone, locale: this.locale });\n\t\t\t\t\telse if (typeof res.end === \n\t\t\t\t\t\t'string' || res.end instanceof String)\n\t\t\t\t\t\tres.end = luxon.DateTime.fromISO(res.end, { zone: this.timezone, locale: this.locale });\n\t\t\t\t}\n\t\t\t\treturn res;\n\t\t\t});\n\t\t},\n\t\tsDate() {\n\t\t\tif (this.date instanceof luxon.DateTime)\n\t\t\t\treturn this.date;\n\t\t\treturn luxon.DateTime.fromJSDate(new Date(this.date)).setZone(this.timezone);\n\t\t},\n\t\tcDate: {\n\t\t\tget() {\n\t\t\t\tconst date = this.internalDate ? this.internalDate : this.sDate;\n\t\t\t\treturn date.setLocale(this.locale);\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tthis.internalDate = value;\n\t\t\t\tthis.$emit('update:date', value, this.cMode);\n\t\t\t}\n\t\t},\n\t\tsMode() {\n\t\t\t// choose default mode\n\t\t\tlet mode = this.mode;\n\t\t\tif (mode)\n\t\t\t\tmode = mode.toLowerCase();\n\t\t\tif (!mode || !this.modes[mode])\n\t\t\t\tmode = Object.keys(this.modes).find(Boolean); // start with first entry as active mode\n\t\t\treturn mode || '';\n\t\t},\n\t\tcMode: {\n\t\t\tget() {\n\t\t\t\treturn this.internalView ? this.internalView : this.sMode;\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tthis.internalView = value;\n\t\t\t\tthis.$emit('update:mode', value, this.cDate);\n\t\t\t}\n\t\t}\n\t},\n\twatch: {\n\t\tsDate(n, o) {\n\t\t\tif (this.sDate.isValid && !this.sDate.hasSame(this.internalDate, 'day'))\n\t\t\t\tthis.internalDate = this.sDate;\n\t\t},\n\t\tsMode() {\n\t\t\tif (this.sMode)\n\t\t\t\tthis.internalView = this.sMode;\n\t\t}\n\t},\n\tmethods: {\n\t\tclickPrev() {\n\t\t\tconst evt = new Event('click:prev', {cancelable: true});\n\t\t\tthis.$emit('click:prev', evt);\n\t\t\tif (evt.defaultPrevented)\n\t\t\t\treturn;\n\n\t\t\t// default: switch page\n\t\t\tthis.$refs.mode.prevPage();\n\t\t},\n\t\tclickNext() {\n\t\t\tconst evt = new Event('click:next', {cancelable: true});\n\t\t\tthis.$emit('click:next', evt);\n\t\t\tif (evt.defaultPrevented)\n\t\t\t\treturn;\n\n\t\t\t// default: switch page\n\t\t\tthis.$refs.mode.nextPage();\n\t\t},\n\t\thandleClickDefaults(evt) {\n\t\t\t// TODO(chris): implement\n\t\t\tswitch (evt.detail.source) {\n\t\t\tcase 'day':\n\t\t\t\tif (this.cMode != 'day' && this.modes['day']) {\n\t\t\t\t\tevt.stopPropagation();\n\t\t\t\t\tthis.cDate = evt.detail.value;\n\t\t\t\t\tthis.cMode = 'day';\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'week':\n\t\t\t\tif (this.cMode != 'week' && this.modes['week']) {\n\t\t\t\t\tevt.stopPropagation();\n\t\t\t\t\tthis.cDate = luxon.DateTime.fromObject({\n\t\t\t\t\t\tlocalWeekNumber: evt.detail.value.number,\n\t\t\t\t\t\tlocalWeekYear: evt.detail.value.year\n\t\t\t\t\t}, {\n\t\t\t\t\t\tzone: this.cDate.zoneName,\n\t\t\t\t\t\tlocale: this.cDate.locale\n\t\t\t\t\t});\n\t\t\t\t\tthis.cMode = 'week';\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tonDropItem(evt, start, end) {\n\t\t\tthis.$emit('drop', evt, start, end);\n\t\t},\n\t\tshowEventModal(eventObj) {\n\t\t\tthis.modalEvent = eventObj;\n\t\t\tthis.$refs.modal.show();\n\t\t},\n\t\thideEventModal() {\n\t\t\tif (this.modalEvent)\n\t\t\t\tthis.modalEvent.closeFn = undefined;\n\t\t\tthis.$refs.modal.hide();\n\t\t\tthis.modalEvent = null;\n\t\t},\n\t\tonModalHidden() {\n\t\t\tif (this.modalEvent.closeFn)\n\t\t\t\tthis.modalEvent.closeFn();\n\t\t}\n\t},\n\tbeforeUnmount() {\n\t\tthis.hideEventModal();\n\t},\n\ttemplate: /* html */`\n\t
    \n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    \n\t`\n}\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetRoomInfo(ort_kurzbz, start_date, end_date) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/LvPlan/getRoomplan',\n\t\t\tparams: { ort_kurzbz, start_date, end_date }\n\t\t};\n\t},\n\tgetLvPlan(start_date, end_date, lv_id) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/LvPlan/getLvPlan',\n\t\t\tparams: { start_date, end_date, lv_id }\n\t\t};\n\t},\n\teventsPersonal(start_date, end_date) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/lvPlan/eventsPersonal',\n\t\t\tparams: { start_date, end_date }\n\t\t};\n\t},\n\teventsLv(lv_id, start_date, end_date) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/lvPlan/eventsLv',\n\t\t\tparams: { lv_id, start_date, end_date }\n\t\t};\n\t},\n\tgetStunden() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/LvPlan/Stunden'\n\t\t};\n\t},\n\tgetOrtReservierungen(ort_kurzbz, start_date, end_date) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: `/api/frontend/v1/LvPlan/getReservierungen/${ort_kurzbz}`,\n\t\t\tparams: { start_date, end_date }\n\t\t};\n\t},\n\tgetLvPlanReservierungen(start_date, end_date) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/LvPlan/getReservierungen',\n\t\t\tparams: { start_date, end_date }\n\t\t};\n\t},\n\tgetLehreinheitStudiensemester(lehreinheit_id) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${lehreinheit_id}`\n\t\t};\n\t},\n\tstudiensemesterDateInterval(date) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/LvPlan/studiensemesterDateInterval/${date}`\n\t\t};\n\t},\n\tLvPlanEvents(start_date, end_date, lv_id) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/LvPlan/LvPlanEvents',\n\t\t\tparams: { \n\t\t\t\tstart_date: start_date, \n\t\t\t\tend_date: end_date, \n\t\t\t\tlv_id: lv_id \n\t\t\t}\n\t\t};\n\t},\n\tgetLv(lehrveranstaltung_id) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/LvPlan/getLv/' + lehrveranstaltung_id\n\t\t};\n\t}\n};","import CalDnd from '../../../../../directives/Calendar/DragAndDrop.js';\nimport CalClick from '../../../../../directives/Calendar/Click.js';\n\nexport default {\n\tname: \"GridLineEvent\",\n\tdirectives: {\n\t\tCalDnd,\n\t\tCalClick\n\t},\n\tinject: {\n\t\tdraggableEvents: \"draggableEvents\",\n\t\tmode: \"mode\"\n\t},\n\tprops: {\n\t\tevent: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn (value.start && value.end && value.orig);\n\t\t\t}\n\t\t}\n\t},\n\tcomputed: {\n\t\tisHeaderOrFooter() {\n\t\t\treturn ['header', 'footer'].includes(this.event.orig);\n\t\t},\n\t\tdraggable() {\n\t\t\treturn !this.isHeaderOrFooter && this.draggableEvents(this.event.orig, this.mode);\n\t\t},\n\t\tclasses() {\n\t\t\tconst classes = [];\n\t\t\tif (this.isHeaderOrFooter) {\n\t\t\t\tclasses.push('event-' + this.event.orig);\n\t\t\t} else {\n\t\t\t\tif (this.event.startsHere)\n\t\t\t\t\tclasses.push('event-begin');\n\t\t\t\tif (this.event.endsHere)\n\t\t\t\t\tclasses.push('event-end');\n\t\t\t}\n\t\t\treturn classes\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\t\t{{ event.orig }}\n\t\t\n\t\n\t`\n}\n","import GridLine from './Grid/Line.js';\nimport GridLineEvent from './Grid/Line/Event.js';\n\nimport CalDnd from '../../../directives/Calendar/DragAndDrop.js';\n\nexport default {\n\tname: \"CalendarGrid\",\n\tcomponents: {\n\t\tGridLine,\n\t\tGridLineEvent\n\t},\n\tdirectives: {\n\t\tCalDnd\n\t},\n\tinject: {\n\t\toriginalEvents: \"events\",\n\t\toriginalBackgrounds: \"backgrounds\",\n\t\tdropAllowed: \"dropAllowed\"\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tflipAxis: Vue.computed(() => this.flipAxis),\n\t\t\taxisRow: Vue.computed(() => this.axisRow)\n\t\t};\n\t},\n\tprops: {\n\t\taxisMain: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn value.every(item => item instanceof luxon.DateTime);\n\t\t\t}\n\t\t},\n\t\taxisParts: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn value.every(item =>\n\t\t\t\t\titem instanceof luxon.Duration\n\t\t\t\t\t|| Number.isInteger(item)\n\t\t\t\t\t|| (\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\titem.start instanceof luxon.Duration\n\t\t\t\t\t\t\t|| Number.isInteger(item.start)\n\t\t\t\t\t\t) && (\n\t\t\t\t\t\t\titem.end instanceof luxon.Duration\n\t\t\t\t\t\t\t|| Number.isInteger(item.end)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tflipAxis: Boolean,\n\t\tallDayEvents: Boolean,\n\t\taxisMainCollapsible: Boolean,\n\t\tsnapToGrid: Boolean\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tdragging: false,\n\t\t\tresizeObserver: null,\n\t\t\tmutationObserver: null,\n\t\t\tuserScroll: true\n\t\t};\n\t},\n\tcomputed: {\n\t\taxisRow() {\n\t\t\treturn this.flipAxis ? 'column' : 'row';\n\t\t},\n\t\taxisCol() {\n\t\t\treturn this.flipAxis ? 'row' : 'column';\n\t\t},\n\t\taxisPartsWithBreaks() {\n\t\t\treturn this.axisParts.reduce((res, tu, index) => {\n\t\t\t\tconst start = tu.start || tu;\n\t\t\t\tconst end = tu.end;\n\n\t\t\t\tif (res.length) {\n\t\t\t\t\tconst lastTuEnd = res.pop();\n\t\t\t\t\tif (Array.isArray(lastTuEnd)) {\n\t\t\t\t\t\tres.push({\n\t\t\t\t\t\t\tstart: lastTuEnd[0],\n\t\t\t\t\t\t\tend: start,\n\t\t\t\t\t\t\tindex: lastTuEnd[1]\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (lastTuEnd != start) {\n\t\t\t\t\t\t// add pause\n\t\t\t\t\t\tres.push({\n\t\t\t\t\t\t\tstart: lastTuEnd,\n\t\t\t\t\t\t\tend: start\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!end) {\n\t\t\t\t\tres.push([start, index]);\n\t\t\t\t} else {\n\t\t\t\t\tres.push({\n\t\t\t\t\t\tstart,\n\t\t\t\t\t\tend,\n\t\t\t\t\t\tindex\n\t\t\t\t\t});\n\t\t\t\t\tres.push(end);\n\t\t\t\t}\n\t\t\t\treturn res;\n\t\t\t}, []).slice(0, -1);\n\t\t},\n\t\taxisPartsSave() {\n\t\t\tif (!this.axisParts[this.axisParts.length - 1].end)\n\t\t\t\treturn this.axisParts.slice(0, -1);\n\t\t\treturn this.axisParts;\n\t\t},\n\t\tstart() {\n\t\t\treturn this.axisPartsWithBreaks[0].start;\n\t\t},\n\t\tend() {\n\t\t\treturn this.axisPartsWithBreaks[this.axisPartsWithBreaks.length - 1].end;\n\t\t},\n\t\tends() {\n\t\t\tconst ends = [];\n\t\t\tconst partsEnds = this.axisPartsWithBreaks\n\t\t\t\t.filter(p => p.index !== undefined)\n\t\t\t\t.map(p => p.end);\n\t\t\tfor (var date of this.axisMain)\n\t\t\t\tfor (var part of partsEnds)\n\t\t\t\t\tends.push(date.plus(part));\n\n\t\t\treturn ends;\n\t\t},\n\t\taxisMainBorders() {\n\t\t\treturn this.axisMain.reduce(\n\t\t\t\t(res, curr) => res.concat([curr.plus(this.start), curr.plus(this.end)]),\n\t\t\t\t[]\n\t\t\t);\n\t\t},\n\t\teventsAllDay() {\n\t\t\tif (!this.allDayEvents)\n\t\t\t\treturn [];\n\t\t\treturn this.mapIntoMainAxis(this.originalEvents.filter(event => event.orig.allDayEvent));\n\t\t},\n\t\teventsNormal() {\n\t\t\tif (!this.allDayEvents)\n\t\t\t\treturn this.events;\n\t\t\treturn this.mapIntoMainAxis(this.originalEvents.filter(event => !event.orig.allDayEvent));\n\t\t},\n\t\tevents() {\n\t\t\treturn this.mapIntoMainAxis(this.originalEvents);\n\t\t},\n\t\tbackgrounds() {\n\t\t\treturn this.mapIntoMainAxis(this.originalBackgrounds);\n\t\t},\n\t\thasValidEvents() {\n\t\t\treturn this.events.find(e => e.length);\n\t\t},\n\t\tstyleGridCols() {\n\t\t\tlet cols = 'repeat(' + this.axisMain.length + ', 1fr)';\n\t\t\tif (this.axisMainCollapsible) {\n\t\t\t\tif (this.hasValidEvents)\n\t\t\t\t\tcols = this.events\n\t\t\t\t\t\t.map(e => e.length\n\t\t\t\t\t\t\t? '1fr'\n\t\t\t\t\t\t\t: 'var(--fhc-calendar-axis-collapsible, .5fr)')\n\t\t\t\t\t\t.join(' ');\n\t\t\t}\n\t\t\treturn cols;\n\t\t},\n\t\tstyleGridRows() {\n\t\t\tconst gridlines = {};\n\n\t\t\tthis.axisPartsWithBreaks.forEach(part => {\n\t\t\t\tlet ts = part.start.toMillis();\n\t\t\t\tif (!gridlines[ts])\n\t\t\t\t\tgridlines[ts] = ['t_' + ts];\n\t\t\t\tif (part.index !== undefined)\n\t\t\t\t\tgridlines[ts].push('ps_' + part.index);\n\t\t\t\tts = part.end.toMillis();\n\t\t\t\tif (!gridlines[ts])\n\t\t\t\t\tgridlines[ts] = ['t_' + ts];\n\t\t\t\tif (part.index !== undefined)\n\t\t\t\t\tgridlines[ts].push('pe_' + part.index);\n\t\t\t});\n\n\t\t\tthis.eventsNormal.forEach((events, mainIndex) => {\n\t\t\t\tlet day = this.axisMain[mainIndex];\n\t\t\t\tevents.forEach(event => {\n\t\t\t\t\tif (!event.startsHere && !event.endsHere)\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tif (event.startsHere) {\n\t\t\t\t\t\tlet ts = event.start.diff(day).toMillis();\n\t\t\t\t\t\tif (!gridlines[ts])\n\t\t\t\t\t\t\tgridlines[ts] = ['t_' + ts, 'e_' + ts];\n\t\t\t\t\t}\n\t\t\t\t\tif (event.endsHere) {\n\t\t\t\t\t\tlet ts = event.end.diff(day).toMillis();\n\t\t\t\t\t\tif (!gridlines[ts])\n\t\t\t\t\t\t\tgridlines[ts] = ['t_' + ts, 'e_' + ts];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn Object.keys(gridlines).sort((a,b) => parseInt(a)-parseInt(b)).map((start, i, keys) => {\n\t\t\t\tlet end = keys[i + 1];\n\t\t\t\tif (!end) {\n\t\t\t\t\tgridlines[start].push('end');\n\t\t\t\t\treturn '[' + gridlines[start].join(' ') + ']';\n\t\t\t\t}\n\t\t\t\treturn '[' + gridlines[start].join(' ') + '] ' + (end - start) + 'fr';\n\t\t\t}).join(' ');\n\t\t}\n\t},\n\tmethods: {\n\t\tmapIntoMainAxis(target) {\n\t\t\tconst result = Array.from({length: this.axisMain.length}, () => Array());\n\n\t\t\ttarget.forEach(event => {\n\t\t\t\tconst start = event.start || this.axisMainBorders[0].plus(-1);\n\t\t\t\tconst end = event.end || this.axisMainBorders[this.axisMainBorders.length - 1].plus(1);\n\n\t\t\t\tfor (var i = 0; i < this.axisMain.length; i++) {\n\t\t\t\t\tlet laneStart = this.axisMainBorders[i * 2];\n\t\t\t\t\tlet laneEnd = this.axisMainBorders[i * 2 + 1];\n\t\t\t\t\tif (event.orig?.allDayEvent) {\n\t\t\t\t\t\tlaneStart = laneStart.startOf('day');\n\t\t\t\t\t\tlaneEnd = laneEnd.endOf('day');\n\t\t\t\t\t}\n\t\t\t\t\tif (start < laneEnd && end > laneStart) {\n\t\t\t\t\t\tconst startsHere = start >= laneStart;\n\t\t\t\t\t\tconst endsHere = end <= laneEnd;\n\t\t\t\t\t\tresult[i].push({\n\t\t\t\t\t\t\t...event,\n\t\t\t\t\t\t\tstartsHere,\n\t\t\t\t\t\t\tendsHere\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn result;\n\t\t},\n\n\t\t/* DRAG AND DROP */\n\t\tgetPageTop(el) {\n\t\t\tlet pageTop = el.offsetTop;\n\t\t\tif (el.offsetParent)\n\t\t\t\tpageTop += this.getPageTop(el.offsetParent);\n\t\t\treturn pageTop;\n\t\t},\n\t\tgetPageLeft(el) {\n\t\t\tlet pageLeft = el.offsetLeft;\n\t\t\tif (el.offsetParent)\n\t\t\t\tpageLeft += this.getPageLeft(el.offsetParent);\n\t\t\treturn pageLeft;\n\t\t},\n\t\tgetTimestampFromMouse(evt, dayTimestamp) {\n\t\t\tlet mouse, mouseFrac;\n\t\t\tif (this.flipAxis) {\n\t\t\t\tmouse = evt.pageX - this.getPageLeft(this.$refs.body) + this.$refs.main.scrollLeft;\n\t\t\t\tmouseFrac = mouse / this.$refs.body.offsetWidth;\n\t\t\t} else {\n\t\t\t\tmouse = evt.pageY - this.getPageTop(this.$refs.body) + this.$refs.main.scrollTop;\n\t\t\t\tmouseFrac = mouse / this.$refs.body.offsetHeight;\n\t\t\t}\n\n\t\t\treturn dayTimestamp + this.start + Math.floor((this.end - this.start) * mouseFrac);\n\t\t},\n\n\t\t/* SCROLLING */\n\t\tenableAutoScroll() {\n\t\t\tif (!this.resizeObserver)\n\t\t\t\tthis.resizeObserver = new ResizeObserver(this.scrollToEarliestEvent);\n\t\t\tthis.resizeObserver.observe(this.$refs.body);\n\n\t\t\tif (!this.mutationObserver)\n\t\t\t\tthis.mutationObserver = new MutationObserver(mutations => {\n\t\t\t\t\tif (mutations.some(m => m.addedNodes.length && [].some.call(m.addedNodes, el => el.matches && el.matches('.fhc-calendar-base-grid-line-event'))))\n\t\t\t\t\t\tthis.scrollToEarliestEvent();\n\t\t\t\t});\n\t\t\tthis.mutationObserver.observe(this.$refs.body, {\n\t\t\t\tsubtree: true,\n\t\t\t\tchildList: true\n\t\t\t});\n\n\t\t\tthis.scrollToEarliestEvent();\n\t\t},\n\t\tdisableAutoScroll() {\n\t\t\tif (this.resizeObserver)\n\t\t\t\tthis.resizeObserver.disconnect();\n\t\t\tthis.resizeObserver = null;\n\n\t\t\tif (this.mutationObserver)\n\t\t\t\tthis.mutationObserver.disconnect();\n\t\t\tthis.mutationObserver = null;\n\t\t},\n\t\tscrollToEarliestEvent() {\n\t\t\tconst eventElements = this.$refs.scroller.querySelectorAll('.fhc-calendar-base-grid-line-event');\n\n\t\t\tlet earliestEventOffset = [0, null];\n\t\t\tfor (var el of eventElements.values()) {\n\t\t\t\tconst top = el.offsetTop;\n\t\t\t\tif (!earliestEventOffset[1] || top < earliestEventOffset[0])\n\t\t\t\t\tearliestEventOffset = [top, el];\n\t\t\t}\n\n\t\t\tthis.userScroll = false;\n\t\t\tif (earliestEventOffset[1]) {\n\t\t\t\tearliestEventOffset[1].scrollIntoView({ behavior: \"smooth\" });\n\t\t\t} else {\n\t\t\t\tthis.$refs.scroller.scrollTo(0, 0);\n\t\t\t}\n\t\t}\n\t},\n\tbeforeUnmount() {\n\t\tthis.disableAutoScroll();\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t end > date))}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t`\n}\n","import LineEvent from './Line/Event.js';\nimport LineBackground from './Line/Background.js';\n\n/**\n * TODO(chris):\n * Event overflow for Month mode (more-button)\n */\n\nexport default {\n\tname: \"GridLine\",\n\tcomponents: {\n\t\tLineEvent,\n\t\tLineBackground\n\t},\n\tinject: {\n\t\taxisRow: \"axisRow\"\n\t},\n\tprops: {\n\t\tdate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tstart: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tend: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tevents: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tbackgrounds: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t}\n\t},\n\tcomputed: {\n\t\teventsWithRowInfo() {\n\t\t\tconst events = [];\n\t\t\tthis.events.forEach(event => {\n\t\t\t\tconst rows = [1, -1];\n\t\t\t\tif (event.startsHere) {\n\t\t\t\t\trows[0] = 't_' + event.start.diff(this.date).toMillis();\n\t\t\t\t}\n\t\t\t\tif (event.endsHere) {\n\t\t\t\t\trows[1] = 't_' + event.end.diff(this.date).toMillis();\n\t\t\t\t}\n\n\t\t\t\tevents.push({\n\t\t\t\t\t...event,\n\t\t\t\t\trows\n\t\t\t\t});\n\t\t\t});\n\t\t\treturn events;\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t`\n}\n","export default {\n\tname: \"GridLineBackground\",\n\tinject: {\n\t\tflipAxis: \"flipAxis\"\n\t},\n\tprops: {\n\t\tstart: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tend: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tbackground: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tvalidator(value) {\n\t\t\t\tif (!value.start && !value.end)\n\t\t\t\t\treturn false;\n\t\t\t\tif (value.start && !(value.start instanceof luxon.DateTime))\n\t\t\t\t\treturn false;\n\t\t\t\tif (value.end && !(value.end instanceof luxon.DateTime))\n\t\t\t\t\treturn false;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t},\n\tcomputed: {\n\t\tstyles() {\n\t\t\tif (!this.background.endsHere && !this.background.startsHere)\n\t\t\t\treturn this.background.style;\n\n\t\t\tconst perc = (this.end.ts - this.start.ts) / 100;\n\t\t\t\n\t\t\tlet border = {};\n\t\t\tif (this.background.startsHere)\n\t\t\t\tborder[this.flipAxis ? 'left' : 'top'] = (this.background.start.diff(this.start)) / perc + '%';\n\t\t\tif (this.background.endsHere)\n\t\t\t\tborder[this.flipAxis ? 'right' : 'bottom'] = (this.end.diff(this.background.end)) / perc + '%';\n\n\t\t\tif (!this.background.style)\n\t\t\t\treturn border;\n\t\t\t\n\t\t\treturn [this.background.style, border];\n\t\t},\n\t\tclasses() {\n\t\t\tif (!this.background.endsHere && !this.background.startsHere)\n\t\t\t\treturn this.background.class;\n\t\t\t\n\t\t\tconst result = [];\n\t\t\tif (this.background.class)\n\t\t\t\tresult.push(this.background.class);\n\t\t\tif (this.background.startsHere)\n\t\t\t\tresult.push('bg-begin');\n\t\t\tif (this.background.endsHere)\n\t\t\t\tresult.push('bg-end');\n\t\t\treturn result;\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t{{ background.label }}\n\t\n\t`\n}\n","import CalClick from '../../../../directives/Calendar/Click.js';\n\nexport default {\n\tname: \"LabelDay\",\n\tdirectives: {\n\t\tCalClick\n\t},\n\tprops: {\n\t\tdate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\tcomputed: {\n\t\ttitleFull() {\n\t\t\treturn this.date.toLocaleString({day: 'numeric', month: 'long', year: 'numeric'});\n\t\t},\n\t\ttitleLong() {\n\t\t\treturn this.date.toLocaleString({day: '2-digit', month: '2-digit', year: 'numeric'});\n\t\t},\n\t\ttitleShort() {\n\t\t\treturn this.date.toLocaleString({day: 'numeric', month: 'numeric'});\n\t\t},\n\t\ttitleNarrow() {\n\t\t\treturn this.date.toLocaleString({day: 'numeric'});\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t{{ titleFull }}\n\t\t{{ titleLong }}\n\t\t{{ titleShort }}\n\t\t{{ titleNarrow }}\n\t\n\t`\n}\n","import CalClick from '../../../../directives/Calendar/Click.js';\n\nexport default {\n\tname: \"LabelDow\",\n\tdirectives: {\n\t\tCalClick\n\t},\n\tprops: {\n\t\tdate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\tcomputed: {\n\t\ttitleLong() {\n\t\t\treturn this.date.toLocaleString({weekday: 'long'});\n\t\t},\n\t\ttitleShort() {\n\t\t\treturn this.date.toLocaleString({weekday: 'short'});\n\t\t},\n\t\ttitleNarrow() {\n\t\t\treturn this.date.toLocaleString({weekday: 'narrow'});\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t{{ titleLong }}\n\t\t{{ titleShort }}\n\t\t{{ titleNarrow }}\n\t\n\t`\n}\n","export default {\n\tname: \"LabelTime\",\n\tprops: {\n\t\tpart: {\n\t\t\ttype: [luxon.Duration, Number, Object],\n\t\t\trequired: true,\n\t\t\tvalidator(value) {\n\t\t\t\tif (value instanceof Object) {\n\t\t\t\t\tif (value instanceof luxon.Duration)\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tlet start_ok = true;\n\t\t\t\t\tlet end_ok = true;\n\t\t\t\t\tif (value.start) {\n\t\t\t\t\t\tstart_ok = (\n\t\t\t\t\t\t\tvalue.start instanceof luxon.Duration\n\t\t\t\t\t\t\t|| Number.isInteger(value.start)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (value.end) {\n\t\t\t\t\t\tend_ok = (\n\t\t\t\t\t\t\tvalue.end instanceof luxon.Duration\n\t\t\t\t\t\t\t|| Number.isInteger(value.end)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn start_ok && end_ok;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t},\n\tcomputed: {\n\t\tsanitizedTimestamps() {\n\t\t\treturn this.part.start || this.part.end ? this.part : { start: this.part };\n\t\t},\n\t\tstart() {\n\t\t\tif (!this.sanitizedTimestamps.start)\n\t\t\t\treturn null;\n\t\t\treturn this.formatTime(this.sanitizedTimestamps.start);\n\t\t},\n\t\tend() {\n\t\t\tif (!this.sanitizedTimestamps.end)\n\t\t\t\treturn null;\n\t\t\treturn this.formatTime(this.sanitizedTimestamps.end);\n\t\t}\n\t},\n\tmethods: {\n\t\tformatTime(date) {\n\t\t\treturn date.toISOTime({ suppressSeconds: true });\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t{{ start }}\n\t\t-\n\t\t{{ end }}\n\t
    \n\t`\n}\n","import CalendarGrid from '../../Base/Grid.js';\nimport LabelDay from '../../Base/Label/Day.js';\nimport LabelDow from '../../Base/Label/Dow.js';\nimport LabelTime from '../../Base/Label/Time.js';\n\nimport { useResizeObserver } from '../../../../composables/Responsive.js';\n\nexport default {\n\tname: \"DayView\",\n\tcomponents: {\n\t\tCalendarGrid,\n\t\tLabelDay,\n\t\tLabelDow,\n\t\tLabelTime\n\t},\n\tinject: {\n\t\ttimeGrid: \"timeGrid\",\n\t\toriginalEvents: \"events\",\n\t\ttimezone: \"timezone\"\n\t},\n\tprops: {\n\t\tday: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\temptyMessage: String,\n\t\temptyMessageDetails: String\n\t},\n\temits: [\n\t\t\"requestModalOpen\",\n\t\t\"requestModalClose\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tchosenEvent: null,\n\t\t\tgridMainRef: null\n\t\t};\n\t},\n\tcomputed: {\n\t\taxisMain() {\n\t\t\treturn [this.day.startOf('day')];\n\t\t},\n\t\taxisParts() {\n\t\t\tif (this.timeGrid) {\n\t\t\t\t// create {start, end} array\n\t\t\t\treturn this.timeGrid.map(tu => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstart: luxon.Duration.fromISOTime(tu.start),\n\t\t\t\t\t\tend: luxon.Duration.fromISOTime(tu.end)\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// create 07:00-23:00\n\t\t\t\treturn Array.from({ length: 17 }, (e, i) => luxon.Duration.fromObject({ hours: i + 7 }));\n\t\t\t}\n\t\t},\n\t\tevents() {\n\t\t\treturn this.originalEvents\n\t\t\t\t.filter(event => event.start < this.day.plus({ days: 1 }) && event.end > this.day)\n\t\t\t\t.sort((a, b) => a.start.ts - b.start.ts)\n\t\t\t\t.map(evt => evt.orig);\n\t\t},\n\t\tcurrentEvent() {\n\t\t\tif (this.chosenEvent) {\n\t\t\t\tif (this.events.find(e => e == this.chosenEvent))\n\t\t\t\t\treturn this.chosenEvent;\n\t\t\t}\n\t\t\tlet first = null;\n\t\t\tif (this.events)\n\t\t\t\tfirst = this.events.find(Boolean); // undefined => none found\n\n\t\t\tif (first && first.type == 'loading')\n\t\t\t\treturn null; // null => loading\n\n\t\t\treturn first;\n\t\t},\n\t\tisToday() {\n\t\t\treturn this.day.hasSame(luxon.DateTime.now().setZone(this.timezone), 'day');\n\t\t}\n\t},\n\twatch: {\n\t\tcompact() {\n\t\t\tif (this.compact) {\n\t\t\t\tif (this.chosenEvent) {\n\t\t\t\t\tthis.$emit('requestModalOpen', {\n\t\t\t\t\t\tevent: this.chosenEvent,\n\t\t\t\t\t\tcloseFn: () => { this.chosenEvent = null; }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.$emit('requestModalClose');\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\thandleClickDefaults(evt) {\n\t\t\tif (evt.detail.source == 'event') {\n\t\t\t\tthis.chosenEvent = evt.detail.value;\n\t\t\t\tif (this.compact) {\n\t\t\t\t\tthis.$emit('requestModalOpen', {\n\t\t\t\t\t\tevent: this.chosenEvent,\n\t\t\t\t\t\tcloseFn: () => { this.chosenEvent = null; }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tsetup() {\n\t\tconst container = Vue.ref(null); // use useTemplateRef when updating to Vue 3.5\n\t\tconst { compact } = useResizeObserver(container, 750);\n\n\t\treturn {\n\t\t\tcontainer, // must be exposed or it won't be set in Vue < 3.5\n\t\t\tcompact\n\t\t};\n\t},\n\tmounted() {\n\t\tthis.gridMainRef = this.$refs.grid.$refs.main;\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t{{ emptyMessage }}\n\t\t\t\n\t\t\n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\t

    {{ emptyMessageDetails }}

    \n\t\t\t\n\t\t\n\t\n\t`\n}\n","import BaseSlider from '../Base/Slider.js';\nimport DayView from './Day/View.js';\n\nexport default {\n\tname: \"ModeDay\",\n\tcomponents: {\n\t\tBaseSlider,\n\t\tDayView\n\t},\n\tprops: {\n\t\tcurrentDate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\temits: [\n\t\t\"update:currentDate\",\n\t\t\"update:range\",\n\t\t\"click\",\n\t\t\"requestModalOpen\",\n\t\t\"requestModalClose\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tfocusDate: this.currentDate,\n\t\t\trangeOffset: 0\n\t\t};\n\t},\n\tcomputed: {\n\t\trange() {\n\t\t\tlet first = this.focusDate.startOf('day');\n\t\t\tlet last = this.focusDate.endOf('day');\n\t\t\t\n\t\t\tif (this.rangeOffset != 0) {\n\t\t\t\tif (this.rangeOffset < 0) {\n\t\t\t\t\tfirst = first.plus({ days: this.rangeOffset });\n\t\t\t\t} else {\n\t\t\t\t\tlast = last.plus({ days: this.rangeOffset });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn luxon.Interval.fromDateTimes(first, last);\n\t\t}\n\t},\n\twatch: {\n\t\tcurrentDate() {\n\t\t\tif (this.currentDate.locale != this.focusDate.locale) {\n\t\t\t\tthis.focusDate = this.currentDate;\n\t\t\t\tthis.$emit('update:range', this.range);\n\t\t\t} else {\n\t\t\t\tthis.rangeOffset = this.currentDate.startOf('day').diff(this.focusDate.startOf('day'), 'days').days;\n\t\t\t\tif (this.rangeOffset) {\n\t\t\t\t\tthis.$refs.view.$refs.grid.disableAutoScroll();\n\t\t\t\t\tthis.$emit('update:range', this.range);\n\t\t\t\t\tthis.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\tprevPage() {\n\t\t\tthis.rangeOffset = this.$refs.slider.target - 1;\n\t\t\tthis.$refs.view.$refs.grid.disableAutoScroll();\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.slider.prevPage().then(this.updatePage);\n\t\t},\n\t\tnextPage() {\n\t\t\tthis.rangeOffset = this.$refs.slider.target + 1;\n\t\t\tthis.$refs.view.$refs.grid.disableAutoScroll();\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.slider.nextPage().then(this.updatePage);\n\t\t},\n\t\tupdatePage(days) {\n\t\t\tconst newFocusDate = this.focusDate.plus({ days });\n\t\t\tthis.focusDate = newFocusDate;\n\t\t\tthis.rangeOffset = 0;\n\t\t\tthis.$emit('update:currentDate', this.focusDate);\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.view.$refs.grid.enableAutoScroll();\n\t\t},\n\t\tviewAttrs(days) {\n\t\t\tconst day = this.focusDate.plus({ days });\n\t\t\treturn { ...this.$attrs, day };\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.$emit('update:range', this.range);\n\t\tthis.$refs.view.$refs.grid.enableAutoScroll();\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t`\n}\n","/**\n * size returns the key of smallest threshold array (integer converts to\n * { compact: threshold }) entry that is bigger than the current width of\n * the element or 'full' if none is found.\n * compact is true if the smallest threshold array entry is bigger than the\n * current width or false otherwise.\n *\n * @param DOMElement|VueTemplateRef\t\telement\n * @param object|array|integer\t\t\tthreshold\n * @return object\t\t\t\t\t\t{ compact:Boolean, size:String }\n */\nexport function useResizeObserver(element, threshold) {\n\t/* Result Vars */\n\tconst compact = Vue.ref(false);\n\tconst size = Vue.ref(false);\n\n\t/* Helper Vars */\n\tconst mounted = Vue.ref(false);\n\tconst elementRef = Vue.computed(() => {\n\t\tif (!Vue.isRef(element))\n\t\t\treturn element;\n\t\t\n\t\tif (!element.value)\n\t\t\treturn element.value;\n\t\t\n\t\tif (element.value.$el) // Maybe there is a better test\n\t\t\treturn element.value.$el;\n\n\t\treturn element.value;\n\t});\n\tconst compareArray = Vue.computed(() => {\n\t\tconst input = Vue.isRef(threshold) ? threshold.value : threshold;\n\t\tif (Number.isInteger(input))\n\t\t\treturn [['compact', input]];\n\t\tif (Array.isArray(input))\n\t\t\treturn input.map((value, key) => [key, value]).sort((a, b) => a[1]-b[1]);\n\t\treturn Object.entries(input).sort((a, b) => a[1]-b[1]);\n\t});\n\n\t/* Helper Functions */\n\tfunction updateResultVars() {\n\t\tconst compare = threshold.value || threshold;\n\t\tif (elementRef.value.offsetWidth === undefined)\n\t\t\treturn;\n\n\t\tconst found = compareArray.value.find(compare => compare[1] > elementRef.value.offsetWidth);\n\n\t\tsize.value = found ? found[0] : 'full';\n\t\tcompact.value = (size.value == compareArray.value[0][0]);\n\t}\n\n\t/* Observer */\n\tconst observer = new ResizeObserver(() => {\n\t\tif (elementRef.value) {\n\t\t\tupdateResultVars();\n\t\t}\n\t});\n\t/* Observer Helper Functions */\n\tfunction addObserver() {\n\t\tif (!elementRef.value)\n\t\t\treturn;\n\n\t\tupdateResultVars();\n\t\tobserver.observe(elementRef.value);\n\t\tmounted.value = true;\n\t}\n\tfunction removeObserver() {\n\t\tif (mounted.value) {\n\t\t\tobserver.disconnect()\n\t\t}\n\t}\n\n\t/* Main Logic */\n\tVue.onMounted(addObserver);\n\tVue.onUnmounted(removeObserver);\n\t\n\tVue.watchEffect(() => {\n\t\tif (elementRef.value) {\n\t\t\tremoveObserver();\n\t\t\taddObserver();\n\t\t}\n\t});\n\n\treturn { compact, size };\n}","import BaseSlider from '../Base/Slider.js';\nimport WeekView from './Week/View.js';\n\nexport default {\n\tname: \"ModeWeek\",\n\tcomponents: {\n\t\tBaseSlider,\n\t\tWeekView\n\t},\n\tprops: {\n\t\tcurrentDate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\temits: [\n\t\t\"update:currentDate\",\n\t\t\"update:range\",\n\t\t\"click\",\n\t\t\"requestModalOpen\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tfocusDate: this.currentDate,\n\t\t\trangeOffset: 0\n\t\t};\n\t},\n\tcomputed: {\n\t\trange() {\n\t\t\tlet first = this.focusDate.startOf('week', { useLocaleWeeks: true });\n\t\t\tlet last = this.focusDate.endOf('week', { useLocaleWeeks: true });\n\n\t\t\tif (this.rangeOffset != 0) {\n\t\t\t\tif (this.rangeOffset < 0) {\n\t\t\t\t\tfirst = first.plus({ weeks: this.rangeOffset });\n\t\t\t\t} else {\n\t\t\t\t\tlast = last.plus({ weeks: this.rangeOffset });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn luxon.Interval.fromDateTimes(first, last);\n\t\t}\n\t},\n\twatch: {\n\t\tcurrentDate() {\n\t\t\tif (this.currentDate.locale != this.focusDate.locale) {\n\t\t\t\tthis.focusDate = this.currentDate;\n\t\t\t\tthis.$emit('update:range', this.range);\n\t\t\t} else {\n\t\t\t\tthis.rangeOffset = this.currentDate.startOf('week', { useLocaleWeeks: true }).diff(this.focusDate.startOf('week', { useLocaleWeeks: true }), 'weeks').weeks;\n\t\t\t\tif (this.rangeOffset) {\n\t\t\t\t\tthis.$refs.view.$refs.grid.disableAutoScroll();\n\t\t\t\t\tthis.$emit('update:range', this.range);\n\t\t\t\t\tthis.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\tprevPage() {\n\t\t\tthis.rangeOffset = this.$refs.slider.target - 1;\n\t\t\tthis.$refs.view.$refs.grid.disableAutoScroll();\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.slider.prevPage().then(this.updatePage);\n\t\t},\n\t\tnextPage() {\n\t\t\tthis.rangeOffset = this.$refs.slider.target + 1;\n\t\t\tthis.$refs.view.$refs.grid.disableAutoScroll();\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.slider.nextPage().then(this.updatePage);\n\t\t},\n\t\tupdatePage(weeks) {\n\t\t\tconst newFocusDate = this.focusDate.plus({ weeks });\n\t\t\tthis.focusDate = newFocusDate;\n\t\t\tthis.rangeOffset = 0;\n\t\t\tthis.$emit('update:currentDate', this.focusDate);\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.view.$refs.grid.enableAutoScroll();\n\t\t},\n\t\tviewAttrs(weeks) {\n\t\t\tconst day = this.focusDate.plus({ weeks });\n\t\t\treturn { ...this.$attrs, day };\n\t\t},\n\t\thandleClickDefaults(evt) {\n\t\t\tswitch (evt.detail.source) {\n\t\t\tcase 'day':\n\t\t\t\t// default: Set current-date\n\t\t\t\tthis.$emit('update:currentDate', evt.detail.value);\n\t\t\t\tbreak;\n\t\t\tcase 'event':\n\t\t\t\t// default: Request Modal\n\t\t\t\tthis.$emit('requestModalOpen', { event: evt.detail.value });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.$emit('update:range', this.range);\n\t\tthis.$refs.view.$refs.grid.enableAutoScroll();\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t`\n}\n","import CalendarGrid from '../../Base/Grid.js';\nimport LabelDay from '../../Base/Label/Day.js';\nimport LabelDow from '../../Base/Label/Dow.js';\nimport LabelTime from '../../Base/Label/Time.js';\n\nexport default {\n\tname: \"WeekView\",\n\tcomponents: {\n\t\tCalendarGrid,\n\t\tLabelDay,\n\t\tLabelDow,\n\t\tLabelTime\n\t},\n\tinject: {\n\t\ttimeGrid: \"timeGrid\",\n\t\ttimezone: \"timezone\"\n\t},\n\tprops: {\n\t\tday: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tcollapseEmptyDays: Boolean\n\t},\n\tcomputed: {\n\t\tstart() {\n\t\t\treturn this.day.startOf('week', { useLocaleWeeks: true });\n\t\t},\n\t\taxisMain() {\n\t\t\treturn Array.from({ length: 7 }, (e, i) => this.start.plus({ days: i }));\n\t\t},\n\t\taxisParts() {\n\t\t\tif (this.timeGrid) {\n\t\t\t\t// create {start, end} array\n\t\t\t\treturn this.timeGrid.map(tu => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstart: luxon.Duration.fromISOTime(tu.start),\n\t\t\t\t\t\tend: luxon.Duration.fromISOTime(tu.end)\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// create 07:00-23:00\n\t\t\t\treturn Array.from({ length: 17 }, (e, i) => luxon.Duration.fromObject({ hours: i + 7 }));\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\tisToday(date) {\n\t\t\treturn date.hasSame(luxon.DateTime.now().setZone(this.timezone), 'day');\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t
    \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    \n\t`\n}\n","import BaseSlider from '../Base/Slider.js';\nimport MonthView from './Month/View.js';\n\nexport default {\n\tname: \"ModeMonth\",\n\tcomponents: {\n\t\tBaseSlider,\n\t\tMonthView\n\t},\n\tprops: {\n\t\tcurrentDate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\temits: [\n\t\t\"update:currentDate\",\n\t\t\"update:range\",\n\t\t\"click\",\n\t\t\"requestModalOpen\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tfocusDate: this.currentDate,\n\t\t\trangeOffset: 0\n\t\t};\n\t},\n\tcomputed: {\n\t\trange() {\n\t\t\tlet first = this.focusDate.startOf('month').startOf('week', { useLocaleWeeks: true });\n\t\t\tlet last = first.plus({ days: 41 }).endOf('day'); // NOTE(chris): 6 weeks minus 1 day\n\n\t\t\tif (this.rangeOffset != 0) {\n\t\t\t\tconst nextFocusDate = this.focusDate.plus({ months: this.rangeOffset});\n\t\t\t\tconst nextRangeStart = nextFocusDate.startOf('month').startOf('week', { useLocaleWeeks: true });\n\t\t\t\tif (this.rangeOffset < 0) {\n\t\t\t\t\tfirst = nextRangeStart;\n\t\t\t\t} else {\n\t\t\t\t\tlast = nextRangeStart.plus({ days: 41 }).endOf('day');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn luxon.Interval.fromDateTimes(first, last);\n\t\t}\n\t},\n\twatch: {\n\t\tcurrentDate() {\n\t\t\tif (this.currentDate.locale != this.focusDate.locale) {\n\t\t\t\tthis.focusDate = this.currentDate;\n\t\t\t\tthis.$emit('update:range', this.range);\n\t\t\t} else {\n\t\t\t\tthis.rangeOffset = this.currentDate.startOf('month').diff(this.focusDate.startOf('month'), 'months').months;\n\t\t\t\tif (this.rangeOffset) {\n\t\t\t\t\tthis.$emit('update:range', this.range);\n\t\t\t\t\tthis.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\tprevPage() {\n\t\t\tthis.rangeOffset = this.$refs.slider.target - 1;\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.slider.prevPage().then(this.updatePage);\n\t\t},\n\t\tnextPage() {\n\t\t\tthis.rangeOffset = this.$refs.slider.target + 1;\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.slider.nextPage().then(this.updatePage);\n\t\t},\n\t\tupdatePage(months) {\n\t\t\tconst newFocusDate = this.focusDate.plus({ months });\n\t\t\tthis.focusDate = newFocusDate;\n\t\t\tthis.rangeOffset = 0;\n\t\t\tthis.$emit('update:currentDate', this.focusDate);\n\t\t\tthis.$emit('update:range', this.range);\n\t\t},\n\t\tviewAttrs(months) {\n\t\t\tconst day = this.focusDate.plus({ months });\n\t\t\treturn { day };\n\t\t},\n\t\thandleClickDefaults(evt) {\n\t\t\tswitch (evt.detail.source) {\n\t\t\tcase 'week':\n\t\t\t\t// default: Move to week if not in month\n\t\t\t\tlet dayInWeek = luxon.DateTime.fromObject({\n\t\t\t\t\tlocalWeekNumber: evt.detail.value.number,\n\t\t\t\t\tlocalWeekYear: evt.detail.value.year\n\t\t\t\t}, {\n\t\t\t\t\tzone: this.currentDate.zoneName,\n\t\t\t\t\tlocale: this.currentDate.locale\n\t\t\t\t});\n\n\t\t\t\tif (!this.focusDate.hasSame(dayInWeek.startOf('week', { useLocaleWeeks: true }), 'month')) {\n\t\t\t\t\tthis.$emit('update:currentDate', dayInWeek.startOf('week', { useLocaleWeeks: true }));\n\t\t\t\t} else if (!this.focusDate.hasSame(dayInWeek.endOf('week', { useLocaleWeeks: true }), 'month')) {\n\t\t\t\t\tthis.$emit('update:currentDate', dayInWeek.endOf('week', { useLocaleWeeks: true }));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'day':\n\t\t\t\t// default: Set current-date\n\t\t\t\tthis.$emit('update:currentDate', evt.detail.value);\n\t\t\t\tbreak;\n\t\t\tcase 'event':\n\t\t\t\t// default: Request Modal\n\t\t\t\tthis.$emit('requestModalOpen', { event: evt.detail.value });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.$emit('update:range', this.range);\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t`\n}\n","import CalendarGrid from '../../Base/Grid.js';\nimport LabelWeek from '../../Base/Label/Week.js';\nimport LabelDow from '../../Base/Label/Dow.js';\nimport LabelDay from '../../Base/Label/Day.js';\n\nexport default {\n\tname: \"MonthView\",\n\tcomponents: {\n\t\tCalendarGrid,\n\t\tLabelWeek,\n\t\tLabelDow,\n\t\tLabelDay\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\t// NOTE(chris): snap events to day\n\t\t\tevents: Vue.computed(() => {\n\t\t\t\t//const events = [];\n\t\t\t\tconst events = this.events.map(event => {\n\t\t\t\t\tconst start = event.start.startOf('day');\n\t\t\t\t\tconst end = event.end.plus({ days: 1 }).startOf('day');\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...event,\n\t\t\t\t\t\tstart,\n\t\t\t\t\t\tend\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\tfor (var w = 5; w > -1; w--) {\n\t\t\t\t\tfor (var d = 6; d > -1; d--) {\n\t\t\t\t\t\tconst startdate = this.axisMain[w].plus(this.axisParts[d]);\n\t\t\t\t\t\tevents.unshift({\n\t\t\t\t\t\t\tstart: startdate,\n\t\t\t\t\t\t\tend: startdate.plus({ days: 1 }),\n\t\t\t\t\t\t\torig: 'header'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn events;\n\t\t\t})\n\t\t};\n\t},\n\tinject: {\n\t\tevents: \"events\",\n\t\ttimezone: \"timezone\"\n\t},\n\tprops: {\n\t\tday: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\tcomputed: {\n\t\taxisMain() {\n\t\t\tconst start = this.day.startOf('month').startOf('week', { useLocaleWeeks: true });\n\t\t\treturn Array.from({ length: 6 }, (e, i) => start.plus({ weeks: i }));\n\t\t},\n\t\taxisParts() {\n\t\t\treturn Array.from({ length: 8 }, (e, i) => luxon.Duration.fromObject({ days: i }));\n\t\t}\n\t},\n\tmethods: {\n\t\tisToday(date) {\n\t\t\treturn date.hasSame(luxon.DateTime.now().setZone(this.timezone), 'day');\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t
    \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    \n\t`\n}\n","import CalClick from '../../../../directives/Calendar/Click.js';\n\nexport default {\n\tname: \"LabelWeek\",\n\tdirectives: {\n\t\tCalClick\n\t},\n\tprops: {\n\t\tdate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\tcomputed: {\n\t\tweeks() {\n\t\t\tconst firstDay = this.date.startOf('week', { useLocaleWeeks: true });\n\t\t\tconst lastDay = this.date.endOf('week', { useLocaleWeeks: true });\n\n\t\t\tconst weeks = [\n\t\t\t\t{ number: firstDay.localWeekNumber, year: firstDay.localWeekYear },\n\t\t\t\t{ number: lastDay.localWeekNumber, year: lastDay.localWeekYear }\n\t\t\t];\n\t\t\tif (weeks[0].number == weeks[1].number)\n\t\t\t\tweeks.pop();\n\t\t\treturn weeks;\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t\n\t\t\t{{ week.number }}\n\t\t\n\t
    \n\t`\n}\n","import FhcCalendar from \"./Base.js\";\n\nimport ApiLvPlan from '../../api/factory/lvPlan.js';\n\nimport { useEventLoader } from '../../composables/EventLoader.js';\n\nimport ModeDay from './Mode/Day.js';\nimport ModeWeek from './Mode/Week.js';\nimport ModeMonth from './Mode/Month.js';\n\nexport default {\n\tname: \"CalendarLvPlan\",\n\tcomponents: {\n\t\tFhcCalendar\n\t},\n\tinject: [\n\t\t\"renderers\"\n\t],\n\tprops: {\n\t\ttimezone: {\n\t\t\ttype: String,\n\t\t\trequired: true\n\t\t},\n\t\tdate: {\n\t\t\ttype: [Date, String, Number, luxon.DateTime],\n\t\t\tdefault: luxon.DateTime.local()\n\t\t},\n\t\tmode: {\n\t\t\ttype: String,\n\t\t\tdefault: 'Week'\n\t\t},\n\t\tgetPromiseFunc: {\n\t\t\ttype: Function,\n\t\t\trequired: true\n\t\t}\n\t},\n\temits: [\n\t\t\"update:date\",\n\t\t\"update:mode\",\n\t\t\"update:range\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tmodes: {\n\t\t\t\tday: Vue.markRaw(ModeDay),\n\t\t\t\tweek: Vue.markRaw(ModeWeek),\n\t\t\t\tmonth: Vue.markRaw(ModeMonth)\n\t\t\t},\n\t\t\tmodeOptions: {\n\t\t\t\tday: {\n\t\t\t\t\temptyMessage: Vue.computed(() => this.$p.t('lehre/noLvFound')),\n\t\t\t\t\temptyMessageDetails: Vue.computed(() => this.$p.t('lehre/noLvFound'))\n\t\t\t\t},\n\t\t\t\tweek: {\n\t\t\t\t\tcollapseEmptyDays: false\n\t\t\t\t}\n\t\t\t},\n\t\t\tteachingunits: null\n\t\t};\n\t},\n\tcomputed: {\n\t\tbackgrounds() {\n\t\t\tlet now = luxon.DateTime.now().setZone(this.timezone);\n\n\t\t\tif (this.mode == 'Month')\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\tclass: 'background-past',\n\t\t\t\t\t\tend: now.startOf('day')\n\t\t\t\t\t}\n\t\t\t\t];\n\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tclass: 'background-past',\n\t\t\t\t\tend: now,\n\t\t\t\t\tlabel: now.startOf('minute').toISOTime({ suppressSeconds: true, includeOffset: false })\n\t\t\t\t}\n\t\t\t];\n\t\t}\n\t},\n\tmethods: {\n\t\teventStyle(event) {\n\t\t\tif (!event.farbe)\n\t\t\t\treturn undefined;\n\t\t\treturn '--event-bg:#' + event.farbe;\n\t\t},\n\t\tupdateRange(rangeInterval) {\n\t\t\tthis.rangeInterval = rangeInterval;\n\t\t\tthis.$emit('update:range', rangeInterval);\n\t\t}\n\t},\n\tsetup(props, context) {\n\t\tconst rangeInterval = Vue.ref(null);\n\t\t\n\t\tconst { events, lv } = useEventLoader(rangeInterval, props.getPromiseFunc);\n\n\t\tVue.watch(lv, newValue => {\n\t\t\tcontext.emit('update:lv', newValue);\n\t\t});\n\n\t\treturn {\n\t\t\trangeInterval,\n\t\t\tevents,\n\t\t\tlv\n\t\t};\n\t},\n\tcreated() {\n\t\tthis.$api\n\t\t\t.call(ApiLvPlan.getStunden())\n\t\t\t.then(res => {\n\t\t\t\treturn this.teachingunits = res.data.map(el => ({\n\t\t\t\t\tid: el.stunde,\n\t\t\t\t\tstart: el.beginn,\n\t\t\t\t\tend: el.ende\n\t\t\t\t}));\n\t\t\t});\n\t},\n\ttemplate: /* html */`\n\t $emit('update:date', newDate, newMode)\"\n\t\t@update:mode=\"(newMode, newDate) => $emit('update:mode', newMode, newDate)\"\n\t\t@update:range=\"updateRange\"\n\t>\n\t\t\n\t\t\n\t`\n}\n","// TODO(chris): load events that are longer than the interval without doubling it\n\nexport function useEventLoader(rangeInterval, getPromiseFunc) {\n\tlet loading_id = 0;\n\tconst events = Vue.ref([]);\n\tconst loadingEvents = Vue.ref([]);\n\tconst allEvents = Vue.computed(() => events.value.concat(loadingEvents.value));\n\tconst lv = Vue.ref(null);\n\tconst eventsLoaded = [];\n\n\tconst mergePromiseArr = (n, o) => {\n\t\tif (Array.isArray(n))\n\t\t\treturn o.concat(n);\n\t\treturn o.push(n), o;\n\t};\n\n\tconst markEventsLoaded = (start, end) => {\n\t\tlet result = [];\n\t\tif (!eventsLoaded.length) {\n\t\t\t// empty: add new chunk\n\t\t\teventsLoaded.push(start.ts, end.ts);\n\t\t} else {\n\t\t\tif (eventsLoaded[eventsLoaded.length-1] + 1 == start.ts) {\n\t\t\t\t// add to the end of last chunk\n\t\t\t\teventsLoaded[eventsLoaded.length-1] = end.ts;\n\t\t\t} else if (eventsLoaded[eventsLoaded.length-1] < start.ts) {\n\t\t\t\t// add new chunk after the last chunk\n\t\t\t\teventsLoaded.push(start.ts, end.ts);\n\t\t\t} else if (eventsLoaded[0] == end.ts + 1) {\n\t\t\t\t// add to the start of first chunk\n\t\t\t\teventsLoaded[0] = start.ts;\n\t\t\t} else if (eventsLoaded[0] > end.ts) {\n\t\t\t\teventsLoaded.unshift(start.ts, end.ts);\n\t\t\t} else {\n\t\t\t\tlet index = eventsLoaded.findIndex(e => e >= start.ts);\n\n\t\t\t\tif (index % 2) {\n\t\t\t\t\t// starts inside an existing chunk\n\t\t\t\t\tif (eventsLoaded[index] >= end.ts)\n\t\t\t\t\t\treturn []; // Already loaded\n\n\t\t\t\t\tlet indexIsLast = (index == eventsLoaded.length - 1);\n\n\t\t\t\t\tif (indexIsLast || eventsLoaded[index + 1] > end.ts) {\n\t\t\t\t\t\t// extend an existing chunk\n\t\t\t\t\t\t// and merge with the next if necessary\n\t\t\t\t\t\tlet nStart = eventsLoaded[index] + 1;\n\t\t\t\t\t\tstart = start.plus(nStart - start.ts);\n\t\t\t\t\t\tif (!indexIsLast && eventsLoaded[index + 1] == end.ts + 1)\n\t\t\t\t\t\t\teventsLoaded.splice(index, 2);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\teventsLoaded[index] = end.ts;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// merge exising chunks\n\t\t\t\t\t\t// and load the rest if necessary\n\t\t\t\t\t\tif (eventsLoaded[index + 2] < end.ts) {\n\t\t\t\t\t\t\tlet rStart = eventsLoaded[index + 2] + 1;\n\t\t\t\t\t\t\tresult = mergePromiseArr(markEventsLoaded(start.plus(rStart - start.ts), end), result);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet nStart = eventsLoaded[index] + 1;\n\t\t\t\t\t\tstart = start.plus(nStart - start.ts);\n\t\t\t\t\t\tlet nEnd = eventsLoaded[index + 1] - 1;\n\t\t\t\t\t\tend = end.plus(nEnd - end.ts);\n\t\t\t\t\t\teventsLoaded.splice(index, 2);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// starts between two chunks or before the first\n\t\t\t\t\tif (!index) {\n\t\t\t\t\t\t// extend the first chunk\n\t\t\t\t\t\t// and load the rest if necessary\n\t\t\t\t\t\tif (eventsLoaded[1] < end.ts) {\n\t\t\t\t\t\t\tlet rStart = eventsLoaded[1] + 1;\n\t\t\t\t\t\t\tresult = mergePromiseArr(markEventsLoaded(start.plus(rStart - start.ts), end), result);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet nEnd = eventsLoaded[0] - 1;\n\t\t\t\t\t\tend = end.plus(nEnd - end.ts);\n\t\t\t\t\t\teventsLoaded[0] = start.ts;\n\t\t\t\t\t} else if (eventsLoaded[index] == start.ts) {\n\t\t\t\t\t\t// starts at the same position as an existing chunk\n\t\t\t\t\t\tif (eventsLoaded[index + 1] >= end.ts)\n\t\t\t\t\t\t\treturn []; // Already loaded\n\t\t\t\t\t\t// load the rest\n\t\t\t\t\t\tlet rStart = eventsLoaded[index + 1] + 1;\n\t\t\t\t\t\tresult = mergePromiseArr(markEventsLoaded(start.plus(rStart - start.ts), end), result);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// extend an existing chunk\n\t\t\t\t\t\t// and load the rest if necessary\n\t\t\t\t\t\tif (eventsLoaded[index + 1] < end.ts) {\n\t\t\t\t\t\t\tlet rStart = eventsLoaded[index + 1] + 1;\n\t\t\t\t\t\t\tresult = mergePromiseArr(markEventsLoaded(start.plus(rStart - start.ts), end), result);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet nEnd = eventsLoaded[index] - 1;\n\t\t\t\t\t\tend = end.plus(nEnd - end.ts);\n\t\t\t\t\t\teventsLoaded[index] = start.ts;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (start.ts >= end.ts)\n\t\t\treturn result;\n\n\t\tloadingEvents.value.push({\n\t\t\tloading_id: loading_id++,\n\t\t\ttype: \"loading\",\n\t\t\tisostart: start.toISODate() + 'T' + start.toISOTime(),\n\t\t\tisoend: end.toISODate() + 'T' + end.toISOTime()\n\t\t});\n\n\t\treturn mergePromiseArr(getPromiseFunc(start, end), result);\n\t};\n\n\tVue.watchEffect(() => {\n\t\tconst range = Vue.toValue(rangeInterval);\n\t\tif (!(range instanceof luxon.Interval))\n\t\t\treturn;\n\t\tconst promises = markEventsLoaded(range.start, range.end);\n\t\tPromise\n\t\t\t.allSettled(promises)\n\t\t\t.then(results => {\n\t\t\t\tresults.forEach(res => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tres.status === 'fulfilled'\n\t\t\t\t\t\t&& res.value.meta.status === \"success\"\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (res.value.meta.lv)\n\t\t\t\t\t\t\tlv.value = res.value.meta.lv;\n\n\t\t\t\t\t\tevents.value = events.value.concat(res.value.data);\n\t\t\t\t\t\tloadingEvents.value = [];\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t});\n\t})\n\n\treturn { events: allEvents, lv }\n}","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAuthUID() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/AuthInfo/getAuthUID'\n\t\t};\n\t},\n\tgetAuthInfo() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/AuthInfo/getAuthInfo'\n\t\t};\n\t}\n};","import FhcCalendar from \"../../Calendar/LvPlan.js\";\n\nimport ApiLvPlan from '../../../api/factory/lvPlan.js';\nimport ApiAuthinfo from '../../../api/factory/authinfo.js';\n\nexport const DEFAULT_MODE_LVPLAN = 'Week'\n\nexport default {\n\tname: 'LvPlanLehrveranstaltung',\n\tcomponents: {\n\t\tFhcCalendar\n\t},\n\tprops: {\n\t\tviewData: Object, // NOTE(chris): this is inherited from router-view\n\t\tpropsViewData: Object\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tlv: null\n\t\t};\n\t},\n\tcomputed:{\n\t\tcurrentDay() {\n\t\t\tif (!this.propsViewData?.focus_date || isNaN(new Date(this.propsViewData?.focus_date)))\n\t\t\t\treturn luxon.DateTime.now().setZone(this.viewData.timezone).toISODate();\n\t\t\treturn this.propsViewData?.focus_date;\n\t\t},\n\t\tcurrentMode() {\n\t\t\tif (!this.propsViewData?.mode || !['day', 'week', 'month'].includes(this.propsViewData?.mode.toLowerCase()))\n\t\t\t\treturn DEFAULT_MODE_LVPLAN;\n\t\t\treturn this.propsViewData?.mode;\n\t\t},\n\t\tcurrentLv() {\n\t\t\tif (isNaN(parseInt(this.propsViewData?.lv_id)))\n\t\t\t\treturn null;\n\t\t\treturn this.propsViewData.lv_id;\n\t\t},\n\t\tlvTitle() {\n\t\t\tif (this.currentLv === null)\n\t\t\t\treturn '';\n\t\t\tif (!this.lv)\n\t\t\t\treturn '';\n\n\t\t\tif (this.$p.user_language.value === 'English')\n\t\t\t\treturn this.lv.bezeichnung_english;\n\n\t\t\treturn this.lv.bezeichnung;\n\t\t}\n\t},\n\tmethods: {\n\t\thandleChangeDate(day, newMode) {\n\t\t\treturn this.handleChangeMode(newMode, day);\n\t\t},\n\t\thandleChangeMode(newMode, day) {\n\t\t\tconst mode = newMode[0].toUpperCase() + newMode.slice(1)\n\t\t\tconst focus_date = day.toISODate();\n\t\t\t\n\t\t\tthis.$router.push({\n\t\t\t\tname: \"LvPlan\",\n\t\t\t\tparams: {\n\t\t\t\t\tmode,\n\t\t\t\t\tfocus_date,\n\t\t\t\t\tlv_id: this.currentLv\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tgetPromiseFunc(start, end) {\n\t\t\treturn [\n\t\t\t\tthis.$api.call(ApiLvPlan.eventsLv(this.propsViewData.lv_id, start.toISODate(), end.toISODate())),\n\t\t\t\tthis.$api.call(ApiLvPlan.getLvPlanReservierungen(start.toISODate(), end.toISODate()))\n\t\t\t];\n\t\t}\n\t},\n\tcreated() {\n\t\tif (this.currentLv === null)\n\t\t\treturn;\n\t\tthis.$api\n\t\t\t.call(ApiLvPlan.getLv(this.propsViewData?.lv_id))\n\t\t\t.then(res => {\n\t\t\t\tthis.lv = res.data;\n\t\t\t});\n\t},\n\ttemplate: /*html*/`\n\t
    \n\t\t

    \n\t\t\t{{ $p.t('lehre/stundenplan') }}\n\t\t\t\n\t\t\t\t{{ lvTitle }}\n\t\t\t\n\t\t

    \n\t\t
    \n\t\t
    \n\t\t\t{{ $p.t('lehre/noLvFound') }}\n\t\t
    \n\t\t\n\t
    `\n};\n","import FhcCalendar from \"../../Calendar/LvPlan.js\";\n\nimport ApiLvPlan from '../../../api/factory/lvPlan.js';\nimport ApiAuthinfo from '../../../api/factory/authinfo.js';\n\nexport const DEFAULT_MODE_LVPLAN = 'Week'\n\nexport default {\n\tname: 'LvPlanPersonal',\n\tcomponents: {\n\t\tFhcCalendar\n\t},\n\tprops: {\n\t\tviewData: Object, // NOTE(chris): this is inherited from router-view\n\t\tpropsViewData: Object\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tstudiensemester_kurzbz: null,\n\t\t\tstudiensemester_start: null,\n\t\t\tstudiensemester_ende: null,\n\t\t\tuid: null,\n\t\t\tisMitarbeiter: false,\n\t\t\tisStudent: false\n\t\t};\n\t},\n\tcomputed:{\n\t\tcurrentDay() {\n\t\t\tif (!this.propsViewData?.focus_date || isNaN(new Date(this.propsViewData?.focus_date)))\n\t\t\t\treturn luxon.DateTime.now().setZone(this.viewData.timezone).toISODate();\n\t\t\treturn this.propsViewData?.focus_date;\n\t\t},\n\t\tcurrentMode() {\n\t\t\tif (!this.propsViewData?.mode || !['day', 'week', 'month'].includes(this.propsViewData?.mode.toLowerCase()))\n\t\t\t\treturn DEFAULT_MODE_LVPLAN;\n\t\t\treturn this.propsViewData?.mode;\n\t\t},\n\t\tdownloadLinks() {\n\t\t\tif (!this.studiensemester_start || !this.studiensemester_ende || !this.uid)\n\t\t\t\treturn false;\n\n\t\t\tlet type = false;\n\t\t\ttype = this.isStudent ? 'student' : type;\n\t\t\ttype = this.isMitarbeiter ? 'lektor' : type;\n\t\t\tif (false === type)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst opts = { zone: this.viewData.timezone };\n\t\t\tconst start = luxon.DateTime\n\t\t\t\t.fromISO(this.studiensemester_start, opts)\n\t\t\t\t.toUnixInteger();\n\t\t\tconst ende = luxon.DateTime\n\t\t\t\t.fromISO(this.studiensemester_ende, opts)\n\t\t\t\t.toUnixInteger();\n\n\t\t\tconst download_link = FHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t+ 'cis/private/lvplan/stpl_kalender.php'\n\t\t\t\t+ '?type=' + type\n\t\t\t\t+ '&pers_uid=' + this.uid\n\t\t\t\t+ '&begin=' + start\n\t\t\t\t+ '&ende=' + ende;\n\n\t\t\treturn [\n\t\t\t\t{ title: \"excel\", icon: 'fa-solid fa-file-excel', link: download_link + '&format=excel' },\n\t\t\t\t{ title: \"csv\", icon: 'fa-solid fa-file-csv', link: download_link + '&format=csv' },\n\t\t\t\t{ title: \"ical1\", icon: 'fa-regular fa-calendar', link: download_link + '&format=ical&version=1&target=ical' },\n\t\t\t\t{ title: \"ical2\", icon: 'fa-regular fa-calendar', link: download_link + '&format=ical&version=2&target=ical' }\n\t\t\t];\n\t\t}\n\t},\n\tmethods: {\n\t\thandleChangeDate(day, newMode) {\n\t\t\treturn this.handleChangeMode(newMode, day);\n\t\t},\n\t\thandleChangeMode(newMode, day) {\n\t\t\tconst mode = newMode[0].toUpperCase() + newMode.slice(1)\n\t\t\tconst focus_date = day.toISODate();\n\t\t\t\n\t\t\tthis.$router.push({\n\t\t\t\tname: \"MyLvPlan\",\n\t\t\t\tparams: {\n\t\t\t\t\tmode,\n\t\t\t\t\tfocus_date\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tupdateRange(rangeInterval) {\n\t\t\tthis.$api\n\t\t\t\t.call(ApiLvPlan.studiensemesterDateInterval(\n\t\t\t\t\trangeInterval.end.startOf('week').toISODate()\n\t\t\t\t))\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.studiensemester_kurzbz = res.data.studiensemester_kurzbz;\n\t\t\t\t\tthis.studiensemester_start = res.data.start;\n\t\t\t\t\tthis.studiensemester_ende = res.data.ende;\n\t\t\t\t});\n\t\t},\n\t\tgetPromiseFunc(start, end) {\n\t\t\treturn [\n\t\t\t\tthis.$api.call(ApiLvPlan.eventsPersonal(start.toISODate(), end.toISODate())),\n\t\t\t\tthis.$api.call(ApiLvPlan.getLvPlanReservierungen(start.toISODate(), end.toISODate()))\n\t\t\t];\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.$api\n\t\t\t.call(ApiAuthinfo.getAuthInfo())\n\t\t\t.then(res => {\n\t\t\t\tthis.uid = res.data.uid;\n\t\t\t\tthis.isMitarbeiter = res.data.isMitarbeiter;\n\t\t\t\tthis.isStudent = res.data.isStudent;\n\t\t\t});\n\t},\n\ttemplate: /*html*/`\n\t
    \n\t\t

    \n\t\t\t{{ $p.t('lehre/stundenplan') }}\n\t\t\t\n\t\t\t\t{{ studiensemester_kurzbz }}\n\t\t\t\n\t\t

    \n\t\t
    \n\t\t\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ title }}\n\t\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\n\t`\n};\n","import BsModal from '../../../../../Bootstrap/Modal.js';\n\nconst pruefungen = {};\n\nexport default {\n\tcomponents: {\n\t\tBsModal\n\t},\n\tmixins: [\n\t\tBsModal\n\t],\n\tprops: {\n\t\tpruefungenData: Array|null,\n\t\tbezeichnung: String,\n\t\t/*\n\t\t * NOTE(chris): \n\t\t * Hack to expose in \"emits\" declared events to $props which we use \n\t\t * in the v-bind directive to forward all events.\n\t\t * @see: https://github.com/vuejs/core/issues/3432\n\t\t*/\n\t\tonHideBsModal: Function,\n\t\tonHiddenBsModal: Function,\n\t\tonHidePreventedBsModal: Function,\n\t\tonShowBsModal: Function,\n\t\tonShownBsModal: Function\n\t},\n\tdata: () => ({\n\t\tresult: true,\n\t}),\n\tmounted() {\n\t\tthis.modal = this.$refs.modalContainer.modal;\n\t},\n\tpopup(options) {\n\t\treturn BsModal.popup.bind(this)(null, options);\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t`\n}\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetStudentenMail(lehreinheit_id) {\n\t\t// TODO(chris): seems to be called from nowhere?\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Lehre/lvStudentenMail',\n\t\t\tparams: { lehreinheit_id }\n\t\t};\n\t},\n\tgetLvInfo(studiensemester_kurzbz, lehrveranstaltung_id) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/Lehre/LV/${studiensemester_kurzbz}/${lehrveranstaltung_id}`\n\t\t};\n\t},\n\tgetStudentPruefungen(lehrveranstaltung_id) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}`\n\t\t};\n\t}\n};","import ApiLehre from '../../../../../../api/factory/lehre.js';\n\nconst infos = {};\n\nexport default {\n\tprops:{\n\t\tstudien_semester: String,\n\t\tlehrveranstaltung_id: Number,\n\t},\n\tdata: () => ({\n\t\tbezeichnung: null,\n\t\tstudiengang_kuerzel: null,\n\t\tsemester: null,\n\t\torgform_kurzbz: null,\n\t\tsprache: null,\n\t\tects: null,\n\t\tincoming: null,\n\t\tresult: true,\n\t\tinfo: null,\n\t}),\n\tcomputed: {\n\t\tlektorNamesLinks(){\n\t\t\tlet lektorenLinks = {};\n\t\t\tthis.info.lektoren.forEach(e => {\n\t\t\t\tlet name = ((e.titelpre || '') + ' ' + (e.vorname || '') + ' ' + (e.nachname || '') + ' ' + (e.titelpost || '')).trim();\n\t\t\t\tlektorenLinks[name] = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + `/Cis/Profil/View/${e.uid}`;\n\t\t\t});\n\t\t\treturn lektorenLinks;\n\t\t},\n\t\tlektorNames(){\n\t\t\treturn this.info.lektoren.map((e)=>((e.titelpre || '') + ' ' + (e.vorname || '') + ' ' + (e.nachname || '') + ' ' + (e.titelpost || '')).trim());\n\t\t},\n\t\tlvLeitung() {\n\t\t\treturn this.info.lvLeitung && this.info.lvLeitung.length ? this.info.lvLeitung.map(e => ((e.titelpre || '') + ' ' + (e.vorname || '') + ' ' + (e.nachname || '') + ' ' + (e.titelpost || '')).trim()) : null;\n\t\t},\n\t\toe() {\n\t\t\treturn this.info.oe.organisationseinheittyp ? (this.info.oe.organisationseinheittyp + ' ' + this.info.oe.bezeichnung) : '';\n\t\t},\n\t\toeLeitung() {\n\t\t\tif (!this.info.oeLeitung || !this.info.oeLeitung.length)\n\t\t\t\treturn ['-'];\n\t\t\treturn this.info.oeLeitung.map(e => ((e.titelpre || '') + ' ' + (e.vorname || '') + ' ' + (e.nachname || '') + ' ' + (e.titelpost || '')).trim());\n\t\t},\n\t\tkoordinator() {\n\t\t\tif (!this.info.koordinator || !this.info.koordinator.length)\n\t\t\t\treturn null;\n\t\t\treturn this.info.koordinator.map(e => ((e.titelpre || '') + ' ' + (e.vorname || '') + ' ' + (e.nachname || '') + ' ' + (e.titelpost || '')).trim());\n\t\t},\n\t\tcurrentLang() {\n\t\t\tif (!this.info)\n\t\t\t\treturn null;\n\t\t\tif (this.info.lastLang)\n\t\t\t\treturn this.info.lastLang;\n\t\t\tif (!this.info.lvinfo)\n\t\t\t\treturn null;\n\t\t\treturn this.info.lvinfoDefaultLang && this.info.lvinfo[this.info.lvinfoDefaultLang] ? this.info.lvinfoDefaultLang : Object.keys(this.info.lvinfo).shift();\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.$api.call(ApiLehre.getLvInfo(this.studien_semester, this.lehrveranstaltung_id))\n\t\t.then(\n\t\t\tres => res.data\n\t\t).then(data =>{\n\t\t\tObject.assign(this, \n\t\t\t\t{\n\t\t\t\t\tbezeichnung : data.bezeichnung,\n\t\t\t\t\tstudiengang_kuerzel: data.studiengang_kuerzel,\n\t\t\t\t\tsemester: data.semester,\n\t\t\t\t\torgform_kurzbz: data.orgform_kurzbz,\n\t\t\t\t\tsprache: data.sprache,\n\t\t\t\t\tects: data.ects,\n\t\t\t\t\tincoming: data.incoming ?? '-',\n\t\t\t\t});\n\t\t})\n\n\t\tif (infos[this.lehrveranstaltung_id]) {\n\t\t\tthis.info = infos[this.lehrveranstaltung_id];\n\t\t} else {\n\t\t\taxios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/components/Cis/Mylv/Info/' + this.studien_semester + '/' + this.lehrveranstaltung_id).then(res => {\n\t\t\t\tthis.info = infos[this.lehrveranstaltung_id] = res.data.retval || [];\n\t\t\t}).catch(() => this.info = {});\n\t\t}\n\t},\n\ttemplate: /*html*/`\n\t\t\t

    {{$p.t('lvinfo/lehrveranstaltungsinformationen')}}

    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    {{$p.t('lehre/lehrveranstaltung')}}{{bezeichnung}}
    {{$p.t('lehre/studiengang')}}{{studiengang_kuerzel}}
    {{$p.t('lehre/semester')}}{{semester}}
    {{$p.t('lehre/studiensemester')}}{{studien_semester}}
    {{$p.t('lehre/organisationsform')}}{{orgform_kurzbz}}
    {{$p.t('lehre/lehrbeauftragter')}}\n\t\t\t\t\t\t\t\t
      \n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{{name}}\n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    {{$p.t('lehre/lvleitung')}}\n\t\t\t\t\t\t\t\t
      \n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{{name}}\n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    {{$p.t('global/sprache')}}{{sprache}}
    {{$p.t('lehre/ects')}}{{ects}}
    {{$p.t('lehre/incomingplaetze')}}{{incoming}}
    {{$p.t('lehre/organisationseinheit')}}\n\t\t\t\t\t\t\t\t{{oe}}
    \n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t{{$p.t('global/leitung')}}: {{oeLeitung.join(', ')}}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t
    \n\t\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    1\" class=\"text-end\">\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    `\n}\n","const categories = {};\nconst loadingModules = {};\n\nfunction extractCategory(obj, category) {\n\treturn obj.filter(e => e.category == category).reduce((res, elem) => {\n\t\tif (!res[elem.phrase])\n\t\t\tres[elem.phrase] = elem.text;\n\t\treturn res;\n\t}, {});\n}\nfunction reloadRefs(category) {\n\twhile (loadingModules[category].length) {\n\t\tvar v = loadingModules[category].pop();\n\t\tv[0].value = getValueForLoadedPhrase(category, v[1], v[2]);\n\t\tVue.triggerRef(v[0]);\n\t\t/*Vue.unref(v);*/\n\t}\n}\nfunction loadLazy(category, val, phrase, params) {\n\t// NOTE(chris): load module if it's not loaded yet\n\tif (loadingModules[category]) {\n\t\tloadingModules[category].push([val, phrase, params]);\n\t\tif (categories[category]) // NOTE(chris): this is for safety in case the loading finished the moment before the val was pushed into the array\n\t\t\treloadRefs(category);\n\t\treturn;\n\t}\n\tloadingModules[category] = [[val, phrase, params]];\n\n\taxios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/components/Phrasen/loadModule/' + category).then(res => {\n\t\tif (res.data.retval)\n\t\t\tcategories[category] = extractCategory(res.data.retval, category);\n\t\telse\n\t\t\tcategories[category] = {};\n\n\t\treloadRefs(category);\n\t}).catch(err => console.error(err));\n}\nfunction getValueForLoadedPhrase(category, phrase, params) {\n\tlet result = categories[category][phrase];\n\tif (!result)\n\t\treturn '<< PHRASE ' + phrase + '>>';\n\tif (params)\n\t\tresult = result.replace(/\\{([^}]*)\\}/g, (match, p1) => params[p1] === undefined ? match : params[p1]);\n\treturn result;\n}\n\n\nconst phrasen = {\n\tt_ref(category, phrase, params) {\n\t\tif (params === undefined && (\n\t\t\t(Array.isArray(category) && category.length == 2) ||\n\t\t\t(category.split && category.split('/').length == 2))\n\t\t\t) {\n\t\t\tparams = phrase;\n\t\t\t[category, phrase] = category.split ? category.split('/') : category;\n\t\t}\n\t\tif (phrase === undefined) {\n\t\t\tconsole.error('invalid input');\n\t\t\treturn '';\n\t\t}\n\t\tif (!categories[category]) {\n\t\t\t\n\t\t\tvar initialval = '';\n \t\t\tif (window.FHC_JS_PHRASES_STORAGE_OBJECT !== undefined) {\n \t\t\t\tvar tmp_category = extractCategory(FHC_JS_PHRASES_STORAGE_OBJECT, category);\n\t\t\t\tif(tmp_category[phrase] !== undefined ) {\n\t\t\t\t\tinitialval = tmp_category[phrase];\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif (!categories[category] || Object.keys(categories[category]).length === 0) {\n\t\t\t\tcategories[category] = undefined;\n\t\t\t\tlet val = Vue.ref(initialval);\n\t\t\t\tloadLazy(category, val, phrase, params);\n\t\t\t\treturn val;\n\t\t\t}\n\t\t}\n\t\tvar result = getValueForLoadedPhrase(category, phrase, params);\n\t\treturn Vue.ref(result);\n\t},\n\tt(category, phrase, params) {\n\t\treturn Vue.unref(this.t_ref(category, phrase, params));\n\t}\n};\n\nexport default {\n\tdata: () => {\n\t\treturn {\n\t\t\tp: phrasen\n\t\t}\n\t}\n}\n\n// Composable (wrapper for mixin)\nexport function usePhrasen() {\n\n\tfunction t(category, phrase, params) {\n\t\treturn phrasen.t(category, phrase, params);\n\t}\n\n\treturn {\t\t\n\t\tt,\n\t}\n\n}\n","\nexport default {\n\tprops:{\n\t\tmenu:{\n\t\t\ttype:Array,\n\t\t\tdefault:null,\n\t\t},\n\t\tcontainerStyles: Array,\n\t\trowStyles: Array,\n\t\thasLvPlanEintraege: {\n\t\t\trequired:false,\n\t\t\tdefault:true,\n\t\t\ttype:Boolean,\n\t\t},\n\t},\n\tdata(){\n\t\treturn{\n\t\t\t\n\t\t}\n\t},\n\tmethods:{\n\t\tc4_disabled: function (menuItem) {\n\t\t\tif (!this.c4_link(menuItem) && !menuItem.c4_moodle_links?.length) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (menuItem.id == \"addon_fhtw_menu_lvplan_lva\" && !this.hasLvPlanEintraege){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tc4_target: function (menuItem) {\n\t\t\tif (menuItem.c4_moodle_links?.length > 0) return null;\n\t\t\treturn menuItem.c4_target ?? null;\n\t\t},\n\t\tc4_link(menuItem) {\n\t\t\tif (!menuItem) return null;\n\t\t\tif (Array.isArray(menuItem.c4_moodle_links) && menuItem.c4_moodle_links.length) \n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn menuItem.c4_link ?? null;\n\t\t\t}\n\t\t},\n\t\tgetMenuName(menuItem) {\n\t\t\tif(menuItem.phrase) {\n\t\t\t\treturn this.$p.t(menuItem.phrase)\n\t\t\t} else {\n\t\t\t\treturn menuItem.name\n\t\t\t}\n\t\t}\n\t},\n\ttemplate:/*html*/`\n\t
    {{$p.t('lehre','lehrveranstaltungsUnavailable')}}
    \n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t

    {{ getMenuName(menuItem) }}

    \n\t\t\t\t\t\t
    {{text}}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t`\n}","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetLvMenu(lvid, studiensemester_kurzbz) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/LvMenu/getLvMenu/${lvid}/${studiensemester_kurzbz}`\n\t\t};\n\t}\n};","import BsModal from \"../../Bootstrap/Modal.js\";\nimport LvMenu from \"./LvMenu.js\";\n\nimport ApiAddons from '../../../api/factory/addons.js';\n\nexport default {\n \n props:{\n event:{\n type:Object,\n required:true,\n default:null,\n },\n\t\tstudiensemester: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\t\ttitel: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\t\t// prop used to preselect a menu item and skip the grid overview\n\t\tpreselectedMenu: {\n\t\t\ttype: Object,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t}\n },\n data(){\n return {\n result: false,\n menu: [],\n\t\t\tisMenuSelected:false,\n\t\t\thasLvPlanEintraege: true,\n\t\t\tlvEvaluierungMessage: \"\",\n }\n },\n mixins:[BsModal],\n components:{\n BsModal,\n\t\tLvMenu,\n },\n\tinject: [\"studium_studiensemester\"],\n methods:{\n \n hiddenModal: function(){\n\t\t\tthis.isMenuSelected = false;\n },\n showModal: function(){\n\t\t\tif (!this.preselectedMenu) {\n this.$api\n\t\t\t\t\t.call(ApiAddons.getLvMenu(this.event.lehrveranstaltung_id, (this.studiensemester ?? this.event.studiensemester_kurzbz)))\n .then(res => {\n \t\t\t\t\tif (res.data) {\n \t\t\t\t\t\tthis.menu = res.data;\n \t\t\t\t\t}\n \t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.isMenuSelected = true;\n\t\t\t}\n\n\t\t\t// check lv evaluierung info\n\t\t\tif (this.studium_studiensemester) {\n\t\t\t\tthis.$fhcApi.factory.studium.getLvEvaluierungInfo(this.studium_studiensemester, this.event.lehreinheit_id ?? this.event.lehrveranstaltung_id)\n\t\t\t\t\t.then(data => data.data)\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tthis.lvEvaluierungMessage = res.message;\n\t\t\t\t\t})\n\t\t\t}\n\n\t\t\t// check if the lv has lvplan entries for this studiensemester\n\t\t\tif (this.studiensemester && this.event) {\n\t\t\t\treturn this.$fhcApi.factory.studium.getLvPlanForStudiensemester(this.studiensemester, this.event.lehreinheit_id ?? this.event.lehrveranstaltung_id)\n\t\t\t\t\t.then(data => data.data)\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tif (Array.isArray(res) && res.length > 0) {\n\t\t\t\t\t\t\tthis.hasLvPlanEintraege = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.hasLvPlanEintraege = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}\n\t\t\t\n },\n },\n\tmounted(){\n this.modal = this.$refs.modalContainer;\n },\n\tbeforeUnmount(){\n\t\tthis.$refs.modalContainer.hide();\n\t},\n template:/*html*/`\n \n\n\t\t\n \n \n \n\n \n `,\n};","import MylvSemesterStudiengang from \"./Semester/Studiengang.js\";\n\nexport default {\n\tcomponents: {\n\t\tMylvSemesterStudiengang\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tstudien_semester: Vue.computed(() => this.semester) \n\t\t}\n\t},\n\tprops: {\n\t\tsemester: [String, Number],\n\t\tlvs: Array\n\t},\n\tcomputed: {\n\t\tready() { return this.lvs !== null; },\n\t\tstudiengaenge() {\n\t\t\treturn [... new Map(\n\t\t\t\tthis.lvs\n\t\t\t\t.map(lv => [\n\t\t\t\t\tlv.studiengang_kz + '#' + lv.semester, \n\t\t\t\t\t{\n\t\t\t\t\t\tstudiengang_kz: lv.studiengang_kz, \n\t\t\t\t\t\tbezeichnung: lv.sg_bezeichnung,\n\t\t\t\t\t\tsg_bezeichnung_eng: lv.sg_bezeichnung_eng,\n\t\t\t\t\t\tkuerzel: lv.studiengang_kuerzel, \n\t\t\t\t\t\tsemester: lv.semester\n\t\t\t\t\t}\n\t\t\t\t])\n\t\t\t).values()].sort((a, b) => a.bezeichnung.toLowerCase() == b.bezeichnung.toLowerCase() ? a.semester > b.semester : a.bezeichnung.toLowerCase() > b.bezeichnung.toLowerCase());\n\t\t},\n\t},\n\tmethods: {\n\t\tlvsForStudiengang(studiengang) {\n\t\t\treturn this.lvs.filter(lv => lv.studiengang_kz == studiengang.studiengang_kz && lv.semester == studiengang.semester);\n\t\t}\n\t},\n\ttemplate: `
    \n\t\t\n\t
    \n\t
    \n\t\t\n\t
    `\n};","import MylvSemesterStudiengangLv from \"./Studiengang/Lv.js\";\nimport Phrasen from \"../../../../mixins/Phrasen.js\";\n\nexport default {\n\tcomponents: {\n\t\tMylvSemesterStudiengangLv\n\t},\n\tmixins: [\n\t\tPhrasen\n\t],\n\tprops: {\n\t\tbezeichnung: String,\n\t\tkuerzel: String,\n\t\tsemester: [String,Number],\n\t\tlvs: Array,\n\t\tsg_bezeichnung_eng: String\n\t},\n\tcomputed: {\n\t\tlehrveranstaltungen() {\n\t\t\treturn [... new Map(\n\t\t\t\tthis.lvs\n\t\t\t\t.map(lv => [\n\t\t\t\t\tlv.lehrveranstaltung_id, \n\t\t\t\t\tlv\n\t\t\t\t])\n\t\t\t).values()]\n\t\t}\n\t},\n\tmethods: {\n\t\tnote(lv) {\n\t\t\treturn lv.benotung ? lv.znote || lv.lvnote || null : null;\n\t\t}\n\t},\n\ttemplate: `
    \n\t\t
    \n\t\t\t

    {{$p.user_language.value === 'English' ? sg_bezeichnung_eng : bezeichnung}} - {{kuerzel}}\n\t\t\t\t{{semester}}.{{$p.t('lehre/semester')}}\n\t\t\t

    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    `\n};","import LvPruefungen from \"./Lv/Pruefungen.js\";\nimport LvInfo from \"./Lv/Info.js\";\nimport Phrasen from \"../../../../../mixins/Phrasen.js\";\nimport LvUebersicht from \"../../LvUebersicht.js\";\n\nimport ApiLehre from '../../../../../api/factory/lehre.js';\nimport ApiAddons from '../../../../../api/factory/addons.js';\n\n// TODO(chris): L10n\n\nexport default {\n\tcomponents:{\n\t\tLvUebersicht,\n\t},\n\tmixins: [\n\t\tPhrasen\n\t],\n\tinject: ['studien_semester'],\n\tprops: {\n\t\tlehrveranstaltung_id: Number,\n\t\tbezeichnung: String,\n\t\tbezeichnung_eng: String,\n\t\tmodule: String,\n\t\tfarbe: String,\n\t\tlvinfo: Boolean,\n\t\tbenotung: Boolean,\n\t\tlvnote: String,\n\t\tlvnotebez: Array,\n\t\tznote: String,\n\t\tznotebez: Array,\n\t\tstudiengang_kuerzel: String,\n\t\tsemester: [String, Number],\n\t\torgform_kurzbz: String,\n\t\tsprache: String,\n\t\tects: String,\n\t\tincoming: Number,\n\t\tpositiv: Boolean,\n\t\tnote_index: String\n\t},\n\tdata: () => {\n\t\treturn {\n\t\t\tpruefungenData: null,\n\t\t\tinfo: null,\n\t\t\tmenu: null,\n\t\t\tpreselectedMenuItem: null,\n\t\t}\n\t},\n\tcomputed: {\n\t\tgradeColor() {\n\t\t\t// early return if value is null or undefined\n\t\t\tif (this.positiv == null) return;\n\t\t\t// returns a suitable color for the given grade\n\t\t\tif (this.positiv)\n\t\t\t{\n\t\t\t\treturn 'var(--fhc-success)';\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn 'var(--fhc-danger)';\n\t\t\t}\n\t\t},\n\t\tis_organisatorische_einheit(){\n\t\t\treturn this.menu == \"organisatorische_einheit\";\n\t\t},\n\t\temptyMenu(){\n\t\t\treturn !this.menu || !Array.isArray(this.menu) || Array.isArray(this.menu) && this.menu.length == 0;\n\t\t},\n\t\tbodyStyle() {return {};\n\t\t\t/*const bodyStyle = {};\n\t\t\tif (this.farbe)\n\t\t\t\tbodyStyle['background-color'] = '#' + this.farbe;\n\t\t\treturn bodyStyle;*/\n\t\t},\n\t\tgrade() {\n\t\t\tconst languageIndex = this.$p.user_language.value === 'English' ? 1 : 0\n\t\t\tif(this.benotung && this.znotebez?.length) {\n\t\t\t\treturn this.znotebez[languageIndex]\n\t\t\t} else if(this.benotung && this.lvnotebez?.length) {\n\t\t\t\treturn this.lvnotebez[languageIndex]\n\t\t\t} else return null\n\t\t},\n\t\tLvHasPruefungenInformation(){\n\t\t\treturn this.pruefungenData && this.pruefungenData.length > 0;\n\t\t},\n\t},\n\tmethods: {\n\t\t\n\t\tfetchMenu(lehrveranstaltung_id = this.lehrveranstaltung_id, studien_semester = this.studien_semester) {\n\t\t\treturn this.$api\n\t\t\t\t.call(ApiAddons.getLvMenu(lehrveranstaltung_id, studien_semester))\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.menu = res.data;\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tthis.$fhcAlert.handleSystemError(error);\n\t\t\t\t\tthis.menu = [];\n\t\t\t\t});\n\t\t},\n\n\t\tc4_link(menuItem) {\n\t\t\tif (!menuItem) return null;\n\t\t\tif (Array.isArray(menuItem.c4_moodle_links) && menuItem.c4_moodle_links.length) {\n\t\t\t\treturn '#';\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn menuItem.c4_link ?? null;\n\t\t\t}\n\t\t},\n\t\topenLvOption(menuItem){\n\t\t\tif (menuItem.id == \"core_menu_mailanstudierende\"){\n\t\t\t\twindow.location.href = menuItem.c4_link;\n\t\t\t} else if (menuItem.id == \"core_menu_digitale_anwesenheitslisten\") {\n\t\t\t\twindow.location.href = menuItem.c4_link;\n\t\t\t} else{\n\t\t\t\tthis.preselectedMenuItem = menuItem;\n\t\t\t\tVue.nextTick(() => {\n\t\t\t\t\tthis.$refs.lvUebersicht.show();\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\topenPruefungen() {\n\t\t\t// early return if the pruefungenData is empty or not set\n\t\t\tif (!this.LvHasPruefungenInformation) return;\n\n\t\t\tLvPruefungen.popup({\n\t\t\t\tpruefungenData: this.pruefungenData, \n\t\t\t\tbezeichnung: this.bezeichnung\n\t\t\t});\n\t\t},\n\t\topenInfos() {\n\t\t\tif (!this.info) {\n\t\t\t\tthis.info = true;\n\t\t\t\t// TODO(chris): load all this params on ajax?\n\t\t\t\tLvInfo.popup({\n\t\t\t\t\tlehrveranstaltung_id: this.lehrveranstaltung_id, \n\t\t\t\t\tbezeichnung: this.bezeichnung,\n\t\t\t\t\tbezeichnung_eng: this.bezeichnung_eng,\n\t\t\t\t\tstudiengang_kuerzel: this.studiengang_kuerzel,\n\t\t\t\t\tsemester: this.semester,\n\t\t\t\t\tstudien_semester: this.studien_semester,\n\t\t\t\t\torgform_kurzbz: this.orgform_kurzbz,\n\t\t\t\t\tsprache: this.sprache,\n\t\t\t\t\tects: this.ects,\n\t\t\t\t\tincoming: this.incoming\n\t\t\t\t}).then(() => this.info = false).catch(() => this.info = false);\n\t\t\t}\n\t\t}\n\t},\n\twatch:{\n\t\tstudien_semester(newValue){\n\t\t\tthis.fetchMenu(this.lehrveranstaltung_id, newValue);\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.$api\n\t\t\t.call(ApiLehre.getStudentPruefungen(this.lehrveranstaltung_id))\n\t\t\t.then(res => res.data)\n\t\t\t.then(pruefungen => {\n\t\t\t\tthis.pruefungenData = pruefungen;\n\t\t\t}); \n\t},\n\tmounted() {\n\t\tthis.fetchMenu(this.lehrveranstaltung_id, this.studien_semester);\n\t},\n\ttemplate: /*html*/`
    \n\t\t\n\n\t\t
    \n\t\t\t\n\t\t\t
    {{ $p.t('lehre/organisationseinheit') }}:
    \n\t\t\t
    {{$p.user_language.value === 'English' ? bezeichnung_eng : bezeichnung}}
    \n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t
    `\n};","import MylvSemester from \"./Semester.js\";\nimport Phrasen from \"../../../mixins/Phrasen.js\";\n\n// TODO(chris): phrase: global/studiensemester_auswaehlen\n// TODO(chris): phrase: next & prev +aria-label\n\nexport default {\n\tcomponents: {\n\t\tMylvSemester\n\t},\n\tmixins: [\n\t\tPhrasen\n\t],\n\tdata: () => {\n\t\treturn {\n\t\t\tfirstLoad: true,\n\t\t\tstudiensemester: null,\n\t\t\tlvs: {},\n\t\t\tcurrentSemester: null\n\t\t};\n\t},\n\tcomputed: {\n\t\tready() {\n\t\t\treturn this.studiensemester !== null && (!this.firstLoad || this.current.lvs !== null);\n\t\t},\n\t\tcurrent() {\n\t\t\tif (this.currentSemester === null)\n\t\t\t\treturn { semester: null, lvs: [] };\n\t\t\tif (this.lvs[this.currentSemester] === undefined) {\n\t\t\t\tthis.lvs[this.currentSemester] = {\n\t\t\t\t\tsemester: this.currentSemester, \n\t\t\t\t\tlvs: null\n\t\t\t\t};\n\t\t\t\taxios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/components/Cis/Mylv/Lvs/' + this.currentSemester).then(res => {\n\t\t\t\t\tthis.lvs[this.currentSemester].lvs = res.data.retval || [];\n\t\t\t\t\tthis.firstLoad = false;\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn this.lvs[this.currentSemester];\n\t\t},\n\t\tnearestSem() {\n\t\t\tlet now = Date.now();\n\t\t\tlet nearestSem = null;\n\t\t\tlet nearestSemDiff = 0;\n\t\t\tthis.studiensemester.forEach(sem => {\n\t\t\t\tlet start = new Date(sem.start);\n\t\t\t\tlet end = new Date(sem.ende);\n\t\t\t\tif (now >= start && now <= end) {\n\t\t\t\t\tnearestSem = sem.studiensemester_kurzbz;\n\t\t\t\t\tnearestSemDiff = 0;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlet diff = Math.min(Math.abs(now - start), Math.abs(now - end));\n\t\t\t\tif (nearestSem === null || diff < nearestSemDiff) {\n\t\t\t\t\tnearestSem = sem.studiensemester_kurzbz;\n\t\t\t\t\tnearestSemDiff = diff;\n\t\t\t\t}\n\n\t\t\t});\n\t\t\treturn nearestSem;\n\t\t},\n\t\tcurrentIsFirst() {\n\t\t\treturn this.studiensemester[0].studiensemester_kurzbz == this.currentSemester;\n\t\t},\n\t\tcurrentIsLast() {\n\t\t\treturn this.studiensemester[this.studiensemester.length-1].studiensemester_kurzbz == this.currentSemester;\n\t\t}\n\t},\n\tmethods: {\n\t\tprevSem() {\n\t\t\tthis.$refs.studiensemester.selectedIndex--;\n\t\t\tthis.$refs.studiensemester.dispatchEvent(new Event('change', { bubbles: true }));\n\t\t},\n\t\tnextSem() {\n\t\t\tthis.$refs.studiensemester.selectedIndex++;\n\t\t\tthis.$refs.studiensemester.dispatchEvent(new Event('change', { bubbles: true }));\n\t\t},\n\t\tupdateRouter(val) {\n\t\t\tthis.$router.push(`/Cis/MyLv/${val}`);\n\t\t}\n\t},\n\tcreated() {\n\t\taxios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/components/Cis/Mylv/Studiensemester').then(res => {\n\t\t\tthis.studiensemester = res.data.retval || [];\n\t\t\tconst routerStudiensemester = this.$route.params.studiensemester;\n\t\t\tif (routerStudiensemester && this.studiensemester.filter(s => s.studiensemester_kurzbz == routerStudiensemester).length)\n\t\t\t\tthis.currentSemester = routerStudiensemester;\n\t\t\telse\n\t\t\t\tthis.currentSemester = this.nearestSem;\n\t\t});\n\t},\n\tbeforeRouteUpdate(to, from, next){\n\t\tif (to.params.studiensemester && this.studiensemester.filter(s => s.studiensemester_kurzbz == to.params.studiensemester).length && to.params.studiensemester != this.currentSemester)\n\t\t\tthis.currentSemester = to.params.studiensemester;\n\t\tnext();\n\n\t},\n\ttemplate: `\n\n\t

    {{$p.t('lehre/myLV')}}

    \n\t
    \n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t{{$p.t('lehre/noLvFound')}}\n\t\t
    \n\t\t\n\t
    \n\t
    \n\t\t\n\t
    `\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport const CoreFetchCmpt = {\n\temits: ['dataFetched'], // this component can emit the event dataFetched that it is catched by this component itself\n\tprops: {\n\t\trefresh: { // to refresh this component\n\t\t\ttype: Boolean\n\t\t},\n\t\tapiFunction: { // the function to call, must return a Promise\n\t\t\trequired: true,\n\t\t\ttype: Function\n\t\t},\n\t\tapiFunctionParameters: {} // parameters for the apiFunction, type mixed, optional\n\t},\n\twatch: {\n\t\t/**\n\t\t * If the refresh property is changed then call fetchData\n\t\t */\n\t\trefresh: function (newValue, oldValue) {\n\t\t\tthis.fetchData();\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tloading: false, // if in loading or not\n\t\t\terror: false, // if an error occurred while loading data\n\t\t\terrorMessage: null // the error message\n\t\t};\n\t},\n\tcreated: function() {\n\t\tthis.fetchData();\n\t},\n\tmethods: {\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchData: function() {\n\t\t\tthis.loading = true; // loader started\n\t\t\tthis.error = false;\n\t\t\tthis.errorMessage = null;\n\n\t\t\t// Checks if the apifunction is a callable function\n\t\t\tif (typeof this.apiFunction == \"function\")\n\t\t\t{\n\t\t\t\t// Call the function stored in apiFunction\n\t \t\tlet apiFunctionResult = this.apiFunction(this.apiFunctionParameters);\n\n\t\t\t\t// It is expected that the function returns a Promise\n\t\t\t\tif (apiFunctionResult instanceof Promise)\n\t\t\t\t{\n\t\t\t\t\tapiFunctionResult\n\t\t\t\t\t\t.then(this.successHandler) // on success\n\t\t\t\t\t\t.catch(this.errorHandler) // on error\n\t\t\t\t\t\t.finally(this.finallyHandler); // finally in any case\n\t\t\t\t}\n\t\t\t\telse // otherwise display an error\n\t\t\t\t{\n\t\t\t\t\tthis.setError(\"The called apiFunction does not return a Promise\");\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // otherwise display an error\n\t\t\t{\n\t\t\t\tthis.setError(\"Property apiFunction is not a function\");\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsetError: function(errorMessage) {\n\t\t\tthis.loading = false; // loading ended\n\t\t\tthis.error = true; // error occurred\n\t\t\tthis.errorMessage = errorMessage; // save the error message\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsuccessHandler: function(response) {\n\t\t\tthis.$emit('dataFetched', response ? response.data : undefined); // trigger the event dataFetched\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\terrorHandler: function(error) {\n\t\t\tif (error.response?.data?.retval)\n\t\t\t\tthis.setError(error.response.data.retval);\n\t\t\telse if (error.data?.message)\n\t\t\t\tthis.setError(error.data.message);\n\t\t\telse\n\t\t\t\tthis.setError(error.message);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfinallyHandler: function() {\n\t\t\tthis.loading = false; // loading ended\n\t\t}\n\t},\n\ttemplate: `\n\t\t\n\t\t\t
    Loading...
    \n\t\t
    \n\t\t\n\t\t\t
    {{ errorMessage }}
    \n\t\t
    \n\t\t\n\t`\n};\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nconst FILTER_COMPONENT_NEW_FILTER = 'Filter Component New Filter';\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\tfilters: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tcolumns: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tfields: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t}\n\t},\n\temits: {\n\t\tswitchFilter: ['filterId'],\n\t\tapplyFilterConfig: ['filterFields'],\n\t\tsaveCustomFilter: ['customFilterName']\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tcurrentFields: []\n\t\t};\n\t},\n\tcomputed: {\n\t\ttypes() {\n\t\t\treturn this.columns.reduce((a,c) => {\n\t\t\t\tlet type = c.type.toLowerCase();\n\t\t\t\tif (type.indexOf('int') >= 0)\n\t\t\t\t\ta[c.name] = 'Numeric';\n\t\t\t\telse if (\n\t\t\t\t\ttype.indexOf('varchar') >= 0 || \n\t\t\t\t\ttype.indexOf('text') >= 0 || \n\t\t\t\t\ttype.indexOf('bpchar') >= 0\n\t\t\t\t)\n\t\t\t\t\ta[c.name] = 'Text';\n\t\t\t\telse if (\n\t\t\t\t\ttype.indexOf('timestamp') >= 0 || \n\t\t\t\t\ttype.indexOf('date') >= 0\n\t\t\t\t)\n\t\t\t\t\ta[c.name] = 'Date';\n\t\t\t\telse\n\t\t\t\t\ta[c.name] = '';\n\t\t\t\treturn a;\n\t\t\t}, {});\n\t\t}\n\t},\n\twatch: {\n\t\tfields(n) {\n\t\t\tthis.currentFields = n;\n\t\t}\n\t},\n\tmethods: {\n\t\tswitchFilter(evt) {\n\t\t\tthis.$emit('switchFilter', evt.currentTarget.value);\n\t\t},\n\t\tapplyFilterConfig() {\n\t\t\tconst filteredFields = this.currentFields.filter(el => el.name != FILTER_COMPONENT_NEW_FILTER);\n\t\t\tif (filteredFields.filter(el => el.condition == \"\").length)\n\t\t\t\talert(\"Please fill all the filter options\");\n\t\t\telse\n\t\t\t\tthis.$emit('applyFilterConfig', filteredFields);\n\t\t},\n\t\taddField(evt) {\n\t\t\tthis.currentFields.push({\n\t\t\t\tname: FILTER_COMPONENT_NEW_FILTER\n\t\t\t});\n\t\t},\n\t\tremoveField(index) {\n\t\t\tthis.currentFields.splice(index, 1);\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\tFilter {{ index + 1 }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t`\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\tfields: Array,\n\t\tselected: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tnames: {\n\t\t\ttype: Object,\n\t\t\tdefault: {}\n\t\t}\n\t},\n\temits: {\n\t\thide: ['fieldName'],\n\t\tshow: ['fieldName']\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tselectedFields: []\n\t\t};\n\t},\n\twatch: {\n\t\tselected(n) {\n\t\t\tthis.selectedFields = n;\n\t\t}\n\t},\n\tmethods: {\n\t\ttoggle(field) {\n\t\t\tif (this.selectedFields.indexOf(field) != -1)\n\t\t\t{\n\t\t\t\tthis.selectedFields.splice(this.selectedFields.indexOf(field), 1);\n\t\t\t\tthis.$emit('hide', field);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.selectedFields.push(field);\n\t\t\t\tthis.$emit('show', field);\n\t\t\t}\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{{ names[fieldToDisplay] || fieldToDisplay }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\n\t`\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nconst DEFAULT_ICONS = {\n\tjsonLines: 'fa-file-lines',\n\txlsx: 'fa-file-excel',\n\tpdf: 'fa-file-pdf',\n\thtml: 'fa-file-code',\n\tjson: 'fa-file',\n\tcsv: 'fa-file-csv'\n};\nconst DEFAULT_LABELS = {\n\tjsonLines: 'Download as JSONLINES',\n\txlsx: 'Download as XLSX',\n\tpdf: 'Download as PDF',\n\thtml: 'Download as HTML',\n\tjson: 'Download as JSON',\n\tcsv: 'Download as CSV '\n};\n\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\ttabulator: Object,\n\t\tconfig: {\n\t\t\ttype: [Boolean, String, Function, Array, Object],\n\t\t\tdefault: false\n\t\t},\n\t\ticonClass: [String, Array, Object]\n\t},\n\tcomputed: {\n\t\tcurrentConfig() {\n\t\t\tif (!this.config)\n\t\t\t\treturn false;\n\n\t\t\tlet config = this.config;\n\n\t\t\tif (config instanceof Function)\n\t\t\t\treturn [config];\n\n\t\t\tif (config === null)\n\t\t\t\treturn [];\n\n\t\t\tif (this.config === true)\n\t\t\t\tconfig = ['csv'];\n\n\t\t\tif (Object.prototype.toString.call(config) === \"[object String]\")\n\t\t\t\tconfig = config.split(',');\n\n\t\t\tif (typeof config === 'object' && !Array.isArray(config)) {\n\t\t\t\tlet newConfig = [];\n\t\t\t\tfor (var k in config) {\n\t\t\t\t\tvar v = config[k], type;\n\t\t\t\t\t\n\t\t\t\t\tif (!v)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\n\t\t\t\t\tif (Object.prototype.toString.call(v) === \"[object String]\") {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(v);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\tlabel: v === k ? DEFAULT_LABELS[type] : k,\n\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\t\tif(type !== null) {\n\t\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\t\tlabel: v,\n\t\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\talert('neither ' + k + ' nor ' + v + ' are supported download file types');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (typeof v === 'object' && !Array.isArray(v)) {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tif (v.formatter === undefined)\n\t\t\t\t\t\t\t\tv.formatter = type;\n\t\t\t\t\t\t\tif (v.label === undefined)\n\t\t\t\t\t\t\t\tv.label = DEFAULT_LABELS[type];\n\t\t\t\t\t\t\tif (v.icon === undefined)\n\t\t\t\t\t\t\t\tv.icon = DEFAULT_ICONS[type];\n\t\t\t\t\t\t\tnewConfig.push(v);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (v.label === undefined)\n\t\t\t\t\t\t\t\tv.label = k;\n\t\t\t\t\t\t\tnewConfig.push(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\tlabel: DEFAULT_LABELS[type],\n\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\talert(k + ' is not a supported download file type');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconfig = newConfig;\n\t\t\t}\n\n\t\t\tif (Array.isArray(config))\n\t\t\t{\n\t\t\t\tconfig = config.map(el => {\n\t\t\t\t\tif (Object.prototype.toString.call(el) === \"[object String]\") {\n\t\t\t\t\t\tlet formatter = this.stringToFileFormatter(el);\n\t\t\t\t\t\tif (formatter === null)\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[formatter],\n\t\t\t\t\t\t\tlabel: DEFAULT_LABELS[formatter],\n\t\t\t\t\t\t\tformatter\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (el instanceof Function)\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tformatter: el\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (typeof el === 'object' && !Array.isArray(el) && el !== null) {\n\t\t\t\t\t\tif (el.formatter instanceof Function)\n\t\t\t\t\t\t\treturn el;\n\t\t\t\t\t\tif (this.validateFileFormatter(el.formatter))\n\t\t\t\t\t\t\treturn el;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn null;\n\t\t\t\t}).filter(el => el !== null);\n\n\t\t\t\tif (config.length < 2)\n\t\t\t\t\treturn config;\n\n\t\t\t\tif (config.filter(el => el.label || el.icon).length == config.length)\n\t\t\t\t\treturn config;\n\n\t\t\t\talert('Config not valid');\n\t\t\t}\n\n\t\t\treturn [];\n\t\t}\n\t},\n\tmethods: {\n\t\tstringToFileFormatter(input) {\n\t\t\tlet lcInput = input.toLowerCase();\n\t\t\t\n\t\t\tif (lcInput == 'jsonlines')\n\t\t\t\treturn 'jsonLines';\n\t\t\t\n\t\t\tif (['xlsx', 'pdf', 'html', 'json', 'csv'].includes(lcInput))\n\t\t\t\treturn lcInput;\n\n\t\t\treturn null;\n\t\t},\n\t\tvalidateFileFormatter(input) {\n\t\t\tlet formatter = this.stringToFileFormatter(input);\n\t\t\tif (!formatter) {\n\t\t\t\talert(input + ' is not a supported file formatter');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (formatter == 'xlsx') {\n\t\t\t\tif (!window.XLSX) {\n\t\t\t\t\talert('XLSX Library not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (formatter == 'pdf') {\n\t\t\t\tif (!window.jspdf) {\n\t\t\t\t\talert('jsPDF Library not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar doc = new jspdf.jsPDF({});\n\t\t\t\tif (!doc.autoTable) {\n\t\t\t\t\talert('jsPDF-AutoTable Plugin not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tdownload(config) {\n\t\t\tthis.tabulator.download(config.formatter, config.file, config.options)\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t`\n};\n\n","const elementDataMap = new WeakMap();\n\nexport default {\n\tmounted(el, binding) {\n\t\tlet open = false;\n\t\telementDataMap.set(el, evt => {\n\t\t\tif (!open)\n\t\t\t\treturn;\n\n\t\t\tif (el.contains(evt.target))\n\t\t\t\treturn;\n\n\t\t\tconst collapse = bootstrap.Collapse.getInstance(el)\n\t\t\tif (collapse)\n\t\t\t\tcollapse.hide();\n\t\t});\n\t\tel.addEventListener('shown.bs.collapse', () => {\n\t\t\topen = true;\n\t\t});\n\t\tel.addEventListener('hide.bs.collapse', () => {\n\t\t\topen = false;\n\t\t});\n\t\tdocument.addEventListener('click', elementDataMap.get(el), true);\n\t},\n\tbeforeUnmount(el, binding) {\n\t\tdocument.removeEventListener('click', elementDataMap.get(el));\n\t\tdelete el.collapsibleAutoHideFunc;\n\t}\n}","/**\n * This may need changes if Tabulator gets updated!\n *\n * Current working Version: 5.5.2\n * \n * This is a copy of the fitDataStretch function. The only difference\n * is the check for frozen columns on line 22.\n */\n\nexport default window.Tabulator?.extendModule(\"layout\", \"modes\", {\n\tfitDataStretchFrozen(columns, forced) {\n\t\tvar colsWidth = 0,\n\t\ttableWidth = this.table.rowManager.element.clientWidth,\n\t\tgap = 0,\n\t\tlastCol = false;\n\n\t\tcolumns.forEach((column, i) => {\n\t\t\tif (!column.widthFixed) {\n\t\t\t\tcolumn.reinitializeWidth();\n\t\t\t}\n\n\t\t\tif (this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible && !column.definition.frozen) {\n\t\t\t\tlastCol = column;\n\t\t\t}\n\n\t\t\tif (column.visible) {\n\t\t\t\tcolsWidth += column.getWidth();\n\t\t\t}\n\t\t});\n\n\t\tif (lastCol){\n\t\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\n\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\t\tlastCol.setWidth(0);\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\n\t\t\tif (gap > 0) {\n\t\t\t\tlastCol.setWidth(gap);\n\t\t\t} else {\n\t\t\t\tlastCol.reinitializeWidth();\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\t\t}\n\t}\n});\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/saveCustomFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t};\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/removeCustomFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t};\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/applyFilterFields',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t};\n\t},\n\taddFilterField(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/addFilterField',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t};\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/removeFilterField',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t};\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/filter/getFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t};\n\t},\n\tgetFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/filter/getFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t};\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport {CoreFetchCmpt} from '../../components/Fetch.js';\nimport FilterConfig from './Filter/Config.js';\nimport FilterColumns from './Filter/Columns.js';\nimport TableDownload from './Table/Download.js';\nimport collapseAutoClose from '../../directives/collapseAutoClose.js';\n\nimport moduleLayoutFitDataStretchFrozen from '../../tabulator/layouts/fitDataStretchFrozen.js';\n\nimport ApiFilter from '../../api/factory/filter.js';\n\n//\nconst FILTER_COMPONENT_NEW_FILTER = 'Filter Component New Filter';\nconst FILTER_COMPONENT_NEW_FILTER_TYPE = 'Filter Component New Filter Type';\n\nvar _uuid = 0;\n\n/**\n *\n */\nexport const CoreFilterCmpt = {\n\tcomponents: {\n\t\tCoreFetchCmpt,\n\t\tFilterConfig,\n\t\tFilterColumns,\n\t\tTableDownload\n\t},\n\tdirectives: {\n\t\tcollapseAutoClose\n\t},\n\temits: [\n\t\t'nwNewEntry',\n\t\t'click:new',\n\t\t'tableBuilt',\n\t\t'uuidDefined'\n\t],\n\tprops: {\n\t\tonNwNewEntry: Function, // NOTE(chris): Hack to get the nwNewEntry listener into $props\n\t\ttitle: String,\n\t\tdescription: String,\n\t\tsideMenu: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tfilterType: {\n\t\t\ttype: String\n\t\t},\n\t\ttabulatorOptions: Object,\n\t\ttabulatorEvents: Array,\n\t\ttableOnly: Boolean,\n\t\tnoColumnFilter:Boolean,\n\t\treload: Boolean,\n\t\treloadBtnInfotext: String,\n\t\tdownload: {\n\t\t\ttype: [Boolean, String, Function, Array, Object],\n\t\t\tdefault: false\n\t\t},\n\t\tnewBtnShow: Boolean,\n\t\tnewBtnClass: [String, Array, Object],\n\t\tnewBtnDisabled: Boolean,\n\t\tnewBtnLabel: String,\n\t\tuniqueId: String,\n\n\t\tidField: String,\n\t\tparentIdField: String,\n\t\tcountOnly: Boolean,\n\t\tuseSelectionSpan: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tuuid: 0,\n\t\t\t// FilterCmpt properties\n\t\t\tfilterName: null,\n\t\t\tfilterActive: false,\n\t\t\tfields: null,\n\t\t\tdataset: null,\n\t\t\tdatasetMetadata: null,\n\t\t\tselectedFields: null,\n\t\t\tfilterFields: null,\n\n\t\t\tavailableFilters: null,\n\t\t\tselectedFilter: null,\n\n\t\t\t// FetchCmpt binded properties\n\t\t\tfetchCmptRefresh: false,\n\t\t\tfetchCmptApiFunction: null,\n\t\t\tfetchCmptApiFunctionParams: null,\n\t\t\tfetchCmptDataFetched: null,\n\n\t\t\tfetchResult: null,\n\n\t\t\ttabulator: null,\n\t\t\ttableBuilt: false,\n\t\t\ttabulatorHasSelector: false,\n\t\t\tselectedData: [],\n\t\t\tpersistence: {\n\t\t\t\tsort: true,\n\t\t\t\tcolumns: true,\n\t\t\t\tfilter: false,\n\t\t\t\theaderFilter: false,\n\t\t\t\tgroup: false,\n\t\t\t\tpage: false,\n\t\t\t}\n\t\t};\n\t},\n\tcomputed: {\n\t\tnotSelectedFields() {\n\t\t\tif (!this.fields || !this.selectedFields)\n\t\t\t\treturn null;\n\t\t\treturn this.fields.filter(x => this.selectedFields.indexOf(x) === -1)\n\t\t},\n\t\tfilteredData() {\n\t\t\tif (!this.dataset)\n\t\t\t\treturn [];\n\t\t\treturn JSON.parse(JSON.stringify(this.dataset));\n\t\t},\n\t\tfilteredColumns() {\n\t\t\tlet fields = JSON.parse(JSON.stringify(this.fields)) || [];\n\t\t\tlet selectedFields = JSON.parse(JSON.stringify(this.selectedFields)) || [];\n\n\t\t\tlet columns = null;\n\n\t\t\t// If the tabulator options has been provided and it contains the property columns\n\t\t\tif (this.tabulatorOptions && this.tabulatorOptions.hasOwnProperty('columns'))\n\t\t\t\tcolumns = this.tabulatorOptions.columns;\n\n\t\t\t// If columns is not an array or it is an array with less elements then the array fields\n\t\t\tif (!Array.isArray(columns) || (Array.isArray(columns) && columns.length < fields.length))\n\t\t\t{\n\t\t\t\tcolumns = []; // set it as an empty array\n\n\t\t\t\t// Loop throught all the retrieved columns from database\n\t\t\t\tfor (let field of fields)\n\t\t\t\t{\n\t\t\t\t\t// Create a new column having the title equal to the field name\n\t\t\t\t\tlet column = {\n\t\t\t\t\t\ttitle: field,\n\t\t\t\t\t\tfield: field\n\t\t\t\t\t};\n\n\t\t\t\t\t// If the column has to be displayed or not\n\t\t\t\t\tcolumn.visible = selectedFields.indexOf(field) >= 0;\n\n\t\t\t\t\t// Add the new column to the list of columns\n\t\t\t\t\tcolumns.push(column);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // the property columns has been provided in the tabulator options\n\t\t\t{\n\t\t\t\t// Loop throught the property columns of the tabulator options\n\t\t\t\tfor (let col of columns)\n\t\t\t\t{\n\t\t\t\t\t// If the column has to be displayed or not\n\t\t\t\t\t/* fields.indexOf(col.field) == -1; ensures displaying formatter colums\n\t\t\t\t\te.g. column with rowSelection checkboxes or with custom formatted action buttons */\n\t\t\t\t\tcol.visible = selectedFields.indexOf(col.field) >= 0 || fields.indexOf(col.field) == -1;\n\n\t\t\t\t\tif (col.hasOwnProperty('resizable'))\n\t\t\t\t\t\tcol.resizable = col.visible;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn columns;\n\t\t},\n\t\tfieldIdsForVisibilty() {\n\t\t\tif (!this.tableBuilt)\n\t\t\t\treturn [];\n\t\t\treturn this.tabulator.getColumns().filter(col => {\n\t\t\t\tlet def = col.getDefinition();\n\t\t\t\treturn !def.frozen && def.title && def.formatter != \"responsiveCollapse\";\n\t\t\t}).map(col => col.getField());\n\t\t},\n\t\tfieldNames() {\n\t\t\tif (!this.tableBuilt)\n\t\t\t\treturn {};\n\t\t\treturn this.tabulator.getColumns().reduce((res, col) => {\n\t\t\t\tres[col.getField()] = col.getDefinition().title;\n\t\t\t\treturn res;\n\t\t\t}, {});\n\t\t},\n\t\tidExtra() {\n\t\t\tif (!this.uuid)\n\t\t\t\treturn '';\n\t\t\treturn '-' + this.uuid;\n\t\t},\n\t\tcolumnsForFilter() {\n\t\t\tif (!this.filteredColumns || !this.datasetMetadata)\n\t\t\t\treturn [];\n\t\t\tconst filterTitles = this.filteredColumns.reduce((a,c) => {\n\t\t\t\ta[c.field] = c.title;\n\t\t\t\treturn a;\n\t\t\t}, {});\n\t\t\treturn this.datasetMetadata.map(el => ({...el, ...{title: filterTitles[el.name]}}));\n\t\t}\n\t},\n\tmethods: {\n\t\treloadTable() {\n\t\t\tif (this.tableOnly)\n\t\t\t\tthis.tabulator.setData();\n\t\t\telse\n\t\t\t\tthis.getFilter();\n\t\t},\n\t\tasync initTabulator() {\n\t\t\tlet placeholder = '< Phrasen Plugin not loaded! >';\n\t\t\tif (this.$p) {\n\t\t\t\tawait this.$p.loadCategory('ui');\n\t\t\t\tplaceholder = this.$p.t('ui/keineDatenVorhanden');\n\t\t\t}\n\n\t\t\tif (!this.tableOnly) {\n\t\t\t\t// prefetch data to get fields & selectedFields for filteredColumns & filteredData\n\t\t\t\tawait new Promise(resolve => {\n\t\t\t\t\tconst filterId = window.location.hash ? window.location.hash.slice(1) : null;\n\n\t\t\t\t\tconst resolvePromiseFunc = data => {\n\t\t\t\t\t\tthis.setRenderData(data);\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t};\n\t\t\t\t\t// get the filter data\n\t\t\t\t\tif (filterId === null)\n\t\t\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilter(wsParams)),\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tresolvePromiseFunc\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilterById(wsParams)),\n\t\t\t\t\t\t\t{ filterId },\n\t\t\t\t\t\t\tresolvePromiseFunc\n\t\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Define a default tabulator options in case it was not provided\n\t\t\tlet tabulatorOptions = {...{\n\t\t\t\t\tlayout: \"fitDataStretchFrozen\",\n\t\t\t\t\tmovableColumns: true,\n\t\t\t\t\tcolumnDefaults:{\n\t\t\t\t\t\ttooltip: true\n\t\t\t\t\t},\n\t\t\t\t\tplaceholder,\n\t\t\t\t\tpersistence: this.persistence,\n\t\t\t\t}, ...(this.tabulatorOptions || {})};\n\n\t\t\t// set default height if no height property is set\n\t\t\tif (tabulatorOptions.height === undefined &&\n\t\t\t\ttabulatorOptions.minHeight === undefined &&\n\t\t\t\ttabulatorOptions.maxHeight === undefined) {\n\t\t\t\ttabulatorOptions.height = 500;\n\t\t\t}\n\n\t\t\tif (!this.tableOnly) {\n\t\t\t\ttabulatorOptions.data = this.filteredData;\n\t\t\t\ttabulatorOptions.columns = this.filteredColumns;\n\t\t\t} else {\n\t\t\t\ttabulatorOptions.columns.forEach(col => {\n\t\t\t\t\tif (col.visible === undefined)\n\t\t\t\t\t\tcol.visible = true;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (tabulatorOptions.selectable || (tabulatorOptions.columns && tabulatorOptions.columns.filter(el => el.formatter == 'rowSelection').length))\n\t\t\t\tthis.tabulatorHasSelector = true;\n\n\t\t\tif (this.idField) {\n\t\t\t\t// enable nested tabulator if parent Id given\n\t\t\t\tif (this.parentIdField) tabulatorOptions.dataTree = true;\n\t\t\t\t// set tabulator index\n\t\t\t\ttabulatorOptions.index = this.idField;\n\t\t\t}\n\n\t\t\t// Start the tabulator with the build options\n\t\t\tthis.tabulator = new Tabulator(\n\t\t\t\tthis.$refs.table,\n\t\t\t\ttabulatorOptions\n\t\t\t);\n\t\t\t// If event handlers have been provided\n\t\t\tif (Array.isArray(this.tabulatorEvents) && this.tabulatorEvents.length > 0)\n\t\t\t{\n\t\t\t\t// Attach all the provided event handlers to the started tabulator\n\t\t\t\tfor (let evt of this.tabulatorEvents)\n\t\t\t\t\tthis.tabulator.on(evt.event, evt.handler);\n\t\t\t}\n\t\t\tthis.tabulator.on('tableBuilt', () => {this.tableBuilt = true; this.$emit('tableBuilt');});\n\t\t\tthis.tabulator.on(\"rowSelectionChanged\", data => {\n\t\t\t\tthis.selectedData = data;\n\t\t\t});\n\n\t\t\t// if nested tabulator, restructure data\n\t\t\tif (this.parentIdField && this.idField) {\n\t\t\t\tthis.tabulator.on(\"dataLoading\", data => {\n\t\t\t\t\tlet toDelete = [];\n\n\t\t\t\t\t// loop through all data\n\t\t\t\t\tfor (let childIdx = 0; childIdx < data.length; childIdx++)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet child = data[childIdx];\n\n\t\t\t\t\t\t// if it has parent id, it is a child\n\t\t\t\t\t\tif (child[this.parentIdField])\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// append the child on the right place. If parent found, mark original sw child on 0 level for deleting\n\t\t\t\t\t\t\tif (this.appendChild(data, child)) toDelete.push(childIdx);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// delete the marked children from 0 level\n\t\t\t\t\tfor (let counter = 0; counter < toDelete.length; counter++)\n\t\t\t\t\t{\n\t\t\t\t\t\t// decrease index by counter as index of data array changes after every deletion\n\t\t\t\t\t\tdata.splice(toDelete[counter] - counter, 1);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (this.tableOnly) {\n\t\t\t\tthis.tabulator.on('tableBuilt', () => {\n\t\t\t\t\tconst cols = this.tabulator.getColumns();\n\t\t\t\t\tthis.fields = cols.map(col => col.getField());\n\t\t\t\t\tthis.selectedFields = cols.filter(col => col.isVisible()).map(col => col.getField());\n\t\t\t\t\tif (this.tabulator.options.persistence.headerFilter)\n\t\t\t\t\t\tthis._setHeaderFilter();\n\t\t\t\t});\n\n\t\t\t}\n\n\t\t\tthis.tabulator.on(\"dataFiltered\", filters => {\n\t\t\t\tthis.filterActive = filters.length > 0;\n\t\t\t});\n\t\t},\n\t\tupdateTabulator() {\n\t\t\tif (this.tabulator) {\n\t\t\t\tif (this.tableBuilt)\n\t\t\t\t\tthis._updateTabulator();\n\t\t\t\telse\n\t\t\t\t\tthis.tabulator.on('tableBuilt', this._updateTabulator);\n\t\t\t}\n\t\t},\n\t\t_updateTabulator() {\n\t\t\tthis.tabulatorHasSelector = this.tabulatorOptions.selectable || this.filteredColumns.filter(el => el.formatter == 'rowSelection').length;\n\t\t\tthis.tabulator.setColumns(this.filteredColumns);\n\t\t\tthis.tabulator.setData(this.filteredData);\n\t\t\tthis._setHeaderFilter()\n\t\t},\n\t\tclearFilters()\n\t\t{\n\t\t\tlet existingFilters = this.tabulator.getHeaderFilters();\n\t\t\texistingFilters.forEach(filter => {\n\t\t\t\tthis.tabulator.setHeaderFilterValue(filter.field, \"\");\n\t\t\t});\n\t\t\tthis.tabulator.clearFilter();\n\t\t\tthis.filterActive = false;\n\t\t},\n\t\t_setHeaderFilter()\n\t\t{\n\t\t\tconst existingFilters = this.tabulator.getHeaderFilters();\n\t\t\texistingFilters.forEach(filter => {\n\t\t\t\tthis.tabulator.setHeaderFilterValue(filter.field, filter.value);\n\t\t\t});\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tgetFilter() {\n\t\t\tif (this.selectedFilter === null)\n\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilter(wsParams)),\n\t\t\t\t\tnull,\n\t\t\t\t\tthis.render\n\t\t\t\t);\n\t\t\telse\n\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilterById(wsParams)),\n\t\t\t\t\t{\n\t\t\t\t\t\tfilterId: this.selectedFilter\n\t\t\t\t\t},\n\t\t\t\t\tthis.render\n\t\t\t\t);\n\t\t},\n\t\tsetRenderData(data) {\n\t\t\tthis.fetchResult = data;\n\t\t\tthis.filterName = data.filterName;\n\t\t\tthis.dataset = data.dataset;\n\t\t\tthis.datasetMetadata = data.datasetMetadata;\n\n\t\t\tthis.fields = data.fields;\n\t\t\tthis.selectedFields = data.selectedFields;\n\t\t\tthis.filterFields = [];\n\n\t\t\tfor (let i = 0; i < data.datasetMetadata.length; i++)\n\t\t\t{\n\t\t\t\tfor (let j = 0; j < data.filters.length; j++)\n\t\t\t\t{\n\t\t\t\t\tif (data.datasetMetadata[i].name == data.filters[j].name)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet filter = data.filters[j];\n\t\t\t\t\t\tfilter.type = data.datasetMetadata[i].type;\n\n\t\t\t\t\t\tthis.filterFields.push(filter);\n\t\t\t\t\t\t//break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\trender(response) {\n\t\t\tlet data = response;\n\n\t\t\tthis.setRenderData(data);\n\n\t\t\t// If the side menu is active\n\t\t\tif (this.sideMenu === true)\n\t\t\t{\n\t\t\t\tthis.setSideMenu(data);\n\t\t\t}\n\t\t\telse // otherwise use the dropdown in the filter options\n\t\t\t{\n\t\t\t\tthis.setDropDownMenu(data);\n\t\t\t}\n\t\t\tthis.updateTabulator();\n\t\t},\n\t\t/**\n\t\t * Set the menu\n\t\t */\n\t\tsetSideMenu(data) {\n\t\t\tlet filters = data.sideMenu.filters;\n\t\t\tlet personalFilters = data.sideMenu.personalFilters;\n\t\t\tlet filtersArray = [];\n\n\t\t\tfor (let filtersCount = 0; filtersCount < filters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = filters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: filters[filtersCount].filter_id,\n\t\t\t\t\tlink: link + filters[filtersCount].filter_id,\n\t\t\t\t\tdescription: filters[filtersCount].desc,\n\t\t\t\t\tsort: filtersCount,\n\t\t\t\t\tonClickCall: this.handlerGetFilterById\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (let filtersCount = 0; filtersCount < personalFilters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = personalFilters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: personalFilters[filtersCount].filter_id,\n\t\t\t\t\tlink: link + personalFilters[filtersCount].filter_id,\n\t\t\t\t\tdescription: personalFilters[filtersCount].desc,\n\t\t\t\t\tsubscriptDescription: personalFilters[filtersCount].subscriptDescription,\n\t\t\t\t\tsubscriptLinkClass: personalFilters[filtersCount].subscriptLinkClass,\n\t\t\t\t\tsubscriptLinkValue: personalFilters[filtersCount].subscriptLinkValue,\n\t\t\t\t\tsort: filtersCount,\n\t\t\t\t\tonClickCall: this.handlerGetFilterById,\n\t\t\t\t\tonClickSubscriptCall: this.handlerRemoveCustomFilter\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.availableFilters = filtersArray;\n\n\t\t\tthis.$emit(\n\t\t\t\t'nwNewEntry',\n\t\t\t\t{\n\t\t\t\t\tlink: \"#\",\n\t\t\t\t\tdescription: \"Filters\",\n\t\t\t\t\ticon: \"filter\",\n\t\t\t\t\tchildren: filtersArray\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t * Set the drop down menu\n\t\t */\n\t\tsetDropDownMenu(data) {\n\t\t\tlet filters = data.sideMenu.filters;\n\t\t\tlet personalFilters = data.sideMenu.personalFilters;\n\t\t\tlet filtersArray = [];\n\n\t\t\tfor (let filtersCount = 0; filtersCount < filters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = filters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: filters[filtersCount].filter_id,\n\t\t\t\t\toption: filters[filtersCount].filter_id,\n\t\t\t\t\tdescription: filters[filtersCount].desc\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (let filtersCount = 0; filtersCount < personalFilters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = personalFilters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: personalFilters[filtersCount].filter_id,\n\t\t\t\t\toption: personalFilters[filtersCount].filter_id,\n\t\t\t\t\tdescription: personalFilters[filtersCount].desc\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.availableFilters = filtersArray;\n\t\t},\n\t\t/**\n\t\t * Used to start/refresh the FetchCmpt\n\t\t */\n\t\tstartFetchCmpt(apiFunction, apiFunctionParameters, dataFetchedCallback) {\n\t\t\t// Assign the function api of the FetchCmpt binded property\n\t\t\tthis.fetchCmptApiFunction = apiFunction;\n\n\t\t\t// In case a null value is provided set the parameters as an empty object\n\t\t\tif (apiFunctionParameters == null) apiFunctionParameters = {};\n\n\t\t\t// Always needed parameters\n\t\t\tapiFunctionParameters.filterUniqueId = FHC_JS_DATA_STORAGE_OBJECT.called_path + \"/\" + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\t\t\tapiFunctionParameters.filterType = this.filterType;\n\n\t\t\tif (this.uniqueId)\n\t\t\t\tapiFunctionParameters.filterUniqueId += '_' + this.uniqueId;\n\n\t\t\t// Assign parameters to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptApiFunctionParams = apiFunctionParameters;\n\t\t\t// Assign data fetch callback to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptDataFetched = dataFetchedCallback;\n\t\t\t// Set the FetchCmpt binded property refresh to have the component to refresh\n\t\t\t// NOTE: this should be the last one to be called because it triggers the FetchCmpt to start to refresh\n\t\t\tthis.fetchCmptRefresh === true ? this.fetchCmptRefresh = false : this.fetchCmptRefresh = true;\n\t\t},\n\n\t\t// ------------------------------------------------------------------------------------------------------------------\n\t\t// Event handlers\n\n\t\t/**\n\t\t *\n\t\t */\n\t\thandlerSaveCustomFilter(customFilterName) {\n\t\t\tthis.selectedFilter = null;\n\t\t\t//\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.saveCustomFilter(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tcustomFilterName\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\thandlerRemoveCustomFilter(event) {\n\t\t\tlet filterId = event.currentTarget.getAttribute(\"href\").substring(1);\n\t\t\tif (filterId === this.selectedFilter)\n\t\t\t\tthis.selectedFilter = null;\n\t\t\t//\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.removeCustomFilter(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tfilterId: filterId\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\n\t\t/*\n\t\t *\n\t\t */\n\t\thandlerGetFilterById: function(event) {\n\n\t\t\tlet filterId = null;\n\n\t\t\t// Get the attribute href if side menu is rendered\n\t\t\tlet attr = event.currentTarget.getAttribute(\"href\");\n\n\t\t\t// Otherwise get the value of the drop down menu\n\t\t\tif (attr == null)\n\t\t\t{\n\t\t\t\tfilterId = event.currentTarget.value;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfilterId = attr.substring(1);\n\t\t\t}\n\n\t\t\tthis.switchFilter(filterId);\n\t\t},\n\t\tswitchFilter(filterId) {\n\t\t\tthis.selectedFilter = filterId;\n\t\t\tthis.getFilter();\n\t\t},\n\t\tapplyFilterConfig(filterFields) {\n\t\t\tthis.selectedFilter = null;\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.applyFilterFields(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tfilterFields\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\n\t\t// append child to it's parent\n\t\tappendChild(data, child) {\n\t\t\t// get parent id\n\t\t\tlet parentId = child[this.parentIdField];\n\n\t\t\t// loop thorugh all data\n\t\t\tfor (let parentIdx = 0; parentIdx < data.length; parentIdx++)\n\t\t\t{\n\t\t\t\tlet parent = data[parentIdx];\n\n\t\t\t\t// if it's the parent\n\t\t\t\tif (parent[this.idField] == parentId)\n\t\t\t\t{\n\t\t\t\t\t// create children array if not done yet\n\t\t\t\t\tif (!parent._children) parent._children = [];\n\n\t\t\t\t\t// if child is not included in children array, append the child\n\t\t\t\t\tif (!parent._children.includes(child)) parent._children.push(child);\n\n\t\t\t\t\t// parent found\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t// search children for parents\n\t\t\t\telse if (parent._children) this.appendChild(parent._children, child);\n\t\t\t}\n\n\t\t\t// parent not found\n\t\t\treturn false;\n\t\t}\n\t},\n\tbeforeCreate() {\n\t\tif (!this.tableOnly == !this.filterType)\n\t\t\talert('You can not have a filter-type in table-only mode!');\n\t},\n\tcreated() {\n\t\tif (this.sideMenu && (!this.$props.onNwNewEntry || !(this.$props.onNwNewEntry instanceof Function)))\n\t\t\talert('\"nwNewEntry\" listener is mandatory when sideMenu is true');\n\t\tthis.uuid = _uuid++;\n\t\tthis.$emit('uuidDefined', this.uuid)\n\t},\n\tmounted() {\n\t\tthis.initTabulator().then(() => {\n\t\t\tif (!this.tableOnly) {\n\t\t\t\tthis.selectedFilter = window.location.hash ? window.location.hash.slice(1) : null;\n\t\t\t\tthis.render(this.fetchResult);\n\t\t\t}\n\t\t});\n\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t\t\n\n\t\t
    \n\t\t\t
    \n\t\t\t\t

    \n\t\t\t\t\t{{ title }}\n\t\t\t\t

    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{{ selectedData.length }} ausgewählt\n\t\t\t\t\t\t Mit {{ selectedData.length }} ausgewählten:\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t[ {{ filterName }} ]\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\n\n\t\t\n\t\t
    \n\t`\n};\n","export default {\n props: {\n data: Object,\n title: { type: String },\n },\n data() {\n return {};\n },\n created(){\n\n },\n template: /*html*/`\n\t`,\n};\n","export default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: String,\n\t\t}\n\t},\n\tdata() {\n\t\treturn {}\n\t},\n\ttemplate: /*html*/`\n
    \n
    \n {{$p.t('profil','fhAusweisStatus',[data])}}\n
    \n
    `,\n}","export default {\n\t//TODO: To be implemented\n\tprops: {\n\t\tdata: {\n\t\t\ttype: String,\n\t\t},\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tmobile: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tmethods: {\n\t\thideCollapse: function () {\n\t\t\tthis.collapseOpen = false;\n\t\t},\n\t\tshowCollapse: function () {\n\t\t\tthis.collapseOpen = true;\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tcollapseOpen: false,\n\t\t};\n\t},\n\ttemplate: /*html*/ `\n
    \n \n \n
    `,\n};\n","export default {\n props:{\n data:Object,\n view:String,\n withZustelladresse:{\n type:Boolean,\n default:true,\n },\n },\n data(){\n return{}\n },\n created(){\n \n },\n template:/*html*/`\n \n
    \n \n \n
    \n \n
    \n \n
    \n
    \n
    {{$p.t('person','strasse')}}
    \n {{data.strasse}} \n
    \n
    \n \n \n
    \n
    \n
    {{$p.t('global','typ')}}
    \n {{data.typ}} \n
    \n
    \n \n
    \n
    \n
    {{$p.t('person','ort')}}
    \n {{data.ort}} \n
    \n
    \n
    \n
    \n
    {{$p.t('person','plz')}}
    \n {{data.plz}} \n
    \n
    \n\n
    \n
    \n
    {{$p.t('person','zustelladresse')}}
    \n
    \n \n
    \n
    \n
    \n
    \n`\n};","export default{\n props:{\n view:String,\n data:Object,\n },\n data(){\n return {\n\n }\n },\n created(){\n\n }, \n template:/*html*/`\n\t\n`,\n};","export default {\n\tdata() {\n\t\treturn {};\n\t},\n\tprops: {\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdata: {\n\t\t\ttype: Array,\n\t\t},\n\t},\n\ttemplate: /*html*/ `\n
    \n
    \n {{title}}\n
    \n
    \n \n
    \n
    \n\t\t\t\t\n
    \n
    \n
    \n
    `,\n};\n","export default {\n\tdata() {\n\t\treturn {}\n\t},\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t}\n\t},\n\tinject: {\n\t\t// inject info that should not be displayed\n\t\t'studiengang_kz': {\n\t\t\tfrom: 'studiengang_kz',\n\t\t\tdefault: false\n\t\t},\n\t},\n\tcomputed: {\n\t\tgetLinkGruppeListe() {\n\t\t\tif(this.studiengang_kz === false) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\treturn this.data.gruppe?.value && this.data.verband?.value && this.data.semester?.value ? FHC_JS_DATA_STORAGE_OBJECT.app_root \n\t\t\t\t+ 'cis/private/stud_in_grp.php?kz='+this.studiengang_kz+'&sem=' + this.data.semester.value\n\t\t\t\t+ '&verband=' + this.data.verband.value + '&grp=' + this.data.gruppe.value : ''\n\t\t},\n\t\tgetLinkVerbandListe() {\n\t\t\tif(this.studiengang_kz === false) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\treturn this.data.verband?.value && this.data.semester?.value ? FHC_JS_DATA_STORAGE_OBJECT.app_root \n\t\t\t\t+ 'cis/private/stud_in_grp.php?kz='+this.studiengang_kz+'&sem=' + this.data.semester.value\n\t\t\t\t+ '&verband=' + this.data.verband.value : ''\n\t\t},\n\t\tgetLinkSemesterListe() {\n\t\t\tif(this.studiengang_kz === false) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\treturn this.data.semester?.value ? FHC_JS_DATA_STORAGE_OBJECT.app_root \n\t\t\t\t+ 'cis/private/stud_in_grp.php?kz='+this.studiengang_kz+'&sem=' + this.data.semester.value : ''\n\t\t}\n\t},\n\tcreated() {\n\t\t//TODO: check if data.Telefon is a valid telefon number to call before using it as a tel: link\n\t},\n\ttemplate: `\n
    \n
    {{title}}
    \n
    \n
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{entry.label }}
    \n\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{{entry.value ?? '-'}}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ entry.value }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ entry.value }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ entry.value }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{{ entry.value ?? '-'}}\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    `\n};","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\t\n\tprofilViewData(uid) {\n\t\tlet url = \"/api/frontend/v1/Profil/profilViewData\";\n\t\tif(uid){\n\t\t\turl += `/${uid}`;\n\t\t}\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: url\n\t\t};\n\t},\n\tfotoSperre(value) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/Profil/fotoSperre/${value}`\n\t\t};\n\t\t\n\t},\n\tisStudent(uid) {\n\t\t// TODO(chris): seems to be called from nowhere?\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Profil/isStudent',\n\t\t\tparams: { uid }\n\t\t};\n\t},\n\tisMitarbeiter(uid) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/Profil/isMitarbeiter/${uid}`\n\t\t};\n\t},\n\tgetZustellAdresse() {\n\t\t// TODO(chris): seems to be called from nowhere?\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Profil/getZustellAdresse'\n\t\t};\n\t},\n\tgetZustellKontakt() {\n\t\t// TODO(chris): seems to be called from nowhere?\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Profil/getZustellKontakt'\n\t\t};\n\t},\n\tgetGemeinden(nation, zip) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/Profil/getGemeinden/${nation}/${zip}`\n\t\t};\n\t\t\n\t},\n\tgetAllNationen() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Profil/getAllNationen'\n\t\t};\n\t},\n};","import DmsItem from './Dms/Item.js';\n\nexport default {\n\tcomponents: {\n\t\tDmsItem\n\t},\n\temits: [\n\t\t'update:modelValue'\n\t],\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: [ FileList, Array ],\n\t\t\trequired: true\n\t\t},\n\t\tmultiple: Boolean,\n\t\tid: String,\n\t\tname: String,\n\t\tinputClass: [String, Array, Object],\n\t\tnoList: Boolean,\n\t\taccept: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\tmethods: {\n\t\tstringifyFile(file) {\n\t\t\treturn JSON.stringify({\n\t\t\t\tlastModified: file.lastModified,\n\t\t\t\tlastModifiedDate: file.lastModifiedDate,\n\t\t\t\tname: file.name,\n\t\t\t\tsize: file.size,\n\t\t\t\ttype: file.type\n\t\t\t});\n\t\t},\n\t\taddFiles(event) {\n\t\t\tif (!this.multiple)\n\t\t\t\treturn this.$emit('update:modelValue', event.target.files);\n\t\t\t\n\t\t\tconst dt = new DataTransfer();\n\t\t\tconst doubles = [];\n\t\t\tfor (var file of this.modelValue) {\n\t\t\t\tdt.items.add(file);\n\t\t\t\tdoubles.push(this.stringifyFile(file));\n\t\t\t}\n\t\t\tfor (var file of event.target.files) {\n\t\t\t\t// NOTE(chris): deep check (with FileReader) would require an async function so we only check the basic attributes\n\t\t\t\tif (doubles.indexOf(this.stringifyFile(file)) < 0)\n\t\t\t\t\tdt.items.add(file);\n\t\t\t}\n\t\t\tthis.$emit('update:modelValue', dt.files);\n\t\t},\n\t\tremoveFile(id) {\n\t\t\tconst fileToRemove = Array.from(this.modelValue)[id];\n\t\t\t\n\t\t\tconst dt = new DataTransfer();\n\t\t\tfor (var file of this.modelValue) {\n\t\t\t\tif (file !== fileToRemove)\n\t\t\t\t\tdt.items.add(file);\n\t\t\t}\n\t\t\tthis.$emit('update:modelValue', dt.files);\n\t\t}\n\t},\n\twatch: {\n\t\tmodelValue(n) {\n\t\t\tif (!n)\n\t\t\t\treturn;\n\t\t\tif (n instanceof FileList) {\n\t\t\t\tif (!this.$refs.upload) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn this.$refs.upload.files = n;\n\t\t\t}\n\n\t\t\tconst dt = new DataTransfer();\n\t\t\tconst dms = [];\n\t\t\tfor (var file of n) {\n\t\t\t\tif (file instanceof File) {\n\t\t\t\t\tdt.items.add(file);\n\t\t\t\t} else {\n\t\t\t\t\tconst dmsFile = new File([JSON.stringify(file)], file.name, {\n\t\t\t\t\t\ttype: 'application/x.fhc-dms+json'\n\t\t\t\t\t});\n\t\t\t\t\tdt.items.add(dmsFile);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$emit('update:modelValue', dt.files);\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t\n\t\t
      \n\t\t\t\n\t\t\t\n\t\t
    \n\t
    `\n}","export default {\n\temits: [\n\t\t'delete'\n\t],\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: [File, Object],\n\t\t\trequired: true\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tpreview: ''\n\t\t};\n\t},\n\twatch: {\n\t\tmodelValue(n) {\n\t\t\tif (n.type == 'application/x.fhc-dms+json') {\n\t\t\t\tn.text().then(result => {\n\t\t\t\t\tconst obj = JSON.parse(result);\n\t\t\t\t\tthis.preview = obj.preview || '';\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t},\n\ttemplate: `\n\t
  • \n\t\t\n\t\t{{ modelValue.name }}\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t
  • `\n}\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\t//! API calls for profil update requests\n\tgetStatus() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/getStatus'\n\t\t};\n\t},\n\tgetTopic() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/getTopic'\n\t\t};\n\t},\n\tacceptProfilRequest({profil_update_id, uid, status_message, topic, requested_change}) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/acceptProfilRequest',\n\t\t\tparams: {\n\t\t\t\tprofil_update_id,\n\t\t\t\tuid,\n\t\t\t\tstatus_message,\n\t\t\t\ttopic,\n\t\t\t\trequested_change\n\t\t\t}\n\t\t};\n\t},\n\tdenyProfilRequest({profil_update_id, uid, topic, status_message}) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/denyProfilRequest',\n\t\t\tparams: {\n\t\t\t\tprofil_update_id,\n\t\t\t\tuid,\n\t\t\t\ttopic,\n\t\t\t\tstatus_message\n\t\t\t}\n\t\t};\n\t},\n\tinsertFile(dms, replace = null) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n\t\t\tparams: dms\n\t\t};\n\t},\n\tupdateProfilbild(dms) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: `/api/frontend/v1/ProfilUpdate/updateProfilbild`,\n\t\t\tparams: dms\n\t\t};\n\t},\n\tgetProfilUpdateWithPermission(filter) {\n\t\tconst url_filter = (filter !== '') ? '/' + encodeURIComponent(filter) : '';\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/getProfilUpdateWithPermission' + url_filter\n\t\t};\n\t},\n\tgetProfilRequestFiles(requestID) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`\n\t\t};\n\t},\n\tselectProfilRequest(uid = null, id = null) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/selectProfilRequest',\n\t\t\tparams: {\n\t\t\t\t...(uid ? { uid } : {}),\n\t\t\t\t...(id ? { id } : {})\n\t\t\t}\n\t\t};\n\t},\n\tinsertProfilRequest(topic, payload, fileID = null) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/insertProfilRequest',\n\t\t\tparams: {\n\t\t\t\ttopic,\n\t\t\t\tpayload,\n\t\t\t\t...(fileID ? { fileID } : {})\n\t\t\t}\n\t\t};\n\t},\n\tupdateProfilRequest(topic, payload, ID, fileID = null) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/updateProfilRequest',\n\t\t\tparams: {\n\t\t\t\ttopic,\n\t\t\t\tpayload,\n\t\t\t\tID,\n\t\t\t\t...(fileID ? { fileID } : {})\n\t\t\t}\n\t\t};\n\t},\n\tdeleteProfilRequest(requestID) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/deleteProfilRequest',\n\t\t\tparams: { requestID }\n\t\t};\n\t}\n};","import Dms from \"../../../../Form/Upload/Dms.js\";\nimport BsModal from \"../../../../Bootstrap/Modal.js\";\n\nimport ApiProfilUpdate from '../../../../../api/factory/profilUpdate.js';\n\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tdmsData: [],\n\t\t};\n\t},\n\tcomponents: {\n\t\tDms,\n\t\tBsModal,\n\t},\n\tmixins: [BsModal],\n\tprops: {\n\t\ttitel: {\n\t\t\ttype: String,\n\t\t},\n\t\tfiles: {\n\t\t\ttype: Array,\n\t\t},\n\t\tupdateID: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tonHideBsModal: Function,\n\t\tonHiddenBsModal: Function,\n\t\tonHidePreventedBsModal: Function,\n\t\tonShowBsModal: Function,\n\t\tonShownBsModal: Function,\n\t},\n\tmethods:{\n\t\tasync uploadImage(){\n\t\t\tif(this.dmsData){\n\t\t\t\tlet formData = new FormData();\n\t\t\t\tformData.append(\"files[]\", this.dmsData[0]);\n\t\t\t\tawait this.$api\n\t\t\t\t\t.call(ApiProfilUpdate.updateProfilbild(formData))\n\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('global','hochgeladen'));\n\t\t\t\t\t\tthis.modal.hide();\n\t\t\t\t\t});\t\n\t\t\t}\n\t\t\t\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.modal = this.$refs.modalContainer.modal;\n\t\tif (this.files) {\n\t\t\tthis.dmsData = this.files;\n\t\t}\n\t},\n\tpopup(options) {\n\t\t\tBsModal.popup.bind(this);\n\t\t\treturn BsModal.popup(null, options);\n\t},\n\ttemplate: /*html*/`\n\n\t\n\t\t\n\t\t\n\t\n `,\n};\n","import ApiProfil from '../../../../api/factory/profil.js';\nimport ImageUpload from '../../Profil/ProfilModal/EditProfilComponents/ImageUpload.js';\n\nexport default {\n\tprops: {\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t},\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t\tfotoStatus:{\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t}\n\t},\n\tcomponents:{\n\t\tImageUpload,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tFotoSperre: this.data.foto_sperre,\n\t\t};\n\t},\n\temits: [\"showEditProfilModal\"],\n\tinject:[\"isEditable\"],\n\n\tmethods: {\n\t\tshowModal(){\n\t\t\tthis.$refs.imageUpload.show();\n\t\t},\n\t\tsperre_foto_function() {\n\t\t\t//TODO: refactor\n\t\t\tif (!this.data) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.$api\n\t\t\t\t.call(ApiProfil.fotoSperre(!this.FotoSperre))\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.FotoSperre = res.data.foto_sperre;\n\t\t\t\t});\n\t\t}\n\t},\n\tcomputed: {\n\t\tget_image_base64_src: function () {\n\t\t\tif (!this.data.foto) {\n\t\t\t\treturn \"\";\n\t\t\t}\n\t\t\treturn \"data:image/jpeg;base64,\" + this.data.foto;\n\t\t},\n\t\tname: function () {\n\t\t\treturn {vorname: this.data.Vorname, nachname: this.data.Nachname};\n\t\t},\n\t\tprofilInfo: function () {\n\t\t\tlet res = {};\n\t\t\tlet notIncludedProperties = [\n\t\t\t\t\"Vorname\",\n\t\t\t\t\"Nachname\",\n\t\t\t\t\"foto_sperre\",\n\t\t\t\t\"foto\",\n\t\t\t];\n\t\t\tObject.keys(this.data).forEach((key) => {\n\t\t\t\tif (!notIncludedProperties.includes(key)) {\n\t\t\t\t\tres[key] = this.data[key];\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn res;\n\t\t},\n\t},\n\ttemplate: /*html*/ `\n\n
    \n\t\n
    \n
    \n
    \n \n
    \n
    \n {{title}}\n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n \"profile\n \n
    \n \n
    \n\t\t\t\t\t\t
    \n \n
    \n
    \n
    \n \n
    \n \n \n
    \n
    \n
    \n
    \n
    {{$p.t('profilUpdate','vorname')}}
    \n {{name.vorname}} \n
    \n
    \n
    \n
    \n
    {{$p.t('profilUpdate','nachname')}}
    \n {{name.nachname}} \n
    \n
    \n
    \n
    \n
    \n
    \n
    {{$p.t('profil',bez)}}
    \n {{wert?wert:'-'}} \n
    \n
    \n
    \n
    \n
    \n`,\n};\n","import Kontakt from \"../ProfilComponents/Kontakt.js\";\nimport EditKontakt from \"./EditProfilComponents/EditKontakt.js\";\nimport Adresse from \"../ProfilComponents/Adresse.js\";\nimport EditAdresse from \"./EditProfilComponents/EditAdresse.js\";\nimport Status from \"./EditProfilComponents/Status.js\";\nimport TextInputDokument from \"./EditProfilComponents/TextInputDokument.js\";\n\nexport default {\n\tname: 'EditProfilSelect',\n\tcomponents: {\n\t\tKontakt,\n\t\tEditKontakt,\n\t\tAdresse,\n\t\tEditAdresse,\n\t\tStatus,\n\t\tTextInputDokument,\n\t},\n\tinject: [\"profilUpdateTopic\", \"isMitarbeiter\"],\n\tprops: {\n\t\tlist: Object,\n\n\t\t//? Prop used to determine how many options the select should initially show\n\t\tsize: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t\t//? Content for the aria label of the select\n\t\tariaLabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tprofilUpdate: String,\n\t\ttopic: String,\n\t\tbreadcrumb: String,\n\t},\n\temits: {\n\t\t//? update:modelValue event is needed to notify the v-model when the value has changed\n\t\t[\"update:profilUpdate\"]: null,\n\t\t[\"update:topic\"]: null,\n\t\t[\"update:breadcrumb\"]: null,\n\t\tsubmit: null,\n\t\tselect: null,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tview: null,\n\t\t\tdata: null,\n\t\t\tbreadcrumbItems: [],\n\t\t\tmodal_topic: this.topic,\n\t\t\tproperties: null,\n\t\t};\n\t},\n\n\tmethods: {\n\t\taddItem: function () {\n\t\t\tthis.view =\n\t\t\t\tthis.modal_topic == this.profilUpdateTopic[\"Private Kontakte\"]\n\t\t\t\t\t? \"EditKontakt\"\n\t\t\t\t\t: \"EditAdresse\";\n\n\t\t\t//? updates the topic when a Kontakt or an Address should be added\n\t\t\tthis.modal_topic =\n\t\t\t\tthis.modal_topic == this.profilUpdateTopic[\"Private Kontakte\"]\n\t\t\t\t\t? this.profilUpdateTopic[\"Add Kontakt\"]\n\t\t\t\t\t: this.profilUpdateTopic[\"Add Adresse\"];\n\t\t\tthis.$emit(\"update:topic\", this.modal_topic);\n\t\t\tthis.breadcrumbItems.push(this.modal_topic);\n\t\t\tthis.$emit(\"update:breadcrumb\", this.breadcrumbItems);\n\n\t\t\tthis.data =\n\t\t\t\tthis.view == \"EditAdresse\"\n\t\t\t\t\t? {\n\t\t\t\t\t\t//? add flag\n\t\t\t\t\t\tadd: true,\n\t\t\t\t\t\tadresse_id: null,\n\t\t\t\t\t\tstrasse: null,\n\t\t\t\t\t\ttyp: null,\n\t\t\t\t\t\tplz: null,\n\t\t\t\t\t\tort: null,\n\t\t\t\t\t\tzustelladresse: false,\n\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\t//? add flag\n\t\t\t\t\t\tadd: true,\n\t\t\t\t\t\tkontakt_id: null,\n\t\t\t\t\t\tkontakttyp: null,\n\t\t\t\t\t\tkontakt: null,\n\t\t\t\t\t\tanmerkung: null,\n\t\t\t\t\t\tzustellung: false,\n\t\t\t\t\t};\n\t\t},\n\n\t\tdeleteItem: function (item) {\n\t\t\t//? delete flag\n\t\t\titem.data.delete = true;\n\t\t\tthis.$emit(\"update:profilUpdate\", item.data);\n\t\t\t//? updates the topic when a Kontakt or an Address should be deleted\n\n\t\t\tthis.modal_topic = this.modal_topic == this.profilUpdateTopic[\"Private Adressen\"]\n\t\t\t\t? this.profilUpdateTopic[\"Delete Adresse\"]\n\t\t\t\t: this.profilUpdateTopic[\"Delete Kontakt\"];\n\t\t\tthis.$emit(\"update:topic\", this.modal_topic);\n\t\t\tthis.$emit(\"submit\");\n\t\t},\n\n\t\tprofilUpdateEmit: function (event) {\n\t\t\t//? passes the updated profil information to the parent component\n\t\t\tthis.$emit(\"update:profilUpdate\", event);\n\t\t},\n\n\t\tupdateOptions: function (event, item) {\n\t\t\tthis.properties = item;\n\t\t\tthis.data = item.data;\n\t\t\tthis.view = item.view;\n\t\t\tif (item.title) {\n\t\t\t\t//? emits the selected topic to the parent component\n\t\t\t\tthis.modal_topic = item.topic;\n\t\t\t\tthis.$emit(\"update:topic\", this.modal_topic);\n\n\t\t\t\t//? emits the new item for the breadcrumb in the parent component\n\t\t\t\tthis.breadcrumbItems.push(item.title);\n\t\t\t} else {\n\t\t\t\tif (item.data.kontakttyp) {\n\t\t\t\t\tthis.breadcrumbItems.push(item.data.kontakttyp);\n\t\t\t\t\tthis.breadcrumbItems.push(item.data.kontakt);\n\t\t\t\t} else if (item.data.strasse) {\n\t\t\t\t\tthis.breadcrumbItems.push(item.data.strasse);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$emit(\"update:breadcrumb\", this.breadcrumbItems);\n\t\t},\n\t},\n\tcomputed: {},\n\tcreated() {\n\t\t//? JSON parse and stringify are used to deep clone the objects\n\t\tthis.properties = {...this.list};\n\t\tthis.data = this.list.data\n\t\t\t? JSON.parse(JSON.stringify(this.list.data))\n\t\t\t: null;\n\t\tthis.view = this.list.view\n\t\t\t? JSON.parse(JSON.stringify(this.list.view))\n\t\t\t: null;\n\t},\n\tmounted() {\n\t},\n\n\ttemplate: /*html*/ `\n \n \n `,\n};\n","export default {\n props: {\n data: Object,\n },\n\n data() {\n return {\n originalValue: null,\n zustellKontakteCount: null,\n };\n },\n\n inject: [\"getZustellkontakteCount\"],\n\n methods: {\n updateValue: function (event, bind) {\n if (bind === \"zustellung\") {\n this.data[bind] = event.target.checked;\n } else {\n //? sets the value of a property to null when an empty string is entered to keep the isChanged function valid\n this.data[bind] = event.target.value === \"\" ? null : event.target.value;\n }\n this.$emit(\"profilUpdate\", this.isChanged ? this.data : null);\n this.zustellKontakteCount = this.getZustellkontakteCount();\n },\n },\n\n computed: {\n showZustellKontakteWarning: function () {\n\t // if the kontakt is already a zustellungskontakt when the user is editing the kontakt, then no warning is shown and the zustellung will be overwritten\n\t if (JSON.parse(this.originalValue).zustellung) {\n\t return false;\n\t }\n\t const kontakteOfSelectedType = this.zustellKontakteCount.filter((element) => {\n\t\t return element.kontakttyp === this.data?.kontakttyp\n\t });\n // if zustellKontakteCount is not 0 and the own kontakt has the flag zustellung set to true\n if (!this.zustellKontakteCount.some((element) => element.kontakt_id === this.data.kontakt_id)) {\n return this.data.zustellung && kontakteOfSelectedType.length;\n }\n return this.kontakteOfSelectedType.length >= 2 && this.data.zustellung;\n },\n isChanged: function () {\n //? returns true if the original passed data object was changed\n if (!this.data.kontakt || !this.data.kontakttyp) {\n return false;\n }\n return JSON.stringify(this.data) !== this.originalValue;\n },\n },\n\n created() {\n this.originalValue = JSON.stringify(this.data);\n this.zustellKontakteCount = this.getZustellkontakteCount();\n },\n \n template:\n /*html*/\n `\n\n
    \n\n
    \n\n\n
    \n
    {{$p.t('profilUpdate','kontaktTyp')}}
    \n\n \n
    \n\n
    \n
    \n\n \n\n\n
    \n
    {{data.kontakttyp?data.kontakttyp:$p.t('global','kontakt')}}
    \n\n \n
    \n\n
    \n
    \n\n
    \n
    {{$p.t('global','anmerkung')}}
    \n\n \n
    \n\n
    \n\n \n
    \n
    \n {{$p.t('profilUpdate','zustell_kontakte_warning')}}\n
    \n
    \n \n\n
    \n {{$p.t('profilUpdate','zustellungsKontakt')}}\n\n \n
    \n
    \n `,\n};\n","import Dms from \"../../../../Form/Upload/Dms.js\";\n\nimport ApiProfil from '../../../../../api/factory/profil.js';\n\nexport default {\n components: {\n AutoComplete: primevue.autocomplete,\n\tDms: Dms\n },\n\n props: {\n data: Object,\n files: {\n type: Array,\n default: []\n },\n },\n\n inject: [\"getZustelladressenCount\", \"updateFileID\", \"isMitarbeiter\"],\n\n data() {\n return {\n gemeinden: [],\n ortschaftnamen: [],\n selectedNation: null,\n nationenList: [],\n originalValue: null,\n zustellAdressenCount: null,\n\t dmsData: [],\n\t fileschanged: false\n };\n },\n\n watch: {\n \"data.gemeinde\": function (newValue, oldValue) {\n this.$emit(\"profilUpdate\", this.isChanged ? this.data : null);\n },\n \"data.ort\": function (newValue, oldValue) {\n this.$emit(\"profilUpdate\", this.isChanged ? this.data : null);\n },\n },\n\n methods: {\n\n autocompleteSearchGemeinden: function (event) {\n this.gemeinden = this.gemeinden.map((gemeinde) => gemeinde);\n },\n\n autocompleteSearchOrtschaftsnamen: function (event) {\n this.ortschaftnamen = this.ortschaftnamen.map((ortschaft) => ortschaft);\n },\n\n getGemeinde: function () {\n //? only query the gemeinde is the nation is Austria and the PLZ is greater than 999 and less than 32000\n if (\n this.data.nation &&\n this.data.nation === \"A\" &&\n this.data.plz &&\n this.data.plz > 999 &&\n this.data.plz < 32000\n ) {\n this.$api\n .call(ApiProfil.getGemeinden(this.data.nation, this.data.plz))\n .then((res) => {\n if (res.data.length) {\n this.gemeinden = [\n ...new Set(\n res.data.map((element) => {\n return element.name;\n })\n ),\n ];\n this.ortschaftnamen = [\n ...new Set(\n res.data.map((element) => {\n return element.ortschaftsname;\n })\n ),\n ];\n }\n });\n } else {\n this.gemeinden = [];\n }\n },\n\n updateValue: function (event, bind) {\n //? sets the value of a property to null when an empty string is entered to keep the isChanged function valid\n if (bind === \"zustelladresse\") {\n this.data[bind] = event.target.checked;\n\t } else if(bind === 'files') {\n\t\t if(this.dmsData.length > 0 && this.dmsData[0].type !== 'application/x.fhc-dms+json') {\n\t\t this.fileschanged = true;\n\t\t }\n\t\t this.updateFileID(this.dmsData);\n } else {\n this.data[bind] = event.target.value === \"\" ? null : event.target.value;\n }\n\n this.$emit(\"profilUpdate\", this.isChanged ? this.data : null);\n // update the zustellAdressen count\n this.zustellAdressenCount = this.getZustelladressenCount();\n },\n\n\tdeleteDmsData: function() {\n\t\tthis.dmsData = [];\n\t\tthis.updateValue(null, 'files');\n\t}\n },\n\n computed: {\n showZustellAdressenWarning: function () {\n\n\t // if the address was already a zustellungsadresse when editing the address, then the warning will not be shown and the zustellungsadresse will just be overwritten\n\t if (JSON.parse(this.originalValue).zustelladresse){\n\t\treturn false;\n\t }\n // if zustellAdressenCount is not 0 and the own kontakt has the flag zustellung set to true\n if (!this.zustellAdressenCount.includes(this.data.adresse_id)) {\n return this.data.zustelladresse && this.zustellAdressenCount.length;\n }\n return this.zustellAdressenCount.length >= 2 && this.data.zustelladresse;\n },\n isChanged: function () {\n if (\n !this.data.strasse ||\n !this.data.plz ||\n !this.data.ort ||\n !this.data.typ ||\n this.dmsData.length === 0\n ) {\n return false;\n }\n\n const datachanged = this.originalValue !== JSON.stringify(this.data);\n return datachanged || this.fileschanged;\n },\n },\n\n created() {\n // get all available nationen\n this.$api\n .call(ApiProfil.getAllNationen())\n .then(res => {\n this.nationenList = res.data;\n this.getGemeinde();\n });\n \n this.originalValue = JSON.stringify(this.data);\n this.zustellAdressenCount = this.getZustelladressenCount();\n },\n\n mounted() {\n if (this.files) {\n this.dmsData = this.files;\n }\n },\n\n template: /*html*/ `\n
    \n \n
    \n
    \n\t {{$p.t('profilUpdate','zustell_adressen_warning')}}\n
    \n
    \n \n\n\n
    \n
    \n \n \n
    \n
    \n\n \n
    \n
    \n
    {{$p.t('person','nation')}}*
    \n \n
    \n
    \n\n \n
    \n
    \n
    {{$p.t('person','plz')}}*
    \n \n
    \n
    \n\n \n
    \n
    \n
    {{$p.t('person','gemeinde')}}*
    \n \n
    \n
    \n\n \n
    \n
    \n
    {{$p.t('person','ort')}}*
    \n \n
    \n
    \n\n \n
    \n
    \n
    {{$p.t('person','strasse')}}*
    \n \n
    \n
    \n \n \n
    \n
    \n
    {{$p.t('profilUpdate','kontaktTyp')}}*
    \n \n
    \n
    \n\n\t
    \n\t\t
    \n\t\t\t
    {{$p.t('profilUpdate','meldebestaetigung')}}*
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t
     
    \n\t\t\t\n\t\t
    \n\t
    \n\n
    \n `,\n};\n","import Adresse from \"../../ProfilComponents/Adresse.js\";\nimport Kontakt from \"../../ProfilComponents/Kontakt.js\";\n\nimport ApiProfilUpdate from '../../../../../api/factory/profilUpdate.js';\n\nexport default {\n components: {\n Adresse,\n Kontakt,\n },\n inject: [\"profilUpdateTopic\"],\n data() {\n return {\n files: null,\n };\n },\n methods: {\n getDocumentLink: function (dms_id) {\n return (\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/Cis/ProfilUpdate/show/${dms_id}`\n );\n },\n },\n computed: {\n getComponentView: function () {\n if (\n this.topic == this.profilUpdateTopic[\"Private Adressen\"] ||\n this.topic == this.profilUpdateTopic[\"Add Adresse\"] ||\n this.topic == this.profilUpdateTopic[\"Delete Adresse\"]\n ) {\n return \"Adresse\";\n } else if (\n this.topic == this.profilUpdateTopic[\"Private Kontakte\"] ||\n this.topic == this.profilUpdateTopic[\"Add Kontakt\"] ||\n this.topic == this.profilUpdateTopic[\"Delete Kontakt\"]\n ) {\n return \"Kontakt\";\n } else {\n return \"text_input\";\n }\n },\n cardHeader: function () {\n if (\n this.topic == this.profilUpdateTopic[\"Delete Addresse\"] ||\n this.topic == this.profilUpdateTopic[\"Delete Kontakt\"]\n ) {\n return \"Delete\";\n } else if (\n this.topic == this.profilUpdateTopic[\"Add Adresse\"] ||\n this.topic == this.profilUpdateTopic[\"Add Kontakt\"]\n ) {\n return \"Add\";\n } else {\n return \"Update\";\n }\n },\n },\n props: {\n data: { type: Object },\n view: { type: String },\n status: { type: String },\n status_message: { type: String },\n status_timestamp: { type: String },\n updateID: { type: Number },\n topic: { type: String },\n },\n created() {\n this.$api\n .call(ApiProfilUpdate.getProfilRequestFiles(this.updateID))\n .then((res) => {\n this.files = res.data;\n });\n },\n template: /*html*/ `\n
    \n\n
    \n
    \n
    {{$p.t('global','status')}}
    \n {{status}} \n
    \n
    \n\n
    \n
    \n
    {{$p.t('global','datum')}}
    \n {{status_timestamp}} \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    {{$p.t('profilUpdate','statusMessage')}}
    \n \n
    \n
    \n
    \n\n\n
    \n
    \n \n {{cardHeader}} \n
    \n
    \n \n \n \n
    \n
    \n\n\t
    \n\t\t
    {{$p.t('profilUpdate','nachweisdokumente')}}
    \n\t\t
    \n\t\t\t{{file.name}}\n\t\t
    \n\t
    \n `,\n};\n","import Dms from \"../../../../Form/Upload/Dms.js\";\n\nexport default {\n data() {\n return {\n dmsData: [],\n originalValue: null,\n };\n },\n components: {\n Dms,\n },\n props: {\n data: {\n type: Object,\n },\n withFiles: {\n type: Boolean,\n default: false,\n },\n files: {\n type: Array,\n },\n updateID: {\n type: Boolean,\n },\n },\n inject:[\"updateFileID\"],\n computed: {\n didFilesChange: function () {\n this.updateFileID(this.dmsData);\n let res = false;\n //? case in which the profilRequest has already associated files \n if(this.files){ \n Array.from(this.dmsData).forEach((file) => {\n if (this.files.some((f) => f.name !== file.name)) {\n res = true;\n }\n });\n return !(this.dmsData.length == this.files.length) || res;\n }\n //? case in which the user creates a new profilRequest\n else{ \n return Array.from(this.dmsData).length? true:false;\n }\n },\n didDataChange: function(){\n return JSON.stringify(this.data) !== this.originalValue;\n },\n isChanged: function () {\n if (this.withFiles) {\n if(this.updateID){\n return (this.didDataChange || this.didFilesChange) && this.dmsData.length;\n }\n return this.didDataChange && this.didFilesChange;\n }\n return this.didDataChange\n },\n },\n emits: [\"profilUpdate\"],\n watch: {\n //? watcher to trigger the event emit when a file was uploaded or removed\n dmsData(value) {\n this.emitChanges();\n },\n },\n methods: {\n stringifyFile(file) {\n\t\t\treturn JSON.stringify({\n\t\t\t\tlastModified: file.lastModified,\n\t\t\t\tlastModifiedDate: file.lastModifiedDate,\n\t\t\t\tname: file.name,\n\t\t\t\tsize: file.size,\n\t\t\t\ttype: file.type\n\t\t\t});\n\t\t},\n emitChanges: function () {\n if (this.isChanged) {\n \n this.$emit(\n \"profilUpdate\", { value: this.data.value }\n );\n } else {\n this.$emit(\"profilUpdate\", null);\n }\n },\n },\n mounted() {\n this.originalValue = JSON.stringify(Vue.toRaw(this.data));\n\n if (this.files) {\n this.dmsData = this.files;\n }\n },\n template: /*html*/`\n\n

    {{$p.t('profilUpdate','profilUpdateInformationMessage',[data.titel])}}

    \n\n
    \n
    {{data.titel?data.titel:$p.t('global','titel')}}
    \n\n \n\n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n `,\n};\n","import BsModal from './Bootstrap/Modal.js';\n\nexport default {\n\tcomponents: {\n\t\tBsModal\n\t},\n\tprops: {\n\t\ttimeout: {\n\t\t\ttype: Number,\n\t\t\tdefault: 300\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tt: null,\n\t\t\tstate: 0\n\t\t}\n\t},\n\tmethods: {\n\t\tshow() {\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 0:\n\t\t\t\t\tif (this.timeout) {\n\t\t\t\t\t\tthis.state = 1;\n\t\t\t\t\t\tthis.t = window.setTimeout(() => this.$refs.modal.show(), this.timeout);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else\n\t\t\t\t\t\treturn this.$refs.modal.show();\n\t\t\t\tcase 4:\n\t\t\t\t\treturn window.setTimeout(() => this.show(), 1);\n\t\t\t}\n\t\t},\n\t\thide() {\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn window.clearTimeout(this.t);\n\t\t\t\tcase 2:\n\t\t\t\t\treturn window.setTimeout(() => this.hide(), 1);\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.$refs.modal.hide();\n\t\t\t}\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.$refs.modal.$refs.modal.addEventListener('show.bs.modal', () => {\n\t\t\tthis.state = 2;\n\t\t});\n\t\tthis.$refs.modal.$refs.modal.addEventListener('shown.bs.modal', () => {\n\t\t\tthis.state = 3;\n\t\t});\n\t\tthis.$refs.modal.$refs.modal.addEventListener('hide.bs.modal', () => {\n\t\t\tthis.state = 4;\n\t\t});\n\t\tthis.$refs.modal.$refs.modal.addEventListener('hidden.bs.modal', () => {\n\t\t\tthis.state = 0;\n\t\t});\n\t},\n\ttemplate: `\n\t\n\t\tLoading...\n\t`\n}","import BsModal from \"../../../Bootstrap/Modal.js\";\nimport Alert from \"../../../Bootstrap/Alert.js\";\nimport EditProfilSelect from \"./EditProfilSelect.js\";\nimport Loader from \"../../../Loader.js\";\n\nimport ApiProfilUpdate from '../../../../api/factory/profilUpdate.js';\n\nexport default {\n\tcomponents: {\n\t\tBsModal,\n\t\tAlert,\n\t\tEditProfilSelect,\n\t\tLoader,\n\t},\n\tmixins: [BsModal],\n\tprops: {\n\t\tisMitarbeiter: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tvalue: Object,\n\t\ttitel: String,\n\t\tzustelladressenCount: Function,\n\t\tzustellkontakteCount: Function,\n\t\t/*\n\t\t * NOTE(chris):\n\t\t * Hack to expose in \"emits\" declared events to $props which we use\n\t\t * in the v-bind directive to forward all events.\n\t\t * @see: https://github.com/vuejs/core/issues/3432\n\t\t */\n\t\tonHideBsModal: Function,\n\t\tonHiddenBsModal: Function,\n\t\tonHidePreventedBsModal: Function,\n\t\tonShowBsModal: Function,\n\t\tonShownBsModal: Function,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\ttopic: null,\n\t\t\tprofilUpdate: null,\n\t\t\teditData: this.value,\n\t\t\tfileID: null,\n\t\t\tbreadcrumb: null,\n\t\t\tloading: false,\n\t\t\tresult: false,\n\t\t\tinfo: null,\n\t\t};\n\t},\n\tinject: [\"setLoading\"],\n\tprovide() {\n\t\treturn {\n\t\t\tupdateFileID: this.updateFileIDFunction,\n\t\t\tisMitarbeiter: this.isMitarbeiter\n\t\t};\n\t},\n\n\tmethods: {\n\t\tupdateFileIDFunction: function (newFileID) {\n\t\t\tthis.fileID = newFileID;\n\t\t},\n\n\t\thandleFailedError: function (err) {\n\t\t\tconsole.error(err);\n\t\t\tthis.loading = false;\n\t\t\tthis.setLoading(false);\n\t\t\tthis.result = false;\n\t\t\tthis.hide();\n\t\t},\n\n\t\tasync submitProfilChange() {\n\n\t\t\t//? check if data is valid before making a request\n\t\t\tif (this.topic && this.profilUpdate) {\n\t\t\t\t//? if profil update contains any attachment\n\t\t\t\tif (this.fileID) {\n\t\t\t\t\tconst fileData = await this.uploadFiles(this.fileID);\n\n\t\t\t\t\tthis.fileID = fileData ? fileData : null;\n\t\t\t\t}\n\n\t\t\t\t//? inserts new row in public.tbl_cis_profil_update\n\t\t\t\t//* calls the update api call if an update field is present in the data that was passed to the modal\n\t\t\t\tconst handleApiResponse = (res) => {\n\t\t\t\t\t//? toggles the loading to false and closes the loading modal\n\t\t\t\t\tif (res.data.error) {\n\t\t\t\t\t\tthis.result = false;\n\t\t\t\t\t\tAlert.popup(\n\t\t\t\t\t\t\t\"Ein Fehler ist aufgetreten: \" + JSON.stringify(res.data.retval)\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.result = true;\n\t\t\t\t\t\tAlert.popup(\n\t\t\t\t\t\t\t\"Ihre Anfrage wurde erfolgreich gesendet. Bitte warten Sie, während sich das Team um Ihre Anfrage kümmert.\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t//* v-show on EditProfil modal binded to this.loading\n\t\t\t\t//? hides the EditProfil modal and shows the loading modal by calling a callback that was passed as prop from the parent component\n\t\t\t\tthis.loading = true;\n\t\t\t\tthis.setLoading(true);\n\n\t\t\t\t//? if an updateID is present, updateProfilRequest is called, else insertProfilRequest is called\n\t\t\t\tthis.editData.updateID ?\n\t\t\t\t\tthis.$api\n\t\t\t\t\t\t.call(ApiProfilUpdate.updateProfilRequest(\n\t\t\t\t\t\t\tthis.topic,\n\t\t\t\t\t\t\tthis.profilUpdate,\n\t\t\t\t\t\t\tthis.editData.updateID,\n\t\t\t\t\t\t\tthis.fileID ? this.fileID[0] : null\n\t\t\t\t\t\t))\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\thandleApiResponse(res);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((err) => this.$fhcAlert.handleSystemError)\n\t\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\t\tthis.loading = false;\n\t\t\t\t\t\t\tthis.setLoading(false);\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t\t})\n\t\t\t\t\t:\n\t\t\t\t\tthis.$api\n\t\t\t\t\t\t.call(ApiProfilUpdate.insertProfilRequest(\n\t\t\t\t\t\t\tthis.topic,\n\t\t\t\t\t\t\tthis.profilUpdate,\n\t\t\t\t\t\t\tthis.fileID ? this.fileID[0] : null\n\t\t\t\t\t\t))\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\thandleApiResponse(res);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((err) => this.$fhcAlert.handleSystemError)\n\t\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\t\tthis.loading = false;\n\t\t\t\t\t\t\tthis.setLoading(false);\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\tuploadFiles: async function (files) {\n\t\t\tif (files[0].type !== \"application/x.fhc-dms+json\") {\n\t\t\t\tlet formData = new FormData();\n\t\t\t\tformData.append(\"files[]\", files[0]);\n\t\t\t\tconst result = this.editData.updateID\n\t\t\t\t\t? //? updating old attachment by replacing\n\t\t\t\t\t //* second parameter of api request insertFile checks if the file has to be replaced or not\n\t\t\t\t\tawait this.$api\n\t\t\t\t\t\t.call(ApiProfilUpdate.insertFile(\n\t\t\t\t\t\t\tformData,\n\t\t\t\t\t\t\tthis.editData.updateID\n\t\t\t\t\t\t))\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\treturn res.data?.map((file) => file.dms_id);\n\t\t\t\t\t\t})\n\t\t\t\t\t: //? fresh insert of new attachment\n\t\t\t\t\tawait this.$api\n\t\t\t\t\t\t.call(ApiProfilUpdate.insertFile(formData))\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\treturn res.data?.map((file) => file.dms_id);\n\t\t\t\t\t\t});\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\t//? attachment hasn't been replaced\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\tshowFooter: function () {\n\t\t\tswitch (this.value.view) {\n\t\t\t\tcase 'Status':\n\t\t\t\t\treturn false;\n\t\t\t\tcase 'Kontakt':\n\t\t\t\t\treturn false;\n\t\t\t\tcase 'Adresse':\n\t\t\t\t\treturn false;\n\t\t\t\tdefault:\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t},\n\tcreated() {\n\t\tif (this.editData.topic) {\n\t\t\t//? if the topic was passed through the prop add it to the component\n\t\t\tthis.topic = this.editData.topic;\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.modal = this.$refs.modalContainer.modal;\n\t},\n\tpopup(options) {\n\t\tBsModal.popup.bind(this);\n\t\treturn BsModal.popup(null, options);\n\t},\n\ttemplate: /*html*/ `\n\n\t\n\t\n\t\n\t\n \n`,\n};\n","import EditProfil from \"../ProfilModal/EditProfil.js\";\n\nimport ApiProfil from '../../../../api/factory/profil.js';\nimport ApiProfilUpdate from '../../../../api/factory/profilUpdate.js';\n\n//? EditProfil is the modal used to edit the profil updates\nexport default {\n\tcomponents: {EditProfil},\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\n\tinject: [\n\t\t\"getZustellkontakteCount\",\n\t\t\"getZustelladressenCount\",\n\t\t\"profilUpdateStates\",\n\t\t\"profilUpdateTopic\",\n\t],\n\n\temits: [\"fetchUpdates\"],\n\n\tdata() {\n\t\treturn {\n\t\t\tshowUpdateModal: false,\n\t\t\tcontent: null,\n\t\t\teditProfilTitle: this.$p.t(\"profil\", \"profilBearbeiten\"),\n\t\t};\n\t},\n\n\tmethods: {\n\t\thideEditProfilModal: function () {\n\t\t\t//? checks the editModal component property result, if the user made a successful request or not\n\t\t\tif (this.$refs.updateEditModal.result) {\n\t\t\t\tthis.$emit(\"fetchUpdates\");\n\t\t\t} else {\n\t\t\t\t// when modal was closed without submitting request\n\t\t\t}\n\t\t\tthis.showUpdateModal = false;\n\t\t},\n\n\t\tasync showEditProfilModal(updateRequest) {\n\n\t\t\tlet view = this.getView(updateRequest.topic, updateRequest.status);\n\n\t\t\tlet data = null;\n\t\t\tlet content = null;\n\t\t\tlet files = null;\n\t\t\tlet withFiles = false;\n\n\t\t\tif (view === \"TextInputDokument\") {\n\t\t\t\tdata = {\n\t\t\t\t\ttitel: updateRequest.topic,\n\t\t\t\t\tvalue: updateRequest.requested_change.value,\n\t\t\t\t};\n\n\t\t\t\tconst filesFromDatabase =\n\t\t\t\t\tawait this.$api\n\t\t\t\t\t\t.call(ApiProfilUpdate.getProfilRequestFiles(\n\t\t\t\t\t\t\tupdateRequest.profil_update_id\n\t\t\t\t\t\t))\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\treturn res.data;\n\t\t\t\t\t\t});\n\n\t\t\t\tfiles = filesFromDatabase;\n\t\t\t\tif (files) {\n\t\t\t\t\twithFiles = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdata = updateRequest.requested_change;\n\t\t\t}\n\n\t\t\tcontent = {\n\t\t\t\tupdateID: updateRequest.profil_update_id,\n\t\t\t\tview: view,\n\t\t\t\tdata: data,\n\t\t\t\twithFiles: withFiles,\n\t\t\t\ttopic: updateRequest.topic,\n\t\t\t\tfiles: files,\n\t\t\t};\n\n\t\t\tif (view === \"EditAdresse\") {\n\n\t\t\t\tconst isMitarbeiter = await this.$api.call(ApiProfil.isMitarbeiter(updateRequest.uid)).then((res) => res.data);\n\n\t\t\t\tif (isMitarbeiter) {\n\t\t\t\t\tcontent[\"isMitarbeiter\"] = isMitarbeiter;\n\t\t\t\t}\n\n\t\t\t\tconst filesFromDatabase =\n\t\t\t\t\tawait this.$api\n\t\t\t\t\t\t.call(ApiProfilUpdate.getProfilRequestFiles(\n\t\t\t\t\t\t\tupdateRequest.profil_update_id\n\t\t\t\t\t\t))\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\treturn res.data;\n\t\t\t\t\t\t});\n\n\t\t\t\tfiles = filesFromDatabase;\n\t\t\t\tcontent[\"files\"] = files;\n\t\t\t}\n\n\t\t\t//? adds the status information if the profil update request was rejected or accepted\n\t\t\tif (updateRequest.status !== this.profilUpdateStates[\"Pending\"]) {\n\t\t\t\tcontent[\"status\"] = updateRequest.status;\n\t\t\t\tcontent[\"status_message\"] = updateRequest.status_message;\n\t\t\t\tcontent[\"status_timestamp\"] = updateRequest.status_timestamp;\n\t\t\t}\n\n\t\t\t//? update data of the reactive content\n\t\t\tthis.content = content;\n\t\t\tthis.editProfilTitle = updateRequest.topic;\n\n\t\t\t//? only show the popup if also the right content is available\n\t\t\tif (content) {\n\t\t\t\tthis.showUpdateModal = true;\n\t\t\t\t// after a state change, wait for the DOM updates to complete\n\t\t\t\tVue.nextTick(() => {\n\t\t\t\t\tthis.$refs.updateEditModal.show();\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\tdeleteRequest: function (item) {\n\t\t\tthis.$api\n\t\t\t\t.call(ApiProfilUpdate.deleteProfilRequest(item.profil_update_id))\n\t\t\t\t.then((res) => {\n\t\t\t\t\tif (res.data.error) {\n\t\t\t\t\t\t//? open alert\n\t\t\t\t\t\tconsole.error(\"error happened\", res.data);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.$emit(\"fetchUpdates\");\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\n\t\tgetView: function (topic, status) {\n\t\t\tif (!(status === this.profilUpdateStates[\"Pending\"])) {\n\t\t\t\treturn \"Status\";\n\t\t\t}\n\n\t\t\tswitch (topic) {\n\t\t\t\tcase this.profilUpdateTopic[\"Private Kontakte\"]:\n\t\t\t\t\treturn \"EditKontakt\";\n\t\t\t\tcase this.profilUpdateTopic[\"Add Kontakt\"]:\n\t\t\t\t\treturn \"EditKontakt\";\n\t\t\t\tcase this.profilUpdateTopic[\"Delete Kontakt\"]:\n\t\t\t\t\treturn \"Kontakt\";\n\t\t\t\tcase this.profilUpdateTopic[\"Private Adressen\"]:\n\t\t\t\t\treturn \"EditAdresse\";\n\t\t\t\tcase this.profilUpdateTopic[\"Add Adresse\"]:\n\t\t\t\t\treturn \"EditAdresse\";\n\t\t\t\tcase this.profilUpdateTopic[\"Delete Adresse\"]:\n\t\t\t\t\treturn \"Adresse\";\n\t\t\t\tdefault:\n\t\t\t\t\treturn \"TextInputDokument\";\n\t\t\t}\n\t\t},\n\n\t},\n\tcreated() {\n\t},\n\n\tcomputed: {},\n\n\ttemplate: /*html*/ `\n
    \n \n
    {{$p.t('profilUpdate','profilUpdates')}}
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {{$p.t('profilUpdate','topic')}}{{$p.t('global','status')}}{{$p.t('global','datum')}}{{$p.t('ui','aktion')}}
    {{item.topic}}{{item.status}}{{item.status_timestamp?item.status_timestamp:item.insertamum}}
    \n
    \n
    \n
    \n`,\n};\n","if (!primevue) {\n\tconsole.error('PrimeVue not loaded!');\n}\n\n// NOTE(chris): Click on clear button gives an error. This is a bug in primevue => fixed in current version\nTabulator.extendModule('filter', 'filters', {\n\t\"dates\": (headerValue, rowValue) => {\n\t\tif (!headerValue)\n\t\t\treturn true;\n\n\t\tlet rowDate = new Date(rowValue);\n\n\t\tif (Array.isArray(headerValue))\n\t\t{\n\t\t\tlet startDate = new Date(headerValue[0]);\n\t\t\tif (headerValue[1])\n\t\t\t{\n\t\t\t\tlet endDate = new Date(headerValue[1]);\n\n\t\t\t\tendDate.setHours(23, 59, 59, 999);\n\n\t\t\t\treturn rowDate >= startDate && rowDate <= endDate;\n\t\t\t}\n\n\t\t\treturn rowDate.toDateString() === startDate.toDateString();\n\t\t}\n\t\tlet singleDate = new Date(headerValue);\n\t\treturn rowDate.toDateString() === singleDate.toDateString();\n\t}\n});\n\nfunction dateFilter(cell, onRendered, success) {\n\tlet div = document.createElement('div');\n\n\tlet initialValue = null;\n\n\tlet val = cell.getValue();\n\n\tif (Array.isArray(val))\n\t{\n\t\tconst start = val[0] ? new Date(val[0]) : null;\n\t\tconst end = val[1] ? new Date(val[1]) : null;\n\t\tinitialValue = [start, end];\n\t}\n\n\tVue.createApp({\n\t\tcomponents: {\n\t\t\tPrimevueCalendar: primevue.calendar\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tval: initialValue\n\t\t\t}\n\t\t},\n\t\twatch: {\n\t\t\tval(n) {\n\t\t\t\tsuccess(n);\n\t\t\t}\n\t\t},\n\t\ttemplate: `\n\t\t\t\t `\n\t}).use(primevue.config.default).mount(div);\n\n\treturn div;\n}\nexport { dateFilter };","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport Mailverteiler from \"./ProfilComponents/Mailverteiler.js\";\nimport AusweisStatus from \"./ProfilComponents/FhAusweisStatus.js\";\nimport QuickLinks from \"./ProfilComponents/QuickLinks.js\";\nimport Adresse from \"./ProfilComponents/Adresse.js\";\nimport Kontakt from \"./ProfilComponents/Kontakt.js\";\nimport ProfilEmails from \"./ProfilComponents/ProfilEmails.js\";\nimport RoleInformation from \"./ProfilComponents/RoleInformation.js\";\nimport ProfilInformation from \"./ProfilComponents/ProfilInformation.js\";\nimport FetchProfilUpdates from \"./ProfilComponents/FetchProfilUpdates.js\";\nimport EditProfil from \"./ProfilModal/EditProfil.js\";\n\nimport ApiProfilUpdate from '../../../api/factory/profilUpdate.js';\nimport { dateFilter } from '../../../tabulator/filters/Dates.js';\n\nexport default {\n\tcomponents: {\n\t\tCoreFilterCmpt,\n\t\tMailverteiler,\n\t\tAusweisStatus,\n\t\tQuickLinks,\n\t\tAdresse,\n\t\tKontakt,\n\t\tProfilEmails,\n\t\tRoleInformation,\n\t\tProfilInformation,\n\t\tFetchProfilUpdates,\n\t\tEditProfil,\n\t},\n\tinject: [\"sortProfilUpdates\", \"collapseFunction\", \"language\",\"isEditable\"],\n\tdata() {\n\t\treturn {\n\t\t\tshowModal: false,\n\t\t\tcollapseIconBetriebsmittel: true,\n\t\t\teditDataFilter: null,\n\t\t\tpreloadedPhrasen:{},\n\t\t\t// tabulator options\n\t\t\tzutrittsgruppen_table_options: {\n\t\t\t\tpersistenceID: \"filterTableStudentProfilZutrittsgruppen\",\n\t\t\t\tpersistence: {\n\t\t\t\t\tcolumns: false\n\t\t\t\t},\n\t\t\t\tminHeight: 200,\n\t\t\t\tlayout: \"fitColumns\",\n\t\t\t\tcolumns: [{\n\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.zutrittsGruppenPhrase),\n\t\t\t\t\tfield: \"bezeichnung\"\n\t\t\t\t}],\n\t\t\t},\n\t\t\tbetriebsmittel_table_options: {\n\t\t\t\tpersistenceID: \"filterTableStudentProfilBetriebsmittel\",\n\t\t\t\tpersistence: {\n\t\t\t\t\tcolumns: false\n\t\t\t\t},\n\t\t\t\tminHeight: 300,\n\t\t\t\tlayout: \"fitColumns\",\n\t\t\t\tresponsiveLayout: \"collapse\",\n\t\t\t\tresponsiveLayoutCollapseUseFormatters: false,\n\t\t\t\tresponsiveLayoutCollapseFormatter: Vue.$collapseFormatter,\n\t\t\t\tcolumns: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\tfield: \"collapse\",\n\t\t\t\t\t\theaderSort: false,\n\t\t\t\t\t\theaderFilter: false,\n\t\t\t\t\t\tformatter: \"responsiveCollapse\",\n\t\t\t\t\t\tmaxWidth: 40,\n\t\t\t\t\t\theaderClick: this.collapseFunction,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(()=>this.preloadedPhrasen.entlehnteBetriebsmittelPhrase),\n\t\t\t\t\t\tfield: \"betriebsmittel\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() =>this.preloadedPhrasen.inventarnummerPhrase) ,\n\t\t\t\t\t\tfield: \"Nummer\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() =>this.preloadedPhrasen.ausgabedatum) ,\n\t\t\t\t\t\tfield: \"Ausgegeben_am\",\n\t\t\t\t\t\theaderFilterFunc: 'dates',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true,\n\t\t\t\t\t\tformatter:\"datetime\",\n\t\t\t\t\t\tformatterParams: this.datetimeFormatterParams()\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t};\n\t},\n\n\tprops: {\n\t\tdata: Object,\n\t\teditData: Object,\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tstudiengang_kz: Vue.computed({ get: () => this.data.studiengang_kz }),\n\t\t}\n\t},\n\tmethods: {\n\n\t\tbetriebsmittelTableBuilt: function () {\n\t\t\tthis.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns)\n\t\t\tthis.$refs.betriebsmittelTable.tabulator.setData(this.data.mittel);\n\t\t},\n\t\tzutrittsgruppenTableBuilt: function () {\n\t\t\tthis.$refs.zutrittsgruppenTable.tabulator.setColumns(this.zutrittsgruppen_table_options.columns)\n\t\t\tthis.$refs.zutrittsgruppenTable.tabulator.setData(\n\t\t\t\tthis.data.zuttritsgruppen\n\t\t\t);\n\t\t},\n\t\tfetchProfilUpdates: function () {\n\t\t\tthis.$api\n\t\t\t\t.call(ApiProfilUpdate.selectProfilRequest())\n\t\t\t\t.then((res) => {\n\t\t\t\t\tif (!res.error && res) {\n\t\t\t\t\t\tthis.data.profilUpdates = res.data?.length\n\t\t\t\t\t\t\t? res.data.sort(this.sortProfilUpdates)\n\t\t\t\t\t\t\t: null;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\n\t\thideEditProfilModal: function () {\n\t\t\t//? checks the editModal component property result, if the user made a successful request or not\n\t\t\tif (this.$refs.editModal.result) {\n\t\t\t\tthis.$api\n\t\t\t\t\t.call(ApiProfilUpdate.selectProfilRequest())\n\t\t\t\t\t.then((request) => {\n\t\t\t\t\t\tif (!request.error && request.data) {\n\t\t\t\t\t\t\tthis.data.profilUpdates = request.data;\n\t\t\t\t\t\t\tthis.data.profilUpdates.sort(this.sortProfilUpdates);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.error(\"Error when fetching profile updates: \" + request);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\tconsole.error(err);\n\t\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// when modal was closed without submitting request\n\t\t\t}\n\t\t\tthis.showModal = false;\n\t\t\tthis.editDataFilter = null;\n\t\t},\n\n\t\tshowEditProfilModal(view) {\n\t\t\tif (view) {\n\t\t\t\tthis.editDataFilter = view;\n\t\t\t}\n\t\t\tthis.showModal = true;\n\t\t\t// after a state change, wait for the DOM updates to complete\n\t\t\tVue.nextTick(() => {\n\t\t\t\tthis.$refs.editModal.show();\n\t\t\t});\n\t\t},\n\t\tdatetimeFormatterParams: function() {\n\t\t\tconst params = {\n\t\t\t\tinputFormat:\"yyyy-MM-dd\",\n\t\t\t\toutputFormat:\"dd.MM.yyyy\",\n\t\t\t\tinvalidPlaceholder:\"(invalid date)\",\n\t\t\t\ttimezone:FHC_JS_DATA_STORAGE_OBJECT.timezone\n\t\t\t};\n\t\t\treturn params;\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t\n\t\tfotoStatus() {\n\t\t\treturn this.data?.fotoStatus ?? null;\n\t\t},\n\n\t\tfilteredEditData() {\n\t\t\treturn this.editDataFilter\n\t\t\t\t? this.editData.data[this.editDataFilter]\n\t\t\t\t: this.editData;\n\t\t},\n\n\t\tprofilInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tVorname: this.data.vorname,\n\t\t\t\tNachname: this.data.nachname,\n\t\t\t\tUsername: this.data.username,\n\t\t\t\tAnrede: this.data.anrede,\n\t\t\t\tTitel: this.data.titel,\n\t\t\t\tPostnomen: this.data.postnomen,\n\t\t\t\tfoto_sperre: this.data.foto_sperre,\n\t\t\t\tfoto: this.data.foto,\n\t\t\t};\n\t\t},\n\n\t\troleInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tgeburtsdatum: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsdatum')}`,\n\t\t\t\t\tvalue: this.data.gebdatum\n\t\t\t\t},\n\t\t\t\tgeburtsort: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsort')}`,\n\t\t\t\t\tvalue: this.data.gebort\n\t\t\t\t},\n\t\t\t\tpersonenkennzeichen: {\n\t\t\t\t\tlabel: `${this.$p.t('person','personenkennzeichen')}`,\n\t\t\t\t\tvalue: this.data.personenkennzeichen\n\t\t\t\t},\n\t\t\t\tstudiengang: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','studiengang')}`,\n\t\t\t\t\tvalue: this.data.studiengang\n\t\t\t\t},\n\t\t\t\tsemester: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','semester')}`,\n\t\t\t\t\tvalue: this.data.semester\n\t\t\t\t},\n\t\t\t\tverband: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','lehrverband')}`,\n\t\t\t\t\tvalue: this.data.verband\n\t\t\t\t},\n\t\t\t\tgruppe: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','gruppe')}`,\n\t\t\t\t\tvalue: this.data.gruppe.trim()\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t},\n\tcreated() {\n\t\t// preload phrasen\n\t\tthis.$p.loadCategory('profil').then(() => {\n\t\t\tthis.preloadedPhrasen.zutrittsGruppenPhrase = this.$p.t('profil/zutrittsGruppen');\n\t\t\tthis.preloadedPhrasen.entlehnteBetriebsmittelPhrase = this.$p.t('profil/entlehnteBetriebsmittel');\n\t\t\tthis.preloadedPhrasen.inventarnummerPhrase = this.$p.t('profil/inventarnummer');\n\t\t\tthis.preloadedPhrasen.ausgabedatum = this.$p.t('profil/ausgabedatum');\n\t\t\tthis.preloadedPhrasen.loaded = true;\n\t\t});\n\t\t//? sorts the profil Updates: pending -> accepted -> rejected\n\t\tthis.data.profilUpdates?.sort(this.sortProfilUpdates);\n\t},\n\twatch: {\n\t\t'language.value'(newVal) {\n\t\t\tif(this.$refs.betriebsmittelTable) this.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns)\n\t\t\tif(this.$refs.zutrittsgruppenTable) this.$refs.zutrittsgruppenTable.tabulator.setColumns(this.zutrittsgruppen_table_options.columns)\n\t\t}\n\t},\n\ttemplate: /*html*/ `\n
    \n \n \n
    \n \n
    \n \n\n\t\t\t\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\n\n\t\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t{{$p.t('profil','privateKontakte')}}\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t{{$p.t('profil','privateAdressen')}}\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\n\t\t
    \n\t\t\n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n \n
    \n \n
    \n \n
    \n\n
    \n`,\n};\n","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport EditProfil from \"./ProfilModal/EditProfil.js\";\nimport Adresse from \"./ProfilComponents/Adresse.js\";\nimport Kontakt from \"./ProfilComponents/Kontakt.js\";\nimport FetchProfilUpdates from \"./ProfilComponents/FetchProfilUpdates.js\";\nimport Mailverteiler from \"./ProfilComponents/Mailverteiler.js\";\nimport AusweisStatus from \"./ProfilComponents/FhAusweisStatus.js\";\nimport QuickLinks from \"./ProfilComponents/QuickLinks.js\";\nimport ProfilEmails from \"./ProfilComponents/ProfilEmails.js\";\nimport RoleInformation from \"./ProfilComponents/RoleInformation.js\";\nimport ProfilInformation from \"./ProfilComponents/ProfilInformation.js\";\n\nimport ApiProfilUpdate from '../../../api/factory/profilUpdate.js';\nimport { dateFilter } from '../../../tabulator/filters/Dates.js';\n\nexport default {\n\tcomponents: {\n\t\tCoreFilterCmpt,\n\t\tEditProfil,\n\t\tAdresse,\n\t\tKontakt,\n\t\tFetchProfilUpdates,\n\t\tAusweisStatus,\n\t\tMailverteiler,\n\t\tQuickLinks,\n\t\tProfilEmails,\n\t\tRoleInformation,\n\t\tProfilInformation,\n\t},\n\n\tinject: [\"sortProfilUpdates\", \"collapseFunction\", \"language\",\"isEditable\"],\n\n\tdata() {\n\t\treturn {\n\t\t\tshowModal: false,\n\t\t\teditDataFilter: null,\n\t\t\tpreloadedPhrasen:{},\n\t\t\t// tabulator options\n\t\t\tfunktionen_table_options: {\n\t\t\t\tpersistenceID: \"filterTableMaProfilFunktionen\",\n\t\t\t\tpersistence: {\n\t\t\t\t\tcolumns: false\n\t\t\t\t},\n\t\t\t\tminHeight: 300,\n\t\t\t\tlayout: \"fitColumns\",\n\t\t\t\tresponsiveLayout: \"collapse\",\n\t\t\t\tresponsiveLayoutCollapseUseFormatters: false,\n\t\t\t\tresponsiveLayoutCollapseFormatter: Vue.$collapseFormatter,\n\t\t\t\tcolumns: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\tfield: \"collapse\",\n\t\t\t\t\t\theaderSort: false,\n\t\t\t\t\t\theaderFilter: false,\n\t\t\t\t\t\tformatter: \"responsiveCollapse\",\n\t\t\t\t\t\tmaxWidth: 40,\n\t\t\t\t\t\theaderClick: this.collapseFunction,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.bezeichnungPhrase),\n\t\t\t\t\t\tfield: \"Bezeichnung\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.organisationseinheitPhrase),\n\t\t\t\t\t\tfield: \"Organisationseinheit\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.gueltigVonPhrase),\n\t\t\t\t\t\tfield: \"Gültig_von\",\n\t\t\t\t\t\theaderFilterFunc: 'dates',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true,\n\t\t\t\t\t\tformatter:\"datetime\",\n\t\t\t\t\t\tformatterParams: this.datetimeFormatterParams()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.gueltigBisPhrase),\n\t\t\t\t\t\tfield: \"Gültig_bis\",\n\t\t\t\t\t\theaderFilterFunc: 'dates',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true,\n\t\t\t\t\t\tformatter:\"datetime\",\n\t\t\t\t\t\tformatterParams: this.datetimeFormatterParams()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.wochenstundenPhrase),\n\t\t\t\t\t\tfield: \"Wochenstunden\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\n\t\t\tbetriebsmittel_table_options: {\n\t\t\t\tpersistenceID: \"filterTableMaProfilBetriebsmittel\",\n\t\t\t\tpersistence: {\n\t\t\t\t\tcolumns: false\n\t\t\t\t},\n\t\t\t\tminHeight: 300,\n\t\t\t\tlayout: \"fitColumns\",\n\t\t\t\tresponsiveLayout: \"collapse\",\n\t\t\t\tresponsiveLayoutCollapseUseFormatters: false,\n\t\t\t\tresponsiveLayoutCollapseFormatter: Vue.$collapseFormatter,\n\t\t\t\tdata: [{betriebsmittel: \"\", Nummer: \"\", Ausgegeben_am: \"\"}],\n\t\t\t\tcolumns: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\tfield: \"collapse\",\n\t\t\t\t\t\theaderSort: false,\n\t\t\t\t\t\theaderFilter: false,\n\t\t\t\t\t\tformatter: \"responsiveCollapse\",\n\t\t\t\t\t\tmaxWidth: 40,\n\t\t\t\t\t\theaderClick: this.collapseFunction,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.entlehnteBetriebsmittelPhrase),\n\t\t\t\t\t\tfield: \"betriebsmittel\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.inventarnummerPhrase),\n\t\t\t\t\t\tfield: \"Nummer\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.ausgabedatumPhrase),\n\t\t\t\t\t\tfield: \"Ausgegeben_am\",\n\t\t\t\t\t\theaderFilterFunc: 'dates',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true,\n\t\t\t\t\t\tformatter:\"datetime\",\n\t\t\t\t\t\tformatterParams: this.datetimeFormatterParams()\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}\n\t\t};\n\t},\n\n\tprops: {\n\t\tdata: Object,\n\t\teditData: Object,\n\t},\n\t\n\tmethods: {\n\t\tbetriebsmittelTableBuilt: function () {\n\t\t\tthis.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns)\n\t\t\tthis.$refs.betriebsmittelTable.tabulator.setData(this.data.mittel);\n\t\t},\n\t\tfunktionenTableBuilt: function () {\n\t\t\tthis.$refs.funktionenTable.tabulator.setColumns(this.funktionen_table_options.columns)\n\t\t\tthis.$refs.funktionenTable.tabulator.setData(this.data.funktionen);\n\t\t},\n\t\thideEditProfilModal: function () {\n\t\t\t//? checks the editModal component property result, if the user made a successful request or not\n\t\t\tif (this.$refs.editModal.result) {\n\t\t\t\tthis.$api\n\t\t\t\t\t.call(ApiProfilUpdate.selectProfilRequest())\n\t\t\t\t\t.then((request) => {\n\t\t\t\t\t\tif (!request.error && request.data) {\n\t\t\t\t\t\t\tthis.data.profilUpdates = request.data;\n\t\t\t\t\t\t\tthis.data.profilUpdates.sort(this.sortProfilUpdates);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.error(\"Error when fetching profile updates: \" + request);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\tconsole.error(err);\n\t\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// when modal was closed without submitting request\n\t\t\t}\n\t\t\tthis.showModal = false;\n\t\t\tthis.editDataFilter = null;\n\t\t},\n\n\t\tshowEditProfilModal(view) {\n\t\t\tif (view) {\n\t\t\t\tthis.editDataFilter = view;\n\t\t\t}\n\n\t\t\tthis.showModal = true;\n\t\t\tVue.nextTick(() => {\n\t\t\t\tthis.$refs.editModal.show();\n\t\t\t});\n\n\t\t\t// after a state change, wait for the DOM updates to complete\n\t\t},\n\n\t\tfetchProfilUpdates: function () {\n\t\t\tthis.$api\n\t\t\t\t.call(ApiProfilUpdate.selectProfilRequest())\n\t\t\t\t.then((res) => {\n\t\t\t\t\tif (!res.error && res) {\n\t\t\t\t\t\tthis.data.profilUpdates = res.data?.length\n\t\t\t\t\t\t\t? res.data.sort(this.sortProfilUpdates)\n\t\t\t\t\t\t\t: null;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tsetTableColumnTitles() { // reevaluates computed phrasen\n\t\t\tif(this.$refs.betriebsmittelTable) this.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns)\n\t\t\tif(this.$refs.funktionenTable) this.$refs.funktionenTable.tabulator.setColumns(this.funktionen_table_options.columns)\n\t\t},\n\t\tdatetimeFormatterParams: function() {\n\t\t\tconst params = {\n\t\t\t\tinputFormat:\"yyyy-MM-dd\",\n\t\t\t\toutputFormat:\"dd.MM.yyyy\",\n\t\t\t\tinvalidPlaceholder:\"(invalid date)\",\n\t\t\t\ttimezone:FHC_JS_DATA_STORAGE_OBJECT.timezone\n\t\t\t};\n\t\t\treturn params;\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tfotoStatus() {\n\t\t\treturn this.data?.fotoStatus ?? null;\n\t\t},\n\t\tgetTelefonValue() {\n\t\t\tif(this.data.standort_telefon?.kontakt) {\n\t\t\t\treturn this.data.standort_telefon.kontakt + \" \" + this.data.telefonklappe\n\t\t\t} else if(this.data.standort_telefon) {\n\t\t\t\treturn this.data.standort_telefon + \" \" + this.data.telefonklappe\n\t\t\t} else {\n\t\t\t\treturn this.data.telefonklappe\n\t\t\t}\n\t\t},\n\t\tfilteredEditData() {\n\t\t\treturn this.editDataFilter\n\t\t\t\t? this.editData.data[this.editDataFilter]\n\t\t\t\t: this.editData;\n\t\t},\n\t\tprofilInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tVorname: this.data.vorname,\n\t\t\t\tNachname: this.data.nachname,\n\t\t\t\tUsername: this.data.username,\n\t\t\t\tAnrede: this.data.anrede,\n\t\t\t\tTitel: this.data.titel,\n\t\t\t\tPostnomen: this.data.postnomen,\n\t\t\t\tfoto_sperre: this.data.foto_sperre,\n\t\t\t\tfoto: this.data.foto,\n\t\t\t};\n\t\t},\n\n\t\troleInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tgeburtsdatum: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsdatum')}`,\n\t\t\t\t\tvalue: this.data.gebdatum\n\t\t\t\t},\n\t\t\t\tgeburtsort: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsort')}`,\n\t\t\t\t\tvalue: this.data.gebort\n\t\t\t\t},\n\t\t\t\tpersonenkennzeichen: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Kurzzeichen')}`,\n\t\t\t\t\tvalue: this.data.kurzbz\n\t\t\t\t},\n\t\t\t\ttelefon: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Telefon')}`,\n\t\t\t\t\tvalue: this.getTelefonValue\n\t\t\t\t},\n\t\t\t\toffice: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Büro')}`,\n\t\t\t\t\tvalue: this.data.ort_kurzbz\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t},\n\n\tcreated() {\n\t\t// preload phrasen\n\t\tthis.$p.loadCategory([\"ui\",\"lehre\",\"global\",\"profil\"]).then(() => {\n\t\t\tthis.preloadedPhrasen.bezeichnungPhrase = this.$p.t('ui/bezeichnung');\n\t\t\tthis.preloadedPhrasen.organisationseinheitPhrase = this.$p.t('lehre/organisationseinheit');\n\t\t\tthis.preloadedPhrasen.gueltigVonPhrase = this.$p.t('global/gueltigVon');\n\t\t\tthis.preloadedPhrasen.gueltigBisPhrase = this.$p.t('global/gueltigBis');\n\t\t\tthis.preloadedPhrasen.wochenstundenPhrase = this.$p.t('profil/wochenstunden');\n\t\t\tthis.preloadedPhrasen.entlehnteBetriebsmittelPhrase = this.$p.t('profil/entlehnteBetriebsmittel');\n\t\t\tthis.preloadedPhrasen.inventarnummerPhrase = this.$p.t('profil/inventarnummer');\n\t\t\tthis.preloadedPhrasen.ausgabedatumPhrase = this.$p.t('profil/ausgabedatum');\n\t\t\tthis.preloadedPhrasen.loaded=true;\n\t\t});\n\t\t//? sorts the profil Updates: pending -> accepted -> rejected\n\t\tthis.data.profilUpdates?.sort(this.sortProfilUpdates);\n\n\t},\n\twatch: {\n\t\t'data.funktionen'(newVal) {\n\t\t\tif(this.$refs.funktionenTable) this.$refs.funktionenTable.tabulator.setData(newVal);\n\t\t},\n\t\t'data.mittel'(newVal) {\n\t\t\tif(this.$refs.betriebsmittelTable) this.$refs.betriebsmittelTable.tabulator.setData(newVal);\n\t\t},\n\t\t'language.value'(newVal) {\n\t\t\tthis.setTableColumnTitles()\n\t\t}\n\t},\n\ttemplate: /*html*/ `\n
    \n \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n \n \n
    \n \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n {{$p.t('profil','privateKontakte')}}\n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n {{$p.t('profil','privateAdressen')}}\n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n \n
    \n \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n\n \n `,\n};\n","import QuickLinks from \"./ProfilComponents/QuickLinks.js\";\nimport Mailverteiler from \"./ProfilComponents/Mailverteiler.js\";\nimport ProfilEmails from \"./ProfilComponents/ProfilEmails.js\";\nimport RoleInformation from \"./ProfilComponents/RoleInformation.js\";\nimport ProfilInformation from \"./ProfilComponents/ProfilInformation.js\";\n\nexport default {\n\tdata() {\n\t\treturn {};\n\t},\n\tcomponents: {\n\t\tQuickLinks,\n\t\tMailverteiler,\n\t\tProfilEmails,\n\t\tRoleInformation,\n\t\tProfilInformation,\n\t},\n\n\tprops: [\"data\"],\n\tprovide() {\n\t\treturn {\n\t\t\tstudiengang_kz: Vue.computed({ get: () => this.data.studiengang_kz }),\n\t\t}\n\t},\n\t\n\tmethods: {},\n\n\tcomputed: {\n\t\tfotoStatus() {\n\t\t\treturn this.data?.fotoStatus ?? null;\n\t\t},\n\t\tprofilInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tVorname: this.data.vorname,\n\t\t\t\tNachname: this.data.nachname,\n\t\t\t\tUsername: this.data.username,\n\t\t\t\tAnrede: this.data.anrede,\n\t\t\t\tTitel: this.data.titel,\n\t\t\t\tPostnomen: this.data.postnomen,\n\t\t\t\tfoto_sperre: this.data.foto_sperre,\n\t\t\t\tfoto: this.data.foto,\n\t\t\t};\n\t\t},\n\n\t\tpersonEmails() {\n\t\t\treturn this.data?.emails ? this.data.emails : [];\n\t\t},\n\n\t\troleInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\n\t\t\treturn {\n\t\t\t\tgeburtsdatum: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsdatum')}`,\n\t\t\t\t\tvalue: this.data.gebdatum\n\t\t\t\t},\n\t\t\t\tgeburtsort: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsort')}`,\n\t\t\t\t\tvalue: this.data.gebort\n\t\t\t\t},\n\t\t\t\tpersonenkennzeichen: {\n\t\t\t\t\tlabel: `${this.$p.t('person','personenkennzeichen')}`,\n\t\t\t\t\tvalue: this.data.personenkennzeichen\n\t\t\t\t},\n\t\t\t\tstudiengang: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','studiengang')}`,\n\t\t\t\t\tvalue: this.data.studiengang\n\t\t\t\t},\n\t\t\t\tsemester: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','semester')}`,\n\t\t\t\t\tvalue: this.data.semester\n\t\t\t\t},\n\t\t\t\tverband: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','lehrverband')}`,\n\t\t\t\t\tvalue: this.data.verband\n\t\t\t\t},\n\t\t\t\tgruppe: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','gruppe')}`,\n\t\t\t\t\tvalue: this.data.gruppe.trim()\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t},\n\n\tmounted() {\n\t},\n\n\ttemplate: /*html*/ ` \n\n
    \n \n
    \n \n \n \n \n
    \n \n \n \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n \n
    \n \n \n
    \n \n
    \n \n
    \n \n \n \n \n \n
    \n
    \n \n \n
    \n \n
    \n \n
    \n \n
    \n \n
    \n `,\n};\n","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport Mailverteiler from \"./ProfilComponents/Mailverteiler.js\";\nimport QuickLinks from \"./ProfilComponents/QuickLinks.js\";\nimport RoleInformation from \"./ProfilComponents/RoleInformation.js\";\nimport ProfilEmails from \"./ProfilComponents/ProfilEmails.js\";\nimport ProfilInformation from \"./ProfilComponents/ProfilInformation.js\";\n\nimport { dateFilter } from '../../../tabulator/filters/Dates.js';\n\nexport default {\n\tcomponents: {\n\t\tCoreFilterCmpt,\n\t\tMailverteiler,\n\t\tQuickLinks,\n\t\tRoleInformation,\n\t\tProfilEmails,\n\t\tProfilInformation,\n\t},\n\tinject: [\"collapseFunction\", \"language\"],\n\tdata() {\n\t\treturn {\n\t\t\tcollapseIconFunktionen: true,\n\t\t\tpreloadedPhrasen:{},\n\t\t\tfunktionen_table_options: {\n\t\t\t\tpersistenceID: \"filterTableMaViewProfilFunktionen\",\n\t\t\t\tpersistence: {\n\t\t\t\t\tcolumns: false\n\t\t\t\t},\n\t\t\t\tminHeight: 300,\n\t\t\t\tlayout: \"fitColumns\",\n\t\t\t\tresponsiveLayout: \"collapse\",\n\t\t\t\tresponsiveLayoutCollapseUseFormatters: false,\n\t\t\t\tresponsiveLayoutCollapseFormatter: Vue.$collapseFormatter,\n\t\t\t\tcolumns: [\n\t\t\t\t\t//? option when wanting to hide the collapsed list\n\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\tfield: \"collapse\",\n\t\t\t\t\t\theaderSort: false,\n\t\t\t\t\t\theaderFilter: false,\n\t\t\t\t\t\tformatter: \"responsiveCollapse\",\n\t\t\t\t\t\tmaxWidth: 40,\n\t\t\t\t\t\theaderClick: this.collapseFunction,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.$p.t('ui/bezeichnung')),\n\t\t\t\t\t\tfield: \"Bezeichnung\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.$p.t('lehre/organisationseinheit')),\n\t\t\t\t\t\tfield: \"Organisationseinheit\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.$p.t('global/gueltigVon')),\n\t\t\t\t\t\tfield: \"Gültig_von\",\n\t\t\t\t\t\theaderFilterFunc: 'dates',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true,\n\t\t\t\t\t\tformatter:\"datetime\",\n\t\t\t\t\t\tformatterParams: this.datetimeFormatterParams()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.$p.t('global/gueltigBis')),\n\t\t\t\t\t\tfield: \"Gültig_bis\",\n\t\t\t\t\t\theaderFilterFunc: 'dates',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true,\n\t\t\t\t\t\tformatter:\"datetime\",\n\t\t\t\t\t\tformatterParams: this.datetimeFormatterParams()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.$p.t('profil/wochenstunden')),\n\t\t\t\t\t\tfield: \"Wochenstunden\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t};\n\t},\n\n\t//? this is the prop passed to the dynamic component with the custom data of the view\n\tprops: [\"data\"],\n\tmethods: {\n\t\tfunktionenTableBuilt: function () {\n\t\t\tthis.$refs.funktionenTable.tabulator.setData(this.data.funktionen);\n\t\t},\n\t\tdatetimeFormatterParams: function() {\n\t\t\tconst params = {\n\t\t\t\tinputFormat:\"yyyy-MM-dd\",\n\t\t\t\toutputFormat:\"dd.MM.yyyy\",\n\t\t\t\tinvalidPlaceholder:\"(invalid date)\",\n\t\t\t\ttimezone:FHC_JS_DATA_STORAGE_OBJECT.timezone\n\t\t\t};\n\t\t\treturn params;\n\t\t}\n\t},\n\twatch: {\n\t\t'data.funktionen'(newVal) {\n\t\t\tif(this.$refs.funktionenTable) this.$refs.funktionenTable.tabulator.setData(newVal);\n\t\t},\n\t\t'language.value'(newVal) { // reevaluates computed phrasen\n\t\t\tif(this.$refs.funktionenTable) this.$refs.funktionenTable.tabulator.setColumns(this.funktionen_table_options.columns)\n\t\t}\n\t},\n\tcomputed: {\n\t\tgetTelefonValue() {\n\t\t\tif(this.data.standort_telefon?.kontakt) {\n\t\t\t\treturn this.data.standort_telefon.kontakt + \" \" + this.data.telefonklappe\n\t\t\t} else if(this.data.standort_telefon) {\n\t\t\t\treturn this.data.standort_telefon + \" \" + this.data.telefonklappe\n\t\t\t} else {\n\t\t\t\treturn this.data.telefonklappe\n\t\t\t}\n\t\t},\n\t\tfotoStatus() {\n\t\t\treturn this.data?.fotoStatus ?? null;\n\t\t},\n\n\t\tpersonEmails() {\n\t\t\treturn this.data?.emails ? this.data.emails : [];\n\t\t},\n\n\t\tprofilInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tVorname: this.data.vorname,\n\t\t\t\tNachname: this.data.nachname,\n\t\t\t\tUsername: this.data.username,\n\t\t\t\tAnrede: this.data.anrede,\n\t\t\t\tTitel: this.data.titel,\n\t\t\t\tPostnomen: this.data.postnomen,\n\t\t\t\tfoto_sperre: this.data.foto_sperre,\n\t\t\t\tfoto: this.data.foto,\n\t\t\t};\n\t\t},\n\n\t\troleInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tgeburtsdatum: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsdatum')}`,\n\t\t\t\t\tvalue: this.data.gebdatum\n\t\t\t\t},\n\t\t\t\tgeburtsort: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsort')}`,\n\t\t\t\t\tvalue: this.data.gebort\n\t\t\t\t},\n\t\t\t\tpersonenkennzeichen: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Kurzzeichen')}`,\n\t\t\t\t\tvalue: this.data.kurzbz\n\t\t\t\t},\n\t\t\t\ttelefon: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Telefon')}`,\n\t\t\t\t\tvalue: this.getTelefonValue\n\t\t\t\t},\n\t\t\t\toffice: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Büro')}`,\n\t\t\t\t\tvalue: this.data.ort_kurzbz\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t},\n\tcreated(){\n\t\tthis.$p.loadCategory([\"ui\", \"lehre\", \"global\", \"profil\"]).then(() => {\n\t\t\tthis.preloadedPhrasen.bezeichnungPhrase = this.$p.t('ui/bezeichnung');\n\t\t\tthis.preloadedPhrasen.organisationseinheitPhrase = this.$p.t('lehre/organisationseinheit');\n\t\t\tthis.preloadedPhrasen.gueltigVonPhrase = this.$p.t('global/gueltigVon');\n\t\t\tthis.preloadedPhrasen.gueltigBisPhrase = this.$p.t('global/gueltigBis');\n\t\t\tthis.preloadedPhrasen.wochenstundenPhrase = this.$p.t('profil/wochenstunden');\n\t\t\tthis.preloadedPhrasen.loaded = true;\n\t\t});\n\t},\n\n\ttemplate: /*html*/ `\n\n
    \n \n
    \n \n \n \n \n
    \n \n \n \n
    \n \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n \n \n
    \n \n
    \n \n
    \n \n
    \n \n
    \n \n
    \n \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n
    \n \n
    \n \n
    \n`,\n};\n","import StudentProfil from \"./StudentProfil.js\";\nimport MitarbeiterProfil from \"./MitarbeiterProfil.js\";\nimport ViewStudentProfil from \"./StudentViewProfil.js\";\nimport ViewMitarbeiterProfil from \"./MitarbeiterViewProfil.js\";\nimport Loading from \"../../Loader.js\";\n\nimport ApiProfil from '../../../api/factory/profil.js';\nimport ApiProfilUpdate from '../../../api/factory/profilUpdate.js';\n\nVue.$collapseFormatter = function (data) {\n\t//data - an array of objects containing the column title and value for each cell\n\tvar container = document.createElement(\"div\");\n\tcontainer.classList.add(\"tabulator-collapsed-row\");\n\tcontainer.classList.add(\"text-break\");\n\n\tvar list = document.createElement(\"div\");\n\tlist.classList.add(\"row\");\n\n\tcontainer.appendChild(list);\n\n\tdata.forEach(function (col) {\n\t\tlet item = document.createElement(\"div\");\n\t\titem.classList.add(\"col-6\");\n\t\tlet item2 = document.createElement(\"div\");\n\t\titem2.classList.add(\"col-6\");\n\n\t\titem.innerHTML = \"\" + col.title + \"\";\n\t\titem2.innerHTML = col.value ? col.value : \"-\";\n\n\t\tlist.appendChild(item);\n\t\tlist.appendChild(item2);\n\t});\n\n\treturn Object.keys(data).length ? container : \"\";\n};\n\nexport const Profil = {\n\tname: 'Profil',\n\tcomponents: {\n\t\tStudentProfil,\n\t\tMitarbeiterProfil,\n\t\tViewStudentProfil,\n\t\tViewMitarbeiterProfil,\n\t\tLoading,\n\t},\n\tprops: {\n\t\tuid: {\n\t\t\ttype: String,\n\t\t\trequired:false,\n\t\t},\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\t//? loading property is used for showing/hiding the loading modal\n\t\t\tloading: false,\n\t\t\tprofilUpdateStates: null,\n\t\t\tprofilUpdateTopic: null,\n\t\t\tview: null,\n\t\t\tdata: null,\n\t\t\t// notfound is null by default, but contains an UID if no user exists with that UID\n\t\t\tnotFoundUID: null,\n\t\t\tisEditable: this.viewData.editable ?? false,\n\t\t};\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tisEditable: Vue.computed(()=>this.isEditable),\n\t\t\tprofilUpdateStates: Vue.computed(() =>\n\t\t\t\tthis.profilUpdateStates ? this.profilUpdateStates : false\n\t\t\t),\n\t\t\tprofilUpdateTopic: Vue.computed(() =>\n\t\t\t\tthis.profilUpdateTopic ? this.profilUpdateTopic : false\n\t\t\t),\n\t\t\tsetLoading: (newValue) => {\n\t\t\t\tthis.loading = newValue;\n\t\t\t},\n\t\t\tgetZustellkontakteCount: this.zustellKontakteCount,\n\t\t\tgetZustelladressenCount: this.zustellAdressenCount,\n\t\t\tcollapseFunction: (e, column) => {\n\t\t\t\t//* check if property doesn't exist already and add it to the reactive this properties\n\t\t\t\tif (this[e.target.id] === undefined) {\n\t\t\t\t\tthis[e.target.id] = true;\n\t\t\t\t}\n\t\t\t\tthis[e.target.id] = !this[e.target.id];\n\n\t\t\t\t//* gets all event icons of the different rows to use the onClick event later\n\t\t\t\tlet allClickableIcons = column._column.cells.map((row) => {\n\t\t\t\t\treturn row.element.children[0];\n\t\t\t\t});\n\n\t\t\t\t//* changes the icon that shows or hides all the collapsed columns\n\t\t\t\t//* if the replace function does not find the class to replace, it just simply returns false\n\t\t\t\tif (this[e.target.id]) {\n\t\t\t\t\te.target.classList.replace(\"fa-angle-up\", \"fa-angle-down\");\n\t\t\t\t} else {\n\t\t\t\t\te.target.classList.replace(\"fa-angle-down\", \"fa-angle-up\");\n\t\t\t\t}\n\n\t\t\t\t//* changes the icon for every collapsed column to open or closed\n\t\t\t\tif (this[e.target.id]) {\n\t\t\t\t\tallClickableIcons\n\t\t\t\t\t\t.filter((column) => {\n\t\t\t\t\t\t\treturn !column.classList.contains(\"open\");\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.forEach((col) => {\n\t\t\t\t\t\t\tcol.click();\n\t\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tallClickableIcons\n\t\t\t\t\t\t.filter((column) => {\n\t\t\t\t\t\t\treturn column.classList.contains(\"open\");\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.forEach((col) => {\n\t\t\t\t\t\t\tcol.click();\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\tsortProfilUpdates: (ele1, ele2) => {\n\t\t\t\tlet result = 0;\n\t\t\t\tif (ele1.status.toLowerCase() === \"pending\") {\n\t\t\t\t\tresult = -1;\n\t\t\t\t} else if (ele1.status.toLowerCase() === \"accepted\") {\n\t\t\t\t\tresult = ele2.status.toLowerCase() === \"rejected\" ? -1 : 1;\n\t\t\t\t} else {\n\t\t\t\t\tresult = 1;\n\t\t\t\t}\n\t\t\t\t//? if they have the same status the insert date is used for ordering\n\t\t\t\tif (ele1.status === ele2.status) {\n\t\t\t\t\tresult =\n\t\t\t\t\t\tnew Date(ele2.insertamum.split(\".\").reverse().join(\"-\")) -\n\t\t\t\t\t\tnew Date(ele1.insertamum.split(\".\").reverse().join(\"-\"));\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t},\n\t\t};\n\t},\n\tmethods: {\n\t\tasync load() {\n\t\t\t// fetch profilUpdateStates to provide them to children components\n\t\t\tawait this.$api\n\t\t\t\t.call(ApiProfilUpdate.getStatus())\n\t\t\t\t.then((response) => {\n\t\t\t\t\tthis.profilUpdateStates = response.data;\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t});\n\n\t\t\tthis.$api\n\t\t\t\t.call(ApiProfilUpdate.getTopic())\n\t\t\t\t.then((response) => {\n\t\t\t\t\tthis.profilUpdateTopic = response.data;\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t});\n\t\t\t\n\t\t\t\n\t\t\tthis.$api\n\t\t\t\t.call(ApiProfil.profilViewData(this.$route.params.uid??null))\n\t\t\t\t.then((response) => response.data).then(data=>{\n\t\t\t\t\tthis.view = data?.profil_data.view;\n\t\t\t\t\tthis.data = data?.profil_data.data;\n\t\t\t\t\tthis.isEditable = data?.editable ?? false;\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t});\n\t\t\t\n\t\t\t\n\t\t},\n\t\tzustellAdressenCount() {\n\t\t\tif (!this.data || !this.data.adressen) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tlet adressenArray = [];\n\t\t\tif (this.data.profilUpdates?.length) {\n\t\t\t\tadressenArray = adressenArray.concat(\n\t\t\t\t\tthis.data.profilUpdates\n\t\t\t\t\t\t.filter((update) => {\n\t\t\t\t\t\t\treturn update.requested_change.zustelladresse;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.map((adresse) => {\n\t\t\t\t\t\t\treturn adresse.requested_change.adresse_id;\n\t\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!this.data.profilUpdates?.length ||\n\t\t\t\t!this.data.adressen\n\t\t\t\t\t.filter((adresse) => adresse.zustelladresse)\n\t\t\t\t\t.every((adresse) =>\n\t\t\t\t\t\tthis.data.profilUpdates.some(\n\t\t\t\t\t\t\t(update) =>\n\t\t\t\t\t\t\t\tupdate.requested_change.adresse_id == adresse.adresse_id\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t) {\n\t\t\t\tadressenArray = adressenArray.concat(\n\t\t\t\t\tthis.data.adressen\n\t\t\t\t\t\t.filter((adresse) => {\n\t\t\t\t\t\t\treturn adresse.zustelladresse;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.map((adr) => {\n\t\t\t\t\t\t\treturn adr.adresse_id;\n\t\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn [...new Set(adressenArray)];\n\t\t\t\n\t\t},\n\t\tzustellKontakteCount() {\n\t\t\tif (!this.data || !this.data.kontakte) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tlet kontakteArray = [];\n\n\t\t\tif (this.data.profilUpdates?.length) {\n\t\t\t\tkontakteArray = kontakteArray.concat(\n\t\t\t\t\tthis.data.profilUpdates\n\t\t\t\t\t\t.filter((update) => {\n\t\t\t\t\t\t\treturn update.status === 'Pending' && update.requested_change.zustellung;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.map((kontant) => {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\tkontakt_id: kontant.requested_change.kontakt_id,\n\t\t\t\t\t\t\t\t\t\tkontakttyp: kontant.requested_change.kontakttyp\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!this.data.profilUpdates?.length ||\n\t\t\t\t!this.data.kontakte\n\t\t\t\t\t.filter((kontakt) => kontakt.zustellung)\n\t\t\t\t\t.every((kontakt) =>\n\t\t\t\t\t\tthis.data.profilUpdates.some(\n\t\t\t\t\t\t\t(update) =>\n\t\t\t\t\t\t\t\tupdate.status === 'Pending' && update.requested_change.kontakt_id == kontakt.kontakt_id\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t) {\n\t\t\t\tkontakteArray = kontakteArray.concat(\n\t\t\t\t\tthis.data.kontakte\n\t\t\t\t\t\t.filter((kontakt) => {\n\t\t\t\t\t\t\treturn kontakt.zustellung;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.map((kon) => {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\tkontakt_id: kon.kontakt_id,\n\t\t\t\t\t\t\t\t\t\tkontakttyp: kon.kontakttyp\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn [...new Set(kontakteArray)];\n\t\t},\n\t},\n\tcomputed: {\n\t\t\n\t\tfilteredEditData() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tview: null,\n\t\t\t\tdata: {\n\t\t\t\t\tPersonen_Informationen: {\n\t\t\t\t\t\ttitle: this.$p.t(\"profil\", \"personenInformationen\"),\n\t\t\t\t\t\ttopic: \"Personen_informationen\",\n\t\t\t\t\t\tview: null,\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tvorname: {\n\t\t\t\t\t\t\t\ttitle: this.$p.t(\"person\", \"vorname\"),\n\t\t\t\t\t\t\t\ttopic: this.profilUpdateTopic?.[\"Vorname\"],\n\t\t\t\t\t\t\t\tview: \"TextInputDokument\",\n\t\t\t\t\t\t\t\twithFiles: true,\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\ttitel: \"vorname\",\n\t\t\t\t\t\t\t\t\tvalue: this.data.vorname,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tnachname: {\n\t\t\t\t\t\t\t\ttitle: this.$p.t(\"person\", \"nachname\"),\n\t\t\t\t\t\t\t\ttopic: this.profilUpdateTopic?.[\"Nachname\"],\n\t\t\t\t\t\t\t\tview: \"TextInputDokument\",\n\t\t\t\t\t\t\t\twithFiles: true,\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\ttitel: \"nachname\",\n\t\t\t\t\t\t\t\t\tvalue: this.data.nachname,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttitel: {\n\t\t\t\t\t\t\t\ttitle: this.$p.t(\"global\", \"titel\"),\n\t\t\t\t\t\t\t\ttopic: this.profilUpdateTopic?.[\"Titel\"],\n\t\t\t\t\t\t\t\tview: \"TextInputDokument\",\n\t\t\t\t\t\t\t\twithFiles: true,\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\ttitel: \"titel\",\n\t\t\t\t\t\t\t\t\tvalue: this.data.titel,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tpostnomen: {\n\t\t\t\t\t\t\t\ttitle: this.$p.t(\"profil\", \"postnomen\"),\n\t\t\t\t\t\t\t\ttopic: this.profilUpdateTopic?.[\"Postnomen\"],\n\t\t\t\t\t\t\t\tview: \"TextInputDokument\",\n\t\t\t\t\t\t\t\twithFiles: true,\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\ttitel: \"postnomen\",\n\t\t\t\t\t\t\t\t\tvalue: this.data.postnomen,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tPrivate_Kontakte: {\n\t\t\t\t\t\ttitle: this.$p.t(\"profil\", \"privateKontakte\"),\n\t\t\t\t\t\ttopic: this.profilUpdateTopic?.[\"Private Kontakte\"],\n\t\t\t\t\t\tdata: this.data.kontakte\n\t\t\t\t\t\t\t?.filter((item) => {\n\t\t\t\t\t\t\t\t// excludes all contacts that are already used in pending profil update requests\n\t\t\t\t\t\t\t\treturn !this.data.profilUpdates?.some(\n\t\t\t\t\t\t\t\t\t(update) =>\n\t\t\t\t\t\t\t\t\t\tupdate.status === this.profilUpdateStates[\"Pending\"] &&\n\t\t\t\t\t\t\t\t\t\tupdate.requested_change?.kontakt_id === item.kontakt_id\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.map((kontakt) => {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tlistview: \"Kontakt\",\n\t\t\t\t\t\t\t\t\tview: \"EditKontakt\",\n\t\t\t\t\t\t\t\t\tdata: kontakt,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t\tPrivate_Adressen: {\n\t\t\t\t\t\ttitle: this.$p.t(\"profil\", \"privateAdressen\"),\n\t\t\t\t\t\ttopic: this.profilUpdateTopic?.[\"Private Adressen\"],\n\t\t\t\t\t\tdata: this.data.adressen\n\t\t\t\t\t\t\t?.filter((item) => {\n\t\t\t\t\t\t\t\treturn !this.data.profilUpdates?.some((update) => {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\tupdate.status === this.profilUpdateStates[\"Pending\"] &&\n\t\t\t\t\t\t\t\t\t\tupdate.requested_change?.adresse_id == item.adresse_id\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.map((adresse) => {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tlistview: \"Adresse\",\n\t\t\t\t\t\t\t\t\tview: \"EditAdresse\",\n\t\t\t\t\t\t\t\t\tdata: adresse,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t},\n\twatch: {\n\t\tloading: function (newValue) {\n\t\t\tif (newValue) {\n\t\t\t\tthis.$refs.loadingModalRef.show();\n\t\t\t} else {\n\t\t\t\tthis.$refs.loadingModalRef.hide();\n\t\t\t}\n\t\t},\n\t\tuid (newVal, oldVal) {\n\t\t\tthis.load()\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.load()\n\t},\n\ttemplate: `\n\t
    \n\t\t
    \n\t\t\t

    Es wurde keine Person mit der UID {{this.notFoundUID}} gefunden

    \n\t\t
    \n\t\t
    \n \n \n\t\t
    \n\t
    `,\n}\n\nexport default Profil","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetContentID(ort_kurbz) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Ort/ContentID',\n\t\t\tparams: { ort_kurzbz: ort_kurbz }\n\t\t};\n\t},\n\tgetRooms(datum, von, bis, typ, personenanzahl = 0) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Ort/getRooms',\n\t\t\tparams: { datum, von, bis, typ, personenanzahl }\n\t\t};\n\t},\n\tgetRoomTypes() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Ort/getTypes',\n\t\t\tparams: { }\n\t\t};\n\t}\n};","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport VueDatePicker from '../../vueDatepicker.js.php';\nimport ApiOrt from '../../../api/factory/ort.js'\nexport const Raumsuche = {\n\tname: \"Raumsuche\",\n\tprops: {\n\t\t\n\t},\n\tcomponents: {\n\t\tVueDatePicker,\n\t\tCoreFilterCmpt,\n\t\tInputNumber: primevue.inputnumber,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tphrasenPromise: null,\n\t\t\tphrasenResolved: false,\n\t\t\ttabulatorUuid: Vue.ref(0),\n\t\t\ttableBuiltResolve: null,\n\t\t\ttableBuiltPromise: null,\n\t\t\troomtypes: null,\n\t\t\tdefaultType: {\n\t\t\t\traumtyp_kurzbz: '',\n\t\t\t\tbeschreibung: Vue.computed(() => this.$p.t('global/alle'))\n\t\t\t},\n\t\t\tanzahl: 1,\n\t\t\tselectedType: null,\n\t\t\tdatum: new Date(),\n\t\t\tvon: Vue.ref({\n\t\t\t\thours: new Date().getHours(),\n\t\t\t\tminutes: new Date().getMinutes()\n\t\t\t}),\n\t\t\tbis: Vue.ref({\n\t\t\t\thours: new Date().getHours() + 1,\n\t\t\t\tminutes: new Date().getMinutes()\n\t\t\t}),\n\t\t\tdatepickerTextInputOptions: {\n\t\t\t\tenterSubmit: true,\n\t\t\t\ttabSubmit: true,\n\t\t\t\tselectOnFocus: true,\n\t\t\t\tformat: 'dd.MM.yyyy',\n\t\t\t\tescClose: true\n\t\t\t},\n\t\t\ttimepickerTextInputOptions: {\n\t\t\t\tenterSubmit: true,\n\t\t\t\ttabSubmit: true,\n\t\t\t\tselectOnFocus: true,\n\t\t\t\tformat: 'HH:mm',\n\t\t\t\tescClose: true\n\t\t\t},\n\t\t\traumsucheTableOptions: {\n\t\t\t\theight: Vue.ref(400),\n\t\t\t\tindex: 'ort_kurzbz',\n\t\t\t\tlayout: 'fitColumns',\n\t\t\t\tplaceholder: this.$p.t('global/noDataAvailable'),\n\t\t\t\tcolumns: [\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('rauminfo/raum_kurzbz')), field: 'ort_kurzbz', widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('global/bezeichnung')), field: 'bezeichnung', widthGrow: 2},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('rauminfo/raumnummer')), field: 'nummer', widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('rauminfo/personcap')), field: 'personen', widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('rauminfo/rauminfo')),\n\t\t\t\t\t\tfield: 'linkInfo', formatter: this.linkFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('rauminfo/roomReservations')), \n\t\t\t\t\t\tfield: 'linkRes', formatter: this.linkFormatter, widthGrow: 1}\n\t\t\t\t],\n\t\t\t\tpersistence: false,\n\t\t\t},\n\t\t\traumsucheTableEventHandlers: [{\n\t\t\t\tevent: \"tableBuilt\",\n\t\t\t\thandler: async () => {\n\t\t\t\t\tthis.tableBuiltResolve()\n\t\t\t\t}\n\t\t\t}\n\t\t\t]};\n\t},\n\tmethods: {\n\t\ttableResolve(resolve) {\n\t\t\tthis.tableBuiltResolve = resolve\n\t\t},\n\t\tlinkFormatter(cell) {\n\t\t\tconst val = cell.getValue();\n\t\t\tconst field = cell.getField();\n\t\t\tconst arialabel = (field === 'linkInfo') \n\t\t\t\t\t\t\t? this.$p.t('rauminfo/rauminfo') \n\t\t\t\t\t\t\t: this.$p.t('rauminfo/roomReservations');\n\t\t\tif(val) {\n\t\t\t\treturn ''\n\t\t\t} else {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'-
    '\n\t\t\t}\n\t\t},\n\t\troomPlanLink(room) {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t+ '/CisVue/Cms/getRoomInformation/' + room.ort_kurzbz\n\t\t},\n\t\troomInfoLink(room) {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ '/CisVue/Cms/content/' + room.content_id\n\t\t},\n\t\tgetTimeString(time) {\n\t\t\tconst hours = String(time.hours).padStart(2, '0');\n\t\t\tconst minutes = String(time.minutes).padStart(2, '0');\n\t\t\treturn `${hours}:${minutes}`\n\t\t},\n\t\tsetupData(data){\n\t\t\tconst d = data.map(room => {\n\t\t\t\treturn {\n\t\t\t\t\tort_kurzbz: room.ort_kurzbz,\n\t\t\t\t\tbezeichnung: room.bezeichnung.replace('&', '&'),\n\t\t\t\t\tnummer: room.planbezeichnung,\n\t\t\t\t\tpersonen: room.max_person,\n\t\t\t\t\tlinkInfo: room.content_id ? this.roomInfoLink(room) : null,\n\t\t\t\t\tlinkRes: this.roomPlanLink(room)\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\t\n\t\t\t})\n\t\t\t\n\t\t\tthis.$refs.raumsucheTable.tabulator.setData(d);\n\t\t},\n\t\tloadRoomTypes() {\n\t\t\tthis.$api.call(ApiOrt.getRoomTypes())\n\t\t\t\t.then(res => {\n\t\t\t\tres?.data?.forEach(type => {\n\t\t\t\t\ttype.beschreibung = type.beschreibung.replace('&', '&')\n\t\t\t\t})\n\t\t\t\tthis.selectedType = this.defaultType\n\t\t\t\tthis.roomtypes = res?.data ?? []\n\t\t\t})\n\t\t},\n\t\tloadRooms() {\n\t\t\tthis.$api.call(ApiOrt.getRooms(this.datum.toISOString(), this.getTimeString(this.von), this.getTimeString(this.bis), this.selectedType?.raumtyp_kurzbz ?? '', this.anzahl))\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res?.data?.retval) this.setupData(res.data.retval)\n\t\t\t})\n\t\t},\n\t\thandleUuidDefined(uuid) {\n\t\t\tthis.tabulatorUuid = uuid\n\t\t},\n\t\tsearch(){\n\t\t\tthis.loadRooms()\n\t\t},\n\t\tsetRoute(val) {\n\t\t\t// TODO: router push\n\t\t},\n\t\tdateFormat(date) {\n\t\t\tconst day = String(date.getDate()).padStart(2, '0');\n\t\t\tconst month = String(date.getMonth() + 1).padStart(2, '0');\n\t\t\tconst year = date.getFullYear();\n\t\t\treturn `${day}.${month}.${year}`\n\t\t},\n\t\ttimeFormat(date) {\n\t\t\tconst hours = String(date.getHours()).padStart(2, '0');\n\t\t\tconst minutes = String(date.getMinutes()).padStart(2, '0');\n\t\t\treturn `${hours}:${minutes}`;\n\t\t},\n\t\tasync setupMounted() {\n\t\t\t\n\t\t\tthis.tableBuiltPromise = new Promise(this.tableResolve)\n\t\t\tawait this.tableBuiltPromise\n\t\t\t\n\t\t\tthis.loadRoomTypes()\n\t\t\tthis.loadRooms()\n\n\t\t\tconst tableID = this.tabulatorUuid ? ('-' + this.tabulatorUuid) : ''\n\t\t\tconst tableDataSet = document.getElementById('filterTableDataset' + tableID);\n\t\t\tif(!tableDataSet) return\n\t\t\tconst rect = tableDataSet.getBoundingClientRect();\n\n\t\t\tconst h = window.visualViewport.height - rect.top - 100\n\t\t\tif(this.$refs.raumsucheTable) {\n\t\t\t\tthis.$refs.raumsucheTable.$refs.table.style.setProperty('height', h+'px')\n\t\t\t}\n\t\t\t\n\t\t}\n\t},\n\tcomputed: {\n\t\tisDarkMode(){\n\t\t\treturn this.$theme.theme_name.value == 'dark';\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.phrasenPromise = this.$p.loadCategory(['rauminfo', 'global'])\n\t\tthis.phrasenPromise.then(()=> {this.phrasenResolved = true})\n\t},\n\tmounted() {\n\t\tthis.setupMounted()\n\t},\n\ttemplate: `\n\t

    {{$p.t('rauminfo/roomSearch')}}

    \n\t
    \n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t\n\t\t
    \n\t\t\t\n\t\t
    \n\t\t\n\n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t
    \n\t\n\n \n `,\n};\n\nexport default Raumsuche;\n","export default {\n components: {\n paginator: primevue.paginator,\n },\n emits: [\"update:rows\"],\n props: {\n maxPageCount: {\n type: Number,\n default: 0,\n },\n page_size: {\n type: Number,\n required: true,\n },\n },\n data() {\n return {};\n },\n methods: {\n newPageEvent: function (data) {\n \n },\n },\n mounted() {},\n template: /*html*/ `\n \t\n\t
    \n\t\t$emit('page',{...data, page:data.page+1})\" :rows=\"page_size\" :totalRecords=\"maxPageCount\" :rowsPerPageOptions=\"[10, 20, 30]\" >\n\t\t\n\t
    \n\t\n\t
    \n\t\t$emit('page',{...data, page:data.page+1})\" :rows=\"page_size\" :totalRecords=\"maxPageCount\" :rowsPerPageOptions=\"[10, 20, 30]\" template=\"FirstPageLink PrevPageLink CurrentPageReport NextPageLink LastPageLink RowsPerPageDropdown\">\n\t\t\n\t
    \n `,\n};\n","export default {\n\tprops:{\n\t\tuid:String,\n\t\tvorname:String,\n\t\tnachname:String,\n\t\ttitelpre:String,\n\t\tkontakt:String,\t\n\t\ttelefoneklappe:String,\n\t\temail:String,\n\t\tplanbezeichnung:String,\n\t\tfoto:String,\n\t\tdisplayWidget:{\n\t\t\ttype:Boolean,\n\t\t\tdefault:false,\n\t\t}\n\t},\n\ttemplate:/*html*/`\n\t
    \n\t\t
    \n\t\t\t\"mitarbeiter_foto\"\n\t\t
    \n\t\t
    \n\t\t\t
    {{fullname}}
    \n\t\t
    \n\t\t
    \n\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t
    {{phone.number}}
    \n\n\t\t\t\t
    \n\t\t\t\t
    {{ort}}
    \n\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\n\t\t
    \n\t
    \n\t`,\n\tcomputed:{\n\t\tformattedEmail: function(){\n\t\t\tif(!this.email ) return null;\n\t\t\tlet emailString= this.email.replace(\"mailto:\", \"\");\n\t\t\t// when splitting a string, the letter that is used to split the string will be removed from the result\n\t\t\tlet emailArray = emailString.split('@');\n\t\t\t// returns both parts of the splitted string in combination with the removed letter and a word break\n\t\t\treturn emailArray[0] + '@' + emailArray[1];\n\t\t},\n\t\tfullname: function () {\n\t\t\tif (this.titelpre && this.vorname && this.nachname) {\n\t\t\t\treturn `${this.titelpre} ${this.vorname} ${this.nachname}`;\n\t\t\t}\n\t\t\telse if (this.vorname && this.nachname) {\n\t\t\t\treturn `${this.vorname} ${this.nachname}`;\n\t\t\t}\n\t\t\telse if (this.nachname) {\n\t\t\t\treturn this.vorname;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t\tphone: function () {\n\t\t\tif (this.kontakt && this.telefoneklappe) {\n\t\t\t\treturn {\n\t\t\t\t\tlink: \"tel:\".concat(this.kontakt).concat(\" \" + this.telefoneklappe),\n\t\t\t\t\tnumber: this.kontakt.concat(\" \" + this.telefoneklappe),\n\t\t\t\t} \n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn this.kontakt ? {\n\t\t\t\t\tlink: \"tel:\".concat(this.kontakt),\n\t\t\t\t\tnumber: this.kontakt,\n\t\t\t\t} : null;\n\t\t\t}\n\t\t},\n\t\temail_link: function () {\n\t\t\treturn this.email ? \"mailto:\".concat(this.email) : null;\n\t\t},\n\t\tbase64Image:function(){\n\t\t\treturn this.foto ? 'data:image/png;base64,'.concat(this.foto) : null;\n\t\t},\n\t\tort:function(){\n\t\t\treturn this.planbezeichnung ?? null;\n\t\t},\n\t\tprofilViewLink: function(){\n\t\t\treturn this.uid ? FHC_JS_DATA_STORAGE_OBJECT.app_root.concat(FHC_JS_DATA_STORAGE_OBJECT.ci_router).concat(\"/Cis/Profil/View/\").concat(this.uid): null; \n\t\t},\n\t},\n\t\n}","export default {\n\tprops: {\n\t\ttitle:String,\n\t\tvertretungsList:Array,\n\t\tshowBezeichnung:Boolean,\n\t},\n\ttemplate:/*html*/`\n\t
    \n\t\t
    \n\t\t\t{{title}}\n\t\t
    \n\t\t
    \n\t\t\t

    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{{vertretungFormatedName(vertretung,false)}}\n\t\t\t

    \n\t\t
    \n\t
    \n\t`,\n\tmethods: {\n\t\tprofilViewLink: function (uid) {\n\t\t\treturn uid ? FHC_JS_DATA_STORAGE_OBJECT.app_root.concat(FHC_JS_DATA_STORAGE_OBJECT.ci_router).concat(\"/Cis/Profil/View/\").concat(uid) : null;\n\t\t},\n\t\tvertretungFormatedName: function (vertretung) {\n\t\t\tif (!vertretung) return null;\n\t\t\treturn `${vertretung.vorname ?? ''} ${vertretung.nachname ?? ''} ${vertretung.bezeichnung && this.showBezeichnung ? '('.concat(vertretung.bezeichnung.replace(\"(\", \"\").replace(\")\", \"\")).concat(\")\") : ''}`\n\t\t},\n\t},\n\n}","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tstudiengangInformation() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Studgang/getStudiengangInfo'\n\t\t};\n\t},\n\tgetStudiengangByKz(studiengang_kz) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz',\n\t\t\tparams: { studiengang_kz }\n\t\t};\n\t}\n};","import StudiengangPerson from \"./StudiengangPerson.js\";\nimport StudiengangVertretung from \"./StudiengangVertretung.js\";\n\nimport ApiStudiengang from '../../../../api/factory/studiengang.js';\n\nexport default {\ndata(){\n\treturn{\n\t\tstudiengang:null,\n\t\tsemester: null,\n\t\tstg_ltg: null,\n\t\tgf_ltg: null,\n\t\tstv_ltg: null,\n\t\tass: null,\n\t\thochschulvertr: null,\n\t\tstdv: null,\n\t\tjahrgangsvertr: null,\n\t}\n},\nprops:{\n\tdisplayWidget:{\n\t\ttype:Boolean,\n\t\tdefault:false,\n\t}\n},\ncomponents:{\n\tStudiengangPerson,\n\tStudiengangVertretung,\n},\ntemplate:/*html*/`\n\t\t
    \n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t
    \n\t\n`,\ncomputed:{\n\t// this function concatenates the studiengangsleitung and the assistenz or the \n\t// geschaeftsfuehrende-Stellvertretende Leitung if both collections only contain one person\n\tcollection_array: function(){\n\t\tlet returnData = [];\n\n\t\tif (Array.isArray(this.stg_ltg) && this.stg_ltg.length == 1 && Array.isArray(this.ass) && this.ass.length == 1)\n\t\t{\n\t\t\treturnData.push({ title: `${this.$p.t('global', 'studiengangsleitung')}/${this.$p.t('studiengangInformation', 'assistenz')}` , collection: [...this.stg_ltg, ...this.ass] });\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturnData.push({ title: this.$p.t('global', 'studiengangsleitung'), collection: this.stg_ltg });\n\t\t\treturnData.push({ title: this.$p.t('studiengangInformation', 'assistenz'), collection: this.ass });\n\t\t}\n\t\tif (Array.isArray(this.gf_ltg) && this.gf_ltg.length == 1 && Array.isArray(this.stv_ltg) && this.stv_ltg.length == 1)\n\t\t{\n\t\t\treturnData.push({ title: this.$p.t('studiengangInformation', 'geschaeftsfuehrende_stellvertretende_leitung'), collection: [...this.gf_ltg, ...this.stv_ltg] });\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturnData.push({ title: this.$p.t('studiengangInformation', 'geschaeftsfuehrende_leitung'), collection: this.gf_ltg });\n\t\t\treturnData.push({ title: this.$p.t('studiengangInformation', 'stellvertretende_leitung'), collection: this.stv_ltg });\n\t\t}\n\n\t\treturn returnData;\n\t},\n\tmoodleLink: function(){\n\t\t// early return if the studiengang information is not available\n\t\tif(!this.studiengang || !this.studiengang.studiengang_kz) return;\n\n\t\treturn `https://moodle.technikum-wien.at/course/view.php?idnumber=dl` + this.studiengang.studiengang_kz;\n\t},\n},\n\tmounted() {\n\t\tthis.$api\n\t\t\t.call(ApiStudiengang.studiengangInformation())\n\t\t\t.then(res => res.data)\n\t\t\t.then(studiengangInformationen => {\n\t\t\t\tObject.assign(this, studiengangInformationen);\n\t\t\t});\n\t}\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tcontent(content_id, version=null, sprache=null, sichtbar=null) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Cms/content',\n\t\t\tparams: {\n\t\t\t\tcontent_id,\n\t\t\t\t...(version ? { version } : {}),\n\t\t\t\t...(sprache ? { sprache } : {}),\n\t\t\t\t...(sichtbar ? { sichtbar } : {})\n\t\t\t}\n\t\t};\n\t},\n\t//api function used for the news View that renders the html\n\tgetNews(page = 1, page_size = 10, sprache) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Cms/getNews',\n\t\t\tparams: {\n\t\t\t\tpage,\n\t\t\t\tpage_size,\n\t\t\t\tsprache\n\t\t\t},\n\t\t};\n\t},\n\t//api function used for the widget component\n\tnews(limit) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Cms/news',\n\t\t\tparams: { limit }\n\t\t};\n\t},\n\tgetNewsRowCount() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Cms/getNewsRowCount'\n\t\t};\n\t},\n\tgetNewsExtra() {\n\t\t// TODO(chris): seems to be called from nowhere?\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Cms/getStudiengangInfoForNews'\n\t\t};\n\t}\n};","import Pagination from \"../../Pagination/Pagination.js\";\nimport StudiengangInformation from \"./StudiengangInformation/StudiengangInformation.js\";\nimport BsConfirm from \"../../Bootstrap/Confirm.js\";\n\nimport ApiCms from '../../../api/factory/cms.js';\n\nexport default {\n\tname: \"NewsComponent\",\n components: {\n Pagination,\n\tStudiengangInformation,\n },\n data() {\n return {\n content: null,\n maxPageCount: 0,\n page_size: 10,\n\t page:1,\n };\n },\n watch:{\n\t'$p.user_language.value':function(sprache){\n\t\tthis.fetchNews();\n\t}\n },\n computed:{\n\tsprache: function(){\n\t\treturn this.$p.user_language.value;\n\t},\n },\n methods: {\n\t\tfetchNews() {\n\t\t\treturn this.$api\n\t\t\t\t.call(ApiCms.getNews(this.page, this.page_size, this.sprache))\n\t\t\t\t.then(res => res.data)\n\t\t\t\t.then(result => {\n\t\t\t\t\tthis.content = result;\n\n\t\t\t\t\tdocument.querySelectorAll(\"#cms [data-confirm]\").forEach((el) => {\n\t\t\t\t\t\tel.addEventListener(\"click\", (evt) => {\n\t\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\t\tBsConfirm.popup(el.dataset.confirm)\n\t\t\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\t\t\tAxios.get(el.href)\n\t\t\t\t\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\t\t\t\t\t// TODO(chris): check for success then show message and/or reload\n\t\t\t\t\t\t\t\t\t\t\tlocation = location;\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t.catch((err) => console.error(\"ERROR:\", err));\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\tdocument.querySelectorAll(\"#cms [data-href]\").forEach((el) => {\n\t\t\t\t\t\tel.href = el.dataset.href.replace(\n\t\t\t\t\t\t\t/^ROOT\\//,\n\t\t\t\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t\tVue.nextTick(()=>{\n\t\t\t\t\t\tdocument.querySelectorAll(\".card-header\").forEach((el) => {\n\t\t\t\t\t\t\tel.classList.add(\"fhc-primary\");\n\t\t\t\t\t\t});\n\t\t\t\t\t\tdocument.querySelectorAll(\".row\").forEach((el) => {\n\t\t\t\t\t\t\tel.classList.add(\"w-100\");\n\t\t\t\t\t\t\tel.classList.add(\"align-items-center\");\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t});\n\t\t\t\t\t\tdocument.querySelectorAll(\".row h2\").forEach((el) => {\n\t\t\t\t\t\t\tel.classList.add(\"mb-0\");\n\t\t\t\t\t\t});\n\n\t\t\t\t\t})\n\t\t\t\t});\n\t\t},\n\t\tloadNewPageContent(data) {\n\t\t\tthis.$api\n\t\t\t\t.call(ApiCms.getNews(data.page, data.rows))\n\t\t\t\t.then(res => res.data)\n\t\t\t\t.then(result => {\n\t\t\t\t\tthis.content = result;\n\t\t\t\t\t\n\t\t\t\t});\n\t\t}\n },\n created() {\n this.fetchNews();\n\n\t\tthis.$api\n\t\t\t.call(ApiCms.getNewsRowCount())\n\t\t\t.then(res => res.data)\n\t\t\t.then(result => {\n\t\t\t\tthis.maxPageCount = result;\n\t\t\t});\n },\n template: /*html*/ `\n \t

    News

    \n\t
    \n\t\n\t\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t\n\t\n `,\n};\n","\nexport default {\n\tname: \"RaumComponent\",\n\tdata() {\n\t\treturn {\n\t\t\timgContent: null\n\t\t}\n\t},\n props:{\n content:{\n type:String,\n required:true,\n },\n\t content_id:{\n\t\ttype: [Number, String],\n\t }\n },\n\tmethods: {\n\t\tsanitizeLegacyTables(table) {\n\n\t\t\t// find nested tables and replace with p element\n\t\t\tconst tt = table.querySelectorAll('table')\n\t\t\ttt.forEach(t => {\n\t\t\t\tconst textContent = t.textContent.trim();\n\t\t\t\tconst pElement = document.createElement('p');\n\t\t\t\tpElement.textContent = textContent;\n\t\t\t\tt.parentNode.replaceChild(pElement, t);\n\t\t\t})\n\n\t\t\t// find unordered lists, traverse li childs and replace with p element -> more readable than 1 p tag for ul\n\t\t\tconst ul = table.querySelectorAll('ul')\n\t\t\tul.forEach(u => {\n\t\t\t\tArray.from(u.children).forEach(li => {\n\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\tp.textContent = li.textContent\n\t\t\t\t\tu.parentNode.appendChild(p)\n\t\t\t\t})\n\t\t\t\tu.parentNode.removeChild(u)\n\n\t\t\t})\n\n\t\t\t// find bare text nodes and put into p element\n\t\t\tconst td = Array.from(table.querySelectorAll('td')).filter(el => el.scrollWidth > 100)\n\t\t\ttd.forEach(element => {\n\t\t\t\tif (element.firstChild?.nodeType === Node.TEXT_NODE && element.firstChild.length > 10) {\n\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\tp.appendChild(element.firstChild)\n\t\t\t\t\telement.appendChild(p);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// flatten nested th elements\n\t\t\tconst ths = Array.from(table.querySelectorAll('th'))\n\t\t\tths.forEach(th => {\n\n\t\t\t\tif(th.children.length > 1) {\n\t\t\t\t\tth.innerHTML = Array.from(th.childNodes).find(cn => cn.textContent).textContent\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// let p elements wrap on overflow\n\t\t\tconst p = table.querySelectorAll('p')\n\t\t\tp.forEach(p => {\n\t\t\t\tp.style.setProperty('word-wrap', 'break-word');\n\t\t\t\tp.style.setProperty('white-space', 'normal');\n\t\t\t\tp.style.setProperty('max-width', '400px');\n\t\t\t})\n\t\t}\n\t},\n mounted(){\n\t\t// replaces the tablesorter with the tabulator\n\t\tlet tables = document.getElementsByClassName(\"tablesorter\");\n\t\t\n\t\tfor (let table of tables) {\n\t\t\tthis.sanitizeLegacyTables(table)\n\t\t\tnew Tabulator(table, {\n\t\t\t\tlayout: \"fitDataStretch\",\n\n\t\t\t\tcolumnDefaults: {\n\t\t\t\t\tformatter: \"html\",\n\t\t\t\t\tresizable: false,\n\t\t\t\t\tminWidth: \"100px\",\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t\t\n\t\tlet title = document.getElementsByTagName(\"h1\");\n\t\ttitle = title.length ? title[0] : null;\n\t\t// tries to wrap the Raum titel with a link tag that redirects to the Reservierungen of that Raum\n\t\tif (title && title.innerText) \n\t\t{\n\t\t\tlet room_name = title.innerText;\n\t\t\tlet room_name_reg_exp = new RegExp(\"\\\\w*\\\\s([a-zA-Z][0-9\\\\.]+)$\");\n\t\t\tlet room_name_reg_exp_result = room_name.match(room_name_reg_exp);\n\t\t\tif(room_name_reg_exp_result)\n\t\t\t{\n\t\t\t\troom_name = room_name_reg_exp_result[0];\n\t\t\t\troom_name = room_name.replace(\" \",\"_\");\n\t\t\t\tlet link_element = document.createElement(\"a\");\n\t\t\t\tlink_element.href = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/CisVue/Cms/getRoomInformation/\" + room_name;\n\t\t\t\tlink_element.appendChild(title.cloneNode(true));\n\t\t\t\ttitle.replaceWith(link_element);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconsole.error(`the regular expression did not match the room name: ${room_name}`);\n\t\t\t}\n\t\t\t\n\t\t\treturn\n\t\t}\n\t\t\n\t\tconst parser = new DOMParser()\n\t\tconst doc = parser.parseFromString(`
    ${this.content}
    `, \"text/html\");\n\n\t\tconst img = doc.querySelector(\"img\")\n\t\tif(img && img.title)\n\t\t{\n\t\t\tconst imgAttributes = {}\n\t\t\tfor (let attr of img.attributes) {\n\t\t\t\timgAttributes[attr.name] = attr.value\n\t\t\t}\n\n\t\t\tthis.imgContent = imgAttributes\n\t\t}\n\t\t\n\t\tconsole.error(`was not able to get the title of the raum_contentmittitel`);\n\t\t\n },\n template: /*html*/ `\n \n\n
    \n
    \n

    Content was not found

    \n `,\n };\n ","// collection of relative and absolute regex to replace legacy links\nconst GROUP_REPLACEMENT_STRATEGIES = {\n\tQUERY_PARAMETERS:'QUERY_PARAMETERS',\n\tPATH_SEGMENTS:'PATH_SEGMENTS',\n}\n\nconst regexList = {\n\trelative:[\n\t\t{ \n\t\t\tpriority: 1, \n\t\t\tregex: new RegExp(/^\\.\\.\\/cms\\/content\\.php\\?content_id=([0-9]+)/),\n\t\t\treplacement: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/CisVue/Cms/content',\n\t\t\tgroup_replacement_strategy:GROUP_REPLACEMENT_STRATEGIES.PATH_SEGMENTS,\n\t\t},\n\t\t{ \n\t\t\tpriority: 2,\n\t\t\tregex: new RegExp(/^\\.\\.\\/cms\\/news\\.php/),\n\t\t\treplacement: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/CisVue/Cms/news',\n\t\t},\n\t\t{ \n\t\t\tpriority: 3,\n\t\t\tregex: new RegExp(/^\\.\\.\\/index\\.ci\\.php/),\n\t\t\treplacement: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router,\n\t\t},\n\t\t{ \n\t\t\tpriority: 10, \n\t\t\tregex: new RegExp(/^\\.\\.\\//),\n\t\t\treplacement: FHC_JS_DATA_STORAGE_OBJECT.app_root,\n\t\t},\n\t],\n\tabsolute:[\n\t\t{}\n\t]\n};\n\n// sorts the relative regex array by priority ascending\nconst relative_regex = regexList.relative\n\t.sort((a, b) => {\n\t\treturn a.priority - b.priority;\n\t})\n\t.map(regex => {\n\t\treturn {\n\t\t\tregex: regex.regex, \n\t\t\treplacement: regex.replacement,\n\t\t\tgroup_replacement_strategy: regex.group_replacement_strategy,\n\t\t}\n\t});\n\n// sorts the absolute regex array by priority ascending\nconst absolute_regex = regexList.absolute\n\t.sort((a, b) => {\n\t\treturn a.priority - b.priority;\n\t})\n\t.map(regex => {\n\t\treturn {\n\t\t\tregex: regex.regex,\n\t\t\treplacement: regex.replacement,\n\t\t\tgroup_replacement_strategy: regex.group_replacement_strategy,\n\t\t}\n\t})\n\n\nexport function replaceRelativeLegacyLink(relativeLegacyLink){\n\tfor (let {regex,replacement,group_replacement_strategy} of relative_regex){\t\n\t\t// if any of the regex matches the relativeLegacyLink, replace the matched part with the new app_root path\n\t\tlet match = relativeLegacyLink.match(regex);\n\t\tif (match) {\n\t\t\tlet new_link = relativeLegacyLink.replace(regex, replacement);\n\t\t\t\n\t\t\t\tswitch (group_replacement_strategy){\n\t\t\t\t\tcase 'QUERY_PARAMETERS':\n\t\t\t\t\t\t//TODO: this doesn't really work yet because the query parameter are key/value pairs\n\t\t\t\t\t\tnew_link = new_link.concat(`?${match[1]}`);\n\t\t\t\t\t\tfor (let query_parameter of match.slice(2)) {\n\t\t\t\t\t\t\tnew_link = new_link.concat(`&${query_parameter}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'PATH_SEGMENTS':\n\t\t\t\t\t\tfor (let query_parameter of match.slice(1)) { \n\t\t\t\t\t\t\tnew_link = new_link.concat(`/${query_parameter}`);\n\t\t\t\t\t\t} \n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\n\t\t\treturn new_link; \n\t\t}\n\t}\n\t// if none of the regex matched with the string return the original path\n\treturn relativeLegacyLink;\n}\n\n","import { replaceRelativeLegacyLink } from \"../../../../helpers/LegacyLinkReplaceHelper.js\"\nexport default {\n\tname: \"GeneralComponent\",\n props:{\n content:{\n type:String,\n required:true,\n },\n },\n\tmethods: {\n\t\tsanitizeLegacyTables(table) {\n\t\t\t\n\t\t\t// find nested tables and replace with p element\n\t\t\tconst tt = table.querySelectorAll('table')\n\t\t\ttt.forEach(t => {\n\t\t\t\tconst textContent = t.textContent.trim();\n\t\t\t\tconst pElement = document.createElement('p');\n\t\t\t\tpElement.textContent = textContent;\n\t\t\t\tt.parentNode.replaceChild(pElement, t);\n\t\t\t})\n\n\t\t\t// find unordered lists, traverse li childs and replace with p element -> more readable than 1 p tag for ul\n\t\t\tconst ul = table.querySelectorAll('ul')\n\t\t\tul.forEach(u => {\n\t\t\t\tArray.from(u.children).forEach(li => {\n\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\tp.textContent = li.textContent\n\t\t\t\t\tu.parentNode.appendChild(p)\n\t\t\t\t})\n\t\t\t\tu.parentNode.removeChild(u)\n\t\t\t\t\n\t\t\t})\n\n\t\t\t// find bare text nodes and put into p element\n\t\t\tconst td = Array.from(table.querySelectorAll('td')).filter(el => el.scrollWidth > 100)\n\t\t\ttd.forEach(element => {\n\t\t\t\tif (element.firstChild?.nodeType === Node.TEXT_NODE && element.firstChild.length > 10) {\n\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\tp.appendChild(element.firstChild)\n\t\t\t\t\telement.appendChild(p);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// flatten nested th elements\n\t\t\tconst ths = Array.from(table.querySelectorAll('th'))\n\t\t\tths.forEach(th => {\n\n\t\t\t\tif(th.children.length > 1) {\n\t\t\t\t\tth.innerHTML = Array.from(th.childNodes).find(cn => cn.textContent).textContent\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// let p elements wrap on overflow\n\t\t\tconst p = table.querySelectorAll('p')\n\t\t\tp.forEach(p => {\n\t\t\t\tp.style.setProperty('word-wrap', 'break-word');\n\t\t\t\tp.style.setProperty('white-space', 'normal');\n\t\t\t\tp.style.setProperty('max-width', '400px');\n\t\t\t})\n\t\t},\n\t\tprepareContent() {\n\t\t\t// replaces the tablesorter with the tabulator\n\t\t\tlet tables = Array.from(document.getElementsByClassName(\"tablesorter\"));\n\n\t\t\ttables.forEach((table, index) => {\n\t\t\t\tthis.sanitizeLegacyTables(table)\n\n\t\t\t\tnew Tabulator(table, {\n\t\t\t\t\tindex: index,\n\t\t\t\t\tlayout: \"fitDataFill\",\n\n\t\t\t\t\tcolumnDefaults: {\n\t\t\t\t\t\tformatter: \"html\",\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: \"100px\"\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\n\t\t\tdocument.querySelectorAll(\"#cms [data-confirm]\").forEach((el) => {\n\t\t\t\tel.addEventListener(\"click\", (evt) => {\n\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\tBsConfirm.popup(el.dataset.confirm)\n\t\t\t\t\t.then(() => {\n\t\t\t\t\t\tAxios.get(el.href)\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\t// TODO(chris): check for success then show message and/or reload\n\t\t\t\t\t\t\tlocation = location;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((err) => console.error(\"ERROR:\", err));\n\t\t\t\t\t})\n\t\t\t\t\t.catch(() => {});\n\t\t\t\t});\n\t\t\t});\n\t\t\tdocument.querySelectorAll(\"#cms [data-href]\").forEach((el) => {\n\t\t\t\tel.href = el.dataset.href.replace(\n\t\t\t\t\t/^ROOT\\//,\n\t\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tdocument.querySelectorAll(\"[href]\").forEach((element) => {\n\t\t\t\tlet orignal_href = element.getAttribute(\"href\");\n\t\t\t\tlet new_href = replaceRelativeLegacyLink(orignal_href);\n\t\t\t\telement.href = new_href;\n\t\t\t});\n\n\t\t\tdocument.querySelectorAll(\"[style*=background-color]\").forEach((element) => {\n\t\t\t\tif (element.style.backgroundColor == \"rgb(255, 255, 255)\"){\n\t\t\t\t\telement.style.backgroundColor = \"var(--fhc-background)\";\n\t\t\t\t}\n\t\t\t\tif(element.querySelector(\"*[style*=background-color]\")){\n\t\t\t\t\telement.style.backgroundColor = \"var(--fhc-tertiary)\";\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\tupdated() {\n\t\tthis.prepareContent();\n\t},\n\tmounted(){\n\t\tthis.prepareContent();\n\t},\n template: /*html*/ `\n \n
    \n \t
    \n
    \n

    Content was not found

    \n `,\n };\n ","import raum_contentmittitel from './Content_types/Raum_contentmittitel.js'\nimport general from './Content_types/General.js'\nimport BsConfirm from \"../../Bootstrap/Confirm.js\";\nimport news_content from './Content_types/News_content.js';\nimport iframe_content from './Content_types/Iframe_content.js';\n\nimport ApiCms from '../../../api/factory/cms.js';\n\nexport default {\n\tname: \"ContentComponent\",\n\tprops: {\n\t\tcontent_id: {\n\t\t\ttype: [Number, String],\n\t\t\trequired: true\n\t\t},\n\t\tversion: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: null,\n\t\t},\n\t\tsichtbar: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: null,\n\t\t}\n\t},\n\tcomponents: {\n\t\traum_contentmittitel,\n\t\tnews_content,\n\t\tgeneral,\n\t\tiframe_content\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tcontent_type: null,\n\t\t\tcontent: null,\n\t\t\tcontent_id_internal: this.content_id\n\t\t};\n\t},\n\tmethods: {\n\t\tfetchContent(){\n\t\t\tthis.$api\n\t\t\t\t.call(ApiCms.content(this.content_id_internal, this.version, this.sprache, this.sichtbar))\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.$nextTick(function() {\n\t\t\t\t\t\tthis.content = res.data.content;\n\t\t\t\t\t\tthis.content_type = res.data.type;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t}\n\t},\n\twatch:{\n\t\tsprache: function(sprache){\n\t\t\tthis.fetchContent();\n\t\t},\n\t\t'$route.params.content_id'(newVal) {\n\t\t\tthis.content_id_internal = newVal\n\t\t\tthis.fetchContent();\n\t\t}\n\t},\n\tcomputed: {\n\t\tsprache(){\n\t\t\treturn this.$p.user_language.value;\n\t\t},\n\t\tcomputeContentType: function () {\n\t\t\tswitch (this.content_type) {\n\t\t\t\tcase \"raum_contentmittitel\":\n\t\t\t\t\treturn \"raum_contentmittitel\";\n\t\t\t\tcase \"news\":\n\t\t\t\t\treturn \"news_content\";\n\t\t\t\tcase \"iframe\":\n\t\t\t\t\treturn \"iframe_content\";\n\t\t\t\tdefault:\n\t\t\t\t\treturn \"general\";\n\t\t\t};\n\t\t},\n\t},\n\tcreated() {\n\t\tthis.fetchContent();\n\t},\n\ttemplate: /*html*/ `\n \n\t
    \n \t\n\t
    \n

    No content is available to display

    \n `,\n};\n","import { replaceRelativeLegacyLink } from \"../../../../helpers/LegacyLinkReplaceHelper.js\"\nexport default {\n\tname: \"NewsContentType\",\n\tprops:{\n\t content:{\n\t\t type:String,\n\t\t required:true,\n\t },\n\t},\n\tmethods: {\n\t\tsanitizeLegacyTables(table) {\n\t\t\t\n\t\t\t// find nested tables and replace with p element\n\t\t\tconst tt = table.querySelectorAll('table')\n\t\t\ttt.forEach(t => {\n\t\t\t\tconst textContent = t.textContent.trim();\n\t\t\t\tconst pElement = document.createElement('p');\n\t\t\t\tpElement.textContent = textContent;\n\t\t\t\tt.parentNode.replaceChild(pElement, t);\n\t\t\t})\n\n\t\t\t// find unordered lists, traverse li childs and replace with p element -> more readable than 1 p tag for ul\n\t\t\tconst ul = table.querySelectorAll('ul')\n\t\t\tul.forEach(u => {\n\t\t\t\tArray.from(u.children).forEach(li => {\n\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\tp.textContent = li.textContent\n\t\t\t\t\tu.parentNode.appendChild(p)\n\t\t\t\t})\n\t\t\t\tu.parentNode.removeChild(u)\n\t\t\t\t\n\t\t\t})\n\n\t\t\t// find bare text nodes and put into p element\n\t\t\tconst td = Array.from(table.querySelectorAll('td')).filter(el => el.scrollWidth > 100)\n\t\t\ttd.forEach(element => {\n\t\t\t\tif (element.firstChild?.nodeType === Node.TEXT_NODE && element.firstChild.length > 10) {\n\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\tp.appendChild(element.firstChild)\n\t\t\t\t\telement.appendChild(p);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// flatten nested th elements\n\t\t\tconst ths = Array.from(table.querySelectorAll('th'))\n\t\t\tths.forEach(th => {\n\n\t\t\t\tif(th.children.length > 1) {\n\t\t\t\t\tth.innerHTML = Array.from(th.childNodes).find(cn => cn.textContent).textContent\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// let p elements wrap on overflow\n\t\t\tconst p = table.querySelectorAll('p')\n\t\t\tp.forEach(p => {\n\t\t\t\tp.style.setProperty('word-wrap', 'break-word');\n\t\t\t\tp.style.setProperty('white-space', 'normal');\n\t\t\t\tp.style.setProperty('max-width', '400px');\n\t\t\t})\n\t\t}\n\t},\n\tmounted(){\n\t\t// replaces the tablesorter with the tabulator\n\t\tlet tables = Array.from(document.getElementsByClassName(\"tablesorter\"));\n\n\t\ttables.forEach((table, index) => {\n\t\t\tthis.sanitizeLegacyTables(table)\n\t\t\t\n\t\t\tnew Tabulator(table, {\n\t\t\t\tindex: index,\n\t\t\t\tlayout: \"fitDataFill\",\n\n\t\t\t\tcolumnDefaults: {\n\t\t\t\t\tformatter: \"html\",\n\t\t\t\t\tresizable: true,\n\t\t\t\t\tminWidth: \"100px\"\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\n\t\tdocument.querySelectorAll(\"#cms [data-confirm]\").forEach((el) => {\n\t\t\tel.addEventListener(\"click\", (evt) => {\n\t\t\t evt.preventDefault();\n\t\t\t BsConfirm.popup(el.dataset.confirm)\n\t\t\t\t.then(() => {\n\t\t\t\t Axios.get(el.href)\n\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t// TODO(chris): check for success then show message and/or reload\n\t\t\t\t\t\tlocation = location;\n\t\t\t\t\t})\n\t\t\t\t\t.catch((err) => console.error(\"ERROR:\", err));\n\t\t\t\t})\n\t\t\t\t.catch(() => {});\n\t\t\t});\n\t\t });\n\t\tdocument.querySelectorAll(\"#cms [data-href]\").forEach((el) => {\n\t\t\tel.href = el.dataset.href.replace(\n\t\t\t\t/^ROOT\\//,\n\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t);\n\t\t});\n\t\t\t\n\t\tdocument.querySelectorAll(\"[href]\").forEach((element) => {\n\t\t\tlet orignal_href = element.getAttribute(\"href\");\n\t\t\tlet new_href = replaceRelativeLegacyLink(orignal_href);\n\t\t\telement.href = new_href;\n\t\t});\n\n\t\tdocument.querySelectorAll(\"[style*=background-color]\").forEach((element) => {\n\t\t\tif (element.style.backgroundColor == \"rgb(255, 255, 255)\"){\n\t\t\t\telement.style.backgroundColor = \"var(--fhc-background)\";\n\t\t\t}\n\t\t\tif(element.querySelector(\"*[style*=background-color]\")){\n\t\t\t\telement.style.backgroundColor = \"var(--fhc-tertiary)\";\n\t\t\t}\n\t\t});\n\n\t\tVue.nextTick(() => {\n\t\t\tdocument.querySelectorAll(\".card-header\").forEach((el) => {\n\t\t\t\tel.classList.add(\"fhc-primary\");\n\t\t\t});\n\t\t\tdocument.querySelectorAll(\".row\").forEach((el) => {\n\t\t\t\tel.classList.add(\"w-100\");\n\t\t\t\tel.classList.add(\"align-items-center\");\n\n\t\t\t});\n\t\t\tdocument.querySelectorAll(\".row h2\").forEach((el) => {\n\t\t\t\tel.classList.add(\"mb-0\");\n\t\t\t});\n\n\t\t})\n\n\t},\n\ttemplate: /*html*/ `\n\t \n\t
    \n\t\t
    \n\t
    \n\t

    Content was not found

    \n\t `,\n };\n ","import { replaceRelativeLegacyLink } from \"../../../../helpers/LegacyLinkReplaceHelper.js\";\n\nexport default {\n\tname: \"iframe_content\",\n\tprops: {\n\t\tcontent: { type: String, required: true }\n\t},\n\tcomputed: {\n\t\tsrcUrl() {\n\t\t\tconst parser = new DOMParser()\n\t\t\tconst doc = parser.parseFromString(`
    ${this.content}
    `, \"text/html\");\n\t\t\tconst iframe = doc.querySelector(\"iframe[src]\");\n\n\t\t\tif (!iframe)\n\t\t\t\treturn \"\";\n\n\t\t\tlet url = iframe.getAttribute(\"src\") || \"\";\n\t\t\treturn replaceRelativeLegacyLink(url);\n\t\t}\n\t},\n\ttemplate: `\n\t\t
    \n\t\t\t\n\t\t
    Keine URL gefunden.
    \n\t\t
    \n\t`\n};\n","import FhcCalendar from \"../../Calendar/LvPlan.js\";\n\nimport ApiLvPlan from '../../../api/factory/lvPlan.js';\n\nexport const DEFAULT_MODE_RAUMINFO = 'Week'\n\nexport default {\n\tname: \"RoomInformation\",\n\tcomponents: {\n\t\tFhcCalendar\n\t},\n\tprops:{\n\t\tviewData: Object, // NOTE(chris): this is inherited from router-view\n\t\tpropsViewData: Object\n\t},\n\tcomputed: {\n\t\tcurrentDay() {\n\t\t\treturn this.propsViewData?.focus_date || luxon.DateTime.now().setZone(this.viewData.timezone).toISODate();\n\t\t},\n\t\tcurrentMode() {\n\t\t\treturn this.propsViewData?.mode || DEFAULT_MODE_RAUMINFO;\n\t\t}\n\t},\n\tmethods:{\n\t\thandleChangeDate(day, newMode) {\n\t\t\treturn this.handleChangeMode(newMode, day);\n\t\t},\n\t\thandleChangeMode(newMode, day) {\n\t\t\tconst mode = newMode[0].toUpperCase() + newMode.slice(1)\n\t\t\tconst focus_date = day.toISODate();\n\n\t\t\tthis.$router.push({\n\t\t\t\tname: \"RoomInformation\",\n\t\t\t\tparams: {\n\t\t\t\t\tmode,\n\t\t\t\t\tfocus_date,\n\t\t\t\t\tort_kurzbz: this.propsViewData.ort_kurzbz\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tgetPromiseFunc(start, end) {\n\t\t\treturn [\n\t\t\t\tthis.$api.call(ApiLvPlan.getRoomInfo(this.propsViewData.ort_kurzbz, start.toISODate(), end.toISODate())),\n\t\t\t\tthis.$api.call(ApiLvPlan.getOrtReservierungen(this.propsViewData.ort_kurzbz, start.toISODate(), end.toISODate()))\n\t\t\t];\n\t\t}\n\t},\n\ttemplate: /*html*/`\n\t
    \n\t\t

    {{ $p.t('rauminfo/rauminfo') }} {{ propsViewData.ort_kurzbz }}

    \n\t\t
    \n\t\t\n\t
    `\n};\n","import Upload from '../../../components/Form/Upload/Dms.js';\nimport BsModal from '../../Bootstrap/Modal.js';\nimport VueDatePicker from '../../vueDatepicker.js.php';\n\nconst today = new Date()\nexport const AbgabeStudentDetail = {\n\tname: \"AbgabeStudentDetail\",\n\tcomponents: {\n\t\tUpload,\n\t\tBsModal,\n\t\tInputNumber: primevue.inputnumber,\n\t\tCheckbox: primevue.checkbox,\n\t\tDropdown: primevue.dropdown,\n\t\tTextarea: primevue.textarea,\n\t\tVueDatePicker\n\t},\n\tprops: {\n\t\tprojektarbeit: {\n\t\t\ttype: Object,\n\t\t\tdefault: null\n\t\t},\n\t\tviewMode: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\teidAkzeptiert: false,\n\t\t\tenduploadTermin: null,\n\t\t\tallActiveLanguages: FHC_JS_DATA_STORAGE_OBJECT.server_languages,\n\t\t\tform: Vue.reactive({\n\t\t\t\tsprache: '',\n\t\t\t\tabstract: '',\n\t\t\t\tabstract_en: '',\n\t\t\t\tschlagwoerter: '',\n\t\t\t\tschlagwoerter_en: '',\n\t\t\t\tkontrollschlagwoerter: '',\n\t\t\t\tseitenanzahl: 1,\n\t\t\t})\n\t\t}\n\t},\n\tmethods: {\n\t\tvalidate: function(termin) {\n\t\t\tif(!termin.file.length) {\n\t\t\t\tthis.$fhcAlert.alertWarning(this.$p.t('global/warningChooseFile'));\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\t\ttriggerEndupload() {\n\t\t\tif (!this.validate(this.enduploadTermin))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\t// post endabgabe\n\t\t\tconst formData = new FormData();\n\t\t\tformData.append('paabgabetyp_kurzbz', this.enduploadTermin.paabgabetyp_kurzbz)\n\t\t\tformData.append('projektarbeit_id', this.enduploadTermin.projektarbeit_id);\n\t\t\tformData.append('paabgabe_id', this.enduploadTermin.paabgabe_id)\n\t\t\tformData.append('student_uid', this.projektarbeit.student_uid)\n\t\t\tformData.append('bperson_id', this.projektarbeit.bperson_id)\n\t\t\t\n\t\t\t// TODO: validate/check for null etc.\n\t\t\tformData.append('sprache', this.form['sprache'].sprache)\n\t\t\tformData.append('abstract', this.form['abstract'])\n\t\t\tformData.append('abstract_en', this.form['abstract_en'])\n\t\t\tformData.append('schlagwoerter', this.form['schlagwoerter'])\n\t\t\tformData.append('schlagwoerter_en', this.form['schlagwoerter_en'])\n\t\t\tformData.append('seitenanzahl', this.form['seitenanzahl'])\n\t\t\t\n\t\t\tfor (let i = 0; i < this.enduploadTermin.file.length; i++) {\n\t\t\t\tformData.append('file', this.enduploadTermin.file[i]);\n\t\t\t}\n\t\t\tthis.$fhcApi.factory.lehre.postStudentProjektarbeitEndupload(formData)\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.handleUploadRes(res)\n\t\t\t\t})\n\t\t\t\n\t\t\tthis.$refs.modalContainerEnduploadZusatzdaten.hide()\n\t\t},\n\t\tdownloadAbgabe(termin) {\n\t\t\tthis.$fhcApi.factory.lehre.getStudentProjektarbeitAbgabeFile(termin.paabgabe_id, this.projektarbeit.student_uid)\n\t\t},\n\t\tformatDate(dateParam) {\n\t\t\tconst date = new Date(dateParam)\n\t\t\t// handle missing leading 0\n\t\t\tconst padZero = (num) => String(num).padStart(2, '0');\n\n\t\t\tconst month = padZero(date.getMonth() + 1); // Months are zero-based\n\t\t\tconst day = padZero(date.getDate());\n\t\t\tconst year = date.getFullYear();\n\n\t\t\treturn `${day}.${month}.${year}`;\n\t\t},\n\t\tupload(termin) {\n\n\t\t\tif (!this.validate(termin))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\tif(termin.bezeichnung === 'Endupload') {\n\t\t\t\t// open endupload form modal for further inputs\n\t\t\t\tthis.enduploadTermin = termin\n\t\t\t\tthis.$refs.modalContainerEnduploadZusatzdaten.show()\n\t\t\t} else {\n\t\t\t\tconst formData = new FormData();\n\t\t\t\tformData.append('paabgabetyp_kurzbz', termin.paabgabetyp_kurzbz)\n\t\t\t\tformData.append('projektarbeit_id', this.projektarbeit.projektarbeit_id)\n\t\t\t\tformData.append('paabgabe_id', termin.paabgabe_id)\n\t\t\t\tformData.append('student_uid', this.projektarbeit.student_uid)\n\t\t\t\tformData.append('bperson_id', this.projektarbeit.bperson_id)\n\t\t\t\t\n\t\t\t\tfor (let i = 0; i < termin.file.length; i++) {\n\t\t\t\t\tformData.append('file', termin.file[i]);\n\t\t\t\t}\n\t\t\t\tthis.$fhcApi.factory.lehre.postStudentProjektarbeitZwischenabgabe(formData)\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tthis.handleUploadRes(res)\n\t\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\thandleUploadRes(res) {\n\t\t\tif(res.meta.status == \"success\") {\n\t\t\t\tthis.$fhcAlert.alertSuccess('File erfolgreich hochgeladen')\n\t\t\t} else {\n\t\t\t\tthis.$fhcAlert.alertError('File upload error')\n\t\t\t}\n\t\t\t\n\t\t\tif(res.meta.signaturInfo) {\n\t\t\t\tthis.$fhcAlert.alertInfo(res.meta.signaturInfo)\n\t\t\t}\n\t\t},\n\t\tdateDiffInDays(datum, today){\n\t\t\tconst oneDayMs = 1000 * 60 * 60 * 24\n\t\t\treturn Math.round((new Date(datum) - new Date(today)) / oneDayMs)\n\t\t},\n\t\tgetDateStyle(termin, mode) {\n\t\t\tconst datum = new Date(termin.datum)\n\t\t\tconst abgabedatum = new Date(termin.abgabedatum)\n\t\t\t\n\t\t\t// todo: rework styling but keep the color pattern logic\n\t\t\t// https://wiki.fhcomplete.info/doku.php?id=cis:abgabetool_fuer_studierende\n\t\t\tlet color = 'white'\n\t\t\tlet fontColor = 'black'\n\t\t\tlet icon = '';\n\t\t\tif (termin.abgabedatum === null) {\n\t\t\t\tif(datum < today) {\n\t\t\t\t\tcolor = 'red'\n\t\t\t\t\tfontColor = 'white'\n\t\t\t\t\ticon = 'fa-triangle-exclamation'\n\t\t\t\t} else if (datum > today && this.dateDiffInDays(datum, today) <= 12) {\n\t\t\t\t\tcolor = 'yellow'\n\t\t\t\t\ticon = 'fa-circle-exclamation'\n\t\t\t\t}\n\t\t\t} else if(abgabedatum > datum) {\n\t\t\t\tcolor = 'pink' // aka \"hellrot\"\n\t\t\t\tfontColor = 'white'\n\t\t\t\ticon = 'fa-circle-question'\n\t\t\t} else {\n\t\t\t\tcolor = 'green'\n\t\t\t\ticon = 'fa-square-check'\n\t\t\t}\n\t\t\t\n\t\t\t//return `font-color: ${fontColor} ; background-color: ${color}; border-radius: 50%;`\n\t\t\tif( typeof mode !== 'undefined' || mode === 'icon') {\n\t\t\t\treturn icon;\n\t\t\t} else {\n\t\t\t\treturn 'abgabe-zieldatum-border-' + color;\n\t\t\t}\n\t\t},\n\t\topenBeurteilungLink(link) {\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\tgetOptionLabel(option) {\n\t\t\treturn option.sprache\n\t\t}\n\t},\n\twatch: {\n\t\tprojektarbeit(newVal) {\n\t\t\t// default select german if projektarbeit sprache was null\n\t\t\tthis.form.sprache = newVal.sprache ? this.allActiveLanguages.find(lang => lang.sprache == newVal.sprache) : this.allActiveLanguages.find(lang => lang.sprache == 'German')\n\t\t\tthis.form.abstract = newVal.abstract\n\t\t\tthis.form.abstract_en = newVal.abstract_en\n\t\t\tthis.form.schlagwoerter = newVal.schlagwoerter\n\t\t\tthis.form.schlagwoerter_en = newVal.schlagwoerter_en\n\t\t\tthis.form.kontrollschlagwoerter = newVal.kontrollschlagwoerter\n\t\t\tthis.form.seitenanzahl = newVal.seitenanzahl\n\t\t}\n\t},\n\tcomputed: {\n\t\tgetEid() {\n\t\t\treturn this.$p.t('abgabetool/c4eidesstattlicheErklaerung')\n\t\t},\n\t\tgetEnduploadErlaubt() {\n\t\t\treturn !this.eidAkzeptiert\n\t\t}\n\t},\n\tcreated() {\n\n\t},\n\tmounted() {\n\n\t},\n\ttemplate: `\n\t\t
    \n\t\t\n\t\t\t
    {{$p.t('abgabetool/c4abgabeStudentenbereich')}}
    \n\t\t\t
    \n\t\t\t\t

    {{projektarbeit?.betreuer}}

    \n\t\t\t\t

    {{projektarbeit?.titel}}

    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    {{$p.t('abgabetool/c4fixtermin')}}
    \n\t\t\t\t\t
    {{$p.t('abgabetool/c4zieldatum')}}
    \n\t\t\t\t\t
    {{$p.t('abgabetool/c4abgabetyp')}}
    \n\t\t\t\t\t
    {{$p.t('abgabetool/c4abgabekurzbz')}}
    \n\t\t\t\t\t
    {{$p.t('abgabetool/c4abgabedatum')}}
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t{{$p.t('abgabetool/c4fileupload')}}\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    {{ termin.bezeichnung }}
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t{{ termin.abgabedatum?.split(\"-\").reverse().join(\".\") }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t \t\n\t \t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t \t\n `,\n};\n\nexport default AbgabeStudentDetail;\n","export default {\n name: 'VerticalSplit',\n data: function() {\n return { \n availHeight: 0,\n topheight: 0,\n bottomheight: 0,\n mousePosY: 0, \n resize: false,\n vsplitter: null,\n vsplitterOffset: 0,\n selfOffsetTop: 0\n }; \n },\n template: `\n
    \n
    \n \n

    Top Panel

    \n
    \n
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n \n

    \n \n

    \n
    \n `,\n mounted: function() {\n this.calcHeights();\n this.trackVerticalSplitterOffsetTop();\n window.addEventListener('resize', this.calcHeights);\n },\n updated: function() {\n this.trackVerticalSplitterOffsetTop();\n },\n methods: {\n calcHeights: function() {\n var windowheight = window.innerHeight;\n var oldavailHeight = this.availHeight;\n this.selfOffsetTop = this.$refs.verticalsplit.offsetTop;\n this.availHeight = windowheight - this.selfOffsetTop - this.$refs.vsplitter.offsetHeight;\n if( (this.topheight === 0 && this.bottomheight === 0) || oldavailHeight === 0 ) {\n this.topheight = Math.floor(this.availHeight/2);\n } else {\n this.topheight = Math.floor( ((((this.topheight * 100) / oldavailHeight) / 100) * this.availHeight) );\n }\n this.bottomheight = this.availHeight - this.topheight;\n },\n collapseTop: function() {\n this.calcHeights();\n this.topheight = 0;\n this.bottomheight = this.availHeight;\n },\n collapseBottom: function() {\n this.calcHeights();\n this.topheight = this.availHeight;\n this.bottomheight = 0;\n },\n showBoth: function() {\n this.topheight = Math.floor(this.availHeight/2);\n this.bottomheight = Math.floor(this.availHeight/2);\n },\n isCollapsed: function() {\n if( this.topheight === 0 ) {\n return 'top';\n } else if ( this.bottomheight === 0 ) {\n return 'bottom';\n } else {\n return false;\n }\n },\n dragStart: function(e) {\n e.preventDefault();\n e.stopPropagation();\n window.addEventListener('mouseup', this.dragEnd);\n window.addEventListener('mousemove', this.drag);\n this.resize = true;\n this.mousePosY = e.clientY;\n },\n drag: function(e) {\n if( !this.resize ) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n var offsetY = e.clientY - this.mousePosY;\n this.topheight = this.topheight + offsetY;\n if( this.topheight < 0 ) {\n this.topheight = 0;\n }\n if( this.topheight > this.availHeight ) {\n this.topheight = this.availHeight;\n }\n this.bottomheight = this.availHeight - this.topheight;\n this.mousePosY = e.clientY;\n },\n dragEnd: function(e) {\n e.preventDefault();\n e.stopPropagation();\n window.removeEventListener('mousemove', this.drag);\n window.removeEventListener('mouseup', this.dragEnd);\n this.resize = false;\n this.mousePosY = e.clientY;\n },\n trackVerticalSplitterOffsetTop: function() {\n this.vsplitterOffset = this.$refs.vsplitter.offsetTop;\n }\n },\n computed: {\n topOrBottomClass: function() {\n return ((this.vsplitterOffset - this.selfOffsetTop) <= Math.floor(this.availHeight/2))\n ? 'top'\n : 'bottom';\n },\n topheightcss: function() {\n return this.topheight + 'px';\n },\n bottomheightcss: function() {\n return this.bottomheight + 'px';\n }\n }\n};","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport AbgabeDetail from \"./AbgabeStudentDetail.js\";\nimport VerticalSplit from \"../../verticalsplit/verticalsplit.js\";\n\nexport const AbgabetoolStudent = {\n\tname: \"AbgabetoolStudent\",\n\tcomponents: {\n\t\tCoreFilterCmpt,\n\t\tAbgabeDetail,\n\t\tVerticalSplit\n\t},\n\tprops: {\n\t\tstudent_uid_prop: {\n\t\t\tdefault: null\n\t\t},\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: () => ({uid: ''}),\n\t\t\tvalidator(value) {\n\t\t\t\treturn value && value.uid\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\ttabulatorUuid: Vue.ref(0),\n\t\t\tdomain: '',\n\t\t\tstudent_uid: null,\n\t\t\tdetail: null,\n\t\t\tprojektarbeiten: null,\n\t\t\tselectedProjektarbeit: null,\n\t\t\ttableBuiltResolve: null,\n\t\t\ttableBuiltPromise: null,\n\t\t\tabgabeTableOptions: {\n\t\t\t\tminHeight: 250,\n\t\t\t\tindex: 'projektarbeit_id',\n\t\t\t\tlayout: 'fitColumns',\n\t\t\t\tplaceholder: this.$p.t('global/noDataAvailable'),\n\t\t\t\tcolumns: [\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4details')), field: 'details', formatter: this.detailFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4beurteilung')), field: 'beurteilung', formatter: this.beurteilungFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4sem')), field: 'sem', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4stg')), field: 'stg', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4kontakt')), field: 'mail', formatter: this.mailFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4betreuer')), field: 'betreuer', formatter: this.centeredTextFormatter,widthGrow: 2},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4projekttyp')), field: 'typ', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4titel')), field: 'titel', formatter: this.centeredTextFormatter, widthGrow: 8}\n\t\t\t\t],\n\t\t\t\tpersistence: false,\n\t\t\t},\n\t\t\tabgabeTableEventHandlers: [{\n\t\t\t\tevent: \"tableBuilt\",\n\t\t\t\thandler: async () => {\n\t\t\t\t\tthis.tableBuiltResolve()\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tevent: \"cellClick\",\n\t\t\t\thandler: async (e, cell) => {\n\t\t\t\t\t\n\t\t\t\t\tif(cell.getColumn().getField() === \"details\") {\n\t\t\t\t\t\tconst val = cell.getValue()\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(val.mode === 'detailTermine') {\n\t\t\t\t\t\t\tthis.setDetailComponent(cell.getValue())\n\t\t\t\t\t\t} else if (val.mode === 'beurteilungDownload') {\n\t\t\t\t\t\t\tconst pdfExportLink = FHC_JS_DATA_STORAGE_OBJECT.app_root + 'cis/private/pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz='+val.betreuerart_kurzbz+'&projektarbeit_id='+val.projektarbeit_id+'&person_id=' + val.betreuer_person_id\n\t\t\t\t\t\t\t// const pdfExportLink2 = FHC_JS_DATA_STORAGE_OBJECT.app_root + 'cis/private/lehre/projektbeurteilungDocumentExport.php?betreuerart_kurzbz='+val.betreuerart_kurzbz+'&projektarbeit_id='+val.projektarbeit_id+'&person_id=' + val.betreuer_person_id\n\t\t\t\t\t\t\twindow.open(pdfExportLink, '_blank')\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if (cell.getColumn().getField() === \"beurteilung\") {\n\t\t\t\t\t\tconst val = cell.getValue()\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(val != '-') window.open(val, '_blank')\n\t\t\t\t\t} \n\t\t\t\t\te.stopPropagation()\n\n\t\t\t\t}\n\t\t\t}\n\t\t\t]};\n\t},\n\tmethods: {\n\t\tisPastDate(date) {\n\t\t\treturn new Date(date) < new Date(Date.now())\t\n\t\t},\n\t\tsetDetailComponent(details){\n\t\t\tthis.loadAbgaben(details).then((res)=> {\n\t\t\t\tconst pa = this.projektarbeiten?.retval?.find(projekarbeit => projekarbeit.projektarbeit_id == details.projektarbeit_id)\n\t\t\t\tpa.abgabetermine = res.data[0].retval\n\t\t\t\tpa.abgabetermine.forEach(termin => {\n\t\t\t\t\ttermin.file = []\n\t\t\t\t\ttermin.allowedToUpload = true\n\t\t\t\t\t\n\t\t\t\t\t// TODO: fixtermin logic?\n\t\t\t\t\tif(termin.bezeichnung == 'Endupload' && this.isPastDate(termin.datum)) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t// termin.allowedToUpload = false\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// termin.allowedToUpload = true\n\t\t\t\t\t}\n\n\t\t\t\t})\n\t\t\t\tpa.betreuer = this.buildBetreuer(pa)\n\t\t\t\tpa.student_uid = this.student_uid\n\n\t\t\t\tthis.selectedProjektarbeit = pa\n\n\t\t\t\t\n\t\t\t\tthis.$refs.verticalsplit.showBoth()\n\t\t\t\t\n\t\t\t})\n\t\t\t\n\t\t},\n\t\tcenteredTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\treturn '
    ' +\n\t\t\t\t'

    '+val+'

    '\n\t\t},\n\t\tdetailFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\tif(val.mode === 'detailTermine') {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t} else if (val.mode === 'beurteilungDownload') {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t}\n\t\t},\n\t\tmailFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t},\n\t\tbeurteilungFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\tif(val) {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t} else return '-'\n\t\t},\n\t\ttableResolve(resolve) {\n\t\t\tthis.tableBuiltResolve = resolve\n\t\t},\n\t\tbuildMailToLink(abgabe) {\n\t\t\treturn 'mailto:' + abgabe.mitarbeiter_uid +'@'+ this.domain\n\t\t},\n\t\tbuildBetreuer(abgabe) {\n\t\t\treturn abgabe.betreuerart_beschreibung + ': ' + (abgabe.btitelpre ? abgabe.btitelpre + ' ' : '') + abgabe.bvorname + ' ' + abgabe.bnachname + (abgabe.btitelpost ? ' ' + abgabe.btitelpost : '')\n\t\t},\n\t\tsetupData(data){\n\t\t\tthis.projektarbeiten = data[0]\n\t\t\tthis.domain = data[1]\n\t\t\tthis.student_uid = data[2]\n\t\t\tconst d = data[0]?.retval?.map(projekt => {\n\t\t\t\tlet mode = 'detailTermine'\n\t\t\t\t\n\t\t\t\tif (projekt.babgeschickt || projekt.zweitbetreuer_abgeschickt) {\n\t\t\t\t\t// mode = 'beurteilungDownload' // build dl link for both betreuer documents\n\t\t\t\t\tprojekt.beurteilungLink = FHC_JS_DATA_STORAGE_OBJECT.app_root + 'cis/private/pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz='+projekt.betreuerart_kurzbz+'&projektarbeit_id='+projekt.projektarbeit_id+'&person_id=' + projekt.bperson_id\n\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn {\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tstudent_uid: this.student_uid,\n\t\t\t\t\t\tprojektarbeit_id: projekt.projektarbeit_id,\n\t\t\t\t\t\tbetreuer_person_id: projekt.bperson_id,\n\t\t\t\t\t\tbetreuerart_kurzbz: projekt.betreuerart_kurzbz,\n\t\t\t\t\t\tmode\n\t\t\t\t\t},\n\t\t\t\t\tbeurteilung: projekt.beurteilungLink ?? null,\n\t\t\t\t\tsem: projekt.studiensemester_kurzbz,\n\t\t\t\t\tstg: projekt.kurzbzlang,\n\t\t\t\t\tmail: this.buildMailToLink(projekt),\n\t\t\t\t\tbetreuer: this.buildBetreuer(projekt),\n\t\t\t\t\ttyp: projekt.projekttypbezeichnung,\n\t\t\t\t\ttitel: projekt.titel\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tthis.$refs.abgabeTable.tabulator.setColumns(this.abgabeTableOptions.columns)\n\t\t\tthis.$refs.abgabeTable.tabulator.setData(d);\n\t\t},\n\t\tloadProjektarbeiten() {\n\t\t\tthis.$fhcApi.factory.lehre.getStudentProjektarbeiten(this.student_uid_prop || this.viewData?.uid || null)\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res?.data) this.setupData(res.data)\n\t\t\t\t})\n\t\t},\n\t\tloadAbgaben(details) {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tthis.$fhcApi.factory.lehre.getStudentProjektabgaben(details)\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tresolve(res)\n\t\t\t\t\t})\n\t\t\t})\t\n\t\t},\n\t\thandleUuidDefined(uuid) {\n\t\t\tthis.tabulatorUuid = uuid\n\t\t},\n\t\tcalcMaxTableHeight() {\n\t\t\tconst tableID = this.tabulatorUuid ? ('-' + this.tabulatorUuid) : ''\n\t\t\tconst tableDataSet = document.getElementById('filterTableDataset' + tableID);\n\t\t\tif(!tableDataSet) return\n\t\t\tconst rect = tableDataSet.getBoundingClientRect();\n\n\t\t\tthis.abgabeTableOptions.height = window.visualViewport.height - rect.top\n\t\t\tthis.$refs.abgabeTable.tabulator.setHeight(this.abgabeTableOptions.height)\n\t\t},\n\t\tasync setupMounted() {\n\t\t\tthis.tableBuiltPromise = new Promise(this.tableResolve)\n\t\t\tawait this.tableBuiltPromise\n\t\t\t\n\t\t\tthis.loadProjektarbeiten()\n\n\t\t\tthis.$refs.verticalsplit.collapseBottom()\n\t\t\t//this.calcMaxTableHeight()\n\t\t}\n\t},\n\twatch: {\n\n\t},\n\tcomputed: {\n\t\tisViewMode() {\n\t\t\treturn this.student_uid !== this.viewData.uid\n\t\t}\n\t},\n\tcreated() {\n\n\t},\n\tmounted() {\n\t\tthis.setupMounted()\n\t},\n\ttemplate: `\n\t\t\t\t\t\n\t\t\n\t\t\n\t\n `,\n};\n\nexport default AbgabetoolStudent;\n","import BsModal from '../../Bootstrap/Modal.js';\nimport VueDatePicker from '../../vueDatepicker.js.php';\n\nconst today = new Date()\nexport const AbgabeMitarbeiterDetail = {\n\tname: \"AbgabeMitarbeiterDetail\",\n\tcomponents: {\n\t\tBsModal,\n\t\tInputNumber: primevue.inputnumber,\n\t\tCheckbox: primevue.checkbox,\n\t\tDropdown: primevue.dropdown,\n\t\tTextarea: primevue.textarea,\n\t\tVueDatePicker\n\t},\n\tprops: {\n\t\tprojektarbeit: {\n\t\t\ttype: Object,\n\t\t\tdefault: null\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\toldPaBeurteilungLink: 'https://moodle.technikum-wien.at/mod/page/view.php?id=1005052', // TODO: inject from app & app provide link from config\n\t\t\teidAkzeptiert: false,\n\t\t\tenduploadTermin: null,\n\t\t\tallActiveLanguages: FHC_JS_DATA_STORAGE_OBJECT.server_languages,\n\t\t\t// TODO: fetch types\n\t\t\tallAbgabeTypes: [\n\t\t\t\t{\n\t\t\t\t\tpaabgabetyp_kurzbz: 'abstract',\n\t\t\t\t\tbezeichnung: 'Entwurf'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpaabgabetyp_kurzbz: 'zwischen',\n\t\t\t\t\tbezeichnung: 'Zwischenabgabe'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpaabgabetyp_kurzbz: 'note',\n\t\t\t\t\tbezeichnung: 'Benotung'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpaabgabetyp_kurzbz: 'end',\n\t\t\t\t\tbezeichnung: 'Endupload'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpaabgabetyp_kurzbz: 'enda',\n\t\t\t\t\tbezeichnung: 'Endabgabe im Sekretariat'\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\tmethods: {\n\t\topenZusatzdatenModal(termin) {\n\t\t\t\t\n\t\t},\n\t\tsaveTermin(termin) {\n\t\t\tconst paabgabe_id = termin.paabgabe_id\n\t\t\tthis.$fhcApi.factory.lehre.postProjektarbeitAbgabe(termin).then( (res) => {\n\t\t\t\tif(res?.meta?.status == 'success') {\n\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('ui/gespeichert'))\n\n\t\t\t\t\tif(paabgabe_id === -1) { // new abgabe has been inserted\n\t\t\t\t\t\ttermin.paabgabe_id = res?.data?.retval\n\n\t\t\t\t\t\tthis.projektarbeit.abgabetermine.push({ // new abgatermin row\n\n\t\t\t\t\t\t\t'paabgabe_id': -1,\n\t\t\t\t\t\t\t'projektarbeit_id': this.projektarbeit.projektarbeit_id,\n\t\t\t\t\t\t\t'fixtermin': false,\n\t\t\t\t\t\t\t'kurzbz': '',\n\t\t\t\t\t\t\t'datum': new Date().toISOString().split('T')[0],\n\t\t\t\t\t\t\t'paabgabetyp_kurzbz': '',\n\t\t\t\t\t\t\t'bezeichnung': '',\n\t\t\t\t\t\t\t'abgabedatum': null,\n\t\t\t\t\t\t\t'insertvon': this.viewData?.uid ?? '',\n\t\t\t\t\t\t\t'allowedToSave': true,\n\t\t\t\t\t\t\t'allowedToDelete': true\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t} else if(res?.meta?.status == 'error'){\n\t\t\t\t\tthis.$fhcAlert.alertError()\n\t\t\t\t}\n\t\t\t\t\n\t\t\t})\n\t\t},\n\t\tdeleteTermin(termin) {\n\t\t\tthis.$fhcApi.factory.lehre.deleteProjektarbeitAbgabe(termin.paabgabe_id).then( (res) => {\n\t\t\t\tif(res?.meta?.status == 'success') {\n\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('ui/genericDeleted', [this.$p.t('abgabetool/abgabe')]))\n\t\t\t\t\t// this.$p.t('global/tooltipLektorDeleteKontrolle', [this.$entryParams.permissions.kontrolleDeleteMaxReach ])\n\t\t\t\t\tconst deletedTerminIndex = this.projektarbeit.abgabetermine.findIndex(t => t.paabgabe_id === termin.paabgabe_id)\n\t\t\t\t\tthis.projektarbeit.abgabetermine.splice(deletedTerminIndex, 1)\n\n\n\t\t\t\t} else if(res?.meta?.status == 'error'){\n\t\t\t\t\tthis.$fhcAlert.alertError()\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t\tvalidate: function(termin) {\n\t\t\tif(!termin.file.length) {\n\t\t\t\tthis.$fhcAlert.alertWarning(this.$p.t('global/warningChooseFile'));\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\t\tdownloadAbgabe(termin) {\n\t\t\tthis.$fhcApi.factory.lehre.getStudentProjektarbeitAbgabeFile(termin.paabgabe_id, this.projektarbeit.student_uid)\n\t\t},\n\t\tdateDiffInDays(datum, today){\n\t\t\tconst oneDayMs = 1000 * 60 * 60 * 24\n\t\t\treturn Math.round((new Date(datum) - new Date(today)) / oneDayMs)\n\t\t},\n\t\tgetDateStyle(termin) {\n\t\t\tconst datum = new Date(termin.datum)\n\t\t\tconst abgabedatum = new Date(termin.abgabedatum)\n\n\t\t\t// todo: rework styling but keep the color pattern logic\n\t\t\t// https://wiki.fhcomplete.info/doku.php?id=cis:abgabetool_fuer_studierende\n\t\t\tlet color = 'white'\n\t\t\tlet fontColor = 'black'\n\t\t\tif (termin.abgabedatum === null) {\n\t\t\t\tif(datum < today) {\n\t\t\t\t\tcolor = 'red'\n\t\t\t\t\tfontColor = 'white'\n\t\t\t\t} else if (datum > today && this.dateDiffInDays(datum, today) <= 12) {\n\t\t\t\t\tcolor = 'yellow'\n\t\t\t\t}\n\t\t\t} else if(abgabedatum > datum) {\n\t\t\t\tcolor = 'pink' // aka \"hellrot\"\n\t\t\t\tfontColor = 'white'\n\t\t\t} else {\n\t\t\t\tcolor = 'green'\n\t\t\t}\n\n\t\t\treturn `font-color: ${fontColor} ; background-color: ${color}; border-radius: 50%;`\n\t\t},\n\t\topenBeurteilungLink(link) {\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\tgetOptionLabelSprache(option) {\n\t\t\treturn option.sprache\n\t\t},\n\t\tgetOptionLabelAbgabetyp(option){\n\t\t\treturn option.bezeichnung\n\t\t},\n\t\tformatDate(dateParam) {\n\t\t\tconst date = new Date(dateParam)\n\t\t\t// handle missing leading 0\n\t\t\tconst padZero = (num) => String(num).padStart(2, '0');\n\n\t\t\tconst month = padZero(date.getMonth() + 1); // Months are zero-based\n\t\t\tconst day = padZero(date.getDate());\n\t\t\tconst year = date.getFullYear();\n\n\t\t\treturn `${day}.${month}.${year}`;\n\t\t},\n\t\topenStudentPage() {\n\t\t\tconst link = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ '/Cis/Abgabetool/Student/' + this.projektarbeit?.student_uid\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\topenPlagiatcheck() {\n\t\t\t// todo: hardcoded turnitin link?\n\t\t\tconst link = \"https://technikum-wien.turnitin.com/sso/sp/redwood/saml/5IyfmBr2OcSIaWQTKlFCGj/start\"\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\topenBenotung() {\n\t\t\tconst path = this.projektarbeit?.betreuerart_kurzbz == 'Zweitbegutachter' ? 'ProjektarbeitsbeurteilungZweitbegutachter' : 'ProjektarbeitsbeurteilungErstbegutachter'\n\t\t\tconst link = FHC_JS_DATA_STORAGE_OBJECT.app_root + 'index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/' + path\n\t\t\twindow.open(link, '_blank')\n\t\t}\n\t},\n\tcomputed: {\n\t\tgetEid() {\n\t\t\treturn this.$p.t('abgabetool/c4eidesstattlicheErklaerung')\n\t\t},\n\t\tgetEnduploadErlaubt() {\n\t\t\treturn !this.eidAkzeptiert\n\t\t},\n\t\tgetSemesterBenotbar(){\n\t\t\treturn this.projektarbeit?.isCurrent ?? false\n\t\t},\n\t\tendUploadVorhanden(){\n\t\t\treturn this.projektarbeit?.abgabetermine.find(abgabe => abgabe.paabgabetyp_kurzbz === 'end' && abgabe.abgabedatum !== null)\n\t\t}\n\t\t\n\t},\n\tcreated() {\n\n\t},\n\tmounted() {\n\n\t},\n\ttemplate: `\n\t\t
    \n\t\t\n\n\t\t\t
    {{$p.t('abgabetool/c4abgabeMitarbeiterbereich')}}
    \n\n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t

    {{projektarbeit?.student}}

    \n\t\t\t\t\t

    {{projektarbeit?.titel}}

    \n\t\t\t\t\t

    {{projektarbeit?.zweitbegutachter}}

    \n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tKein Endupload vorhanden!\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    {{$p.t('abgabetool/c4fixtermin')}}
    \n\t\t\t\t\t
    {{$p.t('abgabetool/c4zieldatum')}}
    \n\t\t\t\t\t
    {{$p.t('abgabetool/c4abgabetyp')}}
    \n\t\t\t\t\t
    {{$p.t('abgabetool/c4abgabekurzbz')}}
    \n\t\t\t\t\t
    {{$p.t('abgabetool/c4abgabedatum')}}
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t
    keine Termine gefunden!
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t

    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t{{ termin.abgabedatum?.split(\"-\").reverse().join(\".\") }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\n`,\n};\n\nexport default AbgabeMitarbeiterDetail;\n","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport AbgabeDetail from \"./AbgabeMitarbeiterDetail.js\";\nimport VerticalSplit from \"../../verticalsplit/verticalsplit.js\"\nimport BsModal from '../../Bootstrap/Modal.js';\nimport VueDatePicker from '../../vueDatepicker.js.php';\n\nexport const AbgabetoolMitarbeiter = {\n\tname: \"AbgabetoolMitarbeiter\",\n\tcomponents: {\n\t\tBsModal,\n\t\tCoreFilterCmpt,\n\t\tAbgabeDetail,\n\t\tVerticalSplit,\n\t\tDropdown: primevue.dropdown,\n\t\tTextarea: primevue.textarea,\n\t\tVueDatePicker\n\t},\n\tprops: {\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: () => ({name: '', uid: ''}),\n\t\t\tvalidator(value) {\n\t\t\t\treturn value && value.name && value.uid\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tsaving: false,\n\t\t\tloading: false,\n\t\t\t// TODO: fetch types\n\t\t\tallAbgabeTypes: [\n\t\t\t\t{\n\t\t\t\t\tpaabgabetyp_kurzbz: 'abstract',\n\t\t\t\t\tbezeichnung: 'Entwurf'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpaabgabetyp_kurzbz: 'zwischen',\n\t\t\t\t\tbezeichnung: 'Zwischenabgabe'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpaabgabetyp_kurzbz: 'note',\n\t\t\t\t\tbezeichnung: 'Benotung'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpaabgabetyp_kurzbz: 'end',\n\t\t\t\t\tbezeichnung: 'Endupload'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpaabgabetyp_kurzbz: 'enda',\n\t\t\t\t\tbezeichnung: 'Endabgabe im Sekretariat'\n\t\t\t\t}\n\t\t\t],\n\t\t\tserienTermin: Vue.reactive({\n\t\t\t\tdatum: new Date(),\n\t\t\t\tbezeichnung: {\n\t\t\t\t\tpaabgabetyp_kurzbz: 'zwischen',\n\t\t\t\t\tbezeichnung: 'Zwischenabgabe'\n\t\t\t\t},\n\t\t\t\tkurzbz: ''\n\t\t\t}),\n\t\t\tshowAll: false,\n\t\t\ttabulatorUuid: Vue.ref(0),\n\t\t\tselectedData: [],\n\t\t\tdomain: '',\n\t\t\tstudent_uid: null,\n\t\t\tdetail: null,\n\t\t\tdetailOffset: 0,\n\t\t\tprojektarbeiten: null,\n\t\t\tselectedProjektarbeit: null,\n\t\t\ttableBuiltResolve: null,\n\t\t\ttableBuiltPromise: null,\n\t\t\tabgabeTableOptions: {\n\t\t\t\theight: 700,\n\t\t\t\tindex: 'projektarbeit_id',\n\t\t\t\tlayout: 'fitDataStretch',\n\t\t\t\tplaceholder: this.$p.t('global/noDataAvailable'),\n\t\t\t\tselectable: true,\n\t\t\t\tselectableCheck: this.selectionCheck,\n\t\t\t\tcolumns: [\n\t\t\t\t\t{\n\t\t\t\t\t\tformatter: 'rowSelection',\n\t\t\t\t\t\ttitleFormatter: 'rowSelection',\n\t\t\t\t\t\ttitleFormatterParams: {\n\t\t\t\t\t\t\trowRange: \"active\" // Only toggle the values of the active filtered rows\n\t\t\t\t\t\t},\n\t\t\t\t\t\thozAlign:\"center\",\n\t\t\t\t\t\theaderSort: false,\n\t\t\t\t\t\tfrozen: true,\n\t\t\t\t\t\twidth: 70\n\t\t\t\t\t},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4details')), field: 'details', formatter: this.detailFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4personenkennzeichen')), field: 'pkz', formatter: this.pkzTextFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4kontakt')), field: 'mail', formatter: this.mailFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4vorname')), field: 'vorname', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4nachname')), field: 'nachname', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4projekttyp')), field: 'projekttyp_kurzbz', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4stg')), field: 'stg', formatter: this.centeredTextFormatter, widthGrow: 2},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4sem')), field: 'studiensemester_kurzbz', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4titel')), field: 'titel', formatter: this.centeredTextFormatter, maxWidth: 500, widthGrow: 8},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4betreuerart')), field: 'betreuerart_beschreibung',formatter: this.centeredTextFormatter, widthGrow: 8}\n\t\t\t\t],\n\t\t\t\tpersistence: false,\n\t\t\t},\n\t\t\tabgabeTableEventHandlers: [{\n\t\t\t\tevent: \"tableBuilt\",\n\t\t\t\thandler: async () => {\n\t\t\t\t\tthis.tableBuiltResolve()\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tevent: \"cellClick\",\n\t\t\t\thandler: async (e, cell) => {\n\t\t\t\t\tif(cell.getColumn().getField() === \"details\") {\n\t\t\t\t\t\tthis.setDetailComponent(cell.getValue())\n\t\t\t\t\t\tthis.undoSelection(cell)\n\t\t\t\t\t} else if (cell.getColumn().getField() === \"mail\") {\n\t\t\t\t\t\tthis.undoSelection(cell)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tevent: \"rowSelectionChanged\",\n\t\t\t\thandler: async(data) => {\n\t\t\t\t\tthis.selectedData = data\n\t\t\t\t}\n\t\t\t}\n\t\t\t]};\n\t},\n\tmethods: {\n\t\tgetOptionLabelAbgabetyp(option){\n\t\t\treturn option.bezeichnung\n\t\t},\n\t\tformatDate(dateParam) {\n\t\t\tconst date = new Date(dateParam)\n\t\t\t// handle missing leading 0\n\t\t\tconst padZero = (num) => String(num).padStart(2, '0');\n\n\t\t\tconst month = padZero(date.getMonth() + 1); // Months are zero-based\n\t\t\tconst day = padZero(date.getDate());\n\t\t\tconst year = date.getFullYear();\n\n\t\t\treturn `${day}.${month}.${year}`;\n\t\t},\n\t\tundoSelection(cell) {\n\t\t\t// checks if cells row is selected and unselects -> imitates columns which dont trigger row selection\n\t\t\t// but actually just revert it after the fact\n\n\t\t\tconst row = cell.getRow()\n\t\t\tif(row.isSelected()) {\n\t\t\t\trow.deselect();\n\t\t\t}\n\t\t},\n\t\tselectionCheck(row) {\n\t\t\tconst data = row.getData()\n\t\t\tif(data?.betreuerart_kurzbz == 'Zweitbegutachter') return false\n\t\t\treturn true\n\t\t},\n\t\tshowDeadlines(){\n\t\t\tconst link = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ '/Cis/Abgabetool/Deadlines'\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\ttoggleShowAll(showall) {\n\t\t\tthis.showAll = showall\n\t\t\tthis.loading = true\n\t\t\tthis.loadProjektarbeiten(showall, () => {\n\t\t\t\tthis.$refs.abgabeTable?.tabulator.redraw(true)\n\t\t\t\tthis.$refs.abgabeTable?.tabulator.setSort([]);\n\t\t\t\tthis.loading = false\n\t\t\t})\n\t\t},\n\t\topenAddSeriesModal() {\n\t\t\tthis.$refs.modalContainerAddSeries.show()\n\t\t},\n\t\taddSeries() {\n\t\t\tthis.saving = true\n\t\t\tthis.$fhcApi.factory.lehre.postSerientermin(\n\t\t\t\tthis.serienTermin.datum.toISOString(),\n\t\t\t\tthis.serienTermin.bezeichnung.paabgabetyp_kurzbz,\n\t\t\t\tthis.serienTermin.bezeichnung.bezeichnung,\n\t\t\t\tthis.serienTermin.kurzbz,\n\t\t\t\tthis.selectedData?.map(projekt => projekt.projektarbeit_id)\n\t\t\t).then(res => {\n\t\t\t\tif (res.meta.status === \"success\" && res.data) {\n\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('abgabetool/serienTerminGespeichert'))\n\t\t\t\t\t// TODO: sticky lifetime erhöhen um sinnvoll lesen zu können?\n\t\t\t\t\tthis.$fhcAlert.alertInfo(this.$p.t('abgabetool/serienTerminEmailSentInfo', [this.createInfoString(res.data)]));\n\t\t\t\t} else {\n\t\t\t\t\tthis.$fhcAlert.alertError(this.$p.t('abgabetool/errorSerienterminSpeichern'))\n\t\t\t\t}\n\t\t\t}).finally(()=>{\n\t\t\t\tthis.saving = false\n\t\t\t})\n\n\t\t\tthis.$refs.modalContainerAddSeries.hide()\n\t\t},\n\t\tcreateInfoString(data) {\n\t\t\tlet str = '';\n\t\t\t\n\t\t\tdata.forEach(name => {\n\t\t\t\tstr += name\n\t\t\t\tstr += '; '\n\t\t\t})\n\t\t\t\n\t\t\treturn str\n\t\t},\n\t\tisPastDate(date) {\n\t\t\treturn new Date(date) < new Date(Date.now())\n\t\t},\n\t\tsetDetailComponent(details){\n\t\t\tthis.loadAbgaben(details).then((res)=> {\n\t\t\t\tconst pa = this.projektarbeiten?.retval?.find(projekarbeit => projekarbeit.projektarbeit_id == details.projektarbeit_id)\n\t\t\t\tpa.abgabetermine = res.data[0].retval\n\t\t\t\tpa.isCurrent = res.data[1]\n\t\t\t\tpa.abgabetermine.push({ // new abgatermin row\n\n\t\t\t\t\t'paabgabe_id': -1,\n\t\t\t\t\t'projektarbeit_id': pa.projektarbeit_id,\n\t\t\t\t\t'fixtermin': false,\n\t\t\t\t\t'kurzbz': '',\n\t\t\t\t\t'datum': new Date().toISOString().split('T')[0],\n\t\t\t\t\t'paabgabetyp_kurzbz': '',\n\t\t\t\t\t'bezeichnung': '',\n\t\t\t\t\t'abgabedatum': null,\n\t\t\t\t\t'insertvon': this.viewData?.uid ?? ''\n\t\t\t\t\t\n\t\t\t\t})\n\t\t\t\tpa.abgabetermine.forEach(termin => {\n\t\t\t\t\ttermin.file = []\n\t\t\t\t\ttermin.allowedToSave = termin.insertvon == this.viewData?.uid && pa.betreuerart_kurzbz != 'Zweitbegutachter'\n\t\t\t\t\ttermin.allowedToDelete = termin.allowedToSave && !termin.abgabedatum\n\t\t\t\t\t\n\t\t\t\t\ttermin.bezeichnung = {\n\t\t\t\t\t\tbezeichnung: termin.bezeichnung,\n\t\t\t\t\t\tpaabgabetyp_kurzbz: termin.paabgabetyp_kurzbz\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tpa.betreuer = this.buildBetreuer(pa)\n\t\t\t\tpa.student_uid = details.student_uid\n\t\t\t\tpa.student = `${pa.vorname} ${pa.nachname}`\n\t\t\t\t\n\t\t\t\tthis.selectedProjektarbeit = pa\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tthis.$refs.verticalsplit.showBoth()\n\t\t\t\t\n\t\t\t\n\t\t\t})\n\t\t},\n\t\tcenteredTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\tif(!val) return\n\t\t\t\n\t\t\treturn '
    ' +\n\t\t\t\t'

    '+val+'

    '\n\t\t},\n\t\tdetailFormatter(cell) {\n\t\t\treturn '
    ' +\n\t\t\t\t'
    '\n\t\t},\n\t\tmailFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\treturn '
    ' +\n\t\t\t\t'
    '\n\t\t},\n\t\tbeurteilungFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\tif(val) {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t} else return '-'\n\t\t},\n\t\tpkzTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\treturn '
    ' +\n\t\t\t\t'

    '+val+'

    '\n\t\t},\n\t\ttableResolve(resolve) {\n\t\t\tthis.tableBuiltResolve = resolve\n\t\t},\n\t\tbuildMailToLink(abgabe) {\n\t\t\treturn 'mailto:' + abgabe.uid +'@'+ this.domain\n\t\t},\n\t\tbuildPKZ(projekt) {\n\t\t\treturn `${projekt.uid} / ${projekt.matrikelnr}`\n\t\t},\n\t\tbuildStg(projekt) {\n\t\t\treturn (projekt.typ + projekt.kurzbz)?.toUpperCase()\t\n\t\t},\n\t\tbuildBetreuer(abgabe) {\n\t\t\t// TODO: preload and insert own titled name of betreuer somehow\n\t\t\treturn abgabe.betreuerart_beschreibung + ': ' + (abgabe.btitelpre ? abgabe.btitelpre + ' ' : '') + abgabe.bvorname + ' ' + abgabe.bnachname + (abgabe.btitelpost ? ' ' + abgabe.btitelpost : '')\n\t\t},\n\t\tsetupData(data){\n\t\t\tthis.projektarbeiten = data[0]\n\t\t\tthis.domain = data[1]\n\t\t\t\n\t\t\tconst d = data[0]?.retval?.map(projekt => {\n\t\t\t\tlet mode = 'detailTermine'\n\n\t\t\t\treturn {\n\t\t\t\t\t...projekt,\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tstudent_uid: projekt.uid,\n\t\t\t\t\t\tprojektarbeit_id: projekt.projektarbeit_id,\n\t\t\t\t\t},\n\t\t\t\t\tpkz: this.buildPKZ(projekt),\n\t\t\t\t\tbeurteilung: projekt.beurteilungLink ?? null,\n\t\t\t\t\tsem: projekt.studiensemester_kurzbz,\n\t\t\t\t\tstg: this.buildStg(projekt),\n\t\t\t\t\tmail: this.buildMailToLink(projekt),\n\t\t\t\t\ttyp: projekt.projekttyp_kurzbz,\n\t\t\t\t\ttitel: projekt.titel\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tthis.$refs.abgabeTable.tabulator.setColumns(this.abgabeTableOptions.columns)\n\t\t\tthis.$refs.abgabeTable.tabulator.setData(d);\n\t\t},\n\t\tloadProjektarbeiten(all = false, callback) {\n\t\t\tthis.$fhcApi.factory.lehre.getMitarbeiterProjektarbeiten(this.viewData?.uid ?? null, all)\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res?.data) this.setupData(res.data)\n\t\t\t\t}).finally(() => {\n\t\t\t\t\tif(callback) {\n\t\t\t\t\t\tcallback()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\t\tloadAbgaben(details) {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tthis.$fhcApi.factory.lehre.getStudentProjektabgaben(details)\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tresolve(res)\n\t\t\t\t\t})\n\t\t\t})\n\t\t},\n\t\thandleUuidDefined(uuid) {\n\t\t\tthis.tabulatorUuid = uuid\n\t\t},\n\t\tcalcMaxTableHeight() {\n\t\t\tconst tableID = this.tabulatorUuid ? ('-' + this.tabulatorUuid) : ''\n\t\t\tconst tableDataSet = document.getElementById('filterTableDataset' + tableID);\n\t\t\tif(!tableDataSet) return\n\t\t\tconst rect = tableDataSet.getBoundingClientRect();\n\n\t\t\tthis.abgabeTableOptions.height = window.visualViewport.height - rect.top\n\t\t\tthis.$refs.abgabeTable.tabulator.setHeight(this.abgabeTableOptions.height)\n\t\t},\n\t\tasync setupMounted() {\n\t\t\tthis.tableBuiltPromise = new Promise(this.tableResolve)\n\t\t\tawait this.tableBuiltPromise\n\n\t\t\tthis.loadProjektarbeiten()\n\n\n\t\t\tthis.$refs.verticalsplit.collapseBottom()\n\t\t\tthis.calcMaxTableHeight()\n\t\t\t\n\t\t}\n\t},\n\twatch: {\n\n\t},\n\tcomputed: {\n\n\t},\n\tcreated() {\n\n\t},\n\tmounted() {\n\t\tthis.setupMounted()\n\t},\n\ttemplate: `\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\n\t \n `,\n};\n\nexport default AbgabetoolMitarbeiter;\n","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\n\nexport const DeadlineOverview = {\n\tname: \"DeadlineOverview\",\n\tcomponents: {\n\t\tCoreFilterCmpt,\n\t},\n\tprops: {\n\t\tperson_uid_prop: {\n\t\t\tdefault: null\t\n\t\t},\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: () => ({name: '', uid: ''}),\n\t\t\tvalidator(value) {\n\t\t\t\treturn value && value.name && value.uid\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tfullName: null, // TODO: fetch this somewhere\n\t\t\tdeadlines: null,\n\t\t\ttabulatorUuid: Vue.ref(0),\n\t\t\ttableBuiltResolve: null,\n\t\t\ttableBuiltPromise: null,\n\t\t\tdeadlineTableOptions: {\n\t\t\t\theight: 700,\n\t\t\t\tindex: 'projektarbeit_id',\n\t\t\t\tlayout: 'fitColumns',\n\t\t\t\tplaceholder: this.$p.t('global/noDataAvailable'),\n\t\t\t\tcolumns: [\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4zieldatum')), field: 'datum', formatter: this.centeredTextFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4fixtermin')), field: 'fixterminstring', formatter: this.centeredTextFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4abgabetyp')), field: 'typ_bezeichnung', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4abgabekurzbz')), field: 'kurzbz', formatter: this.centeredTextFormatter, widthGrow: 3},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('person/studentIn')), field: 'student', formatter: this.centeredTextFormatter, widthGrow: 2},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4stg')), field: 'stg', formatter: this.centeredTextFormatter,widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4sem')), field: 'semester', formatter: this.centeredTextFormatter, widthGrow: 1}\n\t\t\t\t],\n\t\t\t\tpersistence: false,\n\t\t\t},\n\t\t\tdeadlineTableEventHandlers: [{\n\t\t\t\tevent: \"tableBuilt\",\n\t\t\t\thandler: async () => {\n\t\t\t\t\tthis.tableBuiltResolve()\n\t\t\t\t}\n\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tevent: \"cellClick\",\n\t\t\t\t\thandler: async (e, cell) => {\n\n\t\t\t\t\t\tif(cell.getColumn().getField() === \"details\") {\n\t\t\t\t\t\t\tconst val = cell.getValue()\n\n\t\t\t\t\t\t\tif(val.mode === 'detailTermine') {\n\t\t\t\t\t\t\t\tthis.setDetailComponent(cell.getValue())\n\t\t\t\t\t\t\t} else if (val.mode === 'beurteilungDownload') {\n\t\t\t\t\t\t\t\tconst pdfExportLink = FHC_JS_DATA_STORAGE_OBJECT.app_root + 'cis/private/pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz='+val.betreuerart_kurzbz+'&projektarbeit_id='+val.projektarbeit_id+'&person_id=' + val.betreuer_person_id\n\t\t\t\t\t\t\t\t// const pdfExportLink2 = FHC_JS_DATA_STORAGE_OBJECT.app_root + 'cis/private/lehre/projektbeurteilungDocumentExport.php?betreuerart_kurzbz='+val.betreuerart_kurzbz+'&projektarbeit_id='+val.projektarbeit_id+'&person_id=' + val.betreuer_person_id\n\t\t\t\t\t\t\t\twindow.open(pdfExportLink, '_blank')\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else if (cell.getColumn().getField() === \"beurteilung\") {\n\t\t\t\t\t\t\tconst val = cell.getValue()\n\n\t\t\t\t\t\t\tif(val != '-') window.open(val, '_blank')\n\t\t\t\t\t\t}\n\t\t\t\t\t\te.stopPropagation()\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]};\n\t},\n\tmethods: {\n\t\tcenteredTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\treturn '
    ' +\n\t\t\t\t'

    '+val+'

    '\n\t\t},\n\t\ttableResolve(resolve) {\n\t\t\tthis.tableBuiltResolve = resolve\n\t\t},\n\t\tloadDeadlines() {\n\t\t\tthis.$fhcApi.factory.lehre.fetchDeadlines(this.person_uid_prop ?? null)\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res?.data) this.setupData(res.data)\n\t\t\t\t})\n\t\t},\n\t\tsetupData(data) {\n\t\t\tthis.deadlines = data\n\t\t\t\n\t\t\tthis.deadlines.forEach(dl => {\n\t\t\t\tdl.student = (dl.stud_titelpre ? (dl.stud_titelpre + ' ') :'') + dl.stud_vorname + ' ' + dl.stud_nachname + (dl.stud_titelpost ? (' ' + dl.stud_titelpost) :'')\n\t\t\t\tdl.fixterminstring = dl.fixtermin ? this.$p.t('abgabetool/c4yes') : this.$p.t('abgabetool/c4no')\n\t\t\t})\n\n\t\t\tthis.$refs.deadlineTable.tabulator.setColumns(this.deadlineTableOptions.columns)\n\t\t\tthis.$refs.deadlineTable.tabulator.setData(this.deadlines);\n\t\t},\n\t\thandleUuidDefined(uuid) {\n\t\t\tthis.tabulatorUuid = uuid\n\t\t},\n\t\tcalcMaxTableHeight() {\n\t\t\tconst tableID = this.tabulatorUuid ? ('-' + this.tabulatorUuid) : ''\n\t\t\tconst tableDataSet = document.getElementById('filterTableDataset' + tableID);\n\t\t\tif(!tableDataSet) return\n\t\t\tconst rect = tableDataSet.getBoundingClientRect();\n\n\t\t\tthis.deadlineTableOptions.height = window.visualViewport.height - rect.top\n\t\t\tthis.$refs.deadlineTable.tabulator.setHeight(this.deadlineTableOptions.height)\n\t\t},\n\t\tasync setupMounted() {\n\t\t\tthis.tableBuiltPromise = new Promise(this.tableResolve)\n\t\t\tawait this.tableBuiltPromise\n\n\t\t\tthis.loadDeadlines()\n\t\t\tthis.calcMaxTableHeight()\n\t\t}\n\t},\n\twatch: {\n\n\t},\n\tcomputed: {\n\n\t},\n\tcreated() {\n\n\t},\n\tmounted() {\n\t\tthis.setupMounted()\n\t},\n\ttemplate: `\n\t\t

    {{$p.t('abgabetool/deadlinesTitle')}} {{ fullName ? ('-' + fullName) : ''}}

    \n\t\t
    \n\t\t\t\n\t\t \n `,\n};\n\nexport default DeadlineOverview;\n","import LvUebersicht from \"../Mylv/LvUebersicht.js\";\n\n\nexport default {\n\tdata(){\n\t\treturn {\n\t\t\tstudienSemester :[],\n\t\t\tselectedStudiensemester: null,\n\t\t\tstudiengaenge:[],\n\t\t\tselectedStudiengang:null,\n\t\t\tstudienOrdnung: [],\n\t\t\tselectedStudienordnung: null,\n\t\t\tsemester:[],\n\t\t\tselectedSemester:null,\n\t\t\tlehrveranstaltungen: [],\n\t\t\tselectedLehrveranstaltung: null,\n\t\t\tmenu:null,\n\t\t}\n\t},\n\tprovide(){\n\t\treturn {\n\t\t\tstudium_studiengang : Vue.computed(()=> this.selectedStudiengang),\n\t\t\tstudium_studiensemester: Vue.computed(() => this.selectedStudiensemester),\n\t\t\tstudium_semester: Vue.computed(() => this.selectedSemester),\n\t\t\tstudium_studienordnung: Vue.computed(() => this.selectedStudienordnung),\n\n\t\t}\n\t},\n\tcomponents: {\n\t\tLvUebersicht,\n\t},\n\twatch:{\n\t\tselectedStudiensemester: function(newVal, oldVal){\n\t\t\tif(newVal && newVal != oldVal){\n\t\t\t\tconst studiensemester =this.getDataFromLocalStorage(\"sudiensemester\");\n\t\t\t\tif (newVal && (!studiensemester || (studiensemester && studiensemester != newVal))){\n\t\t\t\t\tthis.storeDataToLocalStorage(\"sudiensemester\", newVal);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tselectedSemester: function (newVal, oldVal) {\n\t\t\tif (newVal && newVal != oldVal) {\n\t\t\t\tconst semester = this.getDataFromLocalStorage(\"semester\");\n\t\t\t\tif (!semester || (semester && semester != newVal)) {\n\t\t\t\t\tthis.storeDataToLocalStorage(\"semester\", newVal);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tselectedStudiengang: function (newVal, oldVal) {\n\t\t\tif (newVal && newVal != oldVal) {\n\t\t\t\tconst studiengang = this.getDataFromLocalStorage(\"studiengang\");\n\t\t\t\tif (!studiengang || (studiengang && studiengang != newVal)) {\n\t\t\t\t\tthis.storeDataToLocalStorage(\"studiengang\", JSON.stringify(newVal));\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tselectedStudienordnung: function (newVal, oldVal) {\n\t\t\tif (newVal && newVal != oldVal) {\n\t\t\t\tconst studienordnung = this.getDataFromLocalStorage(\"studienordnung\");\n\t\t\t\tif (!studienordnung || (studienordnung && studienordnung != newVal)) {\n\t\t\t\t\tthis.storeDataToLocalStorage(\"studienordnung\", JSON.stringify(newVal));\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\tmethods:{\n\t\tchangeStudiensemester(value){\n\t\t\tlet studiensemester = this.$refs.studiensemester;\n\t\t\tstudiensemester.selectedIndex = (studiensemester.selectedIndex + value + studiensemester.options.length) % studiensemester.options.length;\n\t\t\tthis.changeSelectedStudienSemester(studiensemester.value);\n\t\t},\n\t\tchangeStudiengang(value) {\n\t\t\tlet studiengang = this.$refs.studiengaenge;\n\t\t\tstudiengang.selectedIndex = (studiengang.selectedIndex + value + studiengang.options.length) % studiengang.options.length;\n\t\t\tthis.changeSelectedStudienGang(studiengang.value);\n\t\t},\n\t\tchangeSemester(value) {\n\t\t\tlet semester = this.$refs.semester;\n\t\t\tsemester.selectedIndex = (semester.selectedIndex + value + semester.options.length) % semester.options.length;\n\t\t\tthis.changeSelectedSemester(semester.value);\n\t\t},\n\t\tchangeStudienordnung(value) {\n\t\t\tlet studienordnung = this.$refs.studienordnung;\n\t\t\tlet newSelectIndex = (studienordnung.selectedIndex + value + studienordnung.options.length) % studienordnung.options.length;\n\t\t\tif(studienordnung.options[newSelectIndex].disabled){\n\t\t\t\tnewSelectIndex = (newSelectIndex + value + studienordnung.options.length) % studienordnung.options.length;\n\t\t\t}\n\t\t\tstudienordnung.selectedIndex = newSelectIndex;\n\t\t\tthis.changeSelectedStudienPlan(studienordnung.value);\n\t\t},\n\t\t\n\t\tstoreDataToLocalStorage(key,value){\n\t\t\tlocalStorage.setItem(key, value);\n\t\t},\n\t\tgetDataFromLocalStorage(key){\n\t\t\tconst value = localStorage.getItem(key);\n\t\t\treturn value;\n\t\t},\n\t\tchangeSelectedStudienSemester(studiensemester_kurzbz) {\n\t\t\tthis.$fhcApi.factory.studium.getAllStudienSemester(studiensemester_kurzbz, this.selectedStudiengang, this.selectedSemester, this.selectedStudienordnung)\n\t\t\t\t.then(data => data.data)\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.extractPropertyValues(res);\n\t\t\t\t})\n\t\t},\n\t\tchangeSelectedStudienGang(studiengang_kz) {\n\t\t\tthis.$fhcApi.factory.studium.getAllStudienSemester(this.selectedStudiensemester, studiengang_kz, this.selectedSemester, this.selectedStudienordnung)\n\t\t\t\t.then(data => data.data)\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.extractPropertyValues(res);\n\t\t\t\t})\n\t\t},\n\t\tchangeSelectedSemester(semester) {\n\t\t\tthis.$fhcApi.factory.studium.getAllStudienSemester(this.selectedStudiensemester, this.selectedStudiengang, semester, this.selectedStudienordnung)\n\t\t\t\t.then(data => data.data)\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.extractPropertyValues(res);\n\t\t\t\t})\n\t\t},\n\t\tchangeSelectedStudienPlan(studienplan_id) {\n\t\t\tthis.$fhcApi.factory.studium.getAllStudienSemester(this.selectedStudiensemester, this.selectedStudiengang, this.selectedSemester, studienplan_id)\n\t\t\t\t.then(data => data.data)\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.extractPropertyValues(res);\n\t\t\t\t})\n\t\t},\n\t\topenLvUebersicht(lehrveranstaltung) {\n\t\t\tthis.selectedLehrveranstaltung = lehrveranstaltung;\n\t\t\t//convert lehrveranstaltung properties for compatibility with LvPlan LvModal\n\t\t\tthis.selectedLehrveranstaltung.type =\"lehreinheit\";\n\t\t\tthis.selectedLehrveranstaltung.lehreinheit_id = this.selectedLehrveranstaltung.lehrveranstaltung_id;\n\t\t\tif(this.selectedLehrveranstaltung){\n\t\t\t\tVue.nextTick(()=>{\n\t\t\t\t\tthis.$refs.lvUebersicht.show();\n\t\t\t\t})\n\t\t\t}\n\t\t\t\n\t\t},\n\t\tsortStudienSemester(studienSemester){\n\t\t\tlet regex = new RegExp(/^(WS|SS)([0-9]{4})/);\n\t\t\tstudienSemester.sort((sem1,sem2)=>{\n\t\t\t\tlet [sem1Match, sem1Semester, sem1Year] = sem1.studiensemester_kurzbz.match(regex);\n\t\t\t\tlet [sem2Match, sem2Semester, sem2Year] = sem2.studiensemester_kurzbz.match(regex);\n\t\t\t\tif(sem1Year == sem2Year){\n\t\t\t\t\treturn sem1Semester > sem2Semester? -1:1;\n\t\t\t\t}\n\t\t\t\treturn sem1Year > sem2Year? -1:1;\n\t\t\t})\n\t\t},\n\t\tsetHash(val) {\n\t\t\t// TODO: make this a router param to enable history\n\t\t\tlocation.hash = val;\n\t\t},\n\t\textractPropertyValues(res){\n\t\t\tlet { studienSemester, studiengang, semester, studienplan, lehrveranstaltungen } = res;\n\t\t\tthis.sortStudienSemester(studienSemester.all);\n\t\t\tthis.studienSemester = studienSemester.all;\n\t\t\tthis.selectedStudiensemester = studienSemester.preselected.studiensemester_kurzbz;\n\n\t\t\tthis.studiengaenge = studiengang.all;\n\t\t\tthis.selectedStudiengang = studiengang.preselected?.studiengang_kz;\n\n\t\t\tthis.semester = semester.all;\n\t\t\tthis.selectedSemester = semester?.preselected;\n\n\t\t\tthis.studienOrdnung = studienplan.all;\n\t\t\tthis.selectedStudienordnung = studienplan.preselected?.studienplan_id;\n\n\t\t\tthis.lehrveranstaltungen = lehrveranstaltungen;\n\t\t\tthis.lehrveranstaltungen.sort((lv1, lv2) => {\n\t\t\t\tif (lv1.bezeichnung.toLowerCase() > lv2.bezeichnung.toLowerCase()) {\n\t\t\t\t\treturn 1;\n\t\t\t\t} else if (lv1.bezeichnung.toLowerCase() < lv2.bezeichnung.toLowerCase()) {\n\t\t\t\t\treturn -1;\n\t\t\t\t} else {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.lehrveranstaltungen.forEach((lehrveranstaltung)=>{\n\t\t\t\tlehrveranstaltung.lehrveranstaltungen.sort((lv1,lv2)=>{\n\t\t\t\t\tif (lv1.bezeichnung.toLowerCase() > lv2.bezeichnung.toLowerCase()) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t} else if (lv1.bezeichnung.toLowerCase() < lv2.bezeichnung.toLowerCase()) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t\t},\n\t\tstudienordnungTitel(studienordnung){\n\t\t\tif(!studienordnung) return \"\";\n\t\t\treturn `${studienordnung?.bezeichnung}-${studienordnung?.orgform_kurzbz} ( ${studienordnung?.orgform_bezeichnung}, ${studienordnung?.sprache} )`;\n\t\t},\n\t\tstudiengangTitel(studiengang) {\n\t\t\tif (!studiengang) return \"\";\n\t\t\treturn `${studiengang?.kurzbzlang} (${studiengang?.bezeichnung})`;\n\t\t},\n\t\tstudiensemesterTitel(studiensemester){\n\t\t\tif (!studiensemester) return \"\";\n\t\t\tlet studiensemester_regex = new RegExp(/^(WS|SS)([0-9]{4})/);\n\t\t\tlet match = studiensemester.match(studiensemester_regex);\n\t\t\tswitch(match[1]){\n\t\t\t\tcase \"WS\":\n\t\t\t\t\treturn `Wintersemester ${match[2]}`;\n\t\t\t\tcase \"SS\":\n\t\t\t\t\treturn `Sommersemester ${match[2]}`;\t\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${studiensemester}`;\n\t\t\t}\n\t\t}\n\t},\n\n\tcomputed:{\n\t\tselectedLehrveranstaltungTitel(){\n\t\t\tconst studiengang = this.studiengaenge.find((studiengang) => studiengang.studiengang_kz == this.selectedStudiengang);\n\t\t\treturn `${this.selectedLehrveranstaltung?.bezeichnung} ${this.selectedLehrveranstaltung?.lehrform_kurzbz} / ${studiengang.kurzbzlang}-${this.selectedSemester} ${this.selectedLehrveranstaltung?.orgform_kurzbz} (${this.selectedStudiensemester})`;\n\t\t},\n\t\tcomputedStudienOrdnung(){\n\t\t\tif(!this.studienOrdnung) return null;\n\t\t\treturn Object.values(this.studienOrdnung).reduce((carry, item)=>{\n\t\t\t\tif(!carry[item.bezeichnung]){\n\t\t\t\t\tcarry[item.bezeichnung] = [];\n\t\t\t\t}\n\t\t\t\tcarry[item.bezeichnung].push(item);\n\t\t\t\treturn carry;\n\t\t\t},{});\n\t\t},\n\t\tcomputedStudienOrdnungSelectValues() {\n\t\t\tif (!this.computedStudienOrdnung) return null;\n\t\t\tlet result = [];\n\t\t\tObject.entries(this.computedStudienOrdnung).forEach(([key,value])=>{\n\t\t\t\tresult.push({\n\t\t\t\t\tbezeichnung: `Studienordnung: ${key}`,\n\t\t\t\t\tdisabled: true,\n\t\t\t\t});\n\t\t\t\tvalue.forEach((studienplan)=>{\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\tstudienplan:studienplan,\n\t\t\t\t\t\tdiabled: false,\n\t\t\t\t\t\tbezeichnung: `${studienplan?.bezeichnung}-${studienplan?.orgform_kurzbz} ( ${studienplan?.orgform_bezeichnung}, ${studienplan?.sprache} )`\n\t\t\t\t\t\t\t\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t});\n\t\t\treturn result;\n\t\t},\n\t},\n\t\n\tcreated(){\n\n\t\tconst studiensemester = this.getDataFromLocalStorage(\"sudiensemester\") ?? undefined;\n\t\tconst studiengang = JSON.parse(this.getDataFromLocalStorage(\"studiengang\")) ?? undefined;\n\t\tconst semester = this.getDataFromLocalStorage(\"semester\") ?? undefined;\n\t\tconst studienordnung = JSON.parse(this.getDataFromLocalStorage(\"studienordnung\")) ?? undefined;\n\n\t\t// only fetch default data if no data is stored in the local storage\n\t\t\n\t\tthis.$fhcApi.factory.studium.getAllStudienSemester(studiensemester, studiengang, semester, studienordnung)\n\t\t.then(data => data.data)\n\t\t.then(res => {\n\t\t\tthis.extractPropertyValues(res);\n\t\t})\n\n\t},\n\ttemplate: `\n\t
    \n\t

    Studium

    \n\t
    \n\t\n\t\t\n\t\n\t
    \n\t\t
    \n\t\t
    Studiensemester:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\n\t\t
    \n\t\t
    Studiengang:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\n\t\t
    \n\t\t
    Semester:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\n\t\t
    \n\t\t
    Studienordnung:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t
    \n\n\t
    \n\n\t
    \n\t\n\t
    \n\n\n\t
    \n\t\n\t`\n};","\nexport default {\n\t\t\n\tloadRenderers() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/RendererLoader/GetRenderers',\n\t\t\tparams: {\n\t\t\t}\n\t\t};\n\t},\n}","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tinfo(app, path) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/RouteInfo/info',\n\t\t\tparams: {\n\t\t\t\tapp: app,\n\t\t\t\tpath: path\n\t\t\t}\n\t\t};\n\t}\n};","import FhcDashboard from '../../components/Dashboard/Dashboard.js';\nimport PluginsPhrasen from '../../plugins/Phrasen.js';\nimport Theme from '../../plugins/Theme.js';\nimport contrast from '../../directives/contrast.js';\nimport {setScrollbarWidth} from \"../../helpers/CssVarCalcHelpers.js\";\nimport LvPlan from \"../../components/Cis/LvPlan/Lehrveranstaltung.js\";\nimport MyLvPlan from \"../../components/Cis/LvPlan/Personal.js\";\nimport MylvStudent from \"../../components/Cis/Mylv/Student.js\";\nimport Profil from \"../../components/Cis/Profil/Profil.js\";\nimport Raumsuche from \"../../components/Cis/Raumsuche/Raumsuche.js\";\nimport CmsNews from \"../../components/Cis/Cms/News.js\";\nimport CmsContent from \"../../components/Cis/Cms/Content.js\";\nimport Info from \"../../components/Cis/Mylv/Semester/Studiengang/Lv/Info.js\";\nimport RoomInformation, {DEFAULT_MODE_RAUMINFO} from \"../../components/Cis/Mylv/RoomInformation.js\";\nimport AbgabetoolStudent from \"../../components/Cis/Abgabetool/AbgabetoolStudent.js\";\nimport AbgabetoolMitarbeiter from \"../../components/Cis/Abgabetool/AbgabetoolMitarbeiter.js\";\nimport DeadlineOverview from \"../../components/Cis/Abgabetool/DeadlineOverview.js\";\nimport Studium from \"../../components/Cis/Studium/Studium.js\";\n\nimport ApiRenderers from '../../api/factory/renderers.js';\nimport ApiRouteInfo from '../../api/factory/routeinfo.js';\n\nconst ciPath = FHC_JS_DATA_STORAGE_OBJECT.app_root.replace(/(https:|)(^|\\/\\/)(.*?\\/)/g, '') + FHC_JS_DATA_STORAGE_OBJECT.ci_router;\n\nconst router = VueRouter.createRouter({\n\thistory: VueRouter.createWebHistory(`/${ciPath}`),\n\troutes: [\n\t\t{\n\t\t\tpath: `/Cis/Studium`,\n\t\t\tname: 'Studium',\n\t\t\tcomponent: Studium,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/Profil/View/:uid`,\n\t\t\tname: 'ProfilView',\n\t\t\tcomponent: Profil,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/Profil`,\n\t\t\tname: 'Profil',\n\t\t\tcomponent: Profil,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/Abgabetool/Student/:student_uid_prop?`,\n\t\t\tname: 'AbgabetoolStudent',\n\t\t\tcomponent: AbgabetoolStudent,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/Abgabetool/Mitarbeiter`,\n\t\t\tname: 'AbgabetoolMitarbeiter',\n\t\t\tcomponent: AbgabetoolMitarbeiter,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/Abgabetool/Deadlines/:person_uid_prop?`,\n\t\t\tname: 'DeadlineOverview',\n\t\t\tcomponent: DeadlineOverview,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/Raumsuche`,\n\t\t\tname: 'Raumsuche',\n\t\t\tcomponent: Raumsuche,\n\t\t\tprops: true\n\t\t},\n\t\t// Redirect old links to new format\n\t\t{\n\t\t\tpath: \"/CisVue/Cms/getRoomInformation/:ort_kurzbz\",\n\t\t\tname: \"RoomInformationOld\",\n\t\t\tcomponent: RoomInformation,\n\t\t\tredirect: (to) => {\n\t\t\t\treturn { // redirect to longer Rauminfo url and map params\n\t\t\t\t\tname: \"RoomInformation\",\n\t\t\t\t\tparams: { // in this case always populate other params since they are not optional\n\t\t\t\t\t\tort_kurzbz: to.params.ort_kurzbz,\n\t\t\t\t\t\tmode: DEFAULT_MODE_RAUMINFO,\n\t\t\t\t\t\tfocus_date: new Date().toISOString().split(\"T\")[0]\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tpath: `/CisVue/Cms/getRoomInformation/:mode/:focus_date/:ort_kurzbz`,\n\t\t\tname: 'RoomInformation',\n\t\t\tcomponent: RoomInformation,\n\t\t\tprops: (route) => { // validate and set mode/focus date if for some reason missing\n\t\t\t\tconst validModes = [\"Month\", \"Week\", \"Day\"];\n\n\t\t\t\t// check mode string\n\t\t\t\tconst mode = route.params.mode &&\n\t\t\t\tvalidModes.includes(route.params.mode.charAt(0).toUpperCase() + route.params.mode.slice(1).toLowerCase())\n\t\t\t\t\t? route.params.mode.charAt(0).toUpperCase() + route.params.mode.slice(1).toLowerCase()\n\t\t\t\t\t: DEFAULT_MODE_RAUMINFO;\n\n\t\t\t\t// default to today date if not provided\n\t\t\t\tconst d = new Date(route.params.focus_date)\n\t\t\t\tconst focus_date = !isNaN(d) ? route.params.focus_date : new Date().toISOString().split(\"T\")[0];\n\n\t\t\t\t// for consistency reasons format the props into one object but actually use a new name to we dont collide with\n\t\t\t\t// existing viewData declaration written from codeigniter 3 into routerview tag\n\t\t\t\treturn {\n\t\t\t\t\tpropsViewData: {\n\t\t\t\t\t\tmode,\n\t\t\t\t\t\tfocus_date,\n\t\t\t\t\t\tort_kurzbz: route.params.ort_kurzbz\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\t\t\tbeforeEnter: (to, from, next) => {\n\t\t\t\t// missing mode or focus_date -> set defaults\n\t\t\t\tif (!to.params.mode || !to.params.focus_date) {\n\t\t\t\t\tnext({\n\t\t\t\t\t\tname: \"RoomInformation\",\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\tmode: to.params.mode || DEFAULT_MODE_RAUMINFO,\n\t\t\t\t\t\t\tfocus_date: to.params.focus_date || new Date().toISOString().split(\"T\")[0],\n\t\t\t\t\t\t\tort_kurzbz: route.params.ort_kurzbz\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpath: `/CisVue/Cms/Content/:content_id`,\n\t\t\tname: 'Content',\n\t\t\tcomponent: CmsContent,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/CisVue/Cms/News`,\n\t\t\tname: 'News',\n\t\t\tcomponent: CmsNews,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/MyLv/:studiensemester?`,\n\t\t\tname: 'MyLv',\n\t\t\tcomponent: MylvStudent,\n\t\t\tprops: true,\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/MyLv/Info/:studien_semester/:lehrveranstaltung_id`,\n\t\t\tname: 'LvInfo',\n\t\t\tcomponent: Info,\n\t\t\tprops: true\n\t\t},\n\t\t// Redirect old links to new format\n\t\t{\n\t\t\t// only trigger on first param being numeric to avoid paths like \"LvPlan/Month\" entering here\n\t\t\tpath: \"/Cis/LvPlan/:lv_id(\\\\d+)\", \n\t\t\tname: \"LvPlanOld\",\n\t\t\tcomponent: LvPlan,\n\t\t\tredirect(to) {\n\t\t\t\tconst route = Vue.unref(router.currentRoute);\n\t\t\t\tconst { mode, focus_date } = route.params; // keep mode and focus_date if available\n\t\t\t\treturn { // redirect to longer LvPlan url and map params\n\t\t\t\t\tname: \"LvPlan\",\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tmode,\n\t\t\t\t\t\tfocus_date,\n\t\t\t\t\t\tlv_id: to.params.lv_id\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/LvPlan/:mode?/:focus_date?/:lv_id?`,\n\t\t\tname: 'LvPlan',\n\t\t\tcomponent: LvPlan,\n\t\t\tprops(route) {\n\t\t\t\treturn {\n\t\t\t\t\tpropsViewData: route.params\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/MyLvPlan/:mode?/:focus_date?`,\n\t\t\tname: 'MyLvPlan',\n\t\t\tcomponent: MyLvPlan,\n\t\t\tprops(route) {\n\t\t\t\treturn {\n\t\t\t\t\tpropsViewData: route.params\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis4`,\n\t\t\tname: 'Cis4',\n\t\t\tcomponent: FhcDashboard,\n\t\t\tprops: {dashboard: 'CIS'},\n\t\t},\n\t\t{\n\t\t\tpath: `/`,\n\t\t\tname: 'FhcDashboard',\n\t\t\tcomponent: FhcDashboard,\n\t\t\tprops: {dashboard: 'CIS'},\n\t\t},\n\t\t{\n\t\t\tpath: '/:pathMatch(.*)*',\n\t\t\tname: 'Fallback',\n\t\t\tcomponent: FhcDashboard,\n\t\t\tprops: {dashboard: 'CIS'},\n\t\t\tredirect: () => {\n\t\t\t\treturn {\n\t\t\t\t\tname: \"Cis4\",\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tdashboard: 'CIS'\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t},\n\t]\n})\n\nconst app = Vue.createApp({\n\tname: 'FhcApp',\n\tdata: () => ({\n\t\tappSideMenuEntries: {},\n\t\trenderers: null,\n\t}),\n\tcomponents: {},\n\tcomputed: {\n\t\tisMobile() {\n\t\t\treturn /Mobi|Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n\t\t}\t\n\t},\n\tprovide() {\n\t\treturn { // provide injectable & watchable language property\n\t\t\tlanguage: Vue.computed(() => this.$p.user_language),\n\t\t\trenderers: Vue.computed(() => this.renderers),\n\t\t}\t\n\t},\n\tmethods: {\n\t\tisInternalRoute(href) {\n\t\t\tconst internalBase = window.location.origin\n\t\t\treturn href.startsWith(internalBase);\n\t\t},\n\t\thandleClick(event) {\n\t\t\tconst target = event.target.closest('a');\n\n\t\t\tif(target?.id == 'skiplink') return\n\t\t\tif (target && this.isInternalRoute(target.href)) {\n\t\t\t\tconst url = new URL(target.href)\n\t\t\t\t\n\t\t\t\tconst path = url.pathname\n\t\t\t\tconst base = this.$router.options.history.base\n\t\t\t\tconst route = path.replace(base, '') || '/'\n\n\t\t\t\t// let click event propagate normally if we dont route internally\n\t\t\t\tconst res = this.$router.resolve(route)\n\t\t\t\tif(!res?.matched?.length || res.name === 'Fallback') return\n\t\t\t\t\n\t\t\t\tevent.preventDefault(); // Prevent browser navigation\n\t\t\t\t\n\t\t\t\tif(this.isMobile) { // toggle the menu\n\t\t\t\t\tconst navMain = document.getElementById('nav-main');\n\t\t\t\t\t// fix unwanted toggle from off to on for some links on mobile\n\t\t\t\t\tif(navMain.classList.contains('show')){\n\t\t\t\t\t\tdocument.getElementById('nav-main-btn').click();\n\t\t\t\t\t} \n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.$router.push(route);\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t},\n\tasync created(){\n\t\tawait this.$api\n\t\t\t.call(ApiRenderers.loadRenderers())\n\t\t\t.then(res => res.data)\n\t\t\t.then(data => {\n\t\t\t\tfor (let rendertype of Object.keys(data)) {\n\t\t\t\t\tlet modalTitle = null;\n\t\t\t\t\tlet modalContent = null;\n\t\t\t\t\tlet calendarEvent = null;\n\t\t\t\t\tif (data[rendertype].modalTitle)\n\t\t\t\t\t\tmodalTitle = Vue.markRaw(Vue.defineAsyncComponent(() => import(data[rendertype].modalTitle)));\n\t\t\t\t\tif (data[rendertype].modalContent) \t\n\t\t\t\t\t\tmodalContent = Vue.markRaw(Vue.defineAsyncComponent(() => import(data[rendertype].modalContent)));\n\t\t\t\t\tif (data[rendertype].calendarEvent) \t\n\t\t\t\t\t\tcalendarEvent = Vue.markRaw(Vue.defineAsyncComponent(() => import(data[rendertype].calendarEvent)));\n\n\t\t\t\t\tif (data[rendertype].calendarEventStyles){\n\t\t\t\t\t\tvar head = document.head;\n\t\t\t\t\t\tif(!head.querySelector(`link[href=\"${data[rendertype].calendarEventStyles}\"]`)){\n\t\t\t\t\t\t\tvar link = document.createElement(\"link\");\n\t\t\t\t\t\t\tlink.type = \"text/css\";\n\t\t\t\t\t\t\tlink.rel = \"stylesheet\";\n\t\t\t\t\t\t\tlink.href = data[rendertype].calendarEventStyles;\n\t\t\t\t\t\t\thead.appendChild(link);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif(this.renderers === null) {\n\t\t\t\t\t\tthis.renderers = {};\n\t\t\t\t\t}\n\t\t\t\t\tif (!this.renderers[rendertype]) {\n\t\t\t\t\t\tthis.renderers[rendertype] = {}\n\t\t\t\t\t}\n\t\t\t\t\tthis.renderers[rendertype].modalTitle = modalTitle;\n\t\t\t\t\tthis.renderers[rendertype].modalContent = modalContent;\n\t\t\t\t\tthis.renderers[rendertype].calendarEvent = calendarEvent;\n\t\t\t\t}\n\t\t\t});\n\t},\n\tmounted() {\n\t\tdocument.addEventListener('click', this.handleClick);\n\t},\n\tbeforeUnmount() {\n\t\tdocument.removeEventListener('click', this.handleClick);\n\t},\n});\n\n// kind of a bandaid for bad css on some pages to avoid horizontal scroll\nsetScrollbarWidth();\n\napp.use(router);\napp.use(primevue.config.default, {\n\tzIndex: {\n\t\toverlay: 9000,\n\t\ttooltip: 8000\n\t}\n})\napp.directive('tooltip', primevue.tooltip);\napp.use(PluginsPhrasen);\napp.use(Theme);\napp.directive('contrast', contrast);\napp.mount('#fhccontent');\n\nrouter.afterEach((to, from, failure) => {\n\tapp.config.globalProperties.$api.call(ApiRouteInfo.info('cis4', to.fullPath));\n});","// Create a temporary div element, set styles to ensure it's scrollable and off-screen, get scrollbar width from that\nfunction getScrollbarWidth() {\n\tconst div = document.createElement('div');\n\n\tdiv.style.position = 'absolute';\n\tdiv.style.top = '-9999px';\n\tdiv.style.width = '100px';\n\tdiv.style.height = '100px';\n\tdiv.style.overflow = 'scroll';\n\n\tdocument.body.appendChild(div);\n\tconst scrollbarWidth = div.offsetWidth - div.clientWidth;\n\tdocument.body.removeChild(div);\n\n\treturn scrollbarWidth;\n}\n\n// Detect the browser and set a CSS variable for the scrollbar width since chrome scrollbars mess with 100vw/vh css\nexport function setScrollbarWidth() {\n\tconst isChromium = /Chrome/.test(navigator.userAgent);\n\tconst isFirefox = /Firefox/.test(navigator.userAgent);\n\n\tif (isChromium) {\n\t\tconst width = getScrollbarWidth() + 'px';\n\t\tdocument.body.style.setProperty('--scrollbar-width', width); // Set the value for Chrome\n\t} else if (isFirefox) {\n\t\tdocument.body.style.setProperty('--scrollbar-width', '0px'); // Set the value for Firefox or adjust as needed\n\t}\n}"],"names":["BsModal","name","data","modal","fullscreen","props","backdrop","type","Boolean","String","default","validator","value","includes","focus","keyboard","noCloseBtn","dialogClass","Array","Object","headerClass","bodyClass","footerClass","allowFullscreenExpand","emits","methods","dispose","this","handleUpdate","hide","show","relatedTarget","toggle","toggleFullscreen","mounted","$refs","bootstrap","Modal","popup","body","options","title","footer","slots","undefined","includedPrimevue","primevue","Promise","resolve","reject","instance","Vue","createApp","setup","h","class","ref","unmount","beforeUnmount","result","unmounted","wrapper","parentElement","removeChild","document","createElement","use","config","zIndex","overlay","then","Phrasen$1","Phrasen","mount","appendChild","template","Alert","components","mixins","onHideBsModal","Function","onHiddenBsModal","onHidePreventedBsModal","onShowBsModal","onShownBsModal","modalContainer","msg","bind","BsConfirm$1","BsAlert","GridItem","inject","item","active","dragAction","dragging","computed","registerDragAction","evt","$emit","target","hasAttribute","getAttribute","parent","closest","tryDragStart","touchDragEnd","touchStart","event","touchMove","preventDefault","GridLogic","constructor","w","grid","isFreeSlot","x","y","i","getMaxY","reduce","acc","getFreeSlots","freeSlots","biggestY","totalSpaces","length","Math","floor","push","add","prefer","occupiers","getItemsInFrame","frame","forEach","f","index","max","intermGrid","possiblities","tryMoving","bestOption","sort","a","b","cost","moves","v","move","currItem","getItemFrame","remove","console","error","place","pinned","originalFrame","isArray","some","occupiersData","map","occupier","occupiersFrame","flat","replaceUpdate","newOccupierFrames","occ","shift","getSingleFramePosition","updates","resize","newPoss","possiblity","p","directions","weight","dir","res","tryMovingInDirection","filter","amount","targetframe","unshift","clearWeights","indexOf","j","debug","DropGrid","cols","Number","items","itemsSetup","resizeLimit","marginForExtraRow","additionalRow","clientX","clientY","mode","dragGrid","permUpdates","positionUpdates","fixedPositionUpdates","draggedOffset","draggedItem","draggedNode","reorderedItems","clonedWidget","sectionName","additionalRowComputed","get","set","items_hashmap","needsReordering","rearrangedPosition","widget","widgetid","pop","items_placeholders","placeholders","col_max","rows_max","rows","occupied","keys","current_item","max_x","max_y","occupied_y","occupied_x","placeholder","id","padStart","placedItems_withPlaceholders","placedItems","gridStyle","addH","indexedItems","prePlacedItems","mappedPlacedItems","height_diff","width_diff","temporaryResizeItems","newItem","resizeOverlay","blank","showEmptyTileHover","widgetSetup","widgetsSetup","ele","widget_id","watch","dragCancel","handler","immediate","updated","createNewGrid","deep","toggleDraggedItemOverlay","condition","firstElementChild","classList","containerRect","container","getBoundingClientRect","clonedWidgetRect","desiredTop","desiredLeft","minTop","maxTop","height","minLeft","maxLeft","width","constrainedTop","min","constrainedLeft","style","top","left","sortedItems","firstFreeSlot","targetX","targetW","convertGridResultToUpdate","input","output","baseArray","mouseLeave","updateCursor","rect","touches","gridX","clientWidth","gridY","clientHeight","_dragStart","dataTransfer","setDragImage","dropEffect","effectAllowed","startMove","setTimeout","clone","cloneNode","querySelector","removeProperty","startResize","dragOver","checkPinnedWidgetAnimation","checkWidgetSizeLimitAnimation","removeWidgetClones","dragEnd","getElementById","from","getElementsByClassName","_updateFixedPositions","additionalUpdates","emptyTileClicked","updateCursorOnMouseMove","itemAtPosition","pinNode","contains","draggedItemSetup","draggedItemMaxWidth","draggedItemMinWidth","draggedItemMaxHeight","draggedItemMinHeight","draggedItemNode","width_after_resize","height_after_resize","widgetClones","mouseDown","mouseUp","__widgets","__widgetsStarted","__path","FHC_JS_DATA_STORAGE_OBJECT","app_root","ci_router","CachedWidgetLoader","getWidget","loadWidget","axios","params","retval","arguments","JSON","parse","catch","response","setPath","path","DashboardItem","HeightTransition","onEnter","el","done","scrollHeight","onLeave","component","tmpConfig","isLoading","hasConfig","sharedData","maxHeight","maxWidth","prototype","toString","call","minHeight","minWidth","isResizeable","isPinned","ready","unpin","editMode","item_data","pinItem","getWidgetC4Link","cis4link","handleShowBsModal","handleHideBsModal","e","startDrag","dragHandle","resizeHandle","openConfig","setConfig","changeConfig","sendChangeConfig","changeConfigManually","k","created","import","file","fhcomplete_build_version","$options","WidgetIcon","required","src","DashboardSection","adminMode","configOpened","gridWidth","gridHeight","provide","editModeIsActive","computedWidgetsSetup","getSectionStyle","widgets","reorder","sectionNameTranslation","$p","t","showSectionInformation","handleConfigOpened","handleConfigClosed","checkResizeLimit","minmaxW","minmaxH","removeWidget","revert","custom","BsConfirm","update","hidden","updatePreset","saveConfig","payload","updatePositions","self","cont","parseInt","window","getComputedStyle","getPropertyValue","addEventListener","DashboardWidgetPicker","callbacks","close","pick","ObjectUtils","mergeDeep","objects","isObject","obj","prev","key","pVal","oVal","concat","ApiDashboard","getViewData","method","url","FhcDashboard","dashboard","viewData","uid","timezone","sections","viewDataInternal","apiurl","widgetAdd","section_name","db","err","widgetpicker","Date","valueOf","loading","section","post","funktion_kurzbz","newId","splice","alert","widgetUpdate","wid","prop","_x","_y","_w","_h","preset","widgetRemove","loadCategory","section1","section2","beforeMount","$api","search","searchsettings","$fhcApi","searchAdvanced","searchdummy","phrasen$2","category","setLanguage","categories","language","getLanguage","getActiveDbLanguages","navigation","getHeader","navigation_page","getMenu","filter$1","saveCustomFilter","wsParams","filterUniqueId","filterType","customFilterName","removeCustomFilter","filterId","applyFilterFields","filterFields","addFilterField","filterField","removeFilterField","getFilterById","getFilter","studstatus","abmeldung","getDetails","antrag_id","prestudent_id","create","stdsem","grund","studiensemester","errorHandling","cancel","allSettled","antrag","studierendenantrag_id","errorHeader","unterbrechung","datum_wiedereinstieg","attachment","wiederholung","getLvs","saveLvs","forbiddenLvs","mandatoryLvs","leitung","getStgs","getAntraege","getHistory","getPrestudents","query","signal","timeout","approve","reopen","pause","unpause","object","approveObjection","denyObjection","profil","getView","fotoSperre","isStudent","isMitarbeiter","getZustellAdresse","getZustellKontakt","getGemeinden","nation","zip","getAllNationen","profilUpdate","getStatus","getTopic","acceptProfilRequest","profil_update_id","status_message","topic","requested_change","denyProfilRequest","insertFile","dms","replace","getProfilRequestFiles","requestID","selectProfilRequest","insertProfilRequest","fileID","updateProfilRequest","ID","deleteProfilRequest","lvPlan","getRoomInfo","ort_kurzbz","start_date","end_date","getStunden","getOrtReservierungen","getLvPlanReservierungen","getLehreinheitStudiensemester","lehreinheit_id","studiensemesterDateInterval","date","LvPlanEvents","lv_id","stv","verband","favorites","students","studiensemester_kurzbz","encodeURIComponent","getUri","prestudent","person","person_id","relative_path","getStg","setStg","studiengang_kz","konto","tabulatorConfig","ajaxURL","ajaxParams","modelValue","only_open","studiengang_kz_intern","stg_kz","ajaxRequestFunc","ajaxResponse","checkDoubles","form","confirmErrorHandler","insert","counter","edit","delete","buchungsnr","getBuchungstypen","group","getGruppen","deleteGroup","kontakt","getAdressen","addNewAddress","loadAddress","address_id","updateAddress","deleteAddress","getPlaces","plz","getFirmen","searchString","getNations","getAdressentypen","getBankverbindung","addNewBankverbindung","loadBankverbindung","bankverbindung_id","updateBankverbindung","deleteBankverbindung","getKontakte","addNewContact","loadContact","kontakt_id","updateContact","deleteContact","getStandorteByFirma","getKontakttypen","updatePrestudent","getBezeichnungZGV","getBezeichnungMZgv","getBezeichnungDZgv","getAusbildung","getAufmerksamdurch","getBerufstaetigkeit","getTypenStg","getBisstandort","getHistoryPrestudent","getMaxSem","studiengang_kzs","advanceStatus","status_kurzbz","ausbildungssemester","confirmStatus","isLastStatus","deleteStatus","getLastBismeldestichtag","getHistoryPrestudents","status","insertStatus","loadStatus","updateStatus","getStudienplaene","getStudiengang","getStatusgruende","getStati","addStudent","changeStatus","getStatusarray","details","save","exam","getPruefungen","loadPruefung","pruefung_id","getTypenPruefungen","getAllLehreinheiten","getLvsByStudent","getLvsandLesByStudent","semester","getLvsAndMas","getMitarbeiterLv","getNoten","checkZeugnisnoteLv","addPruefung","updatePruefung","deletePruefung","abschlusspruefung","getAbschlusspruefung","addNewAbschlusspruefung","loadAbschlusspruefung","updateAbschlusspruefung","deleteAbschlusspruefung","getTypenAbschlusspruefung","getTypenAntritte","getBeurteilungen","getAkadGrade","getTypStudiengang","getMitarbeiter","getPruefer","checkForExistingExams","uids","grades","list","getCertificate","getTeacherProposal","getRepeaterGrades","updateCertificate","lehrveranstaltung_id","student_uid","note","lehrveranstaltung_bezeichnung","deleteCertificate","copyTeacherProposalToCertificate","copyRepeaterGradeToCertificate","studierendenantrag_lehrveranstaltung_id","lv_bezeichnung","getGradeFromPoints","points","manualErrorHandling","mobility","getMobilitaeten","getProgramsMobility","addNewMobility","loadMobility","bisio_id","updateMobility","deleteMobility","getLVList","getPurposes","getSupports","getListPurposes","getListSupports","deleteMobilityPurpose","addMobilityPurpose","deleteMobilitySupport","addMobilitySupport","archiv","getArchivVorlagen","archive","archiveSigned","akte_id","documents","getDocumentsUnaccepted","getDocumentsAccepted","deleteZuordnung","dokument_kurzbz","createZuordnung","loadAkte","getDoktypen","updateFile","deleteFile","uploadFile","exemptions","getAnrechnungen","getLehrveranstaltungen","getBegruendungen","getLvsKompatibel","getLektoren","addNewAnrechnung","loadAnrechnung","anrechnung_id","editAnrechnung","deleteAnrechnung","jointstudies","getStudies","getTypenMobility","getStudiensemester","getStudyprograms","getListPartner","getStatiPrestudent","loadStudy","insertStudy","updateStudy","deleteStudy","courselist","getCourselist","group_consecutiveHours","dbStundenplanTable","configStudent","configStudents","notiz","getNotizen","getUid","addNewNotiz","formData","loadNotiz","notiz_id","loadDokumente","deleteNotiz","type_id","updateNotiz","isBerechtigt","betriebsmittel","getAllBetriebsmittel","addNewBetriebsmittel","loadBetriebsmittel","betriebsmittelperson_id","updateBetriebsmittel","deleteBetriebsmittel","getTypenBetriebsmittel","loadInventarliste","checkperson","updatePersonUnrulyStatus","unrulyParam","unruly","filterPerson","base","ort","getContentID","ort_kurbz","getRooms","datum","von","bis","typ","personenanzahl","getRoomTypes","cms","content","content_id","version","sprache","sichtbar","getNews","page","page_size","news","limit","getNewsRowCount","getNewsExtra","lehre","getStudentenMail","getLvInfo","getStudentPruefungen","getStudentProjektarbeiten","getStudentProjektabgaben","detail","projektarbeit_id","postStudentProjektarbeitEndupload","Headers","postStudentProjektarbeitZwischenabgabe","getStudentProjektarbeitAbgabeFile","paabgabe_id","location","getMitarbeiterProjektarbeiten","all","postProjektarbeitAbgabe","termin","paabgabetyp_kurzbz","bezeichnung","fixtermin","insertvon","kurzbz","deleteProjektarbeitAbgabe","postSerientermin","projektarbeit_ids","fetchDeadlines","addons","getLvMenu","lvid","messages","getMessages","size","getVorlagen","getMsgVarsLoggedInUser","getMessageVarsPerson","getMsgVarsPrestudent","getPersonId","getVorlagentext","vorlage_kurzbz","getNameOfDefaultRecipient","getPreviewText","getReplyData","messageId","sendMessageFromModalContext","sendMessage","deleteMessage","vorlagen","getVorlagenByLoggedInUser","studium","getAllStudienSemester","studiengang","studienplan","getStudiengaengeForStudienSemester","getStudienplaeneBySemester","getLvPlanForStudiensemester","getLvEvaluierungInfo","FhcApiFactory","phrasen","bookmark","getBookmarks","bookmark_id","tag","ampeln","open","confirm","ampel_id","studiengangInformation","getStudiengangByKz","menu","authinfo","getAuthUID","getAuthInfo","getAll","OldFhcApi","install","app","globalProperties","factory","warn","addEndpoints","_get_config","uri","TypeError","clearValidation","setFeedback","_clean_return_value","meta","fhcApiAxios","baseURL","interceptors","request","FormData","values","every","FileList","File","newData","entries","nd","append","jsondata","stringify","errors","_defaultErrorHandlers","code","handled","$fhcAlert","alertDefault","message","responseURL","alertError","validation","apply","general","php","filename","line","backtrace","function","severity","alertSystemError","exception","heading","sql","join","auth","controller","required_permissions","FhcApiFactoryWrapper","factorypart","root","defineProperty","noWarn","CORE_REST_CLIENT_ERROR","CORE_REST_CLIENT_RETVAL","CoreRESTClient","wsURL","wsParameters","axiosParameters","_axiosCall","isSuccess","hasOwnProperty","isError","hasData","trim","getData","getError","getErrorCode","_generateRouterURI","_printDebug","parameters","errorThrown","axiosCallObj","helperAppContainer","helperApp","PvToast","PvConfirm","mailToUrl","slotProps","systemerror_mailto","called_path","called_method","openMessagecard","Collapse","getOrCreateInstance","showmaillink","PvConfig","PvConfirmationService","helperAppInstance","FhcAlert","FhcPhrasen","alertSuccess","toast","summary","life","alertInfo","alertWarning","confirmDelete","$confirm","require","header","acceptLabel","acceptClass","rejectLabel","rejectClass","accept","sticky","html","alertMultiple","messageArray","handleSystemError","toLowerCase","errMsg","toUpperCase","stack","handleSystemMessage","resetFormValidation","Event","querySelectorAll","dispatchEvent","handleFormValidation","nodeType","Node","ELEMENT_NODE","notFound","CustomEvent","arr","PluginsApi","_send_array_or_object","func","errs","DEFAULT_ERROR_CONFIG","success","fail","combine","async","_format_toast","_default","field","msgs","n_errors","n","get_config","clean_return_value","_merge_error_config","get_error_handler","formHandler","get_error_list","popHandleableErrors","copy","newType","newTypeCombinesType","newTypeHasHandler","errorConfig","remaining","configoverwrite","typedErrors","allowed","reason","errType","ApiPhrasen","reactive","loadingModules","user_language","user_locale","server_languages","find","LC_Time","catArray","row","phrase","text","elem","extractCategory","t_ref","split","val","match","p1","getValueForLoadedPhrase","PluginsPhrasen","cat","lang","theme_name","theme","theme_modes","modes","toggleTheme","documentElement","setAttribute","stylesheet","attributes","href","localStorage","setItem","Theme","initializeTheme","getItem","$theme","switchTheme","rgbToHex","hex","getContrastYIQ","hexcolor","substring","contrast","element","binding","bgColor","backgroundColor","rgbRegEx","RegExp","isRgb","r","g","hexColor","color","DragAndDrop","TYPE_LE","TYPE_VEVENT","getValidTransferData","allowedTypes","json","isValidTransferData","getTransferData","setTransferData","fromLe","dtstart","dtend","fromVEvent","setData","stundenblockung","CalDnd","vnode","arg","cancelable","bubbles","offsetX","offsetWidth","offsetY","offsetHeight","originalEvent","hitbox","pos","pageX","scrollLeft","pageY","scrollTop","modifiers","once","timestamp","prevVnode","BaseDraganddrop","directives","events","correctedEvents","backgrounds","dropAllowed","dropableEvents","draggedInternalEvent","draggedExternalEvent","targetTimestamp","targetGridEnds","shadowPreview","findIndex","previewEvent","toSpliced","correctedBackgrounds","start","end","orig","onDragstart","onDragend","onDragenter","isostart","luxon","DateTime","fromISO","setZone","local","isoend","onDragleave","onDragchange","ends","onDrop","BaseHeader","DatePicker","VueDatePicker","listLength","convertedDate","keepLocalTime","current","month","year","startOf","ts","plus","days","useLocaleWeeks","endOf","toLocaleString","localWeekYear","week","toFormat","DATE_FULL","weekStart","Info","getStartOfWeek","fromObject","setLocale","locale","fromJSDate","weekNumbers","localWeekNumber","modeOptions","btnMonth","btnWeek","btnDay","btnList","clickMode","defaultPrevented","BaseSlider","time","extrasAfter","extrasBefore","running","promiseResolve","itemsAfter","itemsBefore","styleSlider","position","transition","styleBefore","display","right","styleAfter","prevPage","slidePages","nextPage","newTarget","endSlide","clickListeners","saveAddClickListener","source","removeEventListener","listener","stopPropagation","customEvent","CalClick","finalEvent","FhcCalendar$1","timeGrid","draggableEvents","hasDragoverFunc","onDragover","now","showBtns","internalView","internalDate","modalEvent","convertedEvents","convertedBackgrounds","bg","isInteger","fromMillis","zone","sDate","cDate","cMode","sMode","o","isValid","hasSame","clickPrev","clickNext","handleClickDefaults","number","zoneName","onDropItem","showEventModal","eventObj","hideEventModal","closeFn","onModalHidden","ApiLvPlan","getLvPlan","eventsPersonal","eventsLv","getLv","GridLineEvent","isHeaderOrFooter","draggable","classes","startsHere","endsHere","CalendarGrid","GridLine","LineEvent","LineBackground","flipAxis","background","styles","perc","border","diff","axisRow","eventsWithRowInfo","toMillis","originalEvents","originalBackgrounds","axisMain","axisParts","Duration","allDayEvents","axisMainCollapsible","snapToGrid","resizeObserver","mutationObserver","userScroll","axisCol","axisPartsWithBreaks","tu","lastTuEnd","slice","axisPartsSave","partsEnds","part","axisMainBorders","curr","eventsAllDay","mapIntoMainAxis","allDayEvent","eventsNormal","hasValidEvents","styleGridCols","styleGridRows","gridlines","mainIndex","day","laneStart","laneEnd","getPageTop","pageTop","offsetTop","offsetParent","getPageLeft","pageLeft","offsetLeft","getTimestampFromMouse","dayTimestamp","mouse","mouseFrac","main","enableAutoScroll","ResizeObserver","scrollToEarliestEvent","observe","MutationObserver","mutations","m","addedNodes","matches","subtree","childList","disableAutoScroll","disconnect","eventElements","scroller","earliestEventOffset","scrollIntoView","behavior","scrollTo","LabelDay","titleFull","titleLong","titleShort","titleNarrow","LabelDow","weekday","LabelTime","start_ok","end_ok","sanitizedTimestamps","formatTime","toISOTime","suppressSeconds","ModeDay","DayView","emptyMessage","emptyMessageDetails","chosenEvent","gridMainRef","fromISOTime","hours","currentEvent","first","isToday","compact","threshold","elementRef","isRef","$el","compareArray","updateResultVars","found","compare","observer","addObserver","removeObserver","onMounted","onUnmounted","watchEffect","useResizeObserver","currentDate","focusDate","rangeOffset","range","last","Interval","fromDateTimes","view","slider","updatePage","newFocusDate","viewAttrs","$attrs","ModeWeek","WeekView","collapseEmptyDays","weeks","ModeMonth","MonthView","LabelWeek","firstDay","lastDay","d","startdate","nextRangeStart","months","dayInWeek","FhcCalendar","getPromiseFunc","markRaw","teachingunits","label","includeOffset","eventStyle","farbe","updateRange","rangeInterval","context","lv","loading_id","loadingEvents","allEvents","eventsLoaded","mergePromiseArr","markEventsLoaded","indexIsLast","nStart","rStart","nEnd","toISODate","toValue","promises","results","useEventLoader","newValue","emit","stunde","beginn","ende","ApiAuthinfo","LvPlan","propsViewData","currentDay","focus_date","isNaN","currentMode","currentLv","lvTitle","bezeichnung_english","handleChangeDate","newMode","handleChangeMode","$router","MyLvPlan","studiensemester_start","studiensemester_ende","downloadLinks","opts","toUnixInteger","download_link","icon","link","LvPruefungen","pruefungenData","ApiLehre","infos","studien_semester","studiengang_kuerzel","orgform_kurzbz","ects","incoming","info","lektorNamesLinks","lektorenLinks","lektoren","titelpre","vorname","nachname","titelpost","lektorNames","lvLeitung","oe","organisationseinheittyp","oeLeitung","koordinator","currentLang","lastLang","lvinfo","lvinfoDefaultLang","assign","reloadRefs","triggerRef","initialval","FHC_JS_PHRASES_STORAGE_OBJECT","tmp_category","loadLazy","unref","LvMenu","containerStyles","rowStyles","hasLvPlanEintraege","c4_disabled","menuItem","c4_link","c4_moodle_links","c4_target","getMenuName","ApiAddons","LvUebersicht","titel","preselectedMenu","isMenuSelected","lvEvaluierungMessage","hiddenModal","showModal","studium_studiensemester","MylvSemester","MylvSemesterStudiengang","MylvSemesterStudiengangLv","bezeichnung_eng","module","benotung","lvnote","lvnotebez","znote","znotebez","positiv","note_index","preselectedMenuItem","gradeColor","is_organisatorische_einheit","emptyMenu","bodyStyle","grade","languageIndex","LvHasPruefungenInformation","fetchMenu","openLvOption","nextTick","lvUebersicht","openPruefungen","openInfos","LvInfo","pruefungen","kuerzel","lvs","sg_bezeichnung_eng","lehrveranstaltungen","Map","studiengaenge","sg_bezeichnung","lvsForStudiengang","MylvStudent","firstLoad","currentSemester","nearestSem","nearestSemDiff","sem","abs","currentIsFirst","currentIsLast","prevSem","selectedIndex","nextSem","updateRouter","routerStudiensemester","$route","s","beforeRouteUpdate","to","next","CoreFetchCmpt","refresh","apiFunction","apiFunctionParameters","oldValue","fetchData","errorMessage","apiFunctionResult","successHandler","errorHandler","finally","finallyHandler","setError","FILTER_COMPONENT_NEW_FILTER","FilterConfig","filters","columns","fields","switchFilter","applyFilterConfig","currentFields","types","c","currentTarget","filteredFields","addField","removeField","FilterColumns","selected","names","selectedFields","DEFAULT_ICONS","jsonLines","xlsx","pdf","csv","DEFAULT_LABELS","TableDownload","tabulator","iconClass","currentConfig","newConfig","stringToFileFormatter","formatter","validateFileFormatter","lcInput","XLSX","jspdf","jsPDF","autoTable","download","elementDataMap","WeakMap","collapseAutoClose","collapse","getInstance","collapsibleAutoHideFunc","Tabulator","extendModule","fitDataStretchFrozen","forced","colsWidth","tableWidth","table","rowManager","gap","lastCol","column","widthFixed","reinitializeWidth","responsiveLayout","modules","responsive","visible","definition","frozen","getWidth","modExists","setWidth","ApiFilter","_uuid","CoreFilterCmpt","onNwNewEntry","description","sideMenu","tabulatorOptions","tabulatorEvents","tableOnly","noColumnFilter","reload","reloadBtnInfotext","newBtnShow","newBtnClass","newBtnDisabled","newBtnLabel","uniqueId","idField","parentIdField","countOnly","useSelectionSpan","uuid","filterName","filterActive","dataset","datasetMetadata","availableFilters","selectedFilter","fetchCmptRefresh","fetchCmptApiFunction","fetchCmptApiFunctionParams","fetchCmptDataFetched","fetchResult","tableBuilt","tabulatorHasSelector","selectedData","persistence","headerFilter","notSelectedFields","filteredData","filteredColumns","col","resizable","fieldIdsForVisibilty","getColumns","def","getDefinition","getField","fieldNames","idExtra","columnsForFilter","filterTitles","reloadTable","initTabulator","hash","resolvePromiseFunc","setRenderData","startFetchCmpt","layout","movableColumns","columnDefaults","tooltip","selectable","dataTree","on","toDelete","childIdx","child","isVisible","_setHeaderFilter","updateTabulator","_updateTabulator","setColumns","clearFilters","getHeaderFilters","setHeaderFilterValue","clearFilter","render","setSideMenu","setDropDownMenu","personalFilters","filtersArray","filtersCount","filter_id","desc","onClickCall","handlerGetFilterById","subscriptDescription","subscriptLinkClass","subscriptLinkValue","onClickSubscriptCall","handlerRemoveCustomFilter","children","option","dataFetchedCallback","handlerSaveCustomFilter","attr","parentId","parentIdx","_children","beforeCreate","$props","Mailverteiler","AusweisStatus","QuickLinks","mobile","hideCollapse","collapseOpen","showCollapse","Adresse","withZustelladresse","Kontakt","ProfilEmails","RoleInformation","getLinkGruppeListe","gruppe","getLinkVerbandListe","getLinkSemesterListe","ApiProfil","profilViewData","Upload","DmsItem","preview","multiple","inputClass","noList","disabled","stringifyFile","lastModified","lastModifiedDate","addFiles","files","dt","DataTransfer","doubles","removeFile","fileToRemove","upload","dmsFile","ApiProfilUpdate","updateProfilbild","getProfilUpdateWithPermission","ImageUpload","dmsData","Dms","updateID","uploadImage","ProfilInformation","fotoStatus","FotoSperre","foto_sperre","imageUpload","sperre_foto_function","get_image_base64_src","foto","Vorname","Nachname","profilInfo","notIncludedProperties","EditProfilSelect","EditKontakt","originalValue","zustellKontakteCount","updateValue","checked","isChanged","getZustellkontakteCount","showZustellKontakteWarning","zustellung","kontakteOfSelectedType","kontakttyp","EditAdresse","AutoComplete","autocomplete","gemeinden","ortschaftnamen","selectedNation","nationenList","zustellAdressenCount","fileschanged","autocompleteSearchGemeinden","gemeinde","autocompleteSearchOrtschaftsnamen","ortschaft","getGemeinde","Set","ortschaftsname","updateFileID","getZustelladressenCount","deleteDmsData","showZustellAdressenWarning","zustelladresse","adresse_id","strasse","Status","getDocumentLink","dms_id","getComponentView","profilUpdateTopic","cardHeader","status_timestamp","TextInputDokument","withFiles","didFilesChange","didDataChange","emitChanges","toRaw","ariaLabel","breadcrumb","submit","select","breadcrumbItems","modal_topic","properties","addItem","anmerkung","deleteItem","profilUpdateEmit","updateOptions","Loading","state","clearTimeout","EditProfil","Loader","zustelladressenCount","zustellkontakteCount","editData","updateFileIDFunction","newFileID","handleFailedError","setLoading","submitProfilChange","fileData","uploadFiles","handleApiResponse","showFooter","FetchProfilUpdates","showUpdateModal","editProfilTitle","hideEditProfilModal","updateEditModal","showEditProfilModal","updateRequest","profilUpdateStates","deleteRequest","dateFilter","cell","onRendered","div","initialValue","getValue","PrimevueCalendar","calendar","dates","headerValue","rowValue","rowDate","startDate","endDate","setHours","toDateString","singleDate","StudentProfil","collapseIconBetriebsmittel","editDataFilter","preloadedPhrasen","zutrittsgruppen_table_options","persistenceID","zutrittsGruppenPhrase","betriebsmittel_table_options","responsiveLayoutCollapseUseFormatters","responsiveLayoutCollapseFormatter","$collapseFormatter","headerSort","headerClick","collapseFunction","entlehnteBetriebsmittelPhrase","inventarnummerPhrase","ausgabedatum","headerFilterFunc","formatterParams","datetimeFormatterParams","betriebsmittelTableBuilt","betriebsmittelTable","mittel","zutrittsgruppenTableBuilt","zutrittsgruppenTable","zuttritsgruppen","fetchProfilUpdates","profilUpdates","sortProfilUpdates","editModal","inputFormat","outputFormat","invalidPlaceholder","filteredEditData","profilInformation","Username","username","Anrede","anrede","Titel","Postnomen","postnomen","roleInformation","geburtsdatum","gebdatum","geburtsort","gebort","personenkennzeichen","loaded","newVal","MitarbeiterProfil","funktionen_table_options","bezeichnungPhrase","organisationseinheitPhrase","gueltigVonPhrase","gueltigBisPhrase","wochenstundenPhrase","Nummer","Ausgegeben_am","ausgabedatumPhrase","funktionenTableBuilt","funktionenTable","funktionen","setTableColumnTitles","getTelefonValue","standort_telefon","telefonklappe","telefon","office","ViewStudentProfil","personEmails","emails","ViewMitarbeiterProfil","collapseIconFunktionen","item2","innerHTML","Profil","notFoundUID","isEditable","editable","allClickableIcons","_column","cells","click","ele1","ele2","insertamum","reverse","load","profil_data","adressen","adressenArray","adresse","adr","kontakte","kontakteArray","kontant","kon","Personen_Informationen","Private_Kontakte","listview","Private_Adressen","loadingModalRef","oldVal","ApiOrt","Raumsuche","InputNumber","inputnumber","phrasenPromise","phrasenResolved","tabulatorUuid","tableBuiltResolve","tableBuiltPromise","roomtypes","defaultType","raumtyp_kurzbz","beschreibung","anzahl","selectedType","getHours","minutes","getMinutes","datepickerTextInputOptions","enterSubmit","tabSubmit","selectOnFocus","format","escClose","timepickerTextInputOptions","raumsucheTableOptions","widthGrow","linkFormatter","raumsucheTableEventHandlers","tableResolve","arialabel","roomPlanLink","room","roomInfoLink","getTimeString","setupData","nummer","planbezeichnung","personen","max_person","linkInfo","linkRes","raumsucheTable","loadRoomTypes","loadRooms","toISOString","handleUuidDefined","setRoute","dateFormat","getDate","getMonth","getFullYear","timeFormat","setupMounted","tableID","tableDataSet","visualViewport","setProperty","isDarkMode","Pagination","paginator","maxPageCount","newPageEvent","StudiengangPerson","telefoneklappe","email","displayWidget","formattedEmail","emailArray","fullname","phone","email_link","base64Image","profilViewLink","StudiengangVertretung","vertretungsList","showBezeichnung","vertretungFormatedName","vertretung","ApiStudiengang","StudiengangInformation","stg_ltg","gf_ltg","stv_ltg","ass","hochschulvertr","stdv","jahrgangsvertr","collection_array","returnData","collection","moodleLink","studiengangInformationen","ApiCms","CmsNews","fetchNews","Axios","loadNewPageContent","raum_contentmittitel","imgContent","sanitizeLegacyTables","textContent","pElement","parentNode","replaceChild","u","li","scrollWidth","firstChild","TEXT_NODE","th","childNodes","cn","tables","getElementsByTagName","innerText","room_name","room_name_reg_exp","room_name_reg_exp_result","link_element","replaceWith","img","DOMParser","parseFromString","imgAttributes","regexList","relative","priority","regex","replacement","group_replacement_strategy","absolute","relative_regex","replaceRelativeLegacyLink","relativeLegacyLink","new_link","query_parameter","prepareContent","new_href","CmsContent","news_content","iframe_content","srcUrl","iframe","content_type","content_id_internal","fetchContent","$nextTick","computeContentType","DEFAULT_MODE_RAUMINFO","RoomInformation","today","AbgabeStudentDetail","Checkbox","checkbox","Dropdown","dropdown","Textarea","textarea","projektarbeit","viewMode","eidAkzeptiert","enduploadTermin","allActiveLanguages","abstract","abstract_en","schlagwoerter","schlagwoerter_en","kontrollschlagwoerter","seitenanzahl","validate","triggerEndupload","bperson_id","handleUploadRes","modalContainerEnduploadZusatzdaten","downloadAbgabe","formatDate","dateParam","padZero","num","signaturInfo","dateDiffInDays","round","getDateStyle","abgabedatum","openBeurteilungLink","getOptionLabel","getEid","getEnduploadErlaubt","VerticalSplit","availHeight","topheight","bottomheight","mousePosY","vsplitter","vsplitterOffset","selfOffsetTop","calcHeights","trackVerticalSplitterOffsetTop","windowheight","innerHeight","oldavailHeight","verticalsplit","collapseTop","collapseBottom","showBoth","isCollapsed","dragStart","drag","topOrBottomClass","topheightcss","bottomheightcss","AbgabetoolStudent","AbgabeDetail","student_uid_prop","domain","projektarbeiten","selectedProjektarbeit","abgabeTableOptions","detailFormatter","beurteilungFormatter","centeredTextFormatter","mailFormatter","abgabeTableEventHandlers","getColumn","setDetailComponent","pdfExportLink","betreuerart_kurzbz","betreuer_person_id","isPastDate","loadAbgaben","pa","projekarbeit","abgabetermine","allowedToUpload","betreuer","buildBetreuer","buildMailToLink","abgabe","mitarbeiter_uid","betreuerart_beschreibung","btitelpre","bvorname","bnachname","btitelpost","projekt","babgeschickt","zweitbetreuer_abgeschickt","beurteilungLink","beurteilung","stg","kurzbzlang","mail","projekttypbezeichnung","abgabeTable","loadProjektarbeiten","calcMaxTableHeight","setHeight","isViewMode","AbgabeMitarbeiterDetail","oldPaBeurteilungLink","allAbgabeTypes","openZusatzdatenModal","saveTermin","allowedToSave","allowedToDelete","deleteTermin","deletedTerminIndex","fontColor","getOptionLabelSprache","getOptionLabelAbgabetyp","openStudentPage","openPlagiatcheck","openBenotung","getSemesterBenotbar","isCurrent","endUploadVorhanden","AbgabetoolMitarbeiter","saving","serienTermin","showAll","detailOffset","selectableCheck","selectionCheck","titleFormatter","titleFormatterParams","rowRange","hozAlign","pkzTextFormatter","undoSelection","getRow","isSelected","deselect","showDeadlines","toggleShowAll","showall","redraw","setSort","openAddSeriesModal","modalContainerAddSeries","addSeries","createInfoString","str","student","buildPKZ","matrikelnr","buildStg","pkz","projekttyp_kurzbz","callback","DeadlineOverview","person_uid_prop","fullName","deadlines","deadlineTableOptions","deadlineTableEventHandlers","loadDeadlines","dl","stud_titelpre","stud_vorname","stud_nachname","stud_titelpost","fixterminstring","deadlineTable","Studium","studienSemester","selectedStudiensemester","selectedStudiengang","studienOrdnung","selectedStudienordnung","selectedSemester","selectedLehrveranstaltung","studium_studiengang","studium_semester","studium_studienordnung","getDataFromLocalStorage","storeDataToLocalStorage","studienordnung","changeStudiensemester","changeSelectedStudienSemester","changeStudiengang","changeSelectedStudienGang","changeSemester","changeSelectedSemester","changeStudienordnung","newSelectIndex","changeSelectedStudienPlan","extractPropertyValues","studienplan_id","openLvUebersicht","lehrveranstaltung","sortStudienSemester","sem1","sem2","sem1Match","sem1Semester","sem1Year","sem2Match","sem2Semester","sem2Year","setHash","preselected","lv1","lv2","studienordnungTitel","orgform_bezeichnung","studiengangTitel","studiensemesterTitel","studiensemester_regex","selectedLehrveranstaltungTitel","lehrform_kurzbz","computedStudienOrdnung","carry","computedStudienOrdnungSelectValues","diabled","ApiRenderers","loadRenderers","ApiRouteInfo","ciPath","router","VueRouter","createRouter","history","createWebHistory","routes","redirect","route","charAt","beforeEnter","currentRoute","appSideMenuEntries","renderers","isMobile","test","navigator","userAgent","isInternalRoute","internalBase","origin","startsWith","handleClick","URL","pathname","matched","rendertype","modalTitle","modalContent","calendarEvent","defineAsyncComponent","calendarEventStyles","head","rel","isChromium","isFirefox","overflow","scrollbarWidth","getScrollbarWidth","setScrollbarWidth","directive","afterEach","failure","fullPath"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Fhc.js","sources":["../../../../js/components/Bootstrap/Modal.js","../../../../js/components/Bootstrap/Alert.js","../../../../js/components/Bootstrap/Confirm.js","../../../../js/components/Drop/Grid/Item.js","../../../../js/composables/GridLogic.js","../../../../js/components/Drop/Grid.js","../../../../js/composables/Dashboard/CachedWidgetLoader.js","../../../../js/components/Dashboard/Item.js","../../../../js/components/Tranistion/HeightTransition.js","../../../../js/components/Dashboard/Widget/WidgetIcon.js","../../../../js/components/Dashboard/Section.js","../../../../js/components/Dashboard/Widget/Picker.js","../../../../js/helpers/ObjectUtils.js","../../../../js/api/factory/cis/dashboard.js","../../../../js/components/Dashboard/Dashboard.js","../../../../js/api/search.js","../../../../js/api/phrasen.js","../../../../js/api/navigation.js","../../../../js/api/filter.js","../../../../js/api/studstatus.js","../../../../js/api/profil.js","../../../../js/api/profilUpdate.js","../../../../js/api/lvPlan.js","../../../../js/api/stv.js","../../../../js/api/stv/verband.js","../../../../js/api/stv/students.js","../../../../js/api/stv/filter.js","../../../../js/api/stv/konto.js","../../../../js/api/stv/group.js","../../../../js/api/stv/kontakt.js","../../../../js/api/stv/prestudent.js","../../../../js/api/stv/status.js","../../../../js/api/stv/details.js","../../../../js/api/stv/exam.js","../../../../js/api/stv/abschlusspruefung.js","../../../../js/api/stv/grades.js","../../../../js/api/stv/mobility.js","../../../../js/api/stv/archiv.js","../../../../js/api/stv/documents.js","../../../../js/api/stv/exemptions.js","../../../../js/api/stv/jointstudies.js","../../../../js/api/stv/courselist.js","../../../../js/api/notiz.js","../../../../js/api/notiz/person.js","../../../../js/api/betriebsmittel.js","../../../../js/api/betriebsmittel/person.js","../../../../js/api/checkperson.js","../../../../js/api/ort.js","../../../../js/api/cms.js","../../../../js/api/lehre.js","../../../../js/api/addons.js","../../../../js/api/messages.js","../../../../js/api/messages/person.js","../../../../js/api/vorlagen.js","../../../../js/api/studium.js","../../../../js/api/fhcapifactory.js","../../../../js/api/dashboard.js","../../../../js/api/bookmark.js","../../../../js/api/ampeln.js","../../../../js/api/studiengang.js","../../../../js/api/menu.js","../../../../js/api/authinfo.js","../../../../js/api/language.js","../../../../js/plugin/OldFhcApi.js","../../../../js/RESTClient.js","../../../../js/plugins/FhcAlert.js","../../../../js/plugins/Api.js","../../../../js/api/factory/phrasen.js","../../../../js/plugins/Phrasen.js","../../../../js/plugins/Theme.js","../../../../js/directives/contrast.js","../../../../js/helpers/DragAndDrop.js","../../../../js/directives/Calendar/DragAndDrop.js","../../../../js/components/Calendar/Base/DragAndDrop.js","../../../../js/components/Calendar/Base/Header.js","../../../../js/components/Calendar/Base/Header/Datepicker.js","../../../../js/components/Calendar/Base/Slider.js","../../../../js/directives/Calendar/Click.js","../../../../js/components/Calendar/Base.js","../../../../js/api/factory/lvPlan.js","../../../../js/components/Calendar/Base/Grid/Line/Event.js","../../../../js/components/Calendar/Base/Grid.js","../../../../js/components/Calendar/Base/Grid/Line.js","../../../../js/components/Calendar/Base/Grid/Line/Background.js","../../../../js/components/Calendar/Base/Label/Day.js","../../../../js/components/Calendar/Base/Label/Dow.js","../../../../js/components/Calendar/Base/Label/Time.js","../../../../js/components/Calendar/Mode/Day/View.js","../../../../js/components/Calendar/Mode/Day.js","../../../../js/composables/Responsive.js","../../../../js/components/Calendar/Mode/Week.js","../../../../js/components/Calendar/Mode/Week/View.js","../../../../js/components/Calendar/Mode/Month.js","../../../../js/components/Calendar/Mode/Month/View.js","../../../../js/components/Calendar/Base/Label/Week.js","../../../../js/components/Calendar/LvPlan.js","../../../../js/composables/EventLoader.js","../../../../js/api/factory/authinfo.js","../../../../js/components/Cis/LvPlan/Lehrveranstaltung.js","../../../../js/components/Cis/LvPlan/Personal.js","../../../../js/components/Cis/Mylv/Semester/Studiengang/Lv/Pruefungen.js","../../../../js/api/factory/lehre.js","../../../../js/components/Cis/Mylv/Semester/Studiengang/Lv/Info.js","../../../../js/mixins/Phrasen.js","../../../../js/components/Cis/Mylv/LvMenu.js","../../../../js/api/factory/addons.js","../../../../js/components/Cis/Mylv/LvUebersicht.js","../../../../js/components/Cis/Mylv/Semester.js","../../../../js/components/Cis/Mylv/Semester/Studiengang.js","../../../../js/components/Cis/Mylv/Semester/Studiengang/Lv.js","../../../../js/components/Cis/Mylv/Student.js","../../../../js/components/Fetch.js","../../../../js/components/filter/Filter/Config.js","../../../../js/components/filter/Filter/Columns.js","../../../../js/components/filter/Table/Download.js","../../../../js/directives/collapseAutoClose.js","../../../../js/tabulator/layouts/fitDataStretchFrozen.js","../../../../js/api/factory/filter.js","../../../../js/components/filter/Filter.js","../../../../js/components/Cis/Profil/ProfilComponents/Mailverteiler.js","../../../../js/components/Cis/Profil/ProfilComponents/FhAusweisStatus.js","../../../../js/components/Cis/Profil/ProfilComponents/QuickLinks.js","../../../../js/components/Cis/Profil/ProfilComponents/Adresse.js","../../../../js/components/Cis/Profil/ProfilComponents/Kontakt.js","../../../../js/components/Cis/Profil/ProfilComponents/ProfilEmails.js","../../../../js/components/Cis/Profil/ProfilComponents/RoleInformation.js","../../../../js/api/factory/profil.js","../../../../js/components/Form/Upload/Dms.js","../../../../js/components/Form/Upload/Dms/Item.js","../../../../js/api/factory/profilUpdate.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfilComponents/ImageUpload.js","../../../../js/components/Cis/Profil/ProfilComponents/ProfilInformation.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfilSelect.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfilComponents/EditKontakt.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfilComponents/EditAdresse.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfilComponents/Status.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfilComponents/TextInputDokument.js","../../../../js/components/Loader.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfil.js","../../../../js/components/Cis/Profil/ProfilComponents/FetchProfilUpdates.js","../../../../js/tabulator/filters/Dates.js","../../../../js/components/Cis/Profil/StudentProfil.js","../../../../js/components/Cis/Profil/MitarbeiterProfil.js","../../../../js/components/Cis/Profil/StudentViewProfil.js","../../../../js/components/Cis/Profil/MitarbeiterViewProfil.js","../../../../js/components/Cis/Profil/Profil.js","../../../../js/api/factory/ort.js","../../../../js/components/Cis/Raumsuche/Raumsuche.js","../../../../js/components/Pagination/Pagination.js","../../../../js/components/Cis/Cms/StudiengangInformation/StudiengangPerson.js","../../../../js/components/Cis/Cms/StudiengangInformation/StudiengangVertretung.js","../../../../js/api/factory/studiengang.js","../../../../js/components/Cis/Cms/StudiengangInformation/StudiengangInformation.js","../../../../js/api/factory/cms.js","../../../../js/components/Cis/Cms/News.js","../../../../js/components/Cis/Cms/Content_types/Raum_contentmittitel.js","../../../../js/helpers/LegacyLinkReplaceHelper.js","../../../../js/components/Cis/Cms/Content_types/General.js","../../../../js/components/Cis/Cms/Content.js","../../../../js/components/Cis/Cms/Content_types/News_content.js","../../../../js/components/Cis/Cms/Content_types/Iframe_content.js","../../../../js/components/Cis/Mylv/RoomInformation.js","../../../../js/components/Cis/Abgabetool/AbgabeStudentDetail.js","../../../../js/components/verticalsplit/verticalsplit.js","../../../../js/components/Cis/Abgabetool/AbgabetoolStudent.js","../../../../js/components/Cis/Abgabetool/AbgabeMitarbeiterDetail.js","../../../../js/components/Cis/Abgabetool/AbgabetoolMitarbeiter.js","../../../../js/components/Cis/Abgabetool/DeadlineOverview.js","../../../../js/components/Cis/Studium/Studium.js","../../../../js/api/factory/renderers.js","../../../../js/api/factory/routeinfo.js","../../../../js/apps/Dashboard/Fhc.js","../../../../js/helpers/CssVarCalcHelpers.js","../../../../js/helpers/StringHelpers.js"],"sourcesContent":["//import Phrasen from '../../plugin/Phrasen.js';\n\nexport default {\n\tname: 'BootstrapModal',\n\tdata: () => ({\n\t\tmodal: null,\n\t\tfullscreen: false\n\t}),\n\tprops: {\n\t\tbackdrop: {\n\t\t\ttype: [Boolean,String],\n\t\t\tdefault: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['static', true, false].includes(value);\n\t\t\t}\n\t\t},\n\t\tfocus: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tkeyboard: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tnoCloseBtn: Boolean,\n\t\tdialogClass: [String,Array,Object],\n\t\theaderClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tbodyClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: 'px-4 py-5'\n\t\t},\n\t\tfooterClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tallowFullscreenExpand: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\temits: [\n\t\t\"hideBsModal\",\n\t\t\"hiddenBsModal\",\n\t\t\"hidePreventedBsModal\",\n\t\t\"showBsModal\",\n\t\t\"shownBsModal\"\n\t],\n\tmethods: {\n\t\tdispose() {\n\t\t\treturn this.modal.dispose();\n\t\t},\n\t\thandleUpdate() {\n\t\t\treturn this.modal.handleUpdate();\n\t\t},\n\t\thide() {\n\t\t\treturn this.modal.hide();\n\t\t},\n\t\tshow(relatedTarget) {\n\t\t\treturn this.modal.show(relatedTarget);\n\t\t},\n\t\ttoggle() {\n\t\t\treturn this.modal.toggle();\n\t\t},\n\t\ttoggleFullscreen() {\n\t\t\tthis.fullscreen = !this.fullscreen\n\t\t}\n\t},\n\tmounted() {\n\t\tif (this.$refs.modal)\n\t\t\tthis.modal = new bootstrap.Modal(this.$refs.modal, {\n\t\t\t\tbackdrop: this.backdrop,\n\t\t\t\tfocus: this.focus,\n\t\t\t\tkeyboard: this.keyboard\n\t\t\t});\n\t},\n\tpopup(body, options, title, footer) {\n\t\tconst BsModal = this,\n\t\t\tslots = {};\n\t\tif (body !== undefined)\n\t\t\tslots.default = () => body;\n\t\tif (title !== undefined)\n\t\t\tslots.title = () => title;\n\t\tif (footer !== undefined)\n\t\t\tslots.footer = () => footer;\n\n\t\t// little hack to check whether primevue is included in the app or not\n\t\tlet includedPrimevue = false;\n\t\tif(typeof primevue !== 'undefined'){\n\t\t\tincludedPrimevue = true;\n\t\t}\n\n\t\treturn new Promise((resolve,reject) => {\n\t\t\tconst instance = Vue.createApp({\n\t\t\t\tname: 'ModalTmpApp',\n\t\t\t\tsetup() {\n\t\t\t\t\treturn () => Vue.h(BsModal, {...{\n\t\t\t\t\t\tclass: 'fade'\n\t\t\t\t\t},...options, ...{\n\t\t\t\t\t\tref: 'modal',\n\t\t\t\t\t\t'onHidden.bs.modal': instance.unmount\n\t\t\t\t\t}}, slots);\n\t\t\t\t},\n\t\t\t\tmounted() {\n\t\t\t\t\tthis.$refs.modal.show();\n\t\t\t\t\t\n\t\t\t\t},\n\t\t\t\tbeforeUnmount() {\n\t\t\t\t\tif (this.$refs.modal)\n\t\t\t\t\t\tthis.$refs.modal.result !== false ? resolve(this.$refs.modal.result) : reject();\n\t\t\t\t},\n\t\t\t\tunmounted() {\n\t\t\t\t\twrapper.parentElement.removeChild(wrapper);\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst wrapper = document.createElement(\"div\");\n\t\t\t\n\t\t\t// if(primevue) --> won't work because primevue is not defined in this scope and promise would be rejected\n\t\t\tif (includedPrimevue){\n\t\t\t\tinstance.use(primevue.config.default, {zIndex: {overlay: 9999}})\n\t\t\t}\n\t\t\t\t \n\t\t\t//instance.use(Phrasen); // TODO(chris): find a more dynamic way\n\t\t\timport('../../plugins/Phrasen.js').then((Phrasen) => {\n\t\t\t\tinstance.use(Phrasen.default);\n\t\t\t\tinstance.mount(wrapper);\n\t\t\t\tdocument.body.appendChild(wrapper);\n\t\t\t});\n\t\t});\n\t},\n\ttemplate: `
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    `\n}\n","import BsModal from './Modal.js';\n\nexport default {\n\tname: 'BootstrapAlert',\n\tcomponents: {\n\t\tBsModal\n\t},\n\tmixins: [\n\t\tBsModal\n\t],\n\tprops: {\n\t\tdialogClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: 'modal-dialog-centered'\n\t\t},\n\t\t/*\n\t\t * NOTE(chris):\n\t\t * Hack to expose in \"emits\" declared events to $props which we use\n\t\t * in the v-bind directive to forward all events.\n\t\t * @see: https://github.com/vuejs/core/issues/3432\n\t\t*/\n\t\tonHideBsModal: Function,\n\t\tonHiddenBsModal: Function,\n\t\tonHidePreventedBsModal: Function,\n\t\tonShowBsModal: Function,\n\t\tonShownBsModal: Function\n\t},\n\tdata: () => ({\n\t\tresult: true\n\t}),\n\tmounted() {\n\t\tthis.modal = this.$refs.modalContainer.modal;\n\t},\n\tpopup(msg, options) {\n\t\treturn BsModal.popup.bind(this)(msg, options);\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t`\n}\n","import BsAlert from './Alert.js';\n\nexport default {\n\tname: 'BootstrapConfirm',\n\tmixins: [\n\t\tBsAlert\n\t],\n\tdata: () => ({\n\t\tresult: false\n\t}),\n\tpopup(msg, options) {\n\t\treturn BsAlert.popup.bind(this)(msg, options);\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t`\n}\n","export default {\n\tname:'GridItem',\n\tcomponents: {\n\t},\n\tinject: {\n\t},\n\tprops: {\n\t\titem: Object,\n\t\tactive: Boolean\n\t},\n\temits: [\n\t\t\"mouseDown\",\n\t\t\"mouseUp\",\n\t\t\"startMove\",\n\t\t\"startResize\",\n\t\t\"dragging\",\n\t\t\"endDrag\",\n\t\t\"dropDrag\",\n\t\t\"item\",\n\t\t\"touchStart\",\n\t\t\"touchEnd\",\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tdragAction: '',\n\t\t\tdragging: false\n\t\t}\n\t},\n\tcomputed: {\n\t},\n\tmethods: {\n\t\tregisterDragAction(evt) {\n\t\t\tthis.$emit('mouseDown', evt);\n\t\t\tif (evt.target.hasAttribute('drag-action')) {\n\t\t\t\tthis.dragAction = evt.target.getAttribute('drag-action');\n\t\t\t} else {\n\t\t\t\tlet parent = evt.target.closest('[drag-action]');\n\t\t\t\tif (parent) {\n\t\t\t\t\tthis.dragAction = parent.getAttribute('drag-action');\n\t\t\t\t} else {\n\t\t\t\t\tthis.dragAction = '';\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttryDragStart(evt, item) {\n\t\t\tlet dragAction = this.dragAction || evt.target.getAttribute('drag-action');\n\t\t\tif (dragAction) {\n\t\t\t\tthis.dragging = true;\n\t\t\t\tif (dragAction == 'move')\n\t\t\t\t\treturn this.$emit('startMove', evt, item);\n\t\t\t\telse if (dragAction == 'resize')\n\t\t\t\t\treturn this.$emit('startResize', evt, item);\n\t\t\t}\n\t\t\t//evt.preventDefault();\n\t\t},\n\t\ttouchDragEnd(evt) {\n\t\t\tif (!this.dragging)\n\t\t\t\treturn;\n\t\t\tthis.dragging = false;\n\t\t\tthis.$emit('touchEnd', evt);\n\t\t},\n\t\ttouchStart(event){\n\t\t\tthis.$emit('touchStart', event); \n\t\t\tthis.registerDragAction(event); \n\t\t\tthis.tryDragStart(event, this.item);\n\t\t},\n\t\ttouchMove(event){\n\t\t\tif(this.dragging){\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.$emit('dragging', event);\n\t\t\t}\n\t\t}\n\t\t\n\t},\n\ttemplate: `\n\t
    \n\t\t\n\t
    `\n}\n","// TODO(chris): Comments\n\nconst DIR_UP = 0;\nconst DIR_LEFT = 1;\nconst DIR_RIGHT = 2;\nconst DIR_DOWN = 3;\n\nclass GridLogic {\n\tconstructor(w) {\n\t\tif (w.w) {\n\t\t\tthis.w = w.w;\n\t\t\tthis.h = w.h;\n\t\t\tthis.data = [...w.data];\n\t\t\tthis.grid = [...w.grid];\n\t\t} else {\n\t\t\tthis.w = w;\n\t\t\tthis.h = 1;\n\t\t\tthis.data = [];\n\t\t\tthis.grid = [];\n\t\t}\n\t}\n\tisFreeSlot(x, y) {\n\t\tconst i = y*this.w + x;\n\t\treturn !this.grid[i] && this.grid[i] !== 0;\n\t}\n\tgetMaxY(){\n\t\treturn this.data.reduce((acc, item) => { \n\t\t\tif (item?.y > acc) {\n\t\t\t\t acc = item.y; \n\t\t\t} \n\t\t\treturn acc; \n\t\t}, 0);\n\t}\n\tgetFreeSlots() {\n\t\tconst freeSlots = [];\n\t\tlet biggestY = this.getMaxY();\n\t\tlet totalSpaces = this.w * (biggestY+1);\n\t\tfor(let i=0; i < totalSpaces; i++){\n\t\t\tif (!this.grid[i] && this.grid[i] !== 0){\n\t\t\t\tthis.grid[i] = undefined;\n\t\t\t}\n\t\t}\n\t\tfor(let i =0; i < this.grid.length; i++){\n\t\t\tif (!this.grid[i] && this.grid[i] !== 0){\n\t\t\t\tlet x = i % this.w;\n\t\t\t\tlet y = Math.floor(i / this.w);\n\t\t\t\tfreeSlots.push({x, y});\n\t\t\t}\n\t\t}\n\t\treturn freeSlots;\n\t}\n\tadd(item, prefer) {\n\t\tlet occupiers = this.getItemsInFrame(item.frame);\n\t\tif (!occupiers.length) {\n\t\t\titem.frame.forEach(f => this.grid[f] = item.index);\n\t\t\tthis.data[item.index] = item;\n\t\t\tthis.h = Math.max(this.h, item.y + item.h);\n\t\t\treturn [];\n\t\t} else {\n\t\t\tconst intermGrid = new GridLogic(this);\n\t\t\t\n\t\t\titem.frame.forEach(f => intermGrid.grid[f] = -1);\n\n\t\t\tconst possiblities = intermGrid.tryMoving(occupiers, prefer);\n\t\t\tif (possiblities.length) {\n\t\t\t\tconst bestOption = possiblities.sort((a,b) => {\n\t\t\t\t\tif (a.cost === undefined)\n\t\t\t\t\t\ta.cost = a.moves.reduce((a, v) => a * v.cost, 1);\n\t\t\t\t\tif (b.cost === undefined)\n\t\t\t\t\t\tb.cost = b.moves.reduce((a, v) => a * v.cost, 1);\n\t\t\t\t\treturn a.cost > b.cost;\n\t\t\t\t});\n\t\t\t\tconst result = [];\n\t\t\t\tbestOption[0].moves.forEach(move => {\n\t\t\t\t\tconst currItem = {...this.data[move.index]};\n\t\t\t\t\tcurrItem.x += move.x;\n\t\t\t\t\tcurrItem.y += move.y;\n\t\t\t\t\tcurrItem.frame = this.getItemFrame(currItem);\n\t\t\t\t\tthis.h = Math.max(this.h, currItem.y + currItem.h);\n\t\t\t\t\tthis.remove(currItem);\n\t\t\t\t\tcurrItem.frame.forEach(f => this.grid[f] = currItem.index);\n\t\t\t\t\tthis.data[move.index] = currItem;\n\t\t\t\t\tresult[move.index] = {\n\t\t\t\t\t\tindex: currItem.index,\n\t\t\t\t\t\tx: currItem.x,\n\t\t\t\t\t\ty: currItem.y\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\titem.frame.forEach(f => this.grid[f] = item.index);\n\t\t\t\tthis.data[item.index] = item;\n\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\tconsole.error('FATAL', \"can't arrange item on grid\");\n\t\t\t}\n\t\t}\n\t}\n\tmove(item, x, y) {\n\t\tif (item.data.place[this.w]?.pinned)\n\t\t\treturn [];\n\t\tif (item.x == x && item.y == y)\n\t\t\treturn [];\n\t\t\n\t\tthis.remove(item);\n\n\t\tlet prefer = undefined;\n\t\tif (item.x == x) {\n\t\t\tif (y-item.y > 0)\n\t\t\t\tprefer = DIR_UP;\n\t\t\telse\n\t\t\t\tprefer = DIR_DOWN;\n\t\t} else if (item.y == y) {\n\t\t\tif (x-item.x > 0)\n\t\t\t\tprefer = DIR_LEFT;\n\t\t\telse\n\t\t\t\tprefer = DIR_RIGHT;\n\t\t}\n\n\t\tconst originalFrame = Array.isArray(item.frame) ? [...item.frame] : [item.frame];\n\n\t\tconst currItem = {...item};\n\t\tcurrItem.x = x;\n\t\tcurrItem.y = y;\n\t\tcurrItem.frame = this.getItemFrame(currItem);\n\t\tlet occupiers = this.getItemsInFrame(currItem.frame);\n\t\t\n\t\t// does not update if the target conatins pinned widgets\n\t\tif (occupiers.some(frame => this.data[frame]?.data.place[this.w]?.pinned)) {\n\t\t\treturn [];\n\t\t}\n\t\t\n\t\t// checks if target contains widget with the same high and width\n\t\tlet occupiersData = occupiers.map(occupier => this.data[occupier]);\n\t\tlet occupiersFrame = occupiersData.map(occupier => occupier.frame).flat();\n\t\tif (!occupiersFrame.some(frame => !currItem.frame.includes(frame)) && !occupiersFrame.some(frame => originalFrame.includes(frame))){\n\t\t\tlet replaceUpdate = [];\n\t\t\tlet newOccupierFrames = [];\n\t\t\tfor(let f of originalFrame){\n\t\t\t\tif(newOccupierFrames.includes(f)){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tlet occ = occupiersData.shift();\n\t\t\t\tif(occ){\n\t\t\t\t\tnewOccupierFrames = [...newOccupierFrames, ...this.getItemFrame({ ...occ, ...this.getSingleFramePosition(f) })];\n\t\t\t\t\treplaceUpdate[occ.index] = { index: occ.index, ...this.getSingleFramePosition(f)}\n\t\t\t\t}\n\t\t\t}\n\t\t\treplaceUpdate[item.index] = { index: item.index, x, y };\n\t\t\t\n\t\t\treturn replaceUpdate;\n\t\t}\n\t\t\n\t\tconst updates = this.add(currItem, prefer);\n\t\tupdates[item.index] = {index: item.index, x, y};\n\t\treturn updates;\n\t}\n\tresize(item, w, h) {\n\t\tif (item.w == w && item.h == h)\n\t\t\treturn [];\n\t\tthis.remove(item);\n\n\t\tconst currItem = {...item};\n\t\tcurrItem.w = w;\n\t\tcurrItem.h = h;\n\t\tcurrItem.frame = this.getItemFrame(currItem);\n\t\t\n\t\tconst updates = this.add(currItem);\n\t\tif(updates)\n\t\t\tupdates[item.index] = {index: item.index, w, h, x:item.x, y:item.y, resize:true};\n\n\t\treturn updates;\n\t}\n\ttryMoving(index, prefer) {\n\t\tif (Array.isArray(index)) {\n\t\t\tindex.forEach(i => this.remove({index:i}));\n\t\t\tlet possiblities = [{grid: this, moves: []}];\n\t\t\tindex.forEach(i => {\n\t\t\t\tlet newPoss = [];\n\t\t\t\tpossiblities.forEach(possiblity => {\n\t\t\t\t\tpossiblity.grid.tryMoving(i, prefer).forEach(p => {\n\t\t\t\t\t\tpossiblity.moves\n\t\t\t\t\t\tp.moves = [...p.moves, ...possiblity.moves];\n\t\t\t\t\t\tnewPoss.push(p)\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tpossiblities = newPoss;\n\t\t\t});\n\t\t\treturn possiblities;\n\t\t}\n\t\tconst directions = [DIR_UP, DIR_DOWN, DIR_LEFT, DIR_RIGHT];\n\n\t\tthis.remove({index});\n\n\t\tconst weight = 1 + .2*(this.data[index].weight || 0);\n\n\t\treturn directions.reduce((result, dir) => {\n\t\t\tlet res = this.tryMovingInDirection(dir, index, 1, (prefer === dir ? .5 : 1 + dir*.1) * weight);\n\t\t\tif (!res)\n\t\t\t\treturn result;\n\t\t\treturn [...result, ...res];\n\t\t}, []).filter(p => p);\n\t}\n\ttryMovingInDirection(dir, index, amount, cost) {\n\t\tconst move = {index, x:0, y: 0, cost: cost};\n\t\tlet targetframe;\n\t\tswitch(dir) {\n\t\t\tcase DIR_UP:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned || this.data[index].y - amount < 0)\n\t\t\t\t\treturn false;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i-this.w*amount);\n\t\t\t\tmove.y = -amount;\n\t\t\t\tbreak;\n\t\t\tcase DIR_DOWN:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned)\n\t\t\t\t\treturn false;\n\t\t\t\tif (this.data[index].y + this.data[index].h + amount > this.h)\n\t\t\t\t\tcost += .4;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i+this.w*amount);\n\t\t\t\tmove.y = amount;\n\t\t\t\tbreak;\n\t\t\tcase DIR_LEFT:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned || this.data[index].x - amount < 0)\n\t\t\t\t\treturn false;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i-amount);\n\t\t\t\tmove.x = -amount;\n\t\t\t\tbreak;\n\t\t\tcase DIR_RIGHT:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned || this.data[index].x + this.data[index].w + amount > this.w)\n\t\t\t\t\treturn false;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i+amount);\n\t\t\t\tmove.x = amount;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tconst occupiers = this.getItemsInFrame(targetframe);\n\t\tif (occupiers.includes(-1)) {\n\t\t\treturn this.tryMovingInDirection(dir, index, amount+1, cost);\n\t\t}\n\t\t\n\t\tconst intermGrid = new GridLogic(this);\n\t\ttargetframe.forEach(f => intermGrid.grid[f] = -1);\n\t\t\n\t\tif (!occupiers.length) {\n\t\t\treturn [{grid: intermGrid, moves: [move]}];\n\t\t}\n\t\tconst possiblities = intermGrid.tryMoving(occupiers).map(possiblity => possiblity.moves.unshift(move) && possiblity);\n\t\treturn possiblities.length ? possiblities : false;\n\t}\n\tclearWeights() {\n\t\tthis.data.forEach(item => item.weight = undefined);\n\t}\n\tgetItemsInFrame(frame) {\n\t\treturn frame.map(i => this.grid[i]).filter((v,i,a) => (v || v === 0) && a.indexOf(v) === i);\n\t}\n\tremove(item) {\n\t\tthis.grid = this.grid.map(i => i != item.index ? i : undefined);\n\t}\n\tgetItemFrame(item) {\n\t\tconst frame = [];\n\t\tfor (let i = 0; i < item.w; i++)\n\t\t\tfor (let j = 0; j < item.h; j++)\n\t\t\t\tframe.push(i + item.x + (j + item.y) * this.w);\n\t\treturn frame;\n\t}\n\tgetSingleFramePosition(frame){\n\t\treturn { x: frame % this.w, y: Math.floor(frame / this.w)};\n\t}\n\tdebug() {\n\t\treturn this.grid;\n\t}\n}\n\nexport default GridLogic;","// TODO(chris): Comments\n\nimport GridItem from './Grid/Item.js';\nimport GridLogic from '../../composables/GridLogic.js';\n\nconst MODE_IDLE = 0;\nconst MODE_MOVE = 1;\nconst MODE_RESIZE = 2;\nconst MODE_MOUSE_DOWN = 3;\n\nexport default {\n\tname: 'Grid',\n\tcomponents: {\n\t\tGridItem,\n\t},\n\tprops: {\n\t\tcols: Number,\n\t\titems: Array,\n\t\titemsSetup: Object,\n\t\tresizeLimit: Function,\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tmarginForExtraRow: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0\n\t\t},\n\t\tadditionalRow:{\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t}\n\t},\n\temits: [\n\t\t\"rearrangeItems\",\n\t\t\"newItem\",\n\t\t\"gridHeight\",\n\t\t\"draggedItem\",\n\t\t\"update:additionalRow\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tx: -1,\n\t\t\ty: -1,\n\t\t\tclientX:0,\n\t\t\tclientY: 0,\n\t\t\tmode: MODE_IDLE,\n\t\t\tgrid: null,\n\t\t\tdragGrid: null,\n\t\t\tpermUpdates: [],\n\t\t\tpositionUpdates: null,\n\t\t\tfixedPositionUpdates: null,\n\t\t\tdraggedOffset: [0,0],\n\t\t\tdraggedItem: null,\n\t\t\tdraggedNode: null,\n\t\t\treorderedItems:[],\n\t\t\tclonedWidget:null,\n\t\t}\n\t},\n\tinject:{\n\t\tsectionName: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tcomputed: {\n\t\tadditionalRowComputed: {\n\t\t\tget() {\n\t\t\t\treturn this.additionalRow;\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tthis.$emit('update:additionalRow', value);\n\t\t\t}\n\t\t},\n\t\titems_hashmap() {\n\t\t\tlet items = {};\n\t\t\tthis.items.forEach(item => {\n\t\t\t\tif (this.reorderedItems.length > 0 && this.needsReordering(item)){\n\t\t\t\t\t\tlet rearrangedPosition = this.reorderedItems.filter(widget => widget.data.widgetid == item.widgetid)?.pop();\n\t\t\t\t\t\tif (rearrangedPosition) {\t\t\t\n\t\t\t\t\t\t\titem.x = rearrangedPosition.x;\n\t\t\t\t\t\t\titem.y = rearrangedPosition.y;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\titems[`x${item.x}y${item.y}`] = item;\n\t\t\t});\t\n\t\t\treturn items\n\t\t},\n\t\titems_placeholders(){\n\t\t\tlet placeholders = [];\n\t\t\tlet col_max = this.cols;\n\t\t\tlet rows_max = this.rows;\n\n\t\t\t// occupied hashmap to keep track of the occupied cells\n\t\t\tlet occupied = {};\n\n\t\t\tfor (let y = 0; y < rows_max; y++) {\n\t\t\t\tfor (let x = 0; x < col_max; x++) {\n\t\t\t\t\t// skip current position if it was registered as occupied\n\t\t\t\t\tif (Object.keys(occupied).length && occupied[`x${x}y${y}`]) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tlet current_item = this.items_hashmap[`x${x}y${y}`];\n\t\t\t\t\tif (current_item) {\n\t\t\t\t\t\t//calculate the occupied cells from the width and the height from the items \n\t\t\t\t\t\tlet width = current_item.w;\n\t\t\t\t\t\tlet height = current_item.h;\n\t\t\t\t\t\tlet max_x = x + width - 1;\n\t\t\t\t\t\tlet max_y = y + height - 1;\n\t\t\t\t\t\tif(x != max_x || y != max_y){\n\t\t\t\t\t\t\tfor (let occupied_y = y; occupied_y <= max_y; occupied_y++) {\n\t\t\t\t\t\t\t\tfor (let occupied_x = x; occupied_x <= max_x; occupied_x++) {\n\t\t\t\t\t\t\t\t\tif (occupied_x != x || occupied_y != y) {\n\t\t\t\t\t\t\t\t\t\toccupied[`x${occupied_x}y${occupied_y}`]=true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tplaceholders.push({ x: x, y: y, w: 1, h: 1, placeholder: true, \n\t\t\t\t\t\t\tdata: { id: 'placeholder_' + String(placeholders.length).padStart(4, \"0\") } });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn placeholders;\n\t\t},\n\t\tplacedItems_withPlaceholders() {\n\t\t\treturn [...this.placedItems, ...this.items_placeholders];\n\t\t},\n\t\trows() {\n\t\t\tif (this.additionalRowComputed) {\n\t\t\t\t\treturn this.grid ? (this.grid.h+1) : 1;\n\t\t\t}\n\t\t\treturn this.grid ? this.grid.h : 1;\n\t\t\t\n\t\t},\n\t\tgridStyle() {\n\t\t\tconst addH = this.active ? this.marginForExtraRow : 0;\n\t\t\treturn {\n\t\t\t\t'--fhc-dg-row-height': 100/(this.rows + addH) + '%',\n\t\t\t\t'--fhc-dg-col-width': 100/this.cols + '%',\n\t\t\t\t'--fhc-dg-item-padding-horizontal': '0.25%',\n\t\t\t\t'--fhc-dg-item-padding-top': '0.5%',\n\t\t\t\t'padding-bottom': 100 * (this.rows + addH)/this.cols + '%'\n\t\t\t}\n\t\t},\n\t\tindexedItems() {\n\t\t\treturn this.items.map(\n\t\t\t\t(item, index) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\tx: item.x,\n\t\t\t\t\t\ty: item.y,\n\t\t\t\t\t\tw: item.w,\n\t\t\t\t\t\th: item.h,\n\t\t\t\t\t\tweight: item.weight || 0,\n\t\t\t\t\t\tdata: item\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\tprePlacedItems() {\n\t\t\tif (!this.fixedPositionUpdates)\n\t\t\t\treturn this.indexedItems;\n\t\t\treturn this.indexedItems.map(item => {\n\t\t\t\tif (!this.fixedPositionUpdates[item.index])\n\t\t\t\t\treturn item;\n\t\t\t\treturn {\n\t\t\t\t\tindex: item.index,\n\t\t\t\t\tweight: item.weight,\n\t\t\t\t\tdata: item.data,\n\t\t\t\t\tx: this.fixedPositionUpdates[item.index].x === undefined ? item.x : this.fixedPositionUpdates[item.index].x,\n\t\t\t\t\ty: this.fixedPositionUpdates[item.index].y === undefined ? item.y : this.fixedPositionUpdates[item.index].y,\n\t\t\t\t\tw: this.fixedPositionUpdates[item.index].w === undefined ? item.w : this.fixedPositionUpdates[item.index].w,\n\t\t\t\t\th: this.fixedPositionUpdates[item.index].h === undefined ? item.h : this.fixedPositionUpdates[item.index].h\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\tplacedItems() {\n\t\t\tif (!this.positionUpdates)\n\t\t\t\treturn this.prePlacedItems;\n\t\t\tlet mappedPlacedItems= this.prePlacedItems.map(item => {\n\t\t\t\tif (!this.positionUpdates[item.index] )\n\t\t\t\t\treturn item;\n\t\t\t\tlet height_diff = this.positionUpdates[item.index]?.h - item.h;\n\t\t\t\tlet width_diff = this.positionUpdates[item.index]?.w - item.w;\n\t\t\t\treturn {\n\t\t\t\t\tresize: this.positionUpdates[item.index]?.resize,\n\t\t\t\t\tindex: item.index,\n\t\t\t\t\tweight: item.weight,\n\t\t\t\t\tdata: item.data,\n\t\t\t\t\tx: this.positionUpdates[item.index].x === undefined ? item.x : this.positionUpdates[item.index].x,\n\t\t\t\t\ty: this.positionUpdates[item.index].y === undefined ? item.y : this.positionUpdates[item.index].y,\n\t\t\t\t\tw: width_diff>0?item.w:this.positionUpdates[item.index].w === undefined ? item.w : this.positionUpdates[item.index].w,\n\t\t\t\t\th: height_diff > 0 ?item.h:this.positionUpdates[item.index].h === undefined ? item.h : this.positionUpdates[item.index].h\n\t\t\t\t\t\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tlet temporaryResizeItems = [];\n\t\t\tmappedPlacedItems.forEach(item=>{\n\t\t\t\tif(item.resize){\n\t\t\t\t\tlet newItem = {\n\t\t\t\t\t\t...item,\n\t\t\t\t\t\tw:this.positionUpdates[item.index].w === undefined ? item.w : this.positionUpdates[item.index].w,\n\t\t\t\t\t\th:this.positionUpdates[item.index].h === undefined ? item.h : this.positionUpdates[item.index].h,\n\t\t\t\t\t\tresizeOverlay:true,\n\t\t\t\t\t\tblank:true,\n\t\t\t\t\t};\n\t\t\t\t\ttemporaryResizeItems.push(newItem)\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn [...mappedPlacedItems, ...temporaryResizeItems];\n\t\t},\n\t\tshowEmptyTileHover() {\n\t\t\tif (!this.active || !this.grid || this.mode != MODE_IDLE || this.x < 0 || this.y < 0 || this.x >= this.cols || this.y >= this.rows)\n\t\t\t\treturn false;\n\t\t\treturn this.grid.isFreeSlot(this.x, this.y);\n\t\t},\n\t\twidgetSetup(){\n\t\t\tif (!this.widgetsSetup)\n\t\t\t\treturn;\n\t\t\treturn this.widgetsSetup.reduce((acc, ele) => { \n\t\t\t\tacc[ele.widget_id] =ele;\n\t\t\t\treturn acc;\n\t\t\t} ,{});\n\t\t},\n\t},\n\twatch: {\n\t\tactive(active) {\n\t\t\tif (!active)\n\t\t\t\tthis.dragCancel();\n\t\t},\n\t\tcols() {\n\t\t\tthis.dragCancel();\n\t\t},\n\t rows: {\n\t\t\thandler(value) {\n\t\t\t\tthis.$emit('gridHeight', value);\n\t\t\t},\n\t\t\timmediate: true\n\t\t},\n\t\tindexedItems: {\n\t\t\thandler(value) {\n\t\t\t\tthis.dragCancel();\n\n\t\t\t\tconst updated = this.createNewGrid(value);\n\n\t\t\t\tthis.fixedPositionUpdates = updated;\n\t\t\t\tif (updated.length)\n\t\t\t\t\tthis.$emit('rearrangeItems', updated.filter(v => v));\n\t\t\t},\n\t\t\timmediate: true,\n\t\t\tdeep: true\n\t\t}\n\t},\n\tmethods: {\n\t\tneedsReordering(item){\n\t\t\tif (!item?.data?.place[this.cols]){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\ttoggleDraggedItemOverlay(condition){\n\t\t\tif(!this.draggedNode)\n\t\t\t\treturn;\n\t\t\tif(condition){\n\t\t\t\tthis.draggedNode.firstElementChild.classList.add(\"dashboard-item-overlay\");\n\t\t\t}else{\n\t\t\t\tthis.draggedNode.firstElementChild.classList.remove(\"dashboard-item-overlay\");\n\t\t\t}\n\t\t},\n\t\tdragging(event){\n\t\t\tif(this.mode == MODE_MOVE){\n\t\t\t\tthis.toggleDraggedItemOverlay(true);\n\t\t\t\t\n\t\t\t\tconst containerRect = this.$refs.container.getBoundingClientRect();\n\t\t\t\tconst clonedWidgetRect = this.clonedWidget.getBoundingClientRect();\n\t\t\t\t\n\t\t\t\tlet desiredTop = this.clientY - 20;\n\t\t\t\tlet desiredLeft = this.clientX - 15;\n\t\t\t\t\n\t\t\t\tconst minTop = 0;\n\t\t\t\tconst maxTop = containerRect.height - clonedWidgetRect.height;\n\t\t\t\tconst minLeft = 0;\n\t\t\t\tconst maxLeft = containerRect.width - clonedWidgetRect.width;\n\t\t\t\t\n\t\t\t\tconst constrainedTop = Math.max(minTop, Math.min(maxTop, desiredTop));\n\t\t\t\tconst constrainedLeft = Math.max(minLeft, Math.min(maxLeft, desiredLeft));\n\t\t\t\t\n\t\t\t\tthis.clonedWidget.style.top = `${constrainedTop}px`;\n\t\t\t\tthis.clonedWidget.style.left = `${constrainedLeft}px`;\n\t\t\t}\n\t\t},\n\t\tcreateNewGrid(items) {\n\t\t\tthis.grid = new GridLogic(this.cols);\n\t\t\tconst result = [];\n\t\t\tlet sortedItems = [...items].sort((a, b) => {\n\t\t\t\tif(this.needsReordering(a) && this.needsReordering(b)){\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\telse if(this.needsReordering(a)){\n\t\t\t\t\treturn 999;\n\t\t\t\t}\n\t\t\t\telse if(this.needsReordering(b)){\n\t\t\t\t\treturn -999;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn a.weight > b.weight;\n\t\t\t}); \n\t\t\tlet reorderedItems = [];\n\t\t\tsortedItems.forEach(item => {\n\t\t\t\tlet freeSlots = this.grid.getFreeSlots();\n\t\t\t\t\n\t\t\t\tif(this.needsReordering(item)){\n\t\t\t\t\tlet firstFreeSlot = freeSlots.shift();\n\t\t\t\t\tif (!firstFreeSlot) {\n\t\t\t\t\t\titem.x = 0;\n\t\t\t\t\t\titem.y = this.grid.h;\n\t\t\t\t\t}else{\n\t\t\t\t\t\titem.x = firstFreeSlot.x;\n\t\t\t\t\t\titem.y = firstFreeSlot.y;\n\t\t\t\t\t}\n\t\t\t\t\treorderedItems.push(item);\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tif (item.x + item.w > this.cols) {\n\t\t\t\t\tlet targetW = this.cols-item.x,\n\t\t\t\t\t\ttargetX = undefined;\n\t\t\t\t\tif (this.resizeLimit) {\n\t\t\t\t\t\t[targetW] = this.resizeLimit(item.data, targetW, item.h);\n\t\t\t\t\t}\n\t\t\t\t\tif (targetW < 1)\n\t\t\t\t\t\ttargetW = 1;\n\t\t\t\t\tif (targetW > this.cols)\n\t\t\t\t\t\ttargetW = this.cols;\n\t\t\t\t\tif (item.x + targetW > this.cols) {\n\t\t\t\t\t\ttargetX = this.cols - targetW;\n\t\t\t\t\t}\n\t\t\t\t\tif (targetW == item.w)\n\t\t\t\t\t\ttargetW = undefined;\n\t\t\t\t\tresult[item.index] = {\n\t\t\t\t\t\titem: item.data,\n\t\t\t\t\t\tx: targetX,\n\t\t\t\t\t\tw: targetW\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\titem.frame = this.grid.getItemFrame(item);\n\t\t\t\tthis.convertGridResultToUpdate(this.grid.add(item), result, items);\n\t\t\t});\n\t\t\tthis.reorderedItems = reorderedItems;\n\t\t\tthis.grid.clearWeights();\n\t\t\treturn result;\n\t\t},\n\t\tconvertGridResultToUpdate(input, output, baseArray) {\n\t\t\t\n\t\t\tif (!input)\n\t\t\t\treturn;\n\t\t\tif (!baseArray)\n\t\t\t\tbaseArray = this.indexedItems;\n\t\t\tinput.forEach(item => {\n\t\t\t\tlet result = {\n\t\t\t\t\titem: baseArray[item.index].data\n\t\t\t\t};\n\t\t\t\tif (item.x !== undefined)\n\t\t\t\t\tresult.x = item.x;\n\t\t\t\tif (item.y !== undefined)\n\t\t\t\t\tresult.y = item.y;\n\t\t\t\tif (item.w !== undefined)\n\t\t\t\t\tresult.w = item.w;\n\t\t\t\tif (item.h !== undefined)\n\t\t\t\t\tresult.h = item.h;\n\t\t\t\toutput[item.index] = result;\n\t\t\t});\n\t\t},\n\t\tmouseLeave() {\n\t\t\t/* if (this.mode == MODE_IDLE) {\n\t\t\t\tthis.x = -1;\n\t\t\t\tthis.y = -1;\n\t\t\t\t\n\t\t\t} */\n\t\t},\n\t\tupdateCursor(evt) {\n\t\t\tif (!this.active) {\n\t\t\t\tthis.x = this.y = -1;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst addH = this.active ? this.marginForExtraRow : 0;\n\t\t\tconst rect = this.$refs.container.getBoundingClientRect();\n\t\t\t\n\t\t\tif (!evt.clientX && !evt.clientY && evt.touches){\n\t\t\t\tevt.clientX = evt.touches[0].clientX;\n\t\t\t\tevt.clientY = evt.touches[0].clientY;\n\t\t\t}\n\n\t\t\tthis.clientX = (evt.clientX - rect.left);\n\t\t\tthis.clientY = (evt.clientY - rect.top);\n\t\t\tconst gridX = Math.floor(this.cols * (evt.clientX - rect.left) / this.$refs.container.clientWidth);\n\t\t\tconst gridY = Math.floor((this.rows + addH) * (evt.clientY - rect.top) / this.$refs.container.clientHeight);\n\t\t\t\n\t\t\tif (this.x == gridX && this.y == gridY)\n\t\t\t\treturn false;\n\t\t\t\n\t\t\tthis.x = gridX;\n\t\t\tthis.y = gridY;\n\n\t\t\treturn true;\n\t\t},\n\t\t_dragStart(evt, item) {\n\t\t\tif (evt.dataTransfer) {\n\t\t\t\tevt.dataTransfer.setDragImage(evt.target, -99999, -99999);\n\t\t\t\tevt.dataTransfer.dropEffect = 'move';\n\t\t\t\tevt.dataTransfer.effectAllowed = 'move';\n\t\t\t}\n\t\t},\n\t\tstartMove(evt, item) {\n\t\t\t\n\t\t\tif (!this.active)\n\t\t\t\treturn;\n\t\t\t\n\t\t\tthis.mode = MODE_MOVE;\n\t\t\t\n\t\t\tthis.draggedItem = item;\n\t\t\t\n\t\t\tthis.$emit('draggedItem', item);\n\t\t\t// workaround for chrome fireing event dragend when styles are manipulated during dragging\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.draggedNode = evt.target.closest(\".drop-grid-item\");\n\t\t\t\t//clones the widget for the drag Image\n\t\t\t\t\n\t\t\t\tlet clone = evt.target.closest(\".drop-grid-item\")?.cloneNode(true);\n\n\t\t\t\tclone.style.zIndex = 5;\n\t\t\t\tclone.classList.add(\"widgetClone\");\n\t\t\t\tthis.$refs.container.appendChild(clone);\n\t\t\t\tconst hiddenWidget = clone.querySelector(\"[style='display: none;']\");\n\t\t\t\thiddenWidget.style.removeProperty(\"display\");\n\t\t\t\tthis.clonedWidget = clone;\n\t\t\t}, 0);\n\n\t\t\tthis.draggedOffset = [item.x - this.x, item.y - this.y];\n\t\t\tthis._dragStart(evt, item);\n\t\t},\n\t\tstartResize(evt, item) {\n\t\t\tif (!this.active)\n\t\t\t\treturn;\n\t\t\tthis.mode = MODE_RESIZE;\n\t\t\tthis.draggedItem = item;\n\t\t\tthis.$emit('draggedItem', item);\n\t\t\tthis._dragStart(evt);\n\t\t},\n\t\tdragOver(evt) {\n\t\t\tif ((this.y + 1) > this.rows && (this.mode == MODE_MOVE || this.mode == MODE_RESIZE)) {\n\t\t\t\tthis.dragCancel();\n\t\t\t\t\n\t\t\t}\n\t\t\tif (!this.active)\n\t\t\t\treturn this.dragCancel();\n\t\t\tthis.checkPinnedWidgetAnimation();\n\t\t\tif(this.mode == MODE_RESIZE){\n\t\t\t\tthis.checkWidgetSizeLimitAnimation();\n\t\t\t}\n\t\t\tif (this.updateCursor(evt)) {\n\t\t\t\tswitch(this.mode) {\n\t\t\t\t\tcase MODE_MOVE: {\n\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\tthis.dragGrid = new GridLogic(this.grid);\n\t\t\t\t\t\tlet x = this.x + this.draggedOffset[0];\n\t\t\t\t\t\tlet y = this.y + this.draggedOffset[1];\n\t\t\t\t\t\tif (x < 0) {\n\t\t\t\t\t\t\tthis.draggedOffset[0] += x;\n\t\t\t\t\t\t\tx = 0;\n\t\t\t\t\t\t} else if (x + this.draggedItem.w > this.cols) {\n\t\t\t\t\t\t\tthis.draggedOffset[0] += this.cols - this.draggedItem.w - x;\n\t\t\t\t\t\t\tx = this.cols - this.draggedItem.w;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (y < 0) {\n\t\t\t\t\t\t\tthis.draggedOffset[1] += y;\n\t\t\t\t\t\t\ty = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.positionUpdates= this.dragGrid.move(this.draggedItem, x, y);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase MODE_RESIZE: {\n\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\tthis.dragGrid = new GridLogic(this.grid);\n\t\t\t\t\t\tlet w = Math.min(this.cols - this.draggedItem.x, Math.max(1, this.x - this.draggedItem.x + 1));\n\t\t\t\t\t\tlet h = Math.max(1, this.y - this.draggedItem.y + 1);\n\t\t\t\t\t\tif (this.resizeLimit)\n\t\t\t\t\t\t\t[w, h] = this.resizeLimit(this.draggedItem.data, w, h);\n\t\t\t\t\t\tthis.positionUpdates = this.dragGrid.resize(this.draggedItem, w, h);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdragCancel() {\n\t\t\tthis.removeWidgetClones();\n\t\t\tthis.additionalRowComputed = false;\n\t\t\tthis.toggleDraggedItemOverlay(false);\n\t\t\tthis.mode = MODE_IDLE;\n\t\t\tthis.positionUpdates = null;\n\t\t\tthis.draggedOffset = [0,0],\n\t\t\tthis.draggedItem = null;\n\t\t\tthis.$emit('draggedItem',null);\n\t\t\tthis.draggedNode = null;\n\t\t\t\n\t\t},\n\t\tdragEnd() {\n\t\t\tthis.removeWidgetClones();\n\t\t\tthis.toggleDraggedItemOverlay(false);\n\t\t\t\n\t\t\tif (this.mode == MODE_IDLE){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// clean up unused classes\n\t\t\tlet draggedItemNode = document.getElementById(this.draggedItem.data.widgetid);\n\t\t\tdraggedItemNode.classList.remove(\"border-danger\");\n\t\t\tArray.from(document.getElementsByClassName(\"denied-dragging-animation\"))?.forEach(ele => {\n\t\t\t\tele.classList.remove(\"denied-dragging-animation\");\n\t\t\t})\n\t\t\t\n\t\t\t//if (!this.active || this.x < 0 || this.y < 0 || this.x >= this.cols)\n\t\t\t\t//return this.dragCancel();\n\n\t\t\tthis.mode = MODE_IDLE;\n\t\t\tlet updated = [];\n\t\t\tthis.convertGridResultToUpdate(this.positionUpdates, updated);\n\t\t\tupdated = this._updateFixedPositions(updated);\n\t\t\tif (updated.length)\n\t\t\t\tthis.$emit('rearrangeItems', updated.filter(v => v));\n\n\t\t\tthis.draggedItem = null;\n\t\t\tthis.draggedNode = null;\n\t\t\tthis.$emit('draggedItem', null);\n\t\t},\n\t\t_updateFixedPositions(updated) {\n\t\t\tupdated.forEach((item, index) => {\n\t\t\t\tif (!this.fixedPositionUpdates[index])\n\t\t\t\t\tthis.fixedPositionUpdates[index] = item;\n\t\t\t\telse\n\t\t\t\t\tthis.fixedPositionUpdates[index] = {...this.fixedPositionUpdates[index], ...item};\n\t\t\t});\n\t\t\tlet additionalUpdates = this.createNewGrid(this.prePlacedItems);\n\t\t\tif (additionalUpdates.length) {\n\t\t\t\t// NOTE(chris): this should never happen but it's here for safety\n\t\t\t\tadditionalUpdates.forEach((item, index) => updated[index] = item);\n\t\t\t\treturn this._updateFixedPositions(updated);\n\t\t\t}\n\t\t\treturn updated;\n\t\t},\n\t\temptyTileClicked() {\n\t\t\tthis.additionalRowComputed = false;\n\t\t\tthis.$emit('newItem', this.x, this.y);\n\t\t},\n\t\tupdateCursorOnMouseMove(evt){\n\t\t\tif(this.mode == MODE_IDLE){\n\t\t\t\tthis.updateCursor(evt);\n\t\t\t}\n\t\t},\n\t\tcheckPinnedWidgetAnimation(){\n\t\t\tlet itemAtPosition=[];\n\t\t\tswitch(this.mode){\n\t\t\t\tcase MODE_RESIZE:\n\t\t\t\t\tfor (let x = this.draggedItem.x; x <= this.x; x++) {\n\t\t\t\t\t\tfor (let y = this.draggedItem.y; y <= this.y; y++) {\n\t\t\t\t\t\t\tthis.items.forEach(item => {\n\t\t\t\t\t\t\t\tif (item.x == x && item.y == y) {\n\t\t\t\t\t\t\t\t\titemAtPosition.push(item);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase MODE_MOVE:\n\t\t\t\t\titemAtPosition = this.items.filter(item=>item.x == this.x && item.y == this.y);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tArray.from(document.getElementsByClassName(\"denied-dragging-animation\"))?.forEach(ele => {\n\t\t\t\tele.classList.remove(\"denied-dragging-animation\");\n\t\t\t})\n\n\t\t\titemAtPosition.forEach(item=>{\n\t\t\t\tif (item.place[this.cols] && item.place[this.cols].pinned) {\n\t\t\t\t\tlet pinnedWidget = document.getElementById(item.widgetid);\n\t\t\t\t\tlet pinNode = pinnedWidget.querySelector(\"[pinned='true']\");\n\t\t\t\t\tif (!pinNode.classList.contains(\"denied-dragging-animation\")) {\n\t\t\t\t\t\tpinNode.classList.add(\"denied-dragging-animation\");\n\t\t\t\t\t}\n\t\t\t\t}\t\n\t\t\t})\n\t\t},\n\t\tcheckWidgetSizeLimitAnimation() {\n\n\t\t\tlet draggedItemSetup = this.itemsSetup[this.draggedItem.data.widget];\n\t\t\tlet draggedItemMaxWidth = draggedItemSetup.width.max ?? draggedItemSetup.width;\n\t\t\tlet draggedItemMinWidth = draggedItemSetup.width.min ?? draggedItemSetup.width;\n\t\t\tlet draggedItemMaxHeight = draggedItemSetup.height.max ?? draggedItemSetup.height;\n\t\t\tlet draggedItemMinHeight = draggedItemSetup.height.min ?? draggedItemSetup.height;\n\t\t\tlet draggedItemNode = document.getElementById(this.draggedItem.data.widgetid);\n\n\t\t\tlet width_after_resize = this.x - this.draggedItem.x + 1; \n\t\t\tlet height_after_resize = this.y - this.draggedItem.y + 1; \n\t\t\tif( \n\t\t\t\t(width_after_resize > 0 && (width_after_resize > draggedItemMaxWidth\n\t\t\t\t|| width_after_resize < draggedItemMinWidth)\n\t\t\t\t)\n\t\t\t\t||\n\t\t\t\t(height_after_resize > 0 && (height_after_resize > draggedItemMaxHeight\n\t\t\t\t|| height_after_resize < draggedItemMinHeight)\n\t\t\t\t)\n\t\t\t){\n\t\t\t\tdraggedItemNode.classList.add(\"border-danger\");\n\t\t\t}else{\n\t\t\t\tdraggedItemNode.classList.remove(\"border-danger\");\n\t\t\t}\n\t\t},\n\t\tremoveWidgetClones(){\n\t\t\tlet widgetClones = Array.from(document.getElementsByClassName(\"widgetClone\"));\n\t\t\tfor (let i = 0; i < widgetClones.length; i++) {\n\t\t\t\tthis.$refs.container.removeChild(widgetClones[i]);\n\t\t\t}\n\t\t},\n\t\tmouseDown(){\n\t\t\tthis.mode = MODE_MOUSE_DOWN;\n\t\t},\n\t\tmouseUp() {\n\t\t\tthis.mode = MODE_IDLE;\n\t\t},\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t`\n}\n\n/*\nOLD VERSION - ON HOVER\n\n\t\n\n*/","let __widgets = {};\nlet __widgetsStarted = {};\nlet __path = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/dashboard/Widget';\n\nexport default {\n\tgetWidget(id) {\n\t\treturn __widgets[id];\n\t},\n\tloadWidget(id) {\n\t\tif (__widgets[id])\n\t\t\treturn Promise.resolve(__widgets[id]);\n\t\tif (__widgetsStarted[id])\n\t\t\treturn __widgetsStarted[id];\n\t\tif (!__path)\n\t\t\treturn Promise.reject('Widget could not be loaded because there is no path yet!');\n\n\t\t__widgetsStarted[id] = new Promise((resolve, reject) => {\n\t\t\taxios.get(__path, {params:{id}}).then(res => {\n\t\t\t\tres.data.retval.arguments = JSON.parse(res.data.retval.arguments);\n\t\t\t\tres.data.retval.setup = JSON.parse(res.data.retval.setup);\n\t\t\t\t__widgets[id] = res.data.retval;\n\t\t\t\t__widgetsStarted[id] = undefined;\n\t\t\t\tresolve(__widgets[id]);\n\t\t\t}).catch(error => reject(error.response.data.retval.error));\n\t\t});\n\t\treturn __widgetsStarted[id];\n\t},\n\tsetPath(path) {\n\t\t__path = path;\n\t}\n}","import BsModal from \"../Bootstrap/Modal.js\";\nimport CachedWidgetLoader from \"../../composables/Dashboard/CachedWidgetLoader.js\";\nimport HeightTransition from \"../Tranistion/HeightTransition.js\";\n\nexport default {\n\tname: 'Item',\n\tcomponents: {\n\t\tBsModal,\n\t\tHeightTransition\n\t},\n\tdata: () => ({\n\t\tcomponent: \"\",\n\t\targuments: null,\n\t\ttarget: false,\n\t\twidget: null,\n\t\ttmpConfig: {},\n\t\tisLoading: false,\n\t\thasConfig: false,\n\t\tsharedData: null,\n\t}),\n\temits: [\n\t\t\"change\",\n\t\t\"remove\",\n\t\t\"dragstart\",\n\t\t\"resizestart\",\n\t\t\"configOpened\",\n\t\t\"configClosed\",\n\t\t\"pinItem\",\n\t\t\"unPinItem\"\n\t],\n\tprops: [\n\t\t\"id\",\n\t\t\"widgetID\",\n\t\t\"config\",\n\t\t\"width\",\n\t\t\"height\",\n\t\t\"custom\",\n\t\t\"hidden\",\n\t\t\"editMode\",\n\t\t\"loading\",\n\t\t\"item_data\",\n\t\t\"place\",\n\t\t\"setup\",\n\t\t\"dragstate\",\n\t\t\"resizeOverlay\",\n\t\t\"additionalRow\"\n\t],\n\tcomputed: {\n\t\tmaxHeight(){\n\t\t\treturn this.setup?.height?.max;\n\t\t},\n\t\tmaxWidth(){\n\t\t\tif (Object.prototype.toString.call(this.setup?.width) == \"[object Number]\"){\n\t\t\t\treturn this.setup?.width;\n\t\t\t}\n\t\t\treturn this.setup?.width?.max;\n\t\t},\n\t\tminHeight() {\n\t\t\treturn this.setup?.height?.min;\n\t\t},\n\t\tminWidth() {\n\t\t\treturn this.setup?.width?.min;\n\t\t},\n\t\tisResizeable(){\n\t\t\treturn this.maxWidth >1 || this.maxHeight >1;\n\t\t},\n\t\tisPinned(){\n\t\t\treturn this.place?.pinned ? true : false;\n\t\t},\n\t\tready() {\n\t\t\treturn this.component && this.arguments !== null;\n\t\t},\n\t},\n\tmethods: {\n\t\tunpin(){\n\t\t\t// Unpinning is only possible in edit mode\n\t\t\tif(!this.editMode)\n\t\t\t\treturn;\n\t\t\tlet result = { item: this.item_data, x: this.item_data.x, y: this.item_data.y };\n\t\t\tthis.$emit('unPinItem', [result]);\n\t\t},\n\t\tpinItem(){\n\t\t\tlet result = { item: this.item_data, x: this.item_data.x, y: this.item_data.y};\n\t\t\tthis.$emit('pinItem',[result]);\n\t\t},\n\t\tgetWidgetC4Link(widget) {\n\t\t\treturn (FHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router + widget.setup.cis4link)\n\t\t},\n\t\thandleShowBsModal() {\n\t\t\tthis.$emit('configOpened')\n\t\t},\n\t\thandleHideBsModal() {\n\t\t\tthis.$emit('configClosed')\n\t\t},\n\t\tmouseDown(e) {\n\t\t\tthis.target = e.target;\n\t\t},\n\t\tstartDrag(e) {\n\t\t\tif (this.$refs.dragHandle.contains(this.target)) {\n\t\t\t\tthis.$emit(\"dragstart\", e);\n\t\t\t} else if (\n\t\t\t\tthis.isResizeable &&\n\t\t\t\tthis.$refs.resizeHandle.contains(this.target)\n\t\t\t) {\n\t\t\t\tif (this.isResizeable) this.$emit(\"resizestart\", e);\n\t\t\t\telse e.preventDefault();\n\t\t\t} else {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\topenConfig() {\n\t\t\tthis.tmpConfig = { ...this.arguments };\n\t\t\tthis.$refs.config.show();\n\t\t},\n\t\tsetConfig(hasConfig) {\n\t\t\tthis.hasConfig = hasConfig;\n\t\t},\n\t\tchangeConfig() {\n\t\t\tthis.isLoading = true;\n\t\t\tlet config = { ...this.tmpConfig };\n\t\t\tthis.sendChangeConfig(config);\n\t\t},\n\t\tchangeConfigManually() {\n\t\t\tlet config = { ...this.arguments };\n\t\t\tthis.sendChangeConfig(config);\n\t\t},\n\t\tsendChangeConfig(config) {\n\t\t\tfor (var k in config) {\n\t\t\t\tif (this.widget.arguments[k] == config[k]) {\n\t\t\t\tdelete config[k];\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$emit(\"change\", config);\n\t\t},\n\t},\n\twatch: {\n\t\tconfig() {\n\t\t\tthis.arguments = { ...this.widget?.arguments, ...this.config };\n\t\t\tthis.tmpConfig = { ...this.arguments };\n\t\t\tthis.$refs.config && this.$refs.config.hide();\n\t\t\tthis.isLoading = false;\n\t\t},\n\t},\n\tasync created() {\n\t\tthis.widget = await CachedWidgetLoader.loadWidget(this.id);\n\t\tlet component = (await import(FHC_JS_DATA_STORAGE_OBJECT.app_root + this.widget.setup.file + '?' + FHC_JS_DATA_STORAGE_OBJECT.fhcomplete_build_version)).default;\n\t\tthis.$options.components[\"widget\" + this.widget.widget_id] = component;\n\t\tthis.component = \"widget\" + this.widget.widget_id;\n\t\tthis.arguments = { ...this.widget.arguments, ...this.config };\n\t\tthis.tmpConfig = { ...this.arguments };\n\t},\n\ttemplate: /*html*/ `\n\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t
    \n\t
    \n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{{ widget.setup.name }}\n\t\t\t\n\t\t\t\n\t\t\t\n \t\t\n \t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t
    \n\t
    `,\n};\n","export default {\n\tdata(){\n\t\treturn {\n\n\t\t}\n\t},\n\tmethods:{\n\t\tonEnter(el,done){\n\t\t\tel.style.height = '0';\n\t\t\tel.style.height = el.scrollHeight + 'px';\n\t\t},\n\t\tonLeave(el,done){\n\t\t\tel.style.height = el.scrollHeight + 'px';\n\t\t\tel.style.height = '0';\n\t\t}\n\t},\n\ttemplate:\n\t/*html*/`\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t`,\n};","export default {\n\tdata(){\n\t\treturn {\n\n\t\t}\n\t},\n\tprops:{\n\t\twidget:{\n\t\t\ttype:Object,\n\t\t\trequired:true,\n\t\t}\n\t},\n\tmethods:{\n\t\tpath(src) {\n\t\t\tif (src[0] == '/')\n\t\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + src;\n\t\t\treturn src;\n\t\t}\n\t},\n\temits:[\"select\"],\n\ttemplate: /*html */`\n\t
    \n\t\t\n\t\t
    \n\t\t\t
    {{ widget.setup.name || widget.widget_kurzbz }}
    \n\t\t\t

    {{ widget.beschreibung }}

    \n\t\t
    \n\t
    `,\n}","import BsConfirm from \"../Bootstrap/Confirm.js\";\nimport DropGrid from '../Drop/Grid.js'\nimport DashboardItem from \"./Item.js\";\nimport CachedWidgetLoader from \"../../composables/Dashboard/CachedWidgetLoader.js\";\nimport WidgetIcon from \"./Widget/WidgetIcon.js\"\n\nexport default {\n\tname: 'Section',\n\tcomponents: {\n\t\tDropGrid,\n\t\tDashboardItem,\n\t\tWidgetIcon,\n\t},\n\tinject: {\n\t\twidgetsSetup:{\n\t\t\ttype: Array,\n\t\t\tdefault: [],\n\t\t},\n\t\tadminMode: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\teditMode: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\tprops: [\n\t\t\"name\",\n\t\t\"widgets\"\n\t],\n\temits: [\n\t\t\"widgetAdd\",\n\t\t\"widgetUpdate\",\n\t\t\"widgetRemove\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tconfigOpened: false,\n\t\t\tgridWidth: 1,\n\t\t\tgridHeight: null,\n\t\t\tdraggedItem:null,\n\t\t\tadditionalRow:false,\n\t\t}\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\teditModeIsActive: Vue.computed(() =>\n\t\t\t\tthis.editModeIsActive\n\t\t\t),\t\n\t\t\tsectionName: Vue.computed(() => this.name),\t\n\t\t}\n\t},\n\tcomputed: {\n\t\tcomputedWidgetsSetup(){\n\t\t\tif(!this.widgetsSetup) return {};\n\t\t\treturn this.widgetsSetup.reduce((acc, setup)=>{\n\t\t\t\tacc[setup.widget_id] = setup.setup;\n\t\t\t\treturn acc;\n\t\t\t},{})\n\t\t},\n\t\teditModeIsActive() {\n\t\t\treturn (this.editMode || this.adminMode) && !this.configOpened\t\n\t\t},\n\t\tgetSectionStyle() {\n\t\t\treturn 'margin-bottom: 8px;';\n\t\t},\n\t\titems() {\n\t\t\t// reuses the nearest placement of the widget from another viewport \n\t\t\t/* const computeNearestPlace = (item, gridWidth) =>{\n\t\t\t\tlet place;\n\t\t\t\tif (Object.keys(item.place).length > 0) {\n\t\t\t\t\tconst nearestIndex = Object.keys(item.place)\n\t\t\t\t\t\t\t\t\t\t\t .sort((a, b) => Math.abs(a - gridWidth) - Math.abs(b - gridWidth))\n\t\t\t\t\t\t\t\t\t\t\t .shift();\n\t\t\t\t\tplace = item.place[nearestIndex];\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tplace = { x: 0, y: 0, w: 1, h: 1 };\n\t\t\t\t}\n\t\t\t\treturn place;\n\t\t\t} */\n\t\t\t\n\t\t\tlet placedItems = this.widgets.map(item => {\n\t\t\t\tif(!item?.widgetid && item?.id){\n\t\t\t\t\titem.widgetid = item.id;\n\t\t\t\t}\n\t\t\t\treturn { ...item, reorder: false, ...(item.place[this.gridWidth] || { reorder: true, ...{ x: 0, y: 0, w: 1, h: 1 } })};\n\t\t\t});\n\t\t\treturn placedItems;\n\t\t\t\n\t\t},\n\t\t\n\t},\n\tmethods: {\n\t\tsectionNameTranslation(){\n\t\t\tswitch(this.name){\n\t\t\t\tcase \"general\": \n\t\t\t\t\treturn this.$p.t('dashboard',this.name); \n\t\t\t\t\tbreak;\n\t\t\t\tcase \"custom\":\n\t\t\t\t\treturn this.$p.t('dashboard',this.name);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn this.name;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tshowSectionInformation(){\n\t\t\tif (this.name == \"general\"){\n\t\t\t\treturn this.$p.t('dashboard', 'dashboardGeneralSectionDescription'); \n\t\t\t}\n\t\t\telse if(this.name == \"custom\"){\n\t\t\t\treturn this.$p.t('dashboard', 'dashboardCustomSectionDescription');\n\t\t\t}\n\t\t\telse{\n\t\t\t\treturn this.$p.t('dashboard', 'dashboardSectionDescription', [this.name]);\n\t\t\t}\n\t\t},\n\t\thandleConfigOpened() {\n\t\t\tthis.configOpened = true\n\t\t},\n\t\thandleConfigClosed() {\n\t\t\tthis.configOpened = false\n\t\t},\n\t\tcheckResizeLimit(item, w, h) {\n\t\t\t// NOTE(chris): widgets needs to be loaded for this to work\n\t\t\tlet widget = CachedWidgetLoader.getWidget(item.widget);\n\t\t\tif (widget) {\n\t\t\t\tlet minmaxW = widget.setup.width;\n\t\t\t\tif (minmaxW.max)\n\t\t\t\t\tminmaxW.min = minmaxW.min || 1;\n\t\t\t\telse\n\t\t\t\t\tminmaxW = {min:minmaxW,max:minmaxW};\n\t\t\t\tif (w < minmaxW.min)\n\t\t\t\t\tw = minmaxW.min; \n\t\t\t\tif (w > minmaxW.max)\n\t\t\t\t\tw = minmaxW.max;\n\n\t\t\t\tlet minmaxH = widget.setup.height;\n\t\t\t\tif (minmaxH.max)\n\t\t\t\t\tminmaxH.min = minmaxH.min || 1;\n\t\t\t\telse\n\t\t\t\t\tminmaxH = {min:minmaxH,max:minmaxH};\n\t\t\t\tif (h < minmaxH.min)\n\t\t\t\t\th = minmaxH.min;\n\t\t\t\tif (h > minmaxH.max)\n\t\t\t\t\th = minmaxH.max;\n\t\t\t}\n\t\t\treturn [w, h];\n\t\t},\n\t\tremoveWidget(item, revert) {\n\t\t\tif (item.custom) {\n\t\t\t\tBsConfirm.popup('Are you sure you want to delete this widget?').then(() => this.$emit('widgetRemove', this.name, item.id));\n\t\t\t} else {\n\t\t\t\tlet update = {};\n\t\t\t\tupdate[item.id] = { hidden: !revert };\n\t\t\t\tthis.updatePreset(update);\n\t\t\t}\n\t\t},\n\t\tsaveConfig(config, item) {\n\t\t\tlet payload = {};\n\t\t\tpayload[item.id] = { config };\n\t\t\tthis.updatePreset(payload);\n\t\t},\n\t\tupdatePositions(updated, pinned=false) {\n\t\t\tlet result = {};\n\t\t\tupdated.forEach(update => {\n\t\t\t\t\n\t\t\t\tlet item = {...update.item};\n\t\t\t\tif (!item.placeholder) {\n\t\t\t\tif (!item.place[this.gridWidth])\n\t\t\t\t\titem.place[this.gridWidth] = {x: 0, y: 0, w: 1, h: 1};\n\t\t\t\tdelete item.x;\n\t\t\t\tdelete item.y;\n\t\t\t\tdelete item.w;\n\t\t\t\tdelete item.h;\n\t\t\t\tdelete item.place[this.gridWidth].pinned;\n\t\t\t\tif (update.x !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].x = update.x;\n\t\t\t\tif (update.y !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].y = update.y;\n\t\t\t\tif (update.w !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].w = update.w;\n\t\t\t\tif (update.h !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].h = update.h;\n\t\t\t\tif (pinned){\n\t\t\t\t\titem.place[this.gridWidth].pinned = true;\n\t\t\t\t}\n\n\t\t\t\tresult[item.id] = item;\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.updatePreset(result);\n\t\t},\n\t\tupdatePreset(update) {\n\t\t\tlet payload = {};\n\t\t\tpayload[this.name] = update;\n\t\t\tthis.$emit('widgetUpdate', this.name, payload);\n\t\t}\n\t},\n\tmounted() {\n\t\tlet self = this;\n\t\tlet cont = self.$refs.container;\n\t\tself.gridWidth = parseInt(window.getComputedStyle(cont).getPropertyValue('--fhc-dashboard-grid-size'));\n\t\t\n\t\twindow.addEventListener('resize', () => {\n\t\t\tself.gridWidth = parseInt(window.getComputedStyle(cont).getPropertyValue('--fhc-dashboard-grid-size'));\n\t\t});\n\t},\n\ttemplate: `\n\t
    \n\t\t

    \n\t\t\t\n\t\t\t{{sectionNameTranslation()}}:\n\t\t

    \n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    `\n}\n\n/*\nOLD VERSION - ON HOVER\n\n*/","import BsModal from \"../../Bootstrap/Modal.js\";\nimport WidgetIcon from \"./WidgetIcon.js\";\n\nexport default {\n\tcomponents: {\n\t\tBsModal,\n\t\tWidgetIcon,\n\t},\n\tprops: [\n\t\t\"widgets\"\n\t],\n\tdata: () => ({\n\t\tcallbacks: {}\n\t}),\n\tmethods: {\n\t\tgetWidget() {\n\t\t\treturn new Promise((resolve,reject) => {\n\t\t\t\tthis.callbacks = {resolve,reject};\n\t\t\t\tthis.$refs.modal.show();\n\t\t\t});\n\t\t},\n\t\tclose() {\n\t\t\tif (this.callbacks.reject)\n\t\t\t\tthis.callbacks.reject();\n\t\t\tthis.callbacks = {};\n\t\t},\n\t\tpick(widget_id) {\n\t\t\tif (this.callbacks.resolve)\n\t\t\t\tthis.callbacks.resolve(widget_id);\n\t\t\tthis.callbacks = {};\n\t\t\tthis.$refs.modal.hide();\n\t\t},\n\t\t\n\t},\n\ttemplate: `
    \n\t\t 0}\" @hiddenBsModal=\"close\">\n\t\t\t\n\t\t\t\n\t\t\n\t
    `\n}\n","export default {\n\t/**\n\t* Performs a deep merge of objects and returns new object. Does not modify\n\t* objects (immutable) and merges arrays via concatenation.\n\t*\n\t* @param {...object} objects - Objects to merge\n\t* @returns {object} New object with merged key/values\n\t*/\n\tmergeDeep(...objects) {\n\t\tconst isObject = obj => obj && typeof obj === 'object';\n\t\t\n\t\treturn objects.reduce((prev, obj) => {\n\t\t\tObject.keys(obj).forEach(key => {\n\t\t\t\tconst pVal = prev[key];\n\t\t\t\tconst oVal = obj[key];\n\t\t\t\t\n\t\t\t\tif (Array.isArray(pVal) && Array.isArray(oVal)) {\n\t\t\t\t\tprev[key] = pVal.concat(...oVal);\n\t\t\t\t}\n\t\t\t\telse if (isObject(pVal) && isObject(oVal)) {\n\t\t\t\t\tprev[key] = this.mergeDeep(pVal, oVal);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tprev[key] = oVal;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\treturn prev;\n\t\t}, {});\n\t}\n}","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetViewData() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Cis4FhcApi/getViewData'\n\t\t};\n\t}\n};","import DashboardSection from \"./Section.js\";\nimport DashboardWidgetPicker from \"./Widget/Picker.js\";\nimport ObjectUtils from \"../../helpers/ObjectUtils.js\";\n\nimport ApiDashboard from '../../api/factory/cis/dashboard.js';\n\nexport default {\n\tname: 'Dashboard',\n\tcomponents: {\n\t\tDashboardSection,\n\t\tDashboardWidgetPicker\n\t},\n\tprops: {\n\t\tdashboard: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tdefault: 'CIS'\n\t\t},\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn value && value.name && value.uid && value.timezone\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tsections: [],\n\t\t\twidgets: null,\n\t\t\teditMode: false,\n\t\t\tviewDataInternal: this.viewData\n\t\t}\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\teditMode: Vue.computed(()=>this.editMode),\n\t\t\twidgetsSetup: Vue.computed(() => this.widgets),\n\t\t\ttimezone: Vue.computed(() => this.viewData.timezone)\n\t\t}\n\t},\n\tcomputed: {\n\t\tapiurl() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/dashboard';\n\t\t}\n\t},\n\tmethods: {\n\t\twidgetAdd(section_name, widget) {\n\t\t\tif (this.widgets === null) {\n\t\t\t\taxios.get(this.apiurl + '/Widget/getWidgetsForDashboard', {params:{\n\t\t\t\t\tdb: this.dashboard\n\t\t\t\t}}).then(res => {\n\t\t\t\t\tres.data.retval.forEach(widget => {\n\t\t\t\t\t\twidget.arguments = JSON.parse(widget.arguments);\n\t\t\t\t\t\twidget.setup = JSON.parse(widget.setup);\n\t\t\t\t\t});\n\t\t\t\t\tthis.widgets = res.data.retval;\n\t\t\t\t}).catch(err => console.error('ERROR:', err));\n\t\t\t}\n\t\t\tthis.$refs.widgetpicker.getWidget().then(widget_id => {\n\t\t\t\twidget.widget = widget_id;\n\t\t\t\twidget.id = 'loading_' + String((new Date()).valueOf());\n\t\t\t\tlet loading = {...widget};\n\t\t\t\tloading.loading = true;\n\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\tif (section.name == section_name)\n\t\t\t\t\t\tsection.widgets.push(loading);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\taxios.post(this.apiurl + '/Config/addWidgetsToUserOverride', {\n\t\t\t\t\tdb: this.dashboard,\n\t\t\t\t\tfunktion_kurzbz: section_name,\n\t\t\t\t\twidgets: [widget]\n\t\t\t\t}).then(result => {\n\t\t\t\t\tlet newId = Object.keys(result.data.retval.data[section_name].widgets).pop();\n\t\t\t\t\twidget.id = newId;\n\t\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\t\tif (section.name == section_name) {\n\t\t\t\t\t\t\tsection.widgets.splice(section.widgets.indexOf(loading),1);\n\t\t\t\t\t\t\tsection.widgets.push(widget);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}).catch(error => {\n\t\t\t\t\tconsole.error('ERROR: ', error);\n\t\t\t\t\talert('ERROR: ' + error.response.data.retval);\n\t\t\t\t});\n\t\t\t}).catch(() => {});\n\t\t},\n\t\twidgetUpdate(section_name, payload) {\n\t\t\tpayload = payload[section_name];\n\t\t\tfor (var k in payload) {\n\t\t\t\tfor (var i in this.sections) {\n\t\t\t\t\tif (this.sections[i].name == section_name) {\n\t\t\t\t\t\tfor (var wid in this.sections[i].widgets) {\n\t\t\t\t\t\t\tif (this.sections[i].widgets[wid].id == k) {\n\t\t\t\t\t\t\t\tpayload[k] = ObjectUtils.mergeDeep(this.sections[i].widgets[wid], payload[k]);\n\t\t\t\t\t\t\t\t// NOTE(chris): remove internal props\n\t\t\t\t\t\t\t\tfor (var prop in {_x:1,_y:1,_w:1,_h:1,index:1,id:1,preset:1})\n\t\t\t\t\t\t\t\t\tif (payload[k][prop])\n\t\t\t\t\t\t\t\t\t\tdelete payload[k][prop];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpayload[k].widgetid = k;\n\t\t\t}\n\t\t\taxios.post(this.apiurl + '/Config/addWidgetsToUserOverride', {\n\t\t\t\tdb: this.dashboard,\n\t\t\t\tfunktion_kurzbz: section_name,\n\t\t\t\twidgets: payload\n\t\t\t}).then(() => {\n\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\tif (section.name == section_name) {\n\t\t\t\t\t\tsection.widgets.forEach((widget, i) => {\n\t\t\t\t\t\t\tif (payload[widget.id]) {\n\t\t\t\t\t\t\t\tpayload[widget.id].id = widget.id;\n\t\t\t\t\t\t\t\tpayload[widget.id].index = widget.index;\n\t\t\t\t\t\t\t\tsection.widgets[i] = payload[widget.id];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}).catch(error => {\n\t\t\t\t// TODO(chris): revert placement on failure\n\t\t\t\tconsole.error('ERROR: ', error);\n\t\t\t\talert('ERROR: ' + error.response.data.retval);\n\t\t\t});\n\t\t},\n\t\twidgetRemove(section_name, id) {\n\t\t\taxios.post(this.apiurl + '/Config/removeWidgetFromUserOverride', {\n\t\t\t\tdb: this.dashboard,\n\t\t\t\tfunktion_kurzbz: section_name,\n\t\t\t\twidgetid: id\n\t\t\t}).then(() => {\n\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\tif (section.name == section_name)\n\t\t\t\t\t\tsection.widgets = section.widgets.filter(widget => widget.id != id);\n\t\t\t\t});\n\t\t\t}).catch(error => {\n\t\t\t\tconsole.error('ERROR: ', error);\n\t\t\t\talert('ERROR: ' + error.response.data.retval);\n\t\t\t});\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.$p.loadCategory('dashboard');\n\t\taxios.get(this.apiurl + '/Widget/getWidgetsForDashboard', {\n\t\t\tparams: {\n\t\t\t\tdb: this.dashboard\n\t\t\t}\n\t\t}).then(res => {\n\t\t\tres.data.retval.forEach(widget => {\n\t\t\t\twidget.arguments = JSON.parse(widget.arguments);\n\t\t\t\twidget.setup = JSON.parse(widget.setup);\n\t\t\t});\n\t\t\tthis.widgets = res.data.retval;\n\t\t}).catch(err => console.error('ERROR:', err));\n\n\t\taxios.get(this.apiurl + '/Config', {params:{\n\t\t\tdb: this.dashboard\n\t\t}}).then(res => {\n\t\t\tfor (var name in res.data.retval) {\n\t\t\t\tlet widgets = [];\n\t\t\t\tlet remove = [];\n\t\t\t\tfor (var wid in res.data.retval[name].widgets) {\n\t\t\t\t\tres.data.retval[name].widgets[wid].id = wid;\n\t\t\t\t\tif (res.data.retval[name].widgets[wid].custom || res.data.retval[name].widgets[wid].preset)\n\t\t\t\t\t\twidgets.push(res.data.retval[name].widgets[wid]);\n\t\t\t\t\telse\n\t\t\t\t\t\tremove.push(wid);\n\t\t\t\t}\n\t\t\t\tthis.sections.push({\n\t\t\t\t\tname: name,\n\t\t\t\t\twidgets: widgets\n\t\t\t\t});\n\t\t\t\tremove.forEach(wid => this.widgetRemove(name, wid));\n\t\t\t}\n\t\t\tthis.sections = this.sections.sort((section1, section2) => {\n\t\t\t\tif(section1.name == 'custom')\n\t\t\t\t\treturn 1;\n\t\t\t\tif (section2.name == 'custom')\n\t\t\t\t\treturn -1;\n\t\t\t\treturn section2.widgets.length - section1.widgets.length;\n\t\t\t});\n\t\t}).catch(err => console.error('ERROR:', err));\n\t},\n\tasync beforeMount() {\n\t\tif (!this.viewData.name || !this.viewData.uid) {\n\t\t\tconst res = await this.$api.call(ApiDashboard.getViewData());\n\t\t\tthis.viewDataInternal = res.data\n\t\t}\t\n\t},\n\ttemplate: `\n\t
    \n\t\t

    \n\t\t\t{{ $p.t('global/personalGreeting', [ viewDataInternal?.name ]) }}\n\t\t\t\n\t\t

    \n\t\t\n\t\t\n\t
    `\n}\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsearch(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/search';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchAdvanced(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/searchAdvanced';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchdummy(searchsettings) {\n\t\tconst url = 'public/js/apps/api/dummyapi.php/Search';\n\t\treturn this.$fhcApi.post(url, searchsettings);\n\t}\n};\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/loadModule/' + category);\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst payload = {categories, language}\n\t\treturn this.$fhcApi.post('/api/frontend/v1/phrasen/setLanguage', payload);\n\t},\n\tgetLanguage() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getLanguage', {});\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getAllLanguages', {});\n\t}\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetHeader(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/header',\n\t\t\t{ navigation_page }\n\t\t);\n\t},\n\tgetMenu: function(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/menu',\n\t\t\t{ navigation_page }\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/saveCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t);\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/applyFilterFields',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t);\n\t},\n\taddFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/addFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tgetFilter(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tabmeldung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/abmeldung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(stdsem, prestudent_id, grund) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/abmeldung/createAntrag', {\n\t\t\t\tstudiensemester: stdsem,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\tif (!Array.isArray(antrag_id))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t\t{ antrag_id }\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag_id.map(antrag => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t{ antrag_id: antrag.studierendenantrag_id },\n\t\t\t\t{ errorHeader: '#' + antrag.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t},\n\tunterbrechung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/unterbrechung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(studiensemester, prestudent_id, grund, datum_wiedereinstieg, attachment) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/createAntrag', {\n\t\t\t\tstudiensemester,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund,\n\t\t\t\tdatum_wiedereinstieg,\n\t\t\t\tattachment\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/cancelAntrag', {\n\t\t\t\tantrag_id\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t}\n\t},\n\twiederholung: {\n\t\tgetDetails(prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/' + prestudent_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tgetLvs(antrag_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getLvs/' + antrag_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tcreate(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/createAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/cancelAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tsaveLvs(forbiddenLvs, mandatoryLvs) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/saveLvs', {\n\t\t\t\tforbiddenLvs,\n\t\t\t\tmandatoryLvs\n\t\t\t});\n\t\t}\n\t},\n\tleitung: {\n\t\tgetStgs() {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getActiveStgs');\n\t\t},\n\t\tgetAntraege(url, config, params) {\n\t\t\treturn this.$fhcApi\n\t\t\t\t.get('/api/frontend/v1/studstatus/leitung/getAntraege/' + url)\n\t\t\t\t.then(res => res.data); // Return data for tabulator\n\t\t},\n\t\tgetHistory(antrag_id) {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getHistory/' + antrag_id)\n\t\t},\n\t\tgetPrestudents(query, signal) {\n\t\t\treturn this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/getPrestudents',\n\t\t\t\t{ query },\n\t\t\t\t{\n signal: signal,\n timeout: 30000\n }\n\t\t\t);\n\t\t},\n\t\tapprove(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treopen(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tunpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tobject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tapproveObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tdenyObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t}\n};","export default {\n\n getView: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getView/${uid}`,{}\n );\n },\n\n fotoSperre: function (value) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/fotoSperre/${value}`,\n {}\n );\n \n },\n\n isStudent: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isStudent`,\n {\n uid:uid,\n }\n );\n },\n\n isMitarbeiter: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isMitarbeiter/${uid}`,\n {}\n );\n },\n\n getZustellAdresse: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellAdresse`,{}\n );\n },\n\n getZustellKontakt: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellKontakt`,{}\n );\n },\n\n getGemeinden: function(nation,zip){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getGemeinden/${nation}/${zip}`,\n {}\n );\n \n },\n getAllNationen:function(){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Profil/getAllNationen\",{}\n );\n },\n}","export default {\n //! API calls for profil update requests\n \n getStatus: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getStatus`,{});\n },\n \n getTopic: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getTopic`,{});\n },\n \n acceptProfilRequest: function ({profil_update_id, uid, status_message, topic, requested_change}) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/acceptProfilRequest\",{profil_update_id, uid, status_message, topic, requested_change});\n },\n \n denyProfilRequest: function ({profil_update_id, uid, topic, status_message}) {\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/denyProfilRequest\",{profil_update_id,uid,topic,status_message});\n },\n \n insertFile: function (dms, replace = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n dms);\n\n },\n \n getProfilRequestFiles: function (requestID) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`,{});\n },\n \n selectProfilRequest: function (uid = null, id = null) {\n\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/selectProfilRequest`,\n {...(uid?{uid}:{}),\n ...(id?{id}:{})\n });\n },\n \n insertProfilRequest: function (topic, payload, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/insertProfilRequest\",\n {\n topic,\n payload,\n ...(fileID ? { fileID } : {}),\n });\n },\n \n updateProfilRequest: function (topic, payload, ID, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/updateProfilRequest`,\n {\n topic,\n payload,\n ID,\n ...(fileID ? { fileID: fileID } : {}),\n });\n },\n \n deleteProfilRequest: function (requestID) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/deleteProfilRequest`,\n {\n requestID,\n });\n },\n };\n ","\nexport default {\n\tgetRoomInfo(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getRoomplan',\n\t\t\t{ ort_kurzbz, start_date, end_date}\n\t\t);\n\t},\n\tgetStunden() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/Stunden',\n\t\t\t{}\n\t\t);\n\t},\n\tgetOrtReservierungen(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/LvPlan/getReservierungen/${ort_kurzbz}`,\n\t\t\t{ start_date, end_date}\n\t\t);\n\t},\n\tgetLvPlanReservierungen(start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getReservierungen',\n\t\t\t{ start_date, end_date }\n\t\t);\n\t},\n\tgetLehreinheitStudiensemester(lehreinheit_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${lehreinheit_id}`,\n\t\t\t{}\n\t\t);\n\t},\n\tstudiensemesterDateInterval(date) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${date}`,\n\t\t\t{}\n\t\t);\n\t},\n\tLvPlanEvents(start_date, end_date, lv_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/LvPlanEvents',\n\t\t\t{ start_date, end_date, lv_id }\n\t\t);\n\t},\n\t\n\t\n};","import verband from './stv/verband.js';\nimport students from './stv/students.js';\nimport filter from './stv/filter.js';\nimport konto from './stv/konto.js';\nimport group from './stv/group.js';\nimport kontakt from './stv/kontakt.js';\nimport prestudent from './stv/prestudent.js';\nimport status from './stv/status.js';\nimport details from './stv/details.js';\nimport exam from './stv/exam.js';\nimport abschlusspruefung from './stv/abschlusspruefung.js';\nimport grades from './stv/grades.js';\nimport mobility from './stv/mobility.js';\nimport archiv from './stv/archiv.js';\nimport documents from './stv/documents.js';\nimport exemptions from './stv/exemptions.js';\nimport jointstudies from \"./stv/jointstudies.js\";\nimport courselist from './stv/courselist.js';\n\nexport default {\n\tverband,\n\tstudents,\n\tfilter,\n\tkonto,\n\tgroup,\n\tkontakt,\n\tprestudent,\n\tstatus,\n\tdetails,\n\texam,\n\tabschlusspruefung,\n\tgrades,\n\tmobility,\n\tarchiv,\n\tdocuments,\n\texemptions,\n\tjointstudies,\n\tcourselist,\n\tconfigStudent() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/student');\n\t},\n\tconfigStudents() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/students');\n\t}\n};\n","export default {\n\tget() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/verband');\n\t},\n\tfavorites: {\n\t\tget() {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/stv/favorites');\n\t\t},\n\t\tset(favorites) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/stv/favorites/set', {\n\t\t\t\tfavorites\n\t\t\t});\n\t\t}\n\t}\n}","export default {\n\tuid(uid, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/uid/'\n\t\t\t+ encodeURIComponent(uid);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tprestudent(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/prestudent/'\n\t\t\t+ encodeURIComponent(prestudent_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tperson(person_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/person/'\n\t\t\t+ encodeURIComponent(person_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tverband(relative_path) {\n\t\treturn this.$fhcApi.getUri('api/frontend/v1/stv/students/' + relative_path);\n\t}\n}","export default {\n\tgetStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/filter/getStg');\n\t},\n\tsetStg(studiengang_kz) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/filter/setStg', {\n\t\t\tstudiengang_kz\n\t\t});\n\t}\n};","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/konto/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id),\n\t\t\t\tonly_open: self.filter,\n\t\t\t\tstudiengang_kz: self.studiengang_kz_intern ? self.stg_kz : ''\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tcheckDoubles(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/checkDoubles', data, {\n\t\t\tconfirmErrorHandler: error => true\n\t\t});\n\t},\n\tinsert(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/insert', data);\n\t},\n\tcounter(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/counter', data);\n\t},\n\tedit(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/update', data);\n\t},\n\tdelete(buchungsnr) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/delete', {buchungsnr});\n\t},\n\tgetBuchungstypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/konto/getBuchungstypen');\n\t}\n};","export default {\n\tgetGruppen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/Gruppen/getGruppen/' + params.id);\n\t},\n\tdeleteGroup(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/Gruppen/deleteGruppe/', params);\n\t}\n}","export default {\n\t//------------- address.js-----------\n\tgetAdressen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressen/' + params.id);\n\t},\n\taddNewAddress(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewAddress/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadAddress(address_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadAddress/', {address_id});\n\t},\n\tupdateAddress(form, address_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateAddress/' + address_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteAddress(address_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteAddress/', {address_id});\n\t},\n\tgetPlaces(plz) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getPlaces/' + plz);\n\t},\n\tgetFirmen(searchString) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getFirmen/' + searchString);\n\t},\n\tgetNations() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getNations/');\n\t},\n\tgetAdressentypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressentypen/');\n\t},\n\n\t//------------- bankverbindung.js-----------\n\tgetBankverbindung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getBankverbindung/' + params.id);\n\t},\n\taddNewBankverbindung(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewBankverbindung/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadBankverbindung(bankverbindung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadBankverbindung/', {bankverbindung_id});\n\t},\n\tupdateBankverbindung(form, bankverbindung_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateBankverbindung/' + bankverbindung_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteBankverbindung(bankverbindung_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteBankverbindung/', {bankverbindung_id});\n\t},\n\n\t//------------- contact.js-----------\n\tgetKontakte (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakte/' + params.id);\n\t},\n\taddNewContact(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewContact/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadContact(kontakt_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadContact/', {kontakt_id});\n\t},\n\tupdateContact(form, kontakt_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateContact/' + kontakt_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteContact(kontakt_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteContact/', {kontakt_id});\n\t},\n\tgetStandorteByFirma(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getStandorteByFirma/' + searchString);\n\t},\n\tgetKontakttypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakttypen/');\n\t}\n};","export default {\n\n//------------- Prestudent.js------------------------------------------------------\n\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\treturn \tthis.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/prestudent/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t);\n\t},\n\tupdatePrestudent(form, prestudent_id, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/prestudent/updatePrestudent/' + prestudent_id,\n\t\t\tdata\n\t\t);\n\t},\n\tgetBezeichnungZGV() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungZGV/');\n\t},\n\tgetBezeichnungMZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungMZgv/');\n\t},\n\tgetBezeichnungDZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungDZgv/');\n\t},\n\tgetStgs() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStgs/');\n\t},\n\tgetAusbildung() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAusbildung/');\n\t},\n\tgetAufmerksamdurch() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAufmerksamdurch/');\n\t},\n\tgetBerufstaetigkeit() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBerufstaetigkeit/');\n\t},\n\tgetTypenStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getTypenStg/');\n\t},\n\tgetBisstandort() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBisstandort/');\n\t},\n\n//------------- MultiStatus.js------------------------------------------------------\n\tgetHistoryPrestudent (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getHistoryPrestudent/' + params.id);\n\t},\n\tgetMaxSem(studiengang_kzs) {\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/status/getMaxSemester/', {studiengang_kzs});\n\t},\n\tadvanceStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/advanceStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tconfirmStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/confirmStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tisLastStatus(id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/isLastStatus/' + id);\n\t},\n\tdeleteStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/deleteStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tgetLastBismeldestichtag() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getLastBismeldestichtag/');\n\t},\n\n//------------- History.js------------------------------------------------------\n\tgetHistoryPrestudents (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getHistoryPrestudents/' + params.id);\n\t},\n\n}","export default {\n\n//------------- Modal.js------------------------------------------------------\n\n\tinsertStatus(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/status/insertStatus/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/status/loadStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tupdateStatus(form, {prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}, data) {\n\t\treturn this.$fhcApi.post(\n\t\t\tform,\n\t\t\t'api/frontend/v1/stv/status/updateStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester,\n\t\t\tdata\n\t\t);\n\t},\n\tgetStudienplaene(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudienplaene/' + prestudent_id);\n\t},\n\tgetStudiengang(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudiengang/' + prestudent_id);\n\t},\n\tgetStatusgruende() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusgruende/');\n\t},\n\tgetStati() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStati/');\n\t},\n\n//------------- Dropdown.js------------------------------------------------------\n\n\taddStudent(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/addStudent/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tchangeStatus(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/changeStatus/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tgetStatusarray() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusarray/');\n\t}\n}","export default {\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/student/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(url);\n\t},\n\tsave(form, prestudent_id, studiensemester_kurzbz, data) {\n\t\tlet url = 'api/frontend/v1/stv/student/save/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(form, url, data);\n\t},\n}\n","export default {\n\tgetPruefungen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getPruefungen/' + params.id);\n\t},\n\tloadPruefung(pruefung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/loadPruefung/' + pruefung_id);\n\t},\n\tgetTypenPruefungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getTypenPruefungen');\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/getAllLehreinheiten/', data)\n\t},\n\tgetLvsByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsByStudent/' + uid)\n\t},\n\tgetLvsandLesByStudent(uid, semester){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsandLesByStudent/' + uid + '/' + semester);\n\t},\n\tgetLvsAndMas(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsAndMas/' + uid)\n\t},\n\tgetMitarbeiterLv(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getMitarbeiterLv/' + id)\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getNoten');\n\t},\n\tcheckZeugnisnoteLv(data){\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/', data)\n\t},\n\taddPruefung(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/insertPruefung/', data);\n\t},\n\tupdatePruefung(form, id, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/updatePruefung/' + id, data);\n\t},\n\tdeletePruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/deletePruefung/' + id)\n\t}\n}","export default {\n\n\tgetAbschlusspruefung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/' + params.id);\n\t},\n\taddNewAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/', data\n\t\t);\n\t},\n\tloadAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/', {id});\n\t},\n\tupdateAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/', data\n\t\t);\n\t},\n\tdeleteAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/', {id});\n\t},\n\tgetTypenAbschlusspruefung(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/');\n\t},\n\tgetTypenAntritte(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/');\n\t},\n\tgetBeurteilungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/');\n\t},\n\tgetAkadGrade(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getAkadGrade/', {studiengang_kz});\n\t},\n\tgetTypStudiengang(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/', {studiengang_kz});\n\t},\n\tgetMitarbeiter(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/' + searchString);\n\t},\n\tgetPruefer(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getPruefer/' + searchString);\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getNoten/');\n\t},\n\tcheckForExistingExams(uids) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/', {uids}\n\t\t);\n\t}\n}","export default {\n\tlist() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/grades/list');\n\t},\n\tgetCertificate(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getCertificate/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetTeacherProposal(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getTeacherProposal/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetRepeaterGrades(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getRepeaterGrades/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tupdateCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, note, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/updateCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz,\n\t\t\t\tnote\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tdeleteCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/deleteCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyTeacherProposalToCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyTeacherProposalToCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id, lv_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate',\n\t\t\t{\n\t\t\t\tstudierendenantrag_lehrveranstaltung_id\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lv_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tgetGradeFromPoints(points, lehrveranstaltung_id, studiensemester_kurzbz, manualErrorHandling) {\n\t\tconst config = manualErrorHandling ? {errorHandling: false} : {};\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/grades/getGradeFromPoints',\n\t\t\t{\n\t\t\t\t\"points\": points,\n\t\t\t\t\"lehrveranstaltung_id\": lehrveranstaltung_id,\n\t\t\t\t\"studiensemester_kurzbz\": studiensemester_kurzbz\n\t\t\t},\n\t\t\tconfig\n\t\t\t);\n\t}\n}","export default {\n\tgetMobilitaeten (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getMobilitaeten/' + params.id);\n\t},\n\tgetProgramsMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getProgramsMobility/');\n\t},\n\taddNewMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/insertMobility/', data);\n\t},\n\tloadMobility(bisio_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/loadMobility/' + bisio_id);\n\t},\n\tupdateMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/updateMobility/', data);\n\t},\n\tdeleteMobility(bisio_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobility/' + bisio_id);\n\t},\n\tgetLVList(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLVList/' + studiengang_kz);\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/getAllLehreinheiten/', data)\n\t},\n\tgetLvsandLesByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLvsandLesByStudent/' + uid);\n\t},\n\tgetPurposes(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getPurposes/' + params.id);\n\t},\n\tgetSupports(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getSupports/' + params.id);\n\t},\n\tgetListPurposes() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListPurposes/');\n\t},\n\tgetListSupports() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListSupports/');\n\t},\n\tdeleteMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilityPurpose/' + params.bisio_id, params);\n\t},\n\taddMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilityPurpose/' + params.bisio_id, params);\n\t},\n\tdeleteMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilitySupport/' + params.bisio_id, params);\n\t},\n\taddMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilitySupport/' + params.bisio_id, params);\n\t},\n\n}","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/archiv/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id)\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tgetArchivVorlagen() {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/getArchivVorlagen');\n\t},\n\tarchive(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archive',\n\t\t\tdata\n\t\t);\n\t},\n\tarchiveSigned(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archiveSigned',\n\t\t\tdata\n\t\t);\n\t},\n\tupdate(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/update', data);\n\t},\n\tdelete({akte_id, studiengang_kz}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/delete', {akte_id, studiengang_kz});\n\t}\n};\n","export default {\n\tgetDocumentsUnaccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tgetDocumentsAccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsAccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tdeleteZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteZuordnung/' + params.prestudent_id + '/' + params.dokument_kurzbz);\n\t},\n\tcreateZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/createZuordnung/'\n\t\t\t+ params.prestudent_id + '/'\n\t\t\t+ params.dokument_kurzbz);\n\t},\n\tloadAkte(akte_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/loadAkte/' + akte_id);\n\t},\n\tgetDoktypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDoktypen/');\n\t},\n\tupdateFile(akte_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/updateAkte/' + akte_id,\n\t\t\tdata);\n\t},\n\tdeleteFile(akte_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteAkte/' + akte_id);\n\t},\n\tuploadFile(prestudent_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/uploadDokument/' + prestudent_id,\n\t\t\tdata);\n\t},\n}","export default {\n\tgetAnrechnungen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getAnrechnungen/' + params.id);\n\t},\n\tgetLehrveranstaltungen(prestudent_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/' + prestudent_id);\n\t},\n\tgetBegruendungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getBegruendungen/');\n\t},\n\tgetLvsKompatibel(lv_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLvsKompatibel/' + lv_id);\n\t},\n\tgetLektoren(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLektoren/' + studiengang_kz);\n\t},\n\taddNewAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/insertAnrechnung/', data);\n\t},\n\tloadAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/loadAnrechnung/' + anrechnung_id);\n\t},\n\teditAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/updateAnrechnung/', data);\n\t},\n\tdeleteAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/anrechnungen/deleteAnrechnung/' + anrechnung_id);\n\t},\n}","export default {\n\tgetStudies(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudien/' + params.id);\n\t},\n\tgetTypenMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/');\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/');\n\t},\n\tgetStudyprograms(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/');\n\t},\n\tgetListPartner(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/');\n\t},\n\tgetStatiPrestudent(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/');\n\t},\n\tloadStudy(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/loadStudie/' + id);\n\t},\n\tinsertStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/insertStudie/', data);\n\t},\n\tupdateStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/updateStudie/', data);\n\t},\n\tdeleteStudy(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/GemeinsameStudien/deleteStudie/' + id);\n\t},\n\n}","export default {\n\tgetCourselist(url, config, params) {\n\t\t//corresponding logic controller Stundenplan.php\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStundenplan/'\n\t\t\t+ params.student_uid + '/'\n\t\t\t+ params.start_date + '/'\n\t\t\t+ params.end_date + '/'\n\t\t\t+ params.group_consecutiveHours + '/'\n\t\t\t+ params.dbStundenplanTable\n\t\t);\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStudiensemester/');\n\t},\n}","import person from \"./notiz/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetNotizen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getUid/');\n\t},\n\taddNewNotiz(form, id, formData) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(form, notiz_id, formData){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getMitarbeiter/' + event);\n\t},\n\tisBerechtigt(id, type_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/isBerechtigt/');\n\t}\n}","import person from \"./betriebsmittel/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetAllBetriebsmittel(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/' + params.type + '/' + params.id);\n\t},\n\taddNewBetriebsmittel(form, person_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/' +\n\t\t\tperson_id, formData\n\t\t);\n\t},\n\tloadBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/' + betriebsmittelperson_id);\n\t},\n\tupdateBetriebsmittel(form, betriebsmittelperson_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/' + betriebsmittelperson_id,\n\t\t\tformData);\n\t},\n\tdeleteBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/' +\tbetriebsmittelperson_id);\n\t},\n\tgetTypenBetriebsmittel(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/');\n\t},\n\tloadInventarliste(query){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/' +\tquery);\n\t}\n}","export default {\n\tupdatePersonUnrulyStatus(person_id, unrulyParam) {\n\n\t\ttry {\n\t\t\tconst payload = {person_id, unruly: unrulyParam}\n\t\t\tconst url = '/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus';\n\t\t\treturn this.$fhcApi.post(url, payload, null);\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t},\n\tfilterPerson(payload, base = ''){\n\n\t\ttry {\n\t\t\tconst url = base + '/api/frontend/v1/checkperson/CheckPerson/filterPerson';\n\t\t\treturn axios.post(url, payload)\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t}\n}","export default {\n getContentID(ort_kurbz) {\n\t\treturn this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Ort/ContentID\",\n\t\t\t{ ort_kurzbz: ort_kurbz }\n\t\t);\n\t},\n\tgetRooms(datum, von, bis, typ, personenanzahl = 0) {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getRooms\",\n\t\t\t{ datum, von, bis, typ, personenanzahl }\n\t\t);\n\t},\n\tgetRoomTypes() {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getTypes\"\n\t\t);\n\t}\n}","export default {\n content(content_id, version=null, sprache=null, sichtbar=null) {\n return this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/content\",\n\t\t\t{ \n\t\t\t\tcontent_id: content_id,\n\t\t\t\t...(version?{version}:{}),\n\t\t\t\t...(sprache?{sprache}:{}),\n\t\t\t\t...(sichtbar?{sichtbar}:{}),\n }\n );\n },\n\t//api function used for the news View that renders the html\n\tgetNews(page = 1, page_size = 10, sprache) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNews\",\n\t\t\t{\n\t\t\t\tpage,\n\t\t\t\tpage_size,\n\t\t\t\tsprache,\n\t\t\t},\n\t\t);\n\t},\n\t//api function used for the widget component\n\tnews(limit) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/news\",\n\t\t\t{\n\t\t\t\tlimit: limit\n\t\t\t}\n\t\t);\n\t},\n\tgetNewsRowCount: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNewsRowCount\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetNewsExtra: function(){\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getStudiengangInfoForNews\",\n\t\t\t{}\n\t\t);\n\t}\n }","export default {\n getStudentenMail(lehreinheit_id) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Lehre/lvStudentenMail\",\n { lehreinheit_id: lehreinheit_id }\n );\n },\n\tgetLvInfo(studiensemester_kurzbz, lehrveranstaltung_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/LV/${studiensemester_kurzbz}/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentPruefungen(lehrveranstaltung_id){\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentProjektarbeiten(uid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getStudentProjektarbeiten/${uid}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentProjektabgaben(detail) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getStudentProjektabgaben`\n\t\t\t, {\n\t\t\t\tprojektarbeit_id: detail.projektarbeit_id,\n\t\t\t\tstudent_uid: detail.student_uid\n\t\t\t}\n\t\t);\n\t},\n\tpostStudentProjektarbeitEndupload(formData) {\n\t\tconst url = '/api/frontend/v1/Lehre/postStudentProjektarbeitEndupload';\n\t\tconst headers = {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\treturn this.$fhcApi.post(url, formData, headers)\n\t},\n\tpostStudentProjektarbeitZwischenabgabe(formData) {\n\t\tconst url = '/api/frontend/v1/Lehre/postStudentProjektarbeitZwischenabgabe';\n\t\tconst headers = {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\treturn this.$fhcApi.post(url, formData, headers)\n\t},\n\tgetStudentProjektarbeitAbgabeFile(paabgabe_id, student_uid) {\n\t\tconst url = `/Cis/Abgabetool/getStudentProjektarbeitAbgabeFile?paabgabe_id=${paabgabe_id}&student_uid=${student_uid}`;\n\n\t\twindow.location = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + url\n\t},\n\tgetMitarbeiterProjektarbeiten(uid, all) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getMitarbeiterProjektarbeiten?showall=${all}`\n\t\t\t, {}\n\t\t);\n\t},\n\tpostProjektarbeitAbgabe(termin) {\n\t\tconst payload = {\n\t\t\tpaabgabe_id: termin.paabgabe_id,\n\t\t\tpaabgabetyp_kurzbz: termin.bezeichnung.paabgabetyp_kurzbz,\n\t\t\tdatum: termin.datum,\n\t\t\tfixtermin: termin.fixtermin,\n\t\t\tinsertvon: termin.insertvon,\n\t\t\tkurzbz: termin.kurzbz,\n\t\t\tprojektarbeit_id: termin.projektarbeit_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/postProjektarbeitAbgabe';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t\t\n\t},\n\tdeleteProjektarbeitAbgabe(paabgabe_id) {\n\t\tconst payload = {\n\t\t\tpaabgabe_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/deleteProjektarbeitAbgabe';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t},\n\tpostSerientermin(datum, paabgabetyp_kurzbz, bezeichnung, kurzbz, projektarbeit_ids) {\n\t\tconst payload = {\n\t\t\tdatum, paabgabetyp_kurzbz, bezeichnung, kurzbz, projektarbeit_ids\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/postSerientermin';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t},\n\tfetchDeadlines(person_id) {\n\t\tconst payload = {\n\t\t\tperson_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/fetchDeadlines';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t}\n }","export default {\n getLvMenu(lvid, studiensemester_kurzbz) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/LvMenu/getLvMenu/${lvid}/${studiensemester_kurzbz}`,\n {}\n );\n },\n\n \n }","import person from \"./messages/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\t\tgetMessages(url, config, params) {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessages/' + params.id + '/' + params.type + '/' + params.size + '/' + params.page);\n\t\t},\n\t\tgetVorlagen(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagen/');\n\t\t},\n\t\tgetMsgVarsLoggedInUser(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/');\n\t\t},\n\t\tgetMessageVarsPerson(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessageVarsPerson/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetMsgVarsPrestudent(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsPrestudent/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPersonId(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getPersonId/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetUid(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getUid/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetDataVorlage(vorlage_kurzbz){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getDataVorlage/' + vorlage_kurzbz);\n\t\t},\n\t\tgetNameOfDefaultRecipient(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getNameOfDefaultRecipient/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPreviewText(params, data){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/getPreviewText/' + params.id + '/' + params.type_id,\n\t\t\t\tdata);\n\t\t},\n\t\tgetReplyData(messageId){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getReplyData/' + messageId);\n\t\t},\n\t\tsendMessageFromModalContext(form, id, data) {\n\t\t\treturn this.$fhcApi.post(form,'api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tsendMessage(id, data) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tdeleteMessage(messageId){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/deleteMessage/' + messageId);\n\t\t}\n}","export default {\n\tgetVorlagen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagen/');\n\t},\n\tgetVorlagenByLoggedInUser() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/');\n\t}\n}","export default {\n\n\tgetStudiensemester: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/components/Cis/Mylv/Studiensemester',\n\t\t\t{}\n\t\t);\n\t},\n\n\tgetAllStudienSemester: function (studiensemester=undefined, studiengang=undefined, semester=undefined, studienplan=undefined) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/Studium/getStudienAllSemester',\n\t\t\t{studiensemester, studiengang, semester, studienplan}\n\t\t);\n\t},\n\n\tgetStudiengaengeForStudienSemester: function (studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${studiensemester}`,\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudienplaeneBySemester: function (studiengang, studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudienplaeneBySemester`,\n\t\t\t{\n\t\t\t\tstudiengang,\n\t\t\t\tstudiensemester,\n\t\t\t}\n\t\t);\n\t},\n\tgetLvPlanForStudiensemester: function (studiensemester, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${studiensemester}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\tgetLvEvaluierungInfo: function (studiensemester_kurzbz, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getLvEvaluierungInfo/${studiensemester_kurzbz}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\t\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport search from \"./search.js\";\nimport phrasen from \"./phrasen.js\";\nimport navigation from \"./navigation.js\";\nimport filter from \"./filter.js\";\nimport studstatus from \"./studstatus.js\";\nimport profil from \"./profil.js\";\nimport profilUpdate from \"./profilUpdate.js\";\nimport lvPlan from \"./lvPlan.js\";\nimport bookmark from \"./bookmark.js\";\nimport stv from \"./stv.js\";\nimport notiz from \"./notiz.js\";\nimport betriebsmittel from \"./betriebsmittel.js\";\nimport checkperson from \"./checkperson.js\";\nimport ampeln from \"./ampeln.js\";\nimport ort from \"./ort.js\";\nimport cms from \"./cms.js\";\nimport lehre from \"./lehre.js\";\nimport addons from \"./addons.js\";\nimport messages from \"./messages.js\";\nimport vorlagen from \"./vorlagen.js\";\nimport studiengang from \"./studiengang.js\";\nimport menu from \"./menu.js\";\nimport dashboard from \"./dashboard.js\";\nimport authinfo from \"./authinfo.js\";\nimport studium from \"./studium.js\";\nimport language from \"./language.js\";\n\nexport default {\n search,\n phrasen,\n navigation,\n dashboard,\n filter,\n studstatus,\n profil,\n profilUpdate,\n lvPlan,\n bookmark,\n stv,\n notiz,\n betriebsmittel,\n checkperson,\n ampeln,\n ort,\n cms,\n lehre,\n addons,\n messages,\n vorlagen,\n addons,\n\tstudiengang,\n\tmenu,\n\tauthinfo,\n\tstudium,\n language\n};\n","export default {\n\tasync getViewData() {\n\t\tconst url = `/api/frontend/v1/Cis4FhcApi/getViewData`;\n\t\treturn this.$fhcApi.get(url, null, null)\n\t},\n}","export default {\n\n getBookmarks: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/getBookmarks`\n ,{}\n );\n },\n \n delete: function (bookmark_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/delete/${bookmark_id}`\n ,{}\n ); \n },\n\n\tupdate: function ({ bookmark_id, url, title, tag=null}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/Bookmark/update/${bookmark_id}`\n\t\t\t, {\n\t\t\t\turl: url,\n\t\t\t\ttitle: title\n\t\t\t}\n\t\t);\n\t},\n\n insert: function ({url, title, tag}) {\n return this.$fhcApi.post(\n `/api/frontend/v1/Bookmark/insert`\n ,{\n url: url,\n title: title,\n tag: tag\n }\n ); \n },\n}","export default {\n \n open: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/open`,{});\n },\n\n all: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/all`,{});\n },\n\n confirm: function (ampel_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/confirm/${ampel_id}`,{});\n },\n\n}","export default {\n\tstudiengangInformation: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Studgang/getStudiengangInfo\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudiengangByKz: function (studiengang_kz) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz\",\n\t\t\t{\n\t\t\t\t\"studiengang_kz\": studiengang_kz\n\t\t\t}\n\t\t);\n\t}\n}","export default {\n\tgetMenu: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/CisMenu/getMenu\",\n\t\t\t{}\n\t\t);\n\t}\n\n}","\nexport default {\n\tgetAuthUID() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthUID',\n\t\t\t{ }\n\t\t);\n\t},\n\tgetAuthInfo() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthInfo',\n\t\t\t{}\n\t\t);\n\t},\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAll() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/language/get');\n\t}\n};","/** TODO(chris):\n * when deleting this file be sure to\n * remove line 1 & 90 from ../plugins/Phrasen.js\n */\nimport FhcApiFactory from '../api/fhcapifactory.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$fhcApi) {\n\t\t\t/* Deprecated Code start */\n\t\t\tif (options?.factory) {\n\t\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\t\tapp.config.globalProperties.$fhcApi.factory.addEndpoints(options.factory);\n\t\t\t}\n\t\t\t/* Deprecated Code end */\n\t\t\treturn;\n\t\t}\n\n\t\tfunction _get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\n\t\tfunction _clean_return_value(response) {\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = {response};\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tconst baseURL = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\";\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(response => {\n\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\treturn _clean_return_value(response);\n\n\t\t\t// NOTE(chris): loop through errors\n\t\t\tif (response.data.errors)\n\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t);\n\n\t\t\treturn _clean_return_value(response);\n\t\t}, error => {\n\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\n\t\t\tif (error.config?.errorHandling == 'off'\n\t\t\t\t|| error.config?.errorHandling === false\n\t\t\t\t|| error.config?.errorHandling == 'success')\n\t\t\t\treturn Promise.reject(error);\n\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL, true);\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t\t}\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\terror.response.data.errors = error.response.data.errors.filter(\n\t\t\t\t\terr => (error.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, error.config)\n\t\t\t\t);\n\t\t\t\tif (!error.response.data.errors.length)\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else if (error.request) {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertError(error.message);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t}\n\n\t\t\treturn Promise.reject(error);\n\t\t});\n\n\t\tapp.config.globalProperties.$fhcApi = {\n\t\t\tgetUri(url) {\n\t\t\t\tconsole.warn('$fhcApi.getUri is DEPRECATED! Use $api.getUri instead.');\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\tconsole.warn('$fhcApi.get is DEPRECATED! Use $api.get instead.');\n\t\t\t\t[uri, params, config] = _get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\tconsole.warn('$fhcApi.post is DEPRECATED! Use $api.post instead.');\n\t\t\t\t[uri, data, config] = _get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\t_defaultErrorHandlers: {\n\t\t\t\tvalidation(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form) {\n\t\t\t\t\t\tconfig.form.clearValidation();\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.messages);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(error.messages)) {\n\t\t\t\t\t\terror.messages.forEach($fhcAlert.alertError);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (typeof error.messages == 'object') {\n\t\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t\tObject.values(error.messages).forEach(\n\t\t\t\t\t\t\t\tvalue => $fhcAlert.alertDefault(\n\t\t\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tObject.entries(error.messages).forEach(\n\t\t\t\t\t\t\t\t([key, value]) => $fhcAlert.alertDefault('error', key, value, true)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tgeneral(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form)\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.message);\n\t\t\t\t\telse if (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertError(error.message);\n\t\t\t\t},\n\t\t\t\tphp(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('warn', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('info', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\texception(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tdb(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tauth(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertDefault('error', error.message, message);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/* Deprecated Code start */\n\t\tclass FhcApiFactoryWrapper {\n\t\t\tconstructor(factorypart, root) {\n\t\t\t\tif (root === undefined) {\n\t\t\t\t\tthis.$fhcApi = {\n\t\t\t\t\t\tgetUri(url) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.getUri(url);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget(form, uri, params, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.get(form, uri, params, config);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpost(form, uri, data, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.post(form, uri, data, config);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tObject.defineProperty(this.$fhcApi, 'factory', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.factory;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tapp.config.globalProperties.$fhcApi.factory = this;\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty(this, '$fhcApi', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\treturn (root || this).$fhcApi;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.addEndpoints(factorypart, true)\n\t\t\t}\n\n\t\t\taddEndpoints(factorypart, noWarn) {\n\t\t\t\tObject.keys(factorypart).forEach(key => {\n\t\t\t\t\tObject.defineProperty(this, key, {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tif (typeof factorypart[key] == 'function')\n\t\t\t\t\t\t\t\treturn factorypart[key].bind(this);\n\t\t\t\t\t\t\treturn new FhcApiFactoryWrapper(factorypart[key], this.$fhcApi.factory);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tif (!noWarn) console.warn('$fhcApi.factory.addEndpoints() is DEPRECATED!');\n\t\t\t}\n\t\t}\n\n\t\tconst factory = new FhcApiFactoryWrapper(FhcApiFactory);\n\t\tif (options?.factory) {\n\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\tfactory.addEndpoints(options.factory);\n\t\t}\n\n\t\tapp.config.globalProperties.$fhcApi.factory = factory;\n\t\t/* Deprecated Code end */\n\t\t\n\t\tapp.provide('$fhcApi', app.config.globalProperties.$fhcApi);\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n//--------------------------------------------------------------------------------------------------------------------\n// Configs\n\n// To see debug messages into the browser console set this parameter as true\nconst CORE_REST_CLIENT_DEBUG = false;\n\n// Default timeout (milliseconds)\nconst CORE_REST_CLIENT_TIMEOUT = 5000;\n\n//--------------------------------------------------------------------------------------------------------------------\n// Constants\n\n// Success\nconst CORE_REST_CLIENT_SUCCESS = 0;\n\n// Properties present in a response\nconst CORE_REST_CLIENT_ERROR = \"error\";\nconst CORE_REST_CLIENT_RETVAL = \"retval\";\n\n// HTTP method parameters\nconst CRC_HTTP_GET_METHOD = \"get\";\nconst CRC_HTTP_POST_METHOD = \"post\";\n\n/**\n * Definition and initialization of the object CoreRESTClient\n */\nexport const CoreRESTClient = {\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Public methods\n\n\t/**\n\t * Performs a call using the HTTP GET method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tget: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_GET_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Performs a call using the HTTP POST method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tpost: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_POST_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Checks if the response is a success\n\t */\n\tisSuccess: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR)\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL) && response.error == CORE_REST_CLIENT_SUCCESS)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Checks if the response is an error\n\t */\n\tisError: function(response) {\n\t\treturn !CoreRESTClient.isSuccess(response);\n\t},\n\n\t/**\n\t * Checks if the response has data\n\t */\n\thasData: function(response) {\n\n\t\tif (CoreRESTClient.isSuccess(response))\n\t\t{\n\t\t\tif ((typeof response[CORE_REST_CLIENT_RETVAL] === \"object\" && Object.keys(response[CORE_REST_CLIENT_RETVAL]).length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"array\" && response[CORE_REST_CLIENT_RETVAL].length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"string\" && response[CORE_REST_CLIENT_RETVAL].trim() != \"\")\n\t\t\t\t|| typeof response[CORE_REST_CLIENT_RETVAL] === \"number\")\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Retrives data from response object\n\t */\n\tgetData: function(response) {\n\n\t\tif (CoreRESTClient.hasData(response))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Retrives error message from response object\n\t */\n\tgetError: function(response) {\n\n\t\tif (typeof response === \"object\"\n\t\t\t&& Object.keys(response).length > 0\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn \"Generic error\";\n\t},\n\n\t/**\n\t * Retrives code from response object\n\t */\n\tgetErrorCode: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_ERROR];\n\t\t}\n\n\t\treturn 1; // Generic error\n\t},\n\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Private methods\n\n\t/**\n\t * Generate the router URI using the connection parameters\n\t */\n\t_generateRouterURI: function(wsURL) {\n\t\tvar uri = null;\n\n\t\t// Checks if global JS object FHC_JS_DATA_STORAGE_OBJECT exists\n\t\tif (typeof FHC_JS_DATA_STORAGE_OBJECT !== \"undefined\")\n\t\t{\n\t\t\turi = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\" + wsURL;\n\t\t}\n\n\t\treturn uri;\n\t},\n\n\t/**\n\t * Method to print debug info after a controller has been called\n\t */\n\t_printDebug: function(parameters, response, errorThrown) {\n\n\t\tif (CORE_REST_CLIENT_DEBUG === true) // If global const CORE_REST_CLIENT_DEBUG is true, but really true!\n\t\t{\n\t\t\t// Print info about called controller\n\t\t\tconsole.log(\"Called controller: \" + parameters.remoteController);\n\t\t\tconsole.log(\"Call parameters:\"); // parameters given to this call\n\t\t\tconsole.log(parameters);\n\n\t\t\tif (response != null) // if there is a response...\n\t\t\t{\n\t\t\t\tconsole.log(\"Controller Response:\");\n\t\t\t\tconsole.log(response); // ...print it\n\t\t\t}\n\t\t\tif (errorThrown != null) // if there is a jQuery error...\n\t\t\t{\n\t\t\t\tconsole.log(\"jQuery error:\");\n\t\t\t\tconsole.log(errorThrown); // ...print it\n\t\t\t}\n\t\t\tconsole.log(\"--------------------------------------------------------------------------------------------\");\n\t\t}\n\t},\n\n\t/**\n\t * Performs a call to the server were the CI PHP layer is running\n\t * - wsURL: alias of the core controller to call\n\t * - wsParameters: parameters to give to the called controller\n\t * - type: POST or GET HTTP method\n\t * - axiosParameters: an object to configure the axios call\n\t */\n\t_axiosCall: function(wsURL, wsParameters, type, axiosParameters) {\n\n\t\t// Axios config object\n\t\tlet axiosCallObj = {\n\t\t\tmethod: type,\n\t\t\turl: CoreRESTClient._generateRouterURI(wsURL),\n\t\t\ttimeout: CORE_REST_CLIENT_TIMEOUT // default time out\n\t\t};\n\n\t\t// The ajax call is HTTP GET\n\t\tif (type == CRC_HTTP_GET_METHOD)\n\t\t{\n\t\t\taxiosCallObj.params = wsParameters;\n\t\t}\n\t\t// The ajax call is HTTP POST\n\t\telse\n\t\t{\n\t\t\taxiosCallObj.data = wsParameters;\n\t\t}\n\n\t\t// Check if axiosParameters is an object\n\t\tif (typeof axiosParameters === \"object\")\n\t\t{\n\t\t\t// And then copies the its properties into axiosCallObj\n\t\t\tfor (var prop in axiosParameters) axiosCallObj[prop] = axiosParameters[prop];\n\t\t}\n\n\t\t// Perform the ajax call via axios\n\t\treturn axios(axiosCallObj);\n\t}\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n * \n * @usage:\n * Preperations:\n * Be sure to have PrimeVue loaded with the toast and confirmdialog\n * components as primevue variable\n * Install:\n * Import this Plugin and install it with the app.use() function.\n * Use:\n * In your component you can call now the global property $fhcAlert\n * which has the following functions:\n * \n * alertSuccess\n * ------------\n * Displays a success message\n * @param string\tmessage\n * @return void\n * \n * alertInfo\n * ---------\n * Displays an info message\n * @param string\tmessage\n * @return void\n * \n * alertWarning\n * ------------\n * Displays a warning\n * @param string\tmessage\n * @return void\n * \n * alertError\n * ----------\n * Displays an error\n * @param string\tmessage\n * @return void\n * \n * alertSystemError\n * ----------------\n * Displays an alert with the error details and a button to mail\n * the error to the Support Team\n * @param string\tmessage\n * @return void\n * \n * confirmDelete\n * -------------\n * Displays a confirmation dialog and returns a Promise which resolves\n * with true or false depending und the pressed button.\n * @return Promise\n * \n * alertDefault\n * ------------\n * Displays an alert\n * @param string\tseverity\t\tcan be 'success', 'info', 'warning', 'error'\n * @param string\ttitle\n * @param string\tmessage\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * alertMultiple\n * -------------\n * Displays multiple alerts\n * @param array\t\tmessageArray\n * @param string\tseverity\t\t(optional) defaults to 'info'\n * @param string\ttitle\t\t\t(optional) defaults to 'Info'\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * handleSystemError\n * -----------------\n * Automatiticly determine how to display an system error and display it.\n * This would be used in a catch block of an ajax call.\n * @param mixed\t\terror\n * @return void\n * \n * handleSystemMessage\n * -------------------\n * Automatiticly determine how to display a message and display it.\n * @param mixed\t\tmessage\n * @return void\n */\nimport PvConfig from \"../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js\";\nimport PvToast from \"../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js\";\nimport PvConfirm from \"../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js\";\nimport PvConfirmationService from \"../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js\";\nimport FhcPhrasen from \"./Phrasen.js\";\n\nimport {CoreRESTClient} from '../RESTClient.js';\n\nconst helperAppContainer = document.createElement('div');\n\nconst helperApp = Vue.createApp({\n\tname: \"FhcAlertApp\",\n\tcomponents: {\n\t\tPvToast,\n\t\tPvConfirm\n\t},\n\tmethods: {\n\t\tmailToUrl(slotProps) {\n\t\t\tlet mailTo = FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto;\n\t\t\tlet subject = 'Meldung%20Systemfehler';\n\t\t\tlet body = `\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: ` + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method + `%0D%0A\n\t\t\t\tFehler Meldung: ` + slotProps.message.detail + `%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!`\n\n\t\t\treturn \"mailto:\" + mailTo + \"?subject=\" + subject + \"&body=\" + body;\n\t\t},\n\t\topenMessagecard(e) {\n\t\t\tbootstrap.Collapse.getOrCreateInstance(e.target.getAttribute('href')).toggle();\n\t\t}\n\t},\n\tunmounted() {\n\t\thelperAppContainer.parentElement.removeChild(helperAppContainer);\n\t},\n\tcomputed: {\n\t\tshowmaillink: function() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto !== '';\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t`\n});\n\nhelperApp.use(PvConfig);\nhelperApp.use(PvConfirmationService);\n//helperApp.use(FhcPhrasen);\n\nconst helperAppInstance = helperApp.mount(helperAppContainer);\n\ndocument.body.appendChild(helperAppContainer);\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (!app.config.globalProperties.$p)\n\t\t\tapp.use(FhcPhrasen);\n\n\t\tconst $fhcAlert = {\n\t\t\talertSuccess(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSuccess);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'success', summary: 'Info', detail: message, life: 1000});\n\t\t\t},\n\t\t\talertInfo(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertInfo);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'info', summary: 'Info', detail: message, life: 3000 });\n\t\t\t},\n\t\t\talertWarning(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertWarning);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'warn', summary: 'Achtung', detail: message});\n\t\t\t},\n\t\t\talertError(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertError);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'error', summary: 'Achtung', detail: message });\n\t\t\t},\n\t\t\talertSystemError(message) {\n\t\t\t\t//TODO(Manu) for translation of content of template: restructure in data\n\t\t\t\t//and update definitions with translations\n\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSystemError);\n\t\t\t\thelperAppInstance.$refs.alert.add({\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t\tsummary: Vue.computed(() => app.config.globalProperties.$p.t('alert/systemerror')),\n\t\t\t\t\tdetail: message});\n\t\t\t},\n\t\t\tconfirmDelete() {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: 'fhcAlertConfirm',\n\t\t\t\t\t\theader: Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: Vue.computed(() => app.config.globalProperties.$p.t('alert/confirm_delete')),\n\t\t\t\t\t\tacceptLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/loeschen')),\n\t\t\t\t\t\tacceptClass: 'p-button-danger',\n\t\t\t\t\t\trejectLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: 'p-button-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tconfirm(options) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: options?.group ?? 'fhcAlertConfirm',\n\t\t\t\t\t\theader: options?.header ?? Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: options?.message ?? '',\n\t\t\t\t\t\tacceptLabel: options?.acceptLabel ?? 'Ok',\n\t\t\t\t\t\tacceptClass: options?.acceptClass ?? 'btn btn-primary',\n\t\t\t\t\t\trejectLabel: options?.rejectLabel ?? Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: options?.rejectClass ?? 'btn btn-outline-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\talertDefault(severity, title, message, sticky = false, html = false) {\n\t\t\t\tlet options = { severity: severity, summary: title, detail: message, html };\n\t\t\t\t\n\t\t\t\tif (!sticky)\n\t\t\t\t\toptions.life = 3000;\n\n\t\t\t\thelperAppInstance.$refs.toast.add(options);\n\t\t\t},\n\t\t\talertMultiple(messageArray, severity = 'info', title = 'Info', sticky = false, html = false){\n\t\t\t\t// Check, if array has only string values\n\t\t\t\tif (messageArray.every(message => typeof message === 'string')) {\n\t\t\t\t\tmessageArray.forEach(message => this.alertDefault(severity, title, message, sticky, html));\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\thandleSystemError(error) {\n\t\t\t\t// don't show an error message to the user if the error was an aborted request\n\t\t\t\tif(error.hasOwnProperty('name') && error.name.toLowerCase() === \"AbortError\".toLowerCase())\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is string\n\t\t\t\tif (typeof error === 'string')\n\t\t\t\t\treturn $fhcAlert.alertSystemError(error);\n\n\t\t\t\t// Error is array of strings\n\t\t\t\tif (Array.isArray(error) && error.every(err => typeof err === 'string'))\n\t\t\t\t\treturn error.every($fhcAlert.alertSystemError);\n\n\t\t\t\t// Error has been handled already\n\t\t\t\tif (error.hasOwnProperty('handled') && error.handled)\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is object\n\t\t\t\tif (typeof error === 'object' && error !== null) {\n\t\t\t\t\tlet errMsg = '';\n\n\n\t\t\t\t\tif (error.hasOwnProperty('response') && error.response?.data?.retval)\n\t\t\t\t\t\terrMsg += 'Error Message: ' + (error.response.data.retval.message || error.response.data.retval) + '\\r\\n';\n\t\t\t\t\telse if (error.hasOwnProperty('message'))\n\t\t\t\t\t\terrMsg += 'Error Message: ' + error.message.toUpperCase() + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('config') && error.config.hasOwnProperty('url'))\n\t\t\t\t\t\terrMsg += 'Error ConfigURL: ' + error.config.url + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('stack'))\n\t\t\t\t\t\terrMsg += 'Error Stack: ' + error.stack + '\\r\\n';\n\t\t\t\t\t\n\t\t\t\t\t// Fallback object error message\n\t\t\t\t\tif (errMsg == '')\n\t\t\t\t\t\terrMsg = 'Error Message: ' + JSON.stringify(error) + '\\r\\n';\n\n\t\t\t\t\terrMsg += 'Error Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\n\t\t\t\t\treturn $fhcAlert.alertSystemError(errMsg);\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\thandleSystemMessage(message) {\n\t\t\t\t// Message is string\n\t\t\t\tif (typeof message === 'string')\n\t\t\t\t\treturn $fhcAlert.alertWarning(message);\n\n\t\t\t\t// Message is array of strings\n\t\t\t\tif (Array.isArray(message)) {\n\t\t\t\t\t// If Array has only Strings\n\t\t\t\t\tif (message.every(msg => typeof msg === 'string'))\n\t\t\t\t\t\treturn message.every($fhcAlert.alertWarning);\n\n\t\t\t\t\t// If Array has only Objects\n\t\t\t\t\tif (message.every(msg => typeof msg === 'object') && msg !== null) {\n\t\t\t\t\t\treturn message.every(msg => {\n\t\t\t\t\t\t\tif (msg.hasOwnProperty('data') && msg.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(msg.data.retval));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(msg));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Message is Object with data property\n\t\t\t\tif (typeof message === 'object' && message !== null){\n\t\t\t\t\tif (message.hasOwnProperty('data') && message.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t// NOTE(chris): changed: alertSystemError => alertWarning\n\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(message.data.retval));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(message));\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\tresetFormValidation(form) {\n\t\t\t\tconst event = new Event('fhc-form-reset');\n\t\t\t\tform.querySelectorAll(['[data-fhc-form-validate],[data-fhc-form-error]']).forEach(el => el.dispatchEvent(event));\n\t\t\t\t/*const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\tif (alert) {\n\t\t\t\t\talert.innerHTML = '';\n\t\t\t\t\talert.classList.add('d-none');\n\t\t\t\t}\n\t\t\t\tform.querySelectorAll('.invalid-feedback').forEach(n => n.remove());\n\t\t\t\tform.querySelectorAll('.is-invalid').forEach(n => n.classList.remove('is-invalid'));\n\t\t\t\tform.querySelectorAll('.is-valid').forEach(n => n.classList.remove('is-valid'));*/\n\t\t\t},\n\t\t\thandleFormValidation(error, form) {\n\t\t\t\tif (form === undefined) {\n\t\t\t\t\tif (error && error.nodeType === Node.ELEMENT_NODE)\n\t\t\t\t\t\treturn err => $fhcAlert.handleFormValidation(err, error);\n\t\t\t\t} else {\n\t\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t\tif (typeof errors !== \"object\")\n\t\t\t\t\t\t\terrors = error.response.data;\n\n\t\t\t\t\t\t// NOTE(chris): reset form validation\n\t\t\t\t\t\t$fhcAlert.resetFormValidation(form);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// NOTE(chris): set form input validation\n\t\t\t\t\t\tconst notFound = Object.entries(errors).filter(([key, detail]) => {\n\t\t\t\t\t\t\tconst input = form.querySelector('[data-fhc-form-validate=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\tinput.dispatchEvent(new CustomEvent('fhc-form-invalidate', {detail}));\n\n\t\t\t\t\t\t\t/*const input = form.querySelector('[name=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\tinput.classList.add('is-invalid');\n\t\t\t\t\t\t\tconst feedback = document.createElement('div');\n\t\t\t\t\t\t\tfeedback.classList.add('invalid-feedback');\n\t\t\t\t\t\t\tfeedback.innerHTML = detail;\n\t\t\t\t\t\t\tinput.after(feedback);*/\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}).map(arr => arr[1]);\n\n\n\t\t\t\t\t\t//const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\t\t\tconst alert = form.querySelector('[data-fhc-form-error]');\n\t\t\t\t\t\tif (alert && notFound.length) {\n\t\t\t\t\t\t\talert.dispatchEvent(new CustomEvent('fhc-form-error', {detail: notFound}));\n\t\t\t\t\t\t\t/*notFound.forEach(txt => {\n\t\t\t\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\t\t\t\tp.innerHTML = txt;\n\t\t\t\t\t\t\t\talert.append(p);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (notFound.length) {\n\t\t\t\t\t\t\t\talert.lastChild.classList.add('mb-0');\n\t\t\t\t\t\t\t\talert.classList.remove('d-none');\n\t\t\t\t\t\t\t}*/\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnotFound.forEach($fhcAlert.alertError);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t$fhcAlert.alertError((typeof errors === 'object') ? Object.values(errors) : errors);\n\t\t\t\t} else {\n\t\t\t\t\t$fhcAlert.handleSystemError(error);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tapp.config.globalProperties.$fhcAlert = $fhcAlert;\n\t\tapp.provide('$fhcAlert', app.config.globalProperties.$fhcAlert);\n\t}\n}","import FhcAlert from './FhcAlert.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$api) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!app.config.globalProperties.$fhcAlert)\n\t\t\tapp.use(FhcAlert);\n\n\t\tfunction _send_array_or_object(errors, func) {\n\t\t\tif (Array.isArray(errors))\n\t\t\t\terrors.forEach(func);\n\t\t\telse\n\t\t\t\tObject.entries(errors).forEach(\n\t\t\t\t\t([title, errs]) => errs.forEach(\n\t\t\t\t\t\terror => func(error, title)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t}\n\t\tlet DEFAULT_ERROR_CONFIG = {\n\t\t\tsuccess: true,\n\t\t\tfail: true,\n\t\t\tcombine: {\n\t\t\t\tform: ['validation', 'general'],\n\t\t\t\ttoast: ['validation', 'general', 'not_found', 'site_failed']\n\t\t\t},\n\t\t\thandler: {\n\t\t\t\tform(form, errors) {\n\t\t\t\t\tform.clearValidation();\n\t\t\t\t\terrors.forEach(err => form.setFeedback(\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\terr.messages || err.message\n\t\t\t\t\t));\n\t\t\t\t},\n\t\t\t\tasync toast(errors) {\n\t\t\t\t\tconst $p = app.config.globalProperties.$p;\n\t\t\t\t\tif (!$p)\n\t\t\t\t\t\treturn Promise.reject('Phrasen plugin not loaded!');\n\t\t\t\t\n\t\t\t\t\tasync function _format_toast(errors) {\n\t\t\t\t\t\terrors = errors.reduce((result, err) => {\n\t\t\t\t\t\t\tswitch (err.type) {\n\t\t\t\t\t\t\tcase 'not_found':\n\t\t\t\t\t\t\tcase 'site_failed':\n\t\t\t\t\t\t\t\tif (err.message)\n\t\t\t\t\t\t\t\t\tresult[err.message] = [err.url];\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tresult._default = [err.url];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'general':\n\t\t\t\t\t\t\t\tif (!result._default)\n\t\t\t\t\t\t\t\t\tresult._default = [];\n\t\t\t\t\t\t\t\tresult._default.push(err.message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'validation':\n\t\t\t\t\t\t\t\tObject.entries(err.messages)\n\t\t\t\t\t\t\t\t\t.forEach(([field, msg]) => {\n\t\t\t\t\t\t\t\t\t\tif (!result[field])\n\t\t\t\t\t\t\t\t\t\t\tresult[field] = [];\n\t\t\t\t\t\t\t\t\t\tif (Array.isArray(msg))\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(...msg);\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(msg);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}, {});\n\t\t\t\t\t\tlet counter = 0;\n\t\t\t\t\t\tconst msgs = await Promise.all(Object.entries(errors)\n\t\t\t\t\t\t\t.sort((a, b) => ['_default'].indexOf(b[0]) - ['_default'].indexOf(a[0])) // sort _default first\n\t\t\t\t\t\t\t.map(async ([field, msgs]) => {\n\t\t\t\t\t\t\t\tif (field == '_default') {\n\t\t\t\t\t\t\t\t\tawait $p.loadCategory('dashboard');\n\t\t\t\t\t\t\t\t\tconst general = $p.t('dashboard/general');\n\t\t\t\t\t\t\t\t\tfield = '
    ' + general + '
    ';\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfield = '
    ' + field + '
    ';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcounter += msgs.length;\n\t\t\t\t\t\t\t\treturn field\n\t\t\t\t\t\t\t\t\t+ '
    '\n\t\t\t\t\t\t\t\t\t+ msgs.join('
    ')\n\t\t\t\t\t\t\t\t\t+ '
    ';\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcounter,\n\t\t\t\t\t\t\tmsgs\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet counter, msgs;\n\t\t\t\t\tif (Array.isArray(errors)) {\n\t\t\t\t\t\t({ counter, msgs } = await _format_toast(errors));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t({ counter, msgs } = await Object.entries(errors)\n\t\t\t\t\t\t\t.reduce(async (res, [title, errs]) => {\n\t\t\t\t\t\t\t\tconst result = await res;\n\t\t\t\t\t\t\t\tconst { counter, msgs } = await _format_toast(errs);\n\t\t\t\t\t\t\t\tresult.counter += counter;\n\t\t\t\t\t\t\t\tresult.msgs.push('
    '\n\t\t\t\t\t\t\t\t\t+ title\n\t\t\t\t\t\t\t\t\t+ '
    '\n\t\t\t\t\t\t\t\t\t+ msgs.join('')\n\t\t\t\t\t\t\t\t\t+ '
    ');\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}, Promise.resolve({ counter: 0, msgs: []})));\n\t\t\t\t\t}\n\n\t\t\t\t\tawait $p.loadCategory('ui');\n\t\t\t\t\tconst n_errors = $p.t('ui/n_errors', { n: counter });\n\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\tn_errors,\n\t\t\t\t\t\t'
    ' + msgs.join('') + '
    ',\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tphp(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('warn', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('info', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\tmessage = title + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\texception(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tdb(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tauth(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\ttitle += ': ' + error.message;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ttitle = error.message;\n\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (options?.errorHandling !== undefined)\n\t\t\tDEFAULT_ERROR_CONFIG = _merge_error_config(options.errorHandling);\n\t\t\n\t\tfunction get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\t\tfunction clean_return_value(response) {\n\t\t\tif (typeof response.data === 'string' || response.data instanceof String)\n\t\t\t\treturn clean_return_value({ data: response });\n\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result)\n\t\t\t\treturn {meta: {response}, data: null};\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = { response };\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tfunction _merge_error_config(config) {\n\t\t\tif (config === false || config === 'off')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false, fail: false };\n\t\t\t\n\t\t\tif (!config || config === true)\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tif (config === 'success')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, fail: false };\n\t\t\t\n\t\t\tif (config === 'fail')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false };\n\t\t\t\n\t\t\tconst { success, fail, handler, combine } = config;\n\t\t\t\n\t\t\tconfig = { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tObject.entries({ fail, success }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = value;\n\t\t\t});\n\t\t\tObject.entries({ handler, combine }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = { ...config[key], ...value };\n\t\t\t});\n\n\t\t\treturn config;\n\t\t}\n\t\tfunction get_error_handler(config) {\n\t\t\tconst result = _merge_error_config(config?.errorHandling);\n\n\t\t\tif (!config?.form) {\n\t\t\t\tresult.combine = { ...result.combine, form: [] };\n\t\t\t} else {\n\t\t\t\tconst formHandler = result.handler.form;\n\t\t\t\tresult.handler = { ...result.handler, form: errors => formHandler(config.form, errors) };\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t\tfunction get_error_list(error) {\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\treturn [{\n\t\t\t\t\t\ttype: 'not_found',\n\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t\t}];\n\t\t\t\t} else {\n\t\t\t\t\tif (error.response.data.errors == undefined) return [];\n\t\t\t\t\treturn error.response.data.errors;\n\t\t\t\t}\n\t\t\t} else if (error.request) {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'site_failed',\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t}];\n\t\t\t} else {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'script',\n\t\t\t\t\tmessage: error.message\n\t\t\t\t}];\n\t\t\t}\n\t\t}\n\t\tfunction popHandleableErrors(errorHandling, errors) {\n\t\t\tconst result = {};\n\t\t\tconst copy = [];\n\n\t\t\tif (errors == undefined) return {};\n\n\t\t\twhile (errors.length)\n\t\t\t\tcopy.push(errors.pop());\n\t\t\tfor (var error of copy) {\n\t\t\t\tlet type = error.type;\n\t\t\t\tlet newType = null;\n\t\t\t\tfor (var t in errorHandling.combine) {\n\t\t\t\t\tlet newTypeCombinesType = errorHandling\n\t\t\t\t\t\t.combine[t]\n\t\t\t\t\t\t.includes(type);\n\t\t\t\t\tlet newTypeHasHandler = errorHandling.handler[t];\n\t\t\t\t\tif (newTypeCombinesType && newTypeHasHandler) {\n\t\t\t\t\t\tnewType = t;\n\t\t\t\t\t\tif (newType == 'form')\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (newType)\n\t\t\t\t\ttype = newType;\n\t\t\t\tconst handler = errorHandling.handler[type];\n\t\t\t\tif (handler) {\n\t\t\t\t\tif (!result[type])\n\t\t\t\t\t\tresult[type] = [];\n\t\t\t\t\tif (Array.isArray(error))\n\t\t\t\t\t\tresult[type].push(...error);\n\t\t\t\t\telse\n\t\t\t\t\t\tresult[type].push(error);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\terrors.push(error);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t+ FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(\n\t\t\tresponse => {\n\t\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\t\treturn clean_return_value(response);\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\tif (response.data.errors)\n\t\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$api._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t\t);\n\n\t\t\t\treturn clean_return_value(response);\n\t\t\t},\n\t\t\terror => {\n\t\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\n\t\t\t\tconst errorConfig = get_error_handler(error.config);\n\n\t\t\t\tif (!errorConfig.fail)\n\t\t\t\t\treturn Promise.reject(error);\n\n\t\t\t\tconst remaining = get_error_list(error);\n\n\t\t\t\tconst errors = popHandleableErrors(errorConfig, remaining);\n\n\t\t\t\tfor (var type in errors) {\n\t\t\t\t\terrorConfig.handler[type](errors[type]);\n\t\t\t\t}\n\n\t\t\t\tif (remaining.length)\n\t\t\t\t\treturn Promise.reject(error);\n\t\t\t\t\n\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\t\t\t}\n\t\t);\n\n\t\tapp.config.globalProperties.$api = {\n\t\t\tgetUri(url) {\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\t[uri, params, config] = get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\t[uri, data, config] = get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\tcall(factory, configoverwrite, form) {\n\t\t\t\tif (Array.isArray(factory)) {\n\t\t\t\t\tconst $api = app.config.globalProperties.$api;\n\n\t\t\t\t\treturn Promise\n\t\t\t\t\t\t.allSettled(factory.map((config, index) => {\n\t\t\t\t\t\t\tif (!Array.isArray(config))\n\t\t\t\t\t\t\t\tconfig = ['#' + index, config];\n\t\t\t\t\t\t\treturn $api.call(config[1], {\n\t\t\t\t\t\t\t\terrorHeader: config[0],\n\t\t\t\t\t\t\t\terrorHandling: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}))\n\t\t\t\t\t\t.then(result => {\n\t\t\t\t\t\t\tconst [ , , config ] = get_config(form, undefined, undefined, configoverwrite || {});\n\t\t\t\t\t\t\tconst errorConfig = get_error_handler(config);\n\n\t\t\t\t\t\t\tif (!errorConfig.success && !errorConfig.fail) {\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst typedErrors = {};\n\t\t\t\t\t\t\tfor (var res of result) {\n\t\t\t\t\t\t\t\tconst [ allowed, item ] = res.status === 'fulfilled'\n\t\t\t\t\t\t\t\t\t? [ errorConfig.success, res.value ]\n\t\t\t\t\t\t\t\t\t: [ errorConfig.fail, res.reason ];\n\t\t\t\t\t\t\t\tif (!allowed)\n\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\tconst errors = popHandleableErrors(errorConfig, get_error_list(item));\n\n\t\t\t\t\t\t\t\tfor (var type in errors) {\n\t\t\t\t\t\t\t\t\tif (!typedErrors[type])\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type] = {\n\t\t\t\t\t\t\t\t\t\t\t[item.config.errorHeader]: errors[type]\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type][item.config.errorHeader] = errors[type];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfor (var errType in typedErrors) {\n\t\t\t\t\t\t\t\terrorConfig.handler[errType](typedErrors[errType]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tlet { method, url, params, config } = factory;\n\t\t\t\tif (configoverwrite !== undefined) {\n\t\t\t\t\tconfig = configoverwrite;\n\t\t\t\t}\n\t\t\t\tif (!method) {\n\t\t\t\t\tmethod = 'get';\n\t\t\t\t}\n\t\t\t\tif (method.toLowerCase)\n\t\t\t\t\tmethod = method.toLowerCase();\n\t\t\t\tif (method == 'get') {\n\t\t\t\t\treturn this.get(form, url, params, config);\n\t\t\t\t} else if (method == 'post') {\n\t\t\t\t\treturn this.post(form, url, params, config);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"FhcApi: method not allowed:\", method);\n\t\t\t\t}\n\t\t\t},\n\t\t\tgetErrorHandler(config) {\n\t\t\t\treturn get_error_handler(config);\n\t\t\t}\n\t\t};\n\n\t\tapp.provide('$api', app.config.globalProperties.$api);\n\t}\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/loadModule/' + category\n\t\t};\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst params = {categories, language}\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/phrasen/setLanguage',\n\t\t\tparams\n\t\t};\n\t},\n\tgetLanguage() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getLanguage'\n\t\t};\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getAllLanguages'\n\t\t};\n\t}\n};","import OldFhcApi from '../plugin/OldFhcApi.js'; // TODO(chris): remove at some point\nimport PluginsApi from './Api.js';\nimport ApiPhrasen from '../api/factory/phrasen.js';\n\nconst categories = Vue.reactive({});\nconst loadingModules = {};\nlet user_language = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language);\nexport let user_locale = Vue.computed(()=>{\n\tif(!user_language.value) return null;\n\treturn FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(language => language.sprache == user_language.value).LC_Time;\n});\n\nfunction extractCategory(obj, category) {\n\treturn obj.filter(e => e.category == category).reduce((res, elem) => {\n\t\tif (!res[elem.phrase])\n\t\t\tres[elem.phrase] = elem.text;\n\t\treturn res;\n\t}, {});\n}\nfunction getValueForLoadedPhrase(category, phrase, params) {\n\tlet result = categories[category][phrase];\n\tif (!result)\n\t\treturn '<< PHRASE ' + phrase + '>>';\n\tif (params)\n\t\tresult = result.replace(/\\{([^}]*)\\}/g, (match, p1) => params[p1] === undefined ? match : params[p1]);\n\treturn result;\n}\n\nconst phrasen = {\n\tuser_language,\n\tuser_locale,\n\tsetLanguage(language) {\n\t\tconst catArray = Object.keys(categories)\n\t\treturn this.config.globalProperties.$api\n\t\t\t.call(ApiPhrasen.setLanguage(catArray, language))\n\t\t\t.then(res => {\n\t\t\t\tres.data.forEach(row => {\n\t\t\t\t\tcategories[row.category][row.phrase] = row.text\n\t\t\t\t})\n\n\t\t\t\t// update the reactive data that holds the current active user_language\n\t\t\t\tuser_language.value = language;\n\n\t\t\t\treturn res\n\t\t\t})\n\t},\n\tloadCategory(category) {\n\t\tif (Array.isArray(category))\n\t\t\treturn Promise.all(category.map(this.config.globalProperties\n\t\t\t\t.$p.loadCategory));\n\n\t\tif (!loadingModules[category])\n\t\t\tloadingModules[category] = this.config.globalProperties.$api\n\t\t\t\t.call(ApiPhrasen.loadCategory(category))\n\t\t\t\t.then(res => res?.data ? extractCategory(res.data, category) : {})\n\t\t\t\t.then(res => {\n\t\t\t\t\tcategories[category] = res;\n\t\t\t\t});\n\t\treturn loadingModules[category];\n\t},\n\tt_ref(category, phrase, params) {\n\t\tconsole.warn('deprecated');\n\t\treturn Vue.computed(() => this.t(category, phrase, params));\n\t},\n\tt(category, phrase, params) {\n\t\tif (params === undefined && (\n\t\t\t(Array.isArray(category) && category.length == 2) ||\n\t\t\t(category.split && category.split('/').length == 2))\n\t\t\t) {\n\t\t\tparams = phrase;\n\t\t\t[category, phrase] = category.split ? category.split('/') : category;\n\t\t}\n\t\tif (phrase === undefined) {\n\t\t\tconsole.error('invalid input', category, phrase, params);\n\t\t\treturn '';\n\t\t}\n\t\tlet val = Vue.computed(() => {\n\t\t\tif (!categories[category])\n\t\t\t\treturn '';\n\t\t\treturn getValueForLoadedPhrase(category, phrase, params);\n\t\t});\n\t\tif (!categories[category])\n\t\t\tthis.loadCategory(category);\n\t\treturn val.value;\n\t}\n};\n\nexport default {\n\tinstall(app, options) {\n\t\tif (!app.config.globalProperties.$fhcApi)\n\t\t\tapp.use(OldFhcApi); // TODO(chris): remove at some point\n\t\tif (!app.config.globalProperties.$api)\n\t\t\tapp.use(PluginsApi);\n\t\tapp.config.globalProperties.$p = {\n\t\t\tt: phrasen.t,\n\t\t\tloadCategory: cat => phrasen.loadCategory.call(app, cat),\n\t\t\tsetLanguage: lang => phrasen.setLanguage.call(app, lang),\n\t\t\tuser_language: user_language,\n\t\t\tuser_locale,\n\t\t\tt_ref: phrasen.t_ref\n\t\t};\n\t\tapp.provide('$p', app.config.globalProperties.$p);\n\t}\n}","let theme_name = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.theme.name);\nconst theme_modes = FHC_JS_DATA_STORAGE_OBJECT.theme.modes;\n\nconst toggleTheme = (theme)=>{\n\tif (!theme) return;\n\n\tfor (const theme of theme_modes) {\n\t\tdocument.documentElement.classList.remove(theme);\n\t}\n\ttheme_name.value = theme;\n\tdocument.documentElement.classList.add(theme);\n\n\tdocument.body.setAttribute(\"data-bs-theme\", theme);\n\n\tlet stylesheet = document.querySelector('link[href*=\"primevue/resources/themes\"]');\n\tif (theme == \"dark\") {\n\t\tstylesheet.attributes.href.value = stylesheet.attributes.href.value.replace(\"bootstrap4-light-blue\", \"bootstrap4-dark-blue\");\n\t} else if (theme == \"light\") {\n\t\tstylesheet.attributes.href.value = stylesheet.attributes.href.value.replace(\"bootstrap4-dark-blue\", \"bootstrap4-light-blue\");\n\t}\n\telse{\n\t\tif (stylesheet.attributes.href.value.includes(\"bootstrap4-dark-blue\"))\n\t\t\tstylesheet.attributes.href.value = stylesheet.attributes.href.value.replace(\"bootstrap4-dark-blue\", \"bootstrap4-light-blue\");\n\t}\n\n\tlocalStorage.setItem(\"theme\", theme);\n}\n\nconst initializeTheme = ()=>{\n\t\n\tlet theme = localStorage.getItem(\"theme\");\n\tif (!theme || !theme_modes.includes(theme)) {\n\t\t// set the first theme mode as default\n\t\ttheme = theme_modes[0];\n\t\tlocalStorage.setItem(\"theme\",theme);\n\t}\n\ttoggleTheme(theme);\n}\n\n\nexport default {\n\tinstall: (app,options)=>{\n\t\t\n\t\tdocument.documentElement.classList.add(theme_name.value);\n\n\t\tinitializeTheme();\n\n\t\tapp.config.globalProperties.$theme = {\n\t\t\ttheme_name,\n\t\t\ttheme_modes,\n\t\t\tswitchTheme: (theme) => {\n\t\t\t\ttoggleTheme(theme);\n\t\t\t}, \n\t\t} \n\t}\n}","const rgbToHex = (value) => {\n\tconst hex = value.toString(16);\n\treturn hex.length === 1 ? '0' + hex : hex;\n};\n\nfunction getContrastYIQ(hexcolor) {\n\t\n\tvar r = parseInt(hexcolor.substring(1, 3), 16);\n\tvar g = parseInt(hexcolor.substring(3, 5), 16);\n\tvar b = parseInt(hexcolor.substring(5, 7), 16);\n\tvar yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;\n\treturn (yiq >= 128) ? 'black' : 'white';\n}\n\nexport default {\n\tmounted(element, binding){\n\t\tconst bgColor = window.getComputedStyle(element).backgroundColor;\n\t\tlet rgbRegEx = new RegExp(/^rgba?\\s*\\(([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,?\\s*([0-9]+.?[0-9]?)?\\s*\\)/);\n\t\tlet isRgb = bgColor.match(rgbRegEx);\n\t\tif (isRgb) {\n\t\t\tif (isRgb.length < 3) {\n\t\t\t\tconsole.error(\"Invalid RGB color format\");\n\t\t\t}\n\t\t\tlet r = parseInt(isRgb[1], 10);\n\t\t\tlet g = parseInt(isRgb[2], 10);\n\t\t\tlet b = parseInt(isRgb[3], 10);\n\t\t\tlet hexColor = `#${rgbToHex(r)}${rgbToHex(g)}${rgbToHex(b)}`;\n\t\t\telement.style.color = getContrastYIQ(hexColor);\n\t\t}\n\t\telse\n\t\t{\n\t\t\telement.style.color = getContrastYIQ(bgColor);\n\t\t}\n\t},\n}","/**\n * TODO(chris): This is only a prototype!!!\n */\n\nconst TYPE_DEFINITION = {\n\tlehreinheit: {\n\t\tid: \"lehreinheit_id\",\n\t\tdragIcon: \"fa-solid fa-chalkboard-user\",\n\t\textras: [\n\t\t\t\"stundenblockung\"\n\t\t]\n\t},\n\tvevent: {\n\t\tid: \"uid\",\n\t\tdragIcon: \"fa-solid fa-calendar\",\n\t\textras: [\n\t\t\t\"dtstart\",\n\t\t\t\"dtend\",\n\t\t\t\"summary\"\n\t\t]\n\t},\n\tperson: {\n\t\tid: \"person_id\",\n\t\tdragIcon: \"fa-solid fa-user\"\n\t},\n\tstudent: {\n\t\tid: \"student_uid\",\n\t\tdragIcon: \"fa-solid fa-user-graduate\"\n\t},\n\tprestudent: {\n\t\tid: \"prestudent_id\",\n\t\tdragIcon: \"fa-solid fa-user-graduate text-muted\"\n\t}\n\t// TODO: IMPLEMENT OTHER TYPES\n};\n\nconst VALID_TYPES = Object.keys(TYPE_DEFINITION);\n\nconst TYPE_CONSTANTS = Object.keys(TYPE_DEFINITION).reduce((res, type) => {\n\tres['TYPE_' + type.toUpperCase()] = type;\n\treturn res;\n}, {});\n\nfunction isValidDragObject(value) {\n\tif (!value)\n\t\treturn false;\n\tif (Array.isArray(value))\n\t\treturn value.every(isValidDragObject);\n\tif (!value.type)\n\t\treturn false;\n\n\tif (value.type.substr(-11) == '-collection') {\n\t\tif (!Object.prototype.hasOwnProperty.call(value, 'values'))\n\t\t\treturn false;\n\n\t\tif (!VALID_TYPES.includes(value.type.substr(0, value.type.length-11)))\n\t\t\treturn false;\n\t} else {\n\t\tif (!Object.prototype.hasOwnProperty.call(value, 'id'))\n\t\t\treturn false;\n\n\t\tif (!VALID_TYPES.includes(value.type))\n\t\t\treturn false;\n\n\t\tif (TYPE_DEFINITION[value.type].extras) {\n\t\t\tif (!TYPE_DEFINITION[value.type].extras.every(extra => Object.prototype.hasOwnProperty.call(value, extra)))\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nfunction getValidTransferData(event, allowedTypes, strict) {\n\tlet obj = null;\n\n\ttry {\n\t\tobj = getTransferData(event, strict);\n\t\tif (!obj)\n\t\t\treturn null;\n\n\t\tif (!strict && Array.isArray(obj)) {\n\t\t\tobj = obj.filter(isValidDragObject);\n\t\t\tif (!obj.length)\n\t\t\t\treturn null;\n\t\t} else if (!isValidDragObject(obj))\n\t\t\treturn null;\n\n\t\tif (allowedTypes && allowedTypes.length) {\n\t\t\tif (Array.isArray(obj)) {\n\t\t\t\tif (strict && !obj.every(v => allowedTypes.includes(v.type))) {\n\t\t\t\t\treturn null;\n\t\t\t\t} else if (!strict) {\n\t\t\t\t\tobj = obj.filter(v => allowedTypes.includes(v.type));\n\t\t\t\t\tif (!obj.length)\n\t\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t} else if (!allowedTypes.includes(obj.type)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t} catch(_error) {\n\t\treturn null;\n\t}\n\n\tif (Array.isArray(obj) && obj.length == 1)\n\t\treturn obj.find(Boolean);\n\n\treturn obj;\n}\n\nfunction isValidTransferData(event, allowedTypes, strict) {\n\treturn getValidTransferData(event, allowedTypes, strict) ? true : false;\n}\n\nfunction getTransferData(event, strict) {\n\tconst result = [];\n\n\tfor (const type of event.dataTransfer.types) {\n\t\tif (type.substr(0, 16) != 'application/fhc-') {\n\t\t\tif (strict)\n\t\t\t\treturn null;\n\t\t\tcontinue;\n\t\t}\n\t\tlet base_type = type.substr(16);\n\t\tlet collection = false;\n\t\tif (base_type.substr(-11) == '-collection') {\n\t\t\tbase_type = base_type.substr(0, base_type.length-11);\n\t\t\tcollection = true;\n\t\t}\n\t\tif (!VALID_TYPES.includes(base_type)) {\n\t\t\tif (strict)\n\t\t\t\treturn null;\n\t\t\tcontinue;\n\t\t}\n\t\tlet data = JSON.parse(event.dataTransfer.getData(type));\n\t\tif (collection)\n\t\t\tresult.push(...data.values);\n\t\telse\n\t\t\tresult.push(data);\n\t}\n\n\tif (!result.length)\n\t\treturn null;\n\n\tif (result.length == 1)\n\t\treturn result[0];\n\n\treturn result;\n}\n\nfunction convertToValidDragObject(data, strict) {\n\tif (Array.isArray(data)) {\n\t\tconst converted = data.map(convertToValidDragObject).filter(Boolean);\n\t\tif (!converted.length)\n\t\t\treturn undefined;\n\t\tif (strict && converted.length != data.length)\n\t\t\treturn undefined;\n\n\t\tconst sorted = converted.reduce((res, item) => {\n\t\t\tif (!res[item.type])\n\t\t\t\tres[item.type] = [];\n\t\t\tres[item.type].push(item);\n\t\t\treturn res;\n\t\t}, {});\n\n\t\treturn Object.entries(sorted).map(([type, values]) => {\n\t\t\tif (values.length > 1) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: type + '-collection',\n\t\t\t\t\tvalues\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn values[0];\n\t\t});\n\t}\n\n\tif (Object.prototype.hasOwnProperty.call(data, 'type') && isValidDragObject(data)) {\n\t\treturn data;\n\t}\n\n\tconst found = Object.entries(TYPE_DEFINITION).find(([ , typedef ]) => {\n\t\tif (!Object.prototype.hasOwnProperty.call(data, typedef.id))\n\t\t\treturn false;\n\t\tif (typedef.extras) {\n\t\t\tif (!typedef.extras.every(extra => Object.prototype.hasOwnProperty.call(data, extra)))\n\t\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t});\n\n\tif (!found) {\n\t\treturn undefined;\n\t}\n\n\tconst [ type, typedef ] = found;\n\n\tconst newData = {};\n\tnewData.type = type;\n\tnewData.id = data[typedef.id];\n\tif (typedef.extras)\n\t\ttypedef.extras.forEach(extra => newData[extra] = data[extra]);\n\n\treturn newData;\n}\n\nfunction setTransferData(event, validDragObject, setDragImage = false) {\n\tif (setDragImage) {\n\t\tconst dragItems = Array.isArray(validDragObject) ? validDragObject : [ validDragObject ];\n\t\tconst dragElements = dragItems.map(item => {\n\t\t\tconst icon = document.createElement('i');\n\t\t\tconst label = document.createElement('span');\n\t\t\tconst iconContainer = document.createElement('span');\n\n\t\t\ticonContainer.className = 'btn btn-outline-dark bg-light';\n\t\t\tlabel.className = 'small';\n\n\t\t\tif (TYPE_DEFINITION[item.type]) {\n\t\t\t\ticon.className = TYPE_DEFINITION[item.type].dragIcon || 'fa-solid fa-question';\n\t\t\t\tlabel.textContent = item.id;\n\t\t\t} else if (item.type.substr(-11) == '-collection' && TYPE_DEFINITION[item.type.substr(0, item.type.length-11)]) {\n\t\t\t\ticonContainer.style.boxShadow = '3px 3px var(--bs-btn-border-color)';\n\t\t\t\ticon.className = TYPE_DEFINITION[item.type.substr(0, item.type.length-11)].dragIcon || 'fa-solid fa-question';\n\t\t\t\tlabel.textContent = 'x' + item.values.length;\n\t\t\t} else {\n\t\t\t\ticon.className = 'fa-solid fa-question';\n\t\t\t\tlabel.textContent = item.id || '';\n\t\t\t}\n\t\t\t\n\t\t\ticonContainer.append(icon);\n\n\t\t\tconst itemContainer = document.createElement('div');\n\t\t\titemContainer.className = 'd-flex flex-column align-items-center gap-2 small';\n\t\t\titemContainer.append(iconContainer, label);\n\t\t\treturn itemContainer;\n\t\t});\n\n\t\tconst container = document.createElement('div');\n\t\tcontainer.className = 'd-flex flex-row gap-2 small';\n\t\tcontainer.append(...dragElements);\n\n\t\tdocument.body.append(container);\n\t\tevent.dataTransfer.setDragImage(container, -25, 0);\n\t\trequestAnimationFrame(() => {\n\t\t\tdocument.body.removeChild(container);\n\t\t});\n\t}\n\tif (Array.isArray(validDragObject)) {\n\t\treturn validDragObject.forEach(data => setTransferData(event, data));\n\t}\n\t\n\tevent.dataTransfer.setData('application/fhc-' + validDragObject.type, JSON.stringify(validDragObject));\n}\n\n/**\n * check if the dataTransfer types are in the allowed types array\n * if strict is disabled at least one type must be the allowed array\n * otherwise all types have to be in the allowed array\n *\n * @param Event\t\tevent\n * @param Array\t\tallowedTypes\n * @param Boolean\tstrict\n */\nfunction eventHasTypes(event, allowedTypes, strict) {\n\tif (!allowedTypes || !allowedTypes.length)\n\t\tallowedTypes = VALID_TYPES;\n\tallowedTypes = allowedTypes.map(type => 'application/fhc-' + type);\n\n\tconst dataTypes = [...event.dataTransfer.types];\n\t\n\t// NOTE(chris): if dragging across browsers the dataTransfer object is\n\t// set to a default one without data. Since we do not support dragging\n\t// across browsers (yet) we return false which will disallow dropping.\n\tif (!dataTypes.length)\n\t\treturn false;\n\t\n\tif (!strict)\n\t\treturn allowedTypes.some(type => [...event.dataTransfer.types].includes(type));\n\t\n\treturn [...event.dataTransfer.types].every(type => allowedTypes.includes(type));\n}\n\nfunction bindDragEnterLeave(el, onEnter, onLeave) {\n\t// NOTE(chris): add save dragenter and dragleave events\n\t// that won't fire when hovering over child elements\n\n\tlet skipLeave = false;\n\tlet skipLeaveParent = true;\n\n\tfunction init(evt) {\n\t\tskipLeave = false;\n\t\tskipLeaveParent = true;\n\t\t// add global listeners\n\t\twindow.addEventListener('dragenter', globalDragenter, true);\n\t\twindow.addEventListener('dragleave', globalDragleave, true);\n\t\twindow.addEventListener('drop', globalDrop, true);\n\t\t// call enter\n\t\tonEnter(evt);\n\t\t// remove self\n\t\tel.removeEventListener('dragenter', init);\n\t}\n\n\tfunction cleanup(evt, wasDropped) {\n\t\t// remove global listeners\n\t\twindow.removeEventListener('dragenter', globalDragenter, true);\n\t\twindow.removeEventListener('dragleave', globalDragleave, true);\n\t\twindow.removeEventListener('drop', globalDrop, true);\n\t\t// call leave\n\t\tonLeave(evt, wasDropped);\n\t\t// add init\n\t\tel.addEventListener('dragenter', init);\n\t}\n\n\tfunction globalDragenter(evt) {\n\t\tskipLeaveParent = false;\n\t\tif (el != evt.target && !el.contains(evt.target)) {\n\t\t\tcleanup(evt);\n\t\t} else {\n\t\t\tskipLeave = true;\n\t\t}\n\t}\n\tfunction globalDragleave(evt) {\n\t\tif (el != evt.target && !el.contains(evt.target)) {\n\t\t\tif (skipLeaveParent) {\n\t\t\t\tskipLeaveParent = false;\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\tif (skipLeave) {\n\t\t\t\tskipLeave = false;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tcleanup(evt);\n\t}\n\tfunction globalDrop(evt) {\n\t\tcleanup(evt, true);\n\t}\n\n\tel.addEventListener('dragenter', init);\n\n\treturn () => {\n\t\t// cleanup\n\t\tel.removeEventListener('dragenter', init);\n\t}\n}\n\nexport {\n\tisValidDragObject,\n\tgetValidTransferData,\n\tisValidTransferData,\n\tgetTransferData,\n\tconvertToValidDragObject,\n\tsetTransferData,\n\teventHasTypes,\n\tbindDragEnterLeave\n};\nexport default {\n\t...TYPE_CONSTANTS,\n\tisValidDragObject,\n\tgetValidTransferData,\n\tisValidTransferData,\n\tgetTransferData,\n\tconvertToValidDragObject,\n\tsetTransferData,\n\teventHasTypes,\n\tbindDragEnterLeave\n};\n","/**\n * TODO(chris): This needs serious rework!!!\n */\nexport default {\n\tmounted(el, binding, vnode) {\n\t\tif (binding.arg == 'draggable') {\n\t\t\tel.addEventListener('update-my-value', evt => {\n\t\t\t\tevt.preventDefault();\n\t\t\t\tbinding.value = evt.detail.item;\n\t\t\t});\n\t\t\tel.addEventListener('dragstart', evt => {\n\t\t\t\tel.dispatchEvent(new CustomEvent('calendar-dragstart', {\n\t\t\t\t\tcancelable: true,\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\titem: binding.value,\n\t\t\t\t\t\tx: evt.offsetX / el.offsetWidth,\n\t\t\t\t\t\ty: evt.offsetY / el.offsetHeight,\n\t\t\t\t\t\toriginalEvent: evt\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t});\n\t\t\tel.addEventListener('dragend', evt => {\n\t\t\t\tel.dispatchEvent(new CustomEvent('calendar-dragend', {\n\t\t\t\t\tcancelable: true,\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\titem: binding.value,\n\t\t\t\t\t\toriginalEvent: evt\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t});\n\t\t} else if (binding.arg == 'dropcage') {\n\t\t\tlet hitbox = null;\n\t\t\tel.addEventListener('dragover', evt => {\n\t\t\t\tif (hitbox)\n\t\t\t\t\treturn;\n\t\t\t\thitbox = el.getBoundingClientRect();\n\t\t\t\treturn el.dispatchEvent(new CustomEvent('calendar-dragenter', {\n\t\t\t\t\tdetail: { originalEvent: evt }\n\t\t\t\t}));\n\t\t\t});\n\t\t\twindow.addEventListener('dragleave', evt => {\n\t\t\t\tif (!hitbox)\n\t\t\t\t\treturn;\n\t\t\t\tlet pos;\n\t\t\t\tif (typeof evt.clientX === 'undefined')\n\t\t\t\t\tpos = {\n\t\t\t\t\t\tx: evt.pageX + document.documentElement.scrollLeft,\n\t\t\t\t\t\ty: evt.pageY + document.documentElement.scrollTop\n\t\t\t\t\t};\n\t\t\t\telse\n\t\t\t\t\tpos = {\n\t\t\t\t\t\tx: evt.clientX + document.body.scrollLeft + document.documentElement.scrollLeft,\n\t\t\t\t\t\ty: evt.clientY + document.body.scrollTop + document.documentElement.scrollTop\n\t\t\t\t\t};\n\t\t\t\tif (pos.x > hitbox.left + hitbox.width - 1 || pos.x < hitbox.left || pos.y > hitbox.top + hitbox.height - 1 || pos.y < hitbox.top) {\n\t\t\t\t\thitbox = null;\n\t\t\t\t\treturn el.dispatchEvent(new CustomEvent('calendar-dragleave', {\n\t\t\t\t\t\tdetail: { originalEvent: evt }\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t});\n\t\t\twindow.addEventListener('drop', evt => {\n\t\t\t\tif (!hitbox)\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\thitbox = null;\n\t\t\t\treturn el.dispatchEvent(new CustomEvent('calendar-dragleave', {\n\t\t\t\t\tdetail: { originalEvent: evt }\n\t\t\t\t}));\n\t\t\t});\n\t\t} else if (binding.arg == 'dropzone') {\n\t\t\tel.addEventListener(\n\t\t\t\tbinding.modifiers.once ? 'dragenter' : 'dragover',\n\t\t\t\tevt => {\n\t\t\t\t\tconst timestamp = binding.value instanceof Function\n\t\t\t\t\t\t? binding.value(evt)\n\t\t\t\t\t\t: binding.value;\n\t\t\t\t\tconst detail = timestamp.timestamp ? timestamp : { timestamp };\n\t\t\t\t\tel.dispatchEvent(new CustomEvent('calendar-dragchange', {\n\t\t\t\t\t\tcancelable: true,\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tdetail\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t},\n\tupdated(el, binding, vnode, prevVnode) {\n\t\tif (binding.arg == 'draggable') {\n\t\t\tel.dispatchEvent(new CustomEvent('update-my-value', {\n\t\t\t\tcancelable: true,\n\t\t\t\tdetail: {\n\t\t\t\t\titem: binding.value\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\t}\n}","import DragAndDrop from '../../../helpers/DragAndDrop.js';\n\nimport CalDnd from '../../../directives/Calendar/DragAndDrop.js';\n\n/**\n * TODO(chris): this needs serious rework!\n */\n\nexport default {\n\tname: \"CalendarDragAndDrop\",\n\tdirectives: {\n\t\tCalDnd\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tevents: Vue.computed(() => this.correctedEvents),\n\t\t\tbackgrounds: Vue.computed(() => this.backgrounds),\n\t\t\tdropAllowed: Vue.computed(() => this.dragging && this.dropAllowed)\n\t\t};\n\t},\n\tinject: {\n\t\tmode: \"mode\",\n\t\tdropableEvents: \"dropableEvents\"\n\t},\n\tprops: {\n\t\tevents: Array,\n\t\tbackgrounds: Array\n\t},\n\temits: [\n\t\t\"drop\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tdragging: false,\n\t\t\tallowed: false,\n\t\t\tdraggedInternalEvent: null,\n\t\t\tdraggedExternalEvent: null,\n\t\t\ttargetTimestamp: 0,\n\t\t\ttargetGridEnds: null,\n\t\t\tdropAllowed: false,\n\n\t\t\tshadowPreview: false // TODO(chris): IMPLEMENT! (use background instead of event as preview)\n\t\t};\n\t},\n\tcomputed: {\n\t\tcorrectedEvents() {\n\t\t\tif (this.dragging) {\n\t\t\t\tif (this.draggedInternalEvent) {\n\t\t\t\t\tconst index = this.events.findIndex(e => e.id == this.draggedInternalEvent.id);\n\t\t\t\t\tif (this.previewEvent && !this.shadowPreview)\n\t\t\t\t\t\treturn this.events.toSpliced(index, 1, this.previewEvent);\n\t\t\t\t\telse\n\t\t\t\t\t\treturn this.events.toSpliced(index, 1);\n\t\t\t\t}\n\t\t\t\tif (this.previewEvent && !this.shadowPreview)\n\t\t\t\t\treturn [...this.events, this.previewEvent];\n\t\t\t}\n\n\t\t\treturn this.events;\n\t\t},\n\t\tcorrectedBackgrounds() {\n\t\t\tif (this.dragging) {\n\t\t\t\tif (this.shadowPreview) {\n\t\t\t\t\t// TODO(chris): how to get the length\n\t\t\t\t\treturn [...this.backgrounds, {\n\t\t\t\t\t\tstart: new Date(this.targetTimestamp),\n\t\t\t\t\t\tclass: 'shadow-preview'\n\t\t\t\t\t}];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.backgrounds;\n\t\t},\n\t\tpreviewEvent() {\n\t\t\tif (!this.dragging || !this.dropAllowed)\n\t\t\t\treturn null;\n\t\t\tif (!this.targetTimestamp)\n\t\t\t\treturn null;\n\n\t\t\tconst event = this.draggedInternalEvent || this.draggedExternalEvent;\n\n\t\t\tif (!event)\n\t\t\t\treturn null;\n\t\t\t\n\t\t\t// TODO(chris): calculate length correctly from orig\n\t\t\tlet length = event.end - event.start;\n\t\t\tif (this.targetGridEnds)\n\t\t\t\tlength = this.targetGridEnds.find(end => end >= this.targetTimestamp + length) - this.targetTimestamp;\n\t\t\t\n\t\t\treturn {\n\t\t\t\torig: event.orig,\n\t\t\t\tstart: this.targetTimestamp,\n\t\t\t\tend: this.targetTimestamp + length\n\t\t\t};\n\t\t}\n\t},\n\tmethods: {\n\t\tonDragstart(evt) {\n\t\t\tconst data = DragAndDrop.convertToTransferData(evt.detail.item.orig);\n\t\t\tif (DragAndDrop.isValidDragObject(data)) {\n\t\t\t\tDragAndDrop.setTransferData(evt.detail.originalEvent, data);\n\t\t\t\tthis.draggedInternalEvent = evt.detail.item;\n\t\t\t}\n\t\t},\n\t\tonDragend() {\n\t\t\tthis.draggedInternalEvent = null;\n\t\t\tthis.dragging = false;\n\t\t},\n\t\tonDragenter(evt) {\n\t\t\tthis.dragging = true;\n\n\t\t\tif (!this.draggedInternalEvent) {\n\t\t\t\tconst event = DragAndDrop.getValidTransferData(evt.detail.originalEvent);\n\t\t\t\tif (event) {\n\t\t\t\t\tthis.draggedExternalEvent = {\n\t\t\t\t\t\tid: event.id,\n\t\t\t\t\t\ttype: event.type,\n\t\t\t\t\t\tstart: event.isostart\n\t\t\t\t\t\t\t? luxon.DateTime.fromISO(event.isostart).setZone(this.timezone)\n\t\t\t\t\t\t\t: luxon.DateTime.local().setZone(this.timezone),\n\t\t\t\t\t\tend: event.isoend\n\t\t\t\t\t\t\t? luxon.DateTime.fromISO(event.isoend).setZone(this.timezone)\n\t\t\t\t\t\t\t: luxon.DateTime.local().setZone(this.timezone),\n\t\t\t\t\t\torig: event\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tthis.draggedExternalEvent = null;\n\t\t\t\t}\n\t\t\t\tthis.dropAllowed = this.dropableEvents(event, this.mode);\n\t\t\t} else {\n\t\t\t\tthis.dropAllowed = this.dropableEvents(this.draggedInternalEvent, this.mode);\n\t\t\t}\n\t\t},\n\t\tonDragleave() {\n\t\t\tthis.dragging = false;\n\t\t},\n\t\tonDragchange(evt) {\n\t\t\tthis.targetTimestamp = evt.detail.timestamp;\n\t\t\t\n\t\t\tthis.targetGridEnds = evt.detail.ends || null;\n\t\t},\n\t\tonDrop(evt) {\n\t\t\tif (!this.dragging || !this.dropAllowed)\n\t\t\t\treturn;\n\n\t\t\tthis.$emit('drop', evt, this.previewEvent.start, this.previewEvent.end);\n\t\t\tthis.dropAllowed = false;\n\t\t\tthis.dragging = false;\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\n\t`\n}\n","/**\n * TODO(chris): use click-directive\n */\nimport DatePicker from './Header/Datepicker.js';\n\nexport default {\n\tname: \"CalendarHeader\",\n\tcomponents: {\n\t\tDatePicker\n\t},\n\tprops: {\n\t\tdate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tmode: {\n\t\t\ttype: String,\n\t\t\trequired: true\n\t\t},\n\t\tmodeOptions: {\n\t\t\ttype: Object,\n\t\t\tdefault: {}\n\t\t},\n\t\tbtnMonth: Boolean,\n\t\tbtnWeek: Boolean,\n\t\tbtnDay: Boolean,\n\t\tbtnList: Boolean\n\t},\n\temits: [\n\t\t\"next\",\n\t\t\"prev\",\n\t\t\"click:mode\",\n\t\t\"update:date\",\n\t\t\"update:mode\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\topen: false\n\t\t};\n\t},\n\tmethods: {\n\t\tclickMode(evt, mode) {\n\t\t\tthis.$emit('click:mode', evt);\n\t\t\tif (!evt.defaultPrevented)\n\t\t\t\tthis.$emit('update:mode', mode);\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t
    \n\t`\n}\n","// TODO(chris): translate aria-labels\n\nexport default {\n\tname: \"CalendarHeaderDatepicker\",\n\tcomponents: {\n\t\tVueDatePicker\n\t},\n\tinject: [\n\t\t\"locale\",\n\t\t\"timezone\"\n\t],\n\tprops: {\n\t\tdate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tmode: {\n\t\t\ttype: String,\n\t\t\trequired: true\n\t\t},\n\t\tlistLength: {\n\t\t\ttype: Number,\n\t\t\tdefault: 7\n\t\t}\n\t},\n\temits: [\n\t\t\"update:date\"\n\t],\n\tcomputed: {\n\t\tconvertedDate() {\n\t\t\t// convert to target TZ then strip TZ Information\n\t\t\t// so the datepicker can work with local times\n\t\t\treturn this.date.setZone(this.timezone).setZone('local', { keepLocalTime: true });\n\t\t},\n\t\tcurrent() {\n\t\t\tswitch (this.mode) {\n\t\t\tcase \"month\":\n\t\t\t\treturn {month: this.convertedDate.month-1, year: this.convertedDate.year};\n\t\t\tcase \"list\":\n\t\t\t\treturn [this.convertedDate.startOf('day').ts, this.convertedDate.startOf('day').plus({ days: this.listLength }).ts - 1];\n\t\t\tcase \"week\":\n\t\t\t\treturn [this.convertedDate.startOf('week', { useLocaleWeeks: true }).ts, this.convertedDate.endOf('week', { useLocaleWeeks: true }).ts];\n\t\t\tcase \"day\":\n\t\t\t\treturn this.convertedDate;\n\t\t\tdefault:\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t\ttitle() {\n\t\t\tswitch (this.mode) {\n\t\t\tcase \"month\":\n\t\t\t\treturn this.date.toLocaleString({ month: 'long', year: 'numeric' });\n\t\t\tcase \"week\":\n\t\t\t\tvar year = this.date.localWeekYear;\n\t\t\t\tvar week = this.date.toFormat('nn');\n\t\t\t\treturn this.$p.t('calendar/year_kw', { year, week });\n\t\t\tcase \"list\":\n\t\t\t\treturn this.date.toLocaleString(luxon.DateTime.DATE_FULL) + '-' + this.date.plus({ days: this.listLength - 1 }).toLocaleString(luxon.DateTime.DATE_FULL);\n\t\t\tcase \"day\":\n\t\t\t\treturn this.date.toLocaleString(luxon.DateTime.DATE_FULL);\n\t\t\tdefault:\n\t\t\t\treturn 'View not Supported';\n\t\t\t}\n\t\t},\n\t\tweekStart() {\n\t\t\treturn luxon.Info.getStartOfWeek(this.date)%7;\n\t\t}\n\t},\n\tmethods: {\n\t\tupdate(value) {\n\t\t\tlet date;\n\t\t\tswitch (this.mode) {\n\t\t\tcase \"month\":\n\t\t\t\tvalue.month++;\n\t\t\t\tdate = luxon.DateTime.fromObject(value).setZone(this.timezone, { keepLocalTime: true }).setLocale(this.locale);\n\t\t\t\tbreak;\n\t\t\tcase \"list\":\n\t\t\tcase \"week\":\n\t\t\t\tdate = luxon.DateTime.fromJSDate(value[0]).setZone(this.timezone, { keepLocalTime: true }).setLocale(this.locale);\n\t\t\t\tbreak;\n\t\t\tcase \"day\":\n\t\t\t\tdate = luxon.DateTime.fromJSDate(value).setZone(this.timezone, { keepLocalTime: true }).setLocale(this.locale);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn; // Don't update if the value is invalid!\n\t\t\t}\n\t\t\tthis.$emit(\"update:date\", date);\n\t\t},\n\t\tweekNumbers(date) {\n\t\t\treturn luxon.DateTime.fromJSDate(date, { locale: this.locale }).localWeekNumber;\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t title\"\n\t\t:month-picker=\"mode == 'month'\"\n\t\t:week-picker=\"mode == 'week'\"\n\t\t:range=\"mode == 'list' ? { autoRange: listLength - 1 } : false\"\n\t\t:text-input=\"mode == 'day'\"\n\t\t:week-start=\"weekStart\"\n\t\t:week-numbers=\"{ type: weekNumbers }\"\n\t\t:clearable=\"false\"\n\t\t:enable-time-picker=\"false\"\n\t\t:config=\"{ keepActionRow: mode != 'month' }\"\n\t\t:action-row=\"{ showSelect: false, showCancel: false, showNow: mode != 'month', showPreview: false }\"\n\t\tauto-apply\n\t\tsix-weeks\n\t\tteleport\n\t\t:locale=\"locale\"\n\t\t:now-button-label=\"$p.t('calendar/today')\"\n\t\t:week-num-name=\"$p.t('calendar/kw')\"\n\t/>\n\t`\n}\n","export default {\n\tname: 'CalendarSlider',\n\tinject: {\n\t\ttime: {\n\t\t\tfrom: \"sliderTime\",\n\t\t\tdefault: \".3s\"\n\t\t}\n\t},\n\temits: [\n\t\t'slid'\n\t],\n\tdata() {\n\t\treturn {\n\t\t\ttarget: 0,\n\t\t\textrasAfter: 0,\n\t\t\textrasBefore: 0,\n\t\t\trunning: false,\n\t\t\tpromiseResolve: null\n\t\t}\n\t},\n\tcomputed: {\n\t\titemsAfter() {\n\t\t\treturn [...Array(this.extrasAfter)].map((i, k) => 1+k);\n\t\t},\n\t\titemsBefore() {\n\t\t\treturn [...Array(this.extrasBefore)].map((i, k) => k-this.extrasBefore);\n\t\t},\n\t\tstyleSlider() {\n\t\t\tconst style = {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\twidth: '100%',\n\t\t\t\theight: '100%'\n\t\t\t};\n\t\t\tif (this.running) {\n\t\t\t\tstyle.left = (-this.target * 100) + '%';\n\t\t\t\tstyle.transition = 'left ' + this.time + ' ease-in-out';\n\t\t\t}\n\t\t\treturn style;\n\t\t},\n\t\tstyleBefore() {\n\t\t\treturn {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: 0,\n\t\t\t\theight: '100%',\n\t\t\t\tdisplay: 'flex',\n\t\t\t\tright: '100%',\n\t\t\t\twidth: (this.extrasBefore * 100) + '%'\n\t\t\t};\n\t\t},\n\t\tstyleAfter() {\n\t\t\treturn {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: 0,\n\t\t\t\theight: '100%',\n\t\t\t\tdisplay: 'flex',\n\t\t\t\tleft: '100%',\n\t\t\t\twidth: (this.extrasAfter * 100) + '%'\n\t\t\t};\n\t\t}\n\t},\n\tmethods: {\n\t\tprevPage() {\n\t\t\treturn this.slidePages(-1);\n\t\t},\n\t\tnextPage() {\n\t\t\treturn this.slidePages(1);\n\t\t},\n\t\tslidePages(dir) {\n\t\t\treturn new Promise(resolve => {\n\t\t\t\tthis.promiseResolve = resolve;\n\t\t\t\tthis.running = true;\n\t\t\t\tconst newTarget = this.target + dir;\n\t\t\t\tif (newTarget > 0) {\n\t\t\t\t\tif (this.extrasAfter < newTarget)\n\t\t\t\t\t\tthis.extrasAfter = newTarget;\n\t\t\t\t} else if (newTarget < 0) {\n\t\t\t\t\tif (-this.extrasBefore > newTarget)\n\t\t\t\t\t\tthis.extrasBefore = -newTarget;\n\t\t\t\t}\n\t\t\t\tthis.target = newTarget;\n\t\t\t});\n\t\t},\n\t\tendSlide() {\n\t\t\tif (this.promiseResolve) {\n\t\t\t\tthis.promiseResolve(this.target);\n\t\t\t\tthis.promiseResolve = null;\n\t\t\t}\n\t\t\tthis.$emit('slid', this.target);\n\t\t\tthis.running = false;\n\t\t\tthis.target = 0;\n\t\t\tthis.extrasAfter = this.extrasBefore = 0;\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\n\t\n\t`\n}\n","const clickListeners = [];\n\nfunction saveAddClickListener(el, source, value) {\n\tconst index = clickListeners.findIndex(data => data.el == el);\n\tif (index >= 0) {\n\t\tel.removeEventListener('click', clickListeners[index].listener);\n\t\tclickListeners.splice(index, 1);\n\t}\n\tconst listener = evt => {\n\t\tevt.preventDefault();\n\t\tevt.stopPropagation();\n\t\tconst customEvent = new CustomEvent('cal-click', {\n\t\t\tcancelable: true,\n\t\t\tbubbles: true,\n\t\t\tdetail: { source, value }\n\t\t});\n\t\tevt.target.dispatchEvent(customEvent);\n\t}\n\tclickListeners.push({el, listener});\n\tel.addEventListener('click', listener);\n}\n\nexport default {\n\tmounted(el, binding, vnode) {\n\t\tif (binding.arg == 'container') {\n\t\t\tel.addEventListener('cal-click', evt => {\n\t\t\t\tconst customEvent = new Event('click:' + evt.detail.source, {\n\t\t\t\t\tcancelable: true\n\t\t\t\t});\n\t\t\t\tbinding.instance.$emit('click:' + evt.detail.source, customEvent, evt.detail.value);\n\t\t\t\tif (!customEvent.defaultPrevented) {\n\t\t\t\t\tconst finalEvent = new CustomEvent('cal-click-default', {\n\t\t\t\t\t\tcancelable: true,\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tdetail: evt.detail\n\t\t\t\t\t});\n\t\t\t\t\tevt.target.dispatchEvent(finalEvent);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsaveAddClickListener(el, binding.arg, binding.value);\n\t\t}\n\t},\n\tupdated(el, binding, vnode, prevVnode) {\n\t\tif (binding.arg != 'container') {\n\t\t\tsaveAddClickListener(el, binding.arg, binding.value);\n\t\t}\n\t}\n}","import BaseDraganddrop from './Base/DragAndDrop.js';\nimport BaseHeader from './Base/Header.js';\nimport BaseSlider from './Base/Slider.js';\nimport BsModal from '../Bootstrap/Modal.js';\n\nimport CalClick from '../../directives/Calendar/Click.js';\n\nexport default {\n\tname: \"CalendarBase\",\n\tcomponents: {\n\t\tBaseDraganddrop,\n\t\tBaseHeader,\n\t\tBaseSlider,\n\t\tBsModal\n\t},\n\tdirectives: {\n\t\tCalClick\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tlocale: Vue.computed(() => this.locale),\n\t\t\ttimezone: Vue.computed(() => this.timezone),\n\t\t\ttimeGrid: Vue.computed(() => this.timeGrid),\n\t\t\tdraggableEvents: Vue.computed(() => {\n\t\t\t\tif (!this.draggableEvents)\n\t\t\t\t\treturn () => false;\n\n\t\t\t\tif (Array.isArray(this.draggableEvents))\n\t\t\t\t\treturn event => this.draggableEvents.includes(event.type);\n\t\t\t\tif (this.draggableEvents instanceof Function)\n\t\t\t\t\treturn this.draggableEvents;\n\t\t\t\t\n\t\t\t\treturn () => true;\n\t\t\t}),\n\t\t\tdropableEvents: Vue.computed(() => {\n\t\t\t\tif (!this.onDrop)\n\t\t\t\t\treturn () => false;\n\n\t\t\t\tif (Array.isArray(this.dropableEvents))\n\t\t\t\t\treturn item => this.dropableEvents.includes(item.type);\n\t\t\t\tif (this.dropableEvents instanceof Function)\n\t\t\t\t\treturn this.dropableEvents;\n\n\t\t\t\treturn () => true;\n\t\t\t}),\n\t\t\thasDragoverFunc: Vue.computed(() => this.onDragover),\n\t\t\tmode: Vue.computed(() => this.mode)\n\t\t};\n\t},\n\tprops: {\n\t\tlocale: {\n\t\t\ttype: String,\n\t\t\tdefault: 'de'\n\t\t},\n\t\ttimezone: {\n\t\t\ttype: String,\n\t\t\trequired: true\n\t\t},\n\t\tdate: {\n\t\t\ttype: [Date, String, Number, luxon.DateTime],\n\t\t\tdefault: props => luxon.DateTime.now().setZone(props.timezone).startOf('day')\n\t\t},\n\t\tmodes: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: {}\n\t\t\t// TODO(chris): verfication functions\n\t\t},\n\t\tmode: String,\n\t\tmodeOptions: Object,\n\t\tevents: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tbackgrounds: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tshowBtns: Boolean,\n\t\tbtnMonth: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: undefined\n\t\t},\n\t\tbtnWeek: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: undefined\n\t\t},\n\t\tbtnDay: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: undefined\n\t\t},\n\t\tbtnList: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: undefined\n\t\t},\n\t\ttimeGrid: Array,\n\t\tdraggableEvents: [Boolean, Array, Function],\n\t\tdropableEvents: [Boolean, Array, Function],\n\t\tonDragover: Function,\n\t\tonDrop: Function\n\t},\n\temits: [\n\t\t\"click:next\",\n\t\t\"click:prev\",\n\t\t\"click:mode\",\n\t\t\"click:event\",\n\t\t\"click:day\",\n\t\t\"click:week\",\n\t\t\"update:date\",\n\t\t\"update:mode\",\n\t\t\"update:range\",\n\t\t\"drop\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tinternalView: null,\n\t\t\tinternalDate: null,\n\t\t\tmodalEvent: null\n\t\t};\n\t},\n\tcomputed: {\n\t\tconvertedEvents() {\n\t\t\treturn this.events.map(orig => ({\n\t\t\t\tid: orig.type + orig[orig.type + '_id'],\n\t\t\t\ttype: orig.type,\n\t\t\t\tstart: luxon.DateTime.fromISO(orig.isostart).setZone(this.timezone),\n\t\t\t\tend: luxon.DateTime.fromISO(orig.isoend).setZone(this.timezone),\n\t\t\t\torig\n\t\t\t}));\n\t\t},\n\t\tconvertedBackgrounds() {\n\t\t\treturn this.backgrounds.map(bg => {\n\t\t\t\tconst res = { ...bg };\n\t\t\t\tif (res.start) {\n\t\t\t\t\tif (Number.isInteger(res.start))\n\t\t\t\t\t\tres.start = luxon.DateTime.fromMillis(res.start, { zone: this.timezone, locale: this.locale });\n\t\t\t\t\telse if (res.start instanceof Date)\n\t\t\t\t\t\tres.start = luxon.DateTime.fromJSDate(res.start, { zone: this.timezone, locale: this.locale });\n\t\t\t\t\telse if (typeof res.start === \n\t\t\t\t\t\t'string' || res.start instanceof String)\n\t\t\t\t\t\tres.start = luxon.DateTime.fromISO(res.start, { zone: this.timezone, locale: this.locale });\n\t\t\t\t}\n\t\t\t\tif (res.end) {\n\t\t\t\t\tif (Number.isInteger(res.end))\n\t\t\t\t\t\tres.end = luxon.DateTime.fromMillis(res.end, { zone: this.timezone, locale: this.locale });\n\t\t\t\t\telse if (res.end instanceof Date)\n\t\t\t\t\t\tres.end = luxon.DateTime.fromJSDate(res.end, { zone: this.timezone, locale: this.locale });\n\t\t\t\t\telse if (typeof res.end === \n\t\t\t\t\t\t'string' || res.end instanceof String)\n\t\t\t\t\t\tres.end = luxon.DateTime.fromISO(res.end, { zone: this.timezone, locale: this.locale });\n\t\t\t\t}\n\t\t\t\treturn res;\n\t\t\t});\n\t\t},\n\t\tsDate() {\n\t\t\tif (this.date instanceof luxon.DateTime)\n\t\t\t\treturn this.date;\n\t\t\treturn luxon.DateTime.fromJSDate(new Date(this.date)).setZone(this.timezone);\n\t\t},\n\t\tcDate: {\n\t\t\tget() {\n\t\t\t\tconst date = this.internalDate ? this.internalDate : this.sDate;\n\t\t\t\treturn date.setLocale(this.locale);\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tthis.internalDate = value;\n\t\t\t\tthis.$emit('update:date', value, this.cMode);\n\t\t\t}\n\t\t},\n\t\tsMode() {\n\t\t\t// choose default mode\n\t\t\tlet mode = this.mode;\n\t\t\tif (mode)\n\t\t\t\tmode = mode.toLowerCase();\n\t\t\tif (!mode || !this.modes[mode])\n\t\t\t\tmode = Object.keys(this.modes).find(Boolean); // start with first entry as active mode\n\t\t\treturn mode || '';\n\t\t},\n\t\tcMode: {\n\t\t\tget() {\n\t\t\t\treturn this.internalView ? this.internalView : this.sMode;\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tthis.internalView = value;\n\t\t\t\tthis.$emit('update:mode', value, this.cDate);\n\t\t\t}\n\t\t}\n\t},\n\twatch: {\n\t\tsDate(n, o) {\n\t\t\tif (this.sDate.isValid && !this.sDate.hasSame(this.internalDate, 'day'))\n\t\t\t\tthis.internalDate = this.sDate;\n\t\t},\n\t\tsMode() {\n\t\t\tif (this.sMode)\n\t\t\t\tthis.internalView = this.sMode;\n\t\t}\n\t},\n\tmethods: {\n\t\tclickPrev() {\n\t\t\tconst evt = new Event('click:prev', {cancelable: true});\n\t\t\tthis.$emit('click:prev', evt);\n\t\t\tif (evt.defaultPrevented)\n\t\t\t\treturn;\n\n\t\t\t// default: switch page\n\t\t\tthis.$refs.mode.prevPage();\n\t\t},\n\t\tclickNext() {\n\t\t\tconst evt = new Event('click:next', {cancelable: true});\n\t\t\tthis.$emit('click:next', evt);\n\t\t\tif (evt.defaultPrevented)\n\t\t\t\treturn;\n\n\t\t\t// default: switch page\n\t\t\tthis.$refs.mode.nextPage();\n\t\t},\n\t\thandleClickDefaults(evt) {\n\t\t\t// TODO(chris): implement\n\t\t\tswitch (evt.detail.source) {\n\t\t\tcase 'day':\n\t\t\t\tif (this.cMode != 'day' && this.modes['day']) {\n\t\t\t\t\tevt.stopPropagation();\n\t\t\t\t\tthis.cDate = evt.detail.value;\n\t\t\t\t\tthis.cMode = 'day';\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'week':\n\t\t\t\tif (this.cMode != 'week' && this.modes['week']) {\n\t\t\t\t\tevt.stopPropagation();\n\t\t\t\t\tthis.cDate = luxon.DateTime.fromObject({\n\t\t\t\t\t\tlocalWeekNumber: evt.detail.value.number,\n\t\t\t\t\t\tlocalWeekYear: evt.detail.value.year\n\t\t\t\t\t}, {\n\t\t\t\t\t\tzone: this.cDate.zoneName,\n\t\t\t\t\t\tlocale: this.cDate.locale\n\t\t\t\t\t});\n\t\t\t\t\tthis.cMode = 'week';\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tonDropItem(evt, start, end) {\n\t\t\tthis.$emit('drop', evt, start, end);\n\t\t},\n\t\tshowEventModal(eventObj) {\n\t\t\tthis.modalEvent = eventObj;\n\t\t\tthis.$refs.modal.show();\n\t\t},\n\t\thideEventModal() {\n\t\t\tif (this.modalEvent)\n\t\t\t\tthis.modalEvent.closeFn = undefined;\n\t\t\tthis.$refs.modal.hide();\n\t\t\tthis.modalEvent = null;\n\t\t},\n\t\tonModalHidden() {\n\t\t\tif (this.modalEvent.closeFn)\n\t\t\t\tthis.modalEvent.closeFn();\n\t\t}\n\t},\n\tbeforeUnmount() {\n\t\tthis.hideEventModal();\n\t},\n\ttemplate: /* html */`\n\t
    \n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    \n\t`\n}\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetRoomInfo(ort_kurzbz, start_date, end_date) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/LvPlan/getRoomplan',\n\t\t\tparams: { ort_kurzbz, start_date, end_date }\n\t\t};\n\t},\n\tgetLvPlan(start_date, end_date, lv_id) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/LvPlan/getLvPlan',\n\t\t\tparams: { start_date, end_date, lv_id }\n\t\t};\n\t},\n\teventsPersonal(start_date, end_date) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/lvPlan/eventsPersonal',\n\t\t\tparams: { start_date, end_date }\n\t\t};\n\t},\n\teventsLv(lv_id, start_date, end_date) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/lvPlan/eventsLv',\n\t\t\tparams: { lv_id, start_date, end_date }\n\t\t};\n\t},\n\tgetStunden() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/LvPlan/Stunden'\n\t\t};\n\t},\n\tgetOrtReservierungen(ort_kurzbz, start_date, end_date) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: `/api/frontend/v1/LvPlan/getReservierungen/${ort_kurzbz}`,\n\t\t\tparams: { start_date, end_date }\n\t\t};\n\t},\n\tgetLvPlanReservierungen(start_date, end_date) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/LvPlan/getReservierungen',\n\t\t\tparams: { start_date, end_date }\n\t\t};\n\t},\n\tgetLehreinheitStudiensemester(lehreinheit_id) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${lehreinheit_id}`\n\t\t};\n\t},\n\tstudiensemesterDateInterval(date) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/LvPlan/studiensemesterDateInterval/${date}`\n\t\t};\n\t},\n\tLvPlanEvents(start_date, end_date, lv_id) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/LvPlan/LvPlanEvents',\n\t\t\tparams: { \n\t\t\t\tstart_date: start_date, \n\t\t\t\tend_date: end_date, \n\t\t\t\tlv_id: lv_id \n\t\t\t}\n\t\t};\n\t},\n\tgetLv(lehrveranstaltung_id) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/LvPlan/getLv/' + lehrveranstaltung_id\n\t\t};\n\t}\n};","import CalDnd from '../../../../../directives/Calendar/DragAndDrop.js';\nimport CalClick from '../../../../../directives/Calendar/Click.js';\n\nexport default {\n\tname: \"GridLineEvent\",\n\tdirectives: {\n\t\tCalDnd,\n\t\tCalClick\n\t},\n\tinject: {\n\t\tdraggableEvents: \"draggableEvents\",\n\t\tmode: \"mode\"\n\t},\n\tprops: {\n\t\tevent: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn (value.start && value.end && value.orig);\n\t\t\t}\n\t\t}\n\t},\n\tcomputed: {\n\t\tisHeaderOrFooter() {\n\t\t\treturn ['header', 'footer'].includes(this.event.orig);\n\t\t},\n\t\tdraggable() {\n\t\t\treturn !this.isHeaderOrFooter && this.draggableEvents(this.event.orig, this.mode);\n\t\t},\n\t\tclasses() {\n\t\t\tconst classes = [];\n\t\t\tif (this.isHeaderOrFooter) {\n\t\t\t\tclasses.push('event-' + this.event.orig);\n\t\t\t} else {\n\t\t\t\tif (this.event.startsHere)\n\t\t\t\t\tclasses.push('event-begin');\n\t\t\t\tif (this.event.endsHere)\n\t\t\t\t\tclasses.push('event-end');\n\t\t\t}\n\t\t\treturn classes\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\t\t{{ event.orig }}\n\t\t\n\t\n\t`\n}\n","import GridLine from './Grid/Line.js';\nimport GridLineEvent from './Grid/Line/Event.js';\n\nimport CalDnd from '../../../directives/Calendar/DragAndDrop.js';\n\nexport default {\n\tname: \"CalendarGrid\",\n\tcomponents: {\n\t\tGridLine,\n\t\tGridLineEvent\n\t},\n\tdirectives: {\n\t\tCalDnd\n\t},\n\tinject: {\n\t\toriginalEvents: \"events\",\n\t\toriginalBackgrounds: \"backgrounds\",\n\t\tdropAllowed: \"dropAllowed\"\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tflipAxis: Vue.computed(() => this.flipAxis),\n\t\t\taxisRow: Vue.computed(() => this.axisRow)\n\t\t};\n\t},\n\tprops: {\n\t\taxisMain: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn value.every(item => item instanceof luxon.DateTime);\n\t\t\t}\n\t\t},\n\t\taxisParts: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn value.every(item =>\n\t\t\t\t\titem instanceof luxon.Duration\n\t\t\t\t\t|| Number.isInteger(item)\n\t\t\t\t\t|| (\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\titem.start instanceof luxon.Duration\n\t\t\t\t\t\t\t|| Number.isInteger(item.start)\n\t\t\t\t\t\t) && (\n\t\t\t\t\t\t\titem.end instanceof luxon.Duration\n\t\t\t\t\t\t\t|| Number.isInteger(item.end)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tflipAxis: Boolean,\n\t\tallDayEvents: Boolean,\n\t\taxisMainCollapsible: Boolean,\n\t\tsnapToGrid: Boolean\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tdragging: false,\n\t\t\tresizeObserver: null,\n\t\t\tmutationObserver: null,\n\t\t\tuserScroll: true\n\t\t};\n\t},\n\tcomputed: {\n\t\taxisRow() {\n\t\t\treturn this.flipAxis ? 'column' : 'row';\n\t\t},\n\t\taxisCol() {\n\t\t\treturn this.flipAxis ? 'row' : 'column';\n\t\t},\n\t\taxisPartsWithBreaks() {\n\t\t\treturn this.axisParts.reduce((res, tu, index) => {\n\t\t\t\tconst start = tu.start || tu;\n\t\t\t\tconst end = tu.end;\n\n\t\t\t\tif (res.length) {\n\t\t\t\t\tconst lastTuEnd = res.pop();\n\t\t\t\t\tif (Array.isArray(lastTuEnd)) {\n\t\t\t\t\t\tres.push({\n\t\t\t\t\t\t\tstart: lastTuEnd[0],\n\t\t\t\t\t\t\tend: start,\n\t\t\t\t\t\t\tindex: lastTuEnd[1]\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (lastTuEnd != start) {\n\t\t\t\t\t\t// add pause\n\t\t\t\t\t\tres.push({\n\t\t\t\t\t\t\tstart: lastTuEnd,\n\t\t\t\t\t\t\tend: start\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!end) {\n\t\t\t\t\tres.push([start, index]);\n\t\t\t\t} else {\n\t\t\t\t\tres.push({\n\t\t\t\t\t\tstart,\n\t\t\t\t\t\tend,\n\t\t\t\t\t\tindex\n\t\t\t\t\t});\n\t\t\t\t\tres.push(end);\n\t\t\t\t}\n\t\t\t\treturn res;\n\t\t\t}, []).slice(0, -1);\n\t\t},\n\t\taxisPartsSave() {\n\t\t\tif (!this.axisParts[this.axisParts.length - 1].end)\n\t\t\t\treturn this.axisParts.slice(0, -1);\n\t\t\treturn this.axisParts;\n\t\t},\n\t\tstart() {\n\t\t\treturn this.axisPartsWithBreaks[0].start;\n\t\t},\n\t\tend() {\n\t\t\treturn this.axisPartsWithBreaks[this.axisPartsWithBreaks.length - 1].end;\n\t\t},\n\t\tends() {\n\t\t\tconst ends = [];\n\t\t\tconst partsEnds = this.axisPartsWithBreaks\n\t\t\t\t.filter(p => p.index !== undefined)\n\t\t\t\t.map(p => p.end);\n\t\t\tfor (var date of this.axisMain)\n\t\t\t\tfor (var part of partsEnds)\n\t\t\t\t\tends.push(date.plus(part));\n\n\t\t\treturn ends;\n\t\t},\n\t\taxisMainBorders() {\n\t\t\treturn this.axisMain.reduce(\n\t\t\t\t(res, curr) => res.concat([curr.plus(this.start), curr.plus(this.end)]),\n\t\t\t\t[]\n\t\t\t);\n\t\t},\n\t\teventsAllDay() {\n\t\t\tif (!this.allDayEvents)\n\t\t\t\treturn [];\n\t\t\treturn this.mapIntoMainAxis(this.originalEvents.filter(event => event.orig.allDayEvent));\n\t\t},\n\t\teventsNormal() {\n\t\t\tif (!this.allDayEvents)\n\t\t\t\treturn this.events;\n\t\t\treturn this.mapIntoMainAxis(this.originalEvents.filter(event => !event.orig.allDayEvent));\n\t\t},\n\t\tevents() {\n\t\t\treturn this.mapIntoMainAxis(this.originalEvents);\n\t\t},\n\t\tbackgrounds() {\n\t\t\treturn this.mapIntoMainAxis(this.originalBackgrounds);\n\t\t},\n\t\thasValidEvents() {\n\t\t\treturn this.events.find(e => e.length);\n\t\t},\n\t\tstyleGridCols() {\n\t\t\tlet cols = 'repeat(' + this.axisMain.length + ', 1fr)';\n\t\t\tif (this.axisMainCollapsible) {\n\t\t\t\tif (this.hasValidEvents)\n\t\t\t\t\tcols = this.events\n\t\t\t\t\t\t.map(e => e.length\n\t\t\t\t\t\t\t? '1fr'\n\t\t\t\t\t\t\t: 'var(--fhc-calendar-axis-collapsible, .5fr)')\n\t\t\t\t\t\t.join(' ');\n\t\t\t}\n\t\t\treturn cols;\n\t\t},\n\t\tstyleGridRows() {\n\t\t\tconst gridlines = {};\n\n\t\t\tthis.axisPartsWithBreaks.forEach(part => {\n\t\t\t\tlet ts = part.start.toMillis();\n\t\t\t\tif (!gridlines[ts])\n\t\t\t\t\tgridlines[ts] = ['t_' + ts];\n\t\t\t\tif (part.index !== undefined)\n\t\t\t\t\tgridlines[ts].push('ps_' + part.index);\n\t\t\t\tts = part.end.toMillis();\n\t\t\t\tif (!gridlines[ts])\n\t\t\t\t\tgridlines[ts] = ['t_' + ts];\n\t\t\t\tif (part.index !== undefined)\n\t\t\t\t\tgridlines[ts].push('pe_' + part.index);\n\t\t\t});\n\n\t\t\tthis.eventsNormal.forEach((events, mainIndex) => {\n\t\t\t\tlet day = this.axisMain[mainIndex];\n\t\t\t\tevents.forEach(event => {\n\t\t\t\t\tif (!event.startsHere && !event.endsHere)\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tif (event.startsHere) {\n\t\t\t\t\t\tlet ts = event.start.diff(day).toMillis();\n\t\t\t\t\t\tif (!gridlines[ts])\n\t\t\t\t\t\t\tgridlines[ts] = ['t_' + ts, 'e_' + ts];\n\t\t\t\t\t}\n\t\t\t\t\tif (event.endsHere) {\n\t\t\t\t\t\tlet ts = event.end.diff(day).toMillis();\n\t\t\t\t\t\tif (!gridlines[ts])\n\t\t\t\t\t\t\tgridlines[ts] = ['t_' + ts, 'e_' + ts];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn Object.keys(gridlines).sort((a,b) => parseInt(a)-parseInt(b)).map((start, i, keys) => {\n\t\t\t\tlet end = keys[i + 1];\n\t\t\t\tif (!end) {\n\t\t\t\t\tgridlines[start].push('end');\n\t\t\t\t\treturn '[' + gridlines[start].join(' ') + ']';\n\t\t\t\t}\n\t\t\t\treturn '[' + gridlines[start].join(' ') + '] ' + (end - start) + 'fr';\n\t\t\t}).join(' ');\n\t\t}\n\t},\n\tmethods: {\n\t\tmapIntoMainAxis(target) {\n\t\t\tconst result = Array.from({length: this.axisMain.length}, () => Array());\n\n\t\t\ttarget.forEach(event => {\n\t\t\t\tconst start = event.start || this.axisMainBorders[0].plus(-1);\n\t\t\t\tconst end = event.end || this.axisMainBorders[this.axisMainBorders.length - 1].plus(1);\n\n\t\t\t\tfor (var i = 0; i < this.axisMain.length; i++) {\n\t\t\t\t\tlet laneStart = this.axisMainBorders[i * 2];\n\t\t\t\t\tlet laneEnd = this.axisMainBorders[i * 2 + 1];\n\t\t\t\t\tif (event.orig?.allDayEvent) {\n\t\t\t\t\t\tlaneStart = laneStart.startOf('day');\n\t\t\t\t\t\tlaneEnd = laneEnd.endOf('day');\n\t\t\t\t\t}\n\t\t\t\t\tif (start < laneEnd && end > laneStart) {\n\t\t\t\t\t\tconst startsHere = start >= laneStart;\n\t\t\t\t\t\tconst endsHere = end <= laneEnd;\n\t\t\t\t\t\tresult[i].push({\n\t\t\t\t\t\t\t...event,\n\t\t\t\t\t\t\tstartsHere,\n\t\t\t\t\t\t\tendsHere\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn result;\n\t\t},\n\n\t\t/* DRAG AND DROP */\n\t\tgetPageTop(el) {\n\t\t\tlet pageTop = el.offsetTop;\n\t\t\tif (el.offsetParent)\n\t\t\t\tpageTop += this.getPageTop(el.offsetParent);\n\t\t\treturn pageTop;\n\t\t},\n\t\tgetPageLeft(el) {\n\t\t\tlet pageLeft = el.offsetLeft;\n\t\t\tif (el.offsetParent)\n\t\t\t\tpageLeft += this.getPageLeft(el.offsetParent);\n\t\t\treturn pageLeft;\n\t\t},\n\t\tgetTimestampFromMouse(evt, dayTimestamp) {\n\t\t\tlet mouse, mouseFrac;\n\t\t\tif (this.flipAxis) {\n\t\t\t\tmouse = evt.pageX - this.getPageLeft(this.$refs.body) + this.$refs.main.scrollLeft;\n\t\t\t\tmouseFrac = mouse / this.$refs.body.offsetWidth;\n\t\t\t} else {\n\t\t\t\tmouse = evt.pageY - this.getPageTop(this.$refs.body) + this.$refs.main.scrollTop;\n\t\t\t\tmouseFrac = mouse / this.$refs.body.offsetHeight;\n\t\t\t}\n\n\t\t\treturn dayTimestamp + this.start + Math.floor((this.end - this.start) * mouseFrac);\n\t\t},\n\n\t\t/* SCROLLING */\n\t\tenableAutoScroll() {\n\t\t\tif (!this.resizeObserver)\n\t\t\t\tthis.resizeObserver = new ResizeObserver(this.scrollToEarliestEvent);\n\t\t\tthis.resizeObserver.observe(this.$refs.body);\n\n\t\t\tif (!this.mutationObserver)\n\t\t\t\tthis.mutationObserver = new MutationObserver(mutations => {\n\t\t\t\t\tif (mutations.some(m => m.addedNodes.length && [].some.call(m.addedNodes, el => el.matches && el.matches('.fhc-calendar-base-grid-line-event'))))\n\t\t\t\t\t\tthis.scrollToEarliestEvent();\n\t\t\t\t});\n\t\t\tthis.mutationObserver.observe(this.$refs.body, {\n\t\t\t\tsubtree: true,\n\t\t\t\tchildList: true\n\t\t\t});\n\n\t\t\tthis.scrollToEarliestEvent();\n\t\t},\n\t\tdisableAutoScroll() {\n\t\t\tif (this.resizeObserver)\n\t\t\t\tthis.resizeObserver.disconnect();\n\t\t\tthis.resizeObserver = null;\n\n\t\t\tif (this.mutationObserver)\n\t\t\t\tthis.mutationObserver.disconnect();\n\t\t\tthis.mutationObserver = null;\n\t\t},\n\t\tscrollToEarliestEvent() {\n\t\t\tconst eventElements = this.$refs.scroller.querySelectorAll('.fhc-calendar-base-grid-line-event');\n\n\t\t\tlet earliestEventOffset = [0, null];\n\t\t\tfor (var el of eventElements.values()) {\n\t\t\t\tconst top = el.offsetTop;\n\t\t\t\tif (!earliestEventOffset[1] || top < earliestEventOffset[0])\n\t\t\t\t\tearliestEventOffset = [top, el];\n\t\t\t}\n\n\t\t\tthis.userScroll = false;\n\t\t\tif (earliestEventOffset[1]) {\n\t\t\t\tearliestEventOffset[1].scrollIntoView({ behavior: \"smooth\" });\n\t\t\t} else {\n\t\t\t\tthis.$refs.scroller.scrollTo(0, 0);\n\t\t\t}\n\t\t}\n\t},\n\tbeforeUnmount() {\n\t\tthis.disableAutoScroll();\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t end > date))}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t`\n}\n","import LineEvent from './Line/Event.js';\nimport LineBackground from './Line/Background.js';\n\n/**\n * TODO(chris):\n * Event overflow for Month mode (more-button)\n */\n\nexport default {\n\tname: \"GridLine\",\n\tcomponents: {\n\t\tLineEvent,\n\t\tLineBackground\n\t},\n\tinject: {\n\t\taxisRow: \"axisRow\"\n\t},\n\tprops: {\n\t\tdate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tstart: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tend: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tevents: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tbackgrounds: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t}\n\t},\n\tcomputed: {\n\t\teventsWithRowInfo() {\n\t\t\tconst events = [];\n\t\t\tthis.events.forEach(event => {\n\t\t\t\tconst rows = [1, -1];\n\t\t\t\tif (event.startsHere) {\n\t\t\t\t\trows[0] = 't_' + event.start.diff(this.date).toMillis();\n\t\t\t\t}\n\t\t\t\tif (event.endsHere) {\n\t\t\t\t\trows[1] = 't_' + event.end.diff(this.date).toMillis();\n\t\t\t\t}\n\n\t\t\t\tevents.push({\n\t\t\t\t\t...event,\n\t\t\t\t\trows\n\t\t\t\t});\n\t\t\t});\n\t\t\treturn events;\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t`\n}\n","export default {\n\tname: \"GridLineBackground\",\n\tinject: {\n\t\tflipAxis: \"flipAxis\"\n\t},\n\tprops: {\n\t\tstart: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tend: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tbackground: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tvalidator(value) {\n\t\t\t\tif (!value.start && !value.end)\n\t\t\t\t\treturn false;\n\t\t\t\tif (value.start && !(value.start instanceof luxon.DateTime))\n\t\t\t\t\treturn false;\n\t\t\t\tif (value.end && !(value.end instanceof luxon.DateTime))\n\t\t\t\t\treturn false;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t},\n\tcomputed: {\n\t\tstyles() {\n\t\t\tif (!this.background.endsHere && !this.background.startsHere)\n\t\t\t\treturn this.background.style;\n\n\t\t\tconst perc = (this.end.ts - this.start.ts) / 100;\n\t\t\t\n\t\t\tlet border = {};\n\t\t\tif (this.background.startsHere)\n\t\t\t\tborder[this.flipAxis ? 'left' : 'top'] = (this.background.start.diff(this.start)) / perc + '%';\n\t\t\tif (this.background.endsHere)\n\t\t\t\tborder[this.flipAxis ? 'right' : 'bottom'] = (this.end.diff(this.background.end)) / perc + '%';\n\n\t\t\tif (!this.background.style)\n\t\t\t\treturn border;\n\t\t\t\n\t\t\treturn [this.background.style, border];\n\t\t},\n\t\tclasses() {\n\t\t\tif (!this.background.endsHere && !this.background.startsHere)\n\t\t\t\treturn this.background.class;\n\t\t\t\n\t\t\tconst result = [];\n\t\t\tif (this.background.class)\n\t\t\t\tresult.push(this.background.class);\n\t\t\tif (this.background.startsHere)\n\t\t\t\tresult.push('bg-begin');\n\t\t\tif (this.background.endsHere)\n\t\t\t\tresult.push('bg-end');\n\t\t\treturn result;\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t{{ background.label }}\n\t\n\t`\n}\n","import CalClick from '../../../../directives/Calendar/Click.js';\n\nexport default {\n\tname: \"LabelDay\",\n\tdirectives: {\n\t\tCalClick\n\t},\n\tprops: {\n\t\tdate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\tcomputed: {\n\t\ttitleFull() {\n\t\t\treturn this.date.toLocaleString({day: 'numeric', month: 'long', year: 'numeric'});\n\t\t},\n\t\ttitleLong() {\n\t\t\treturn this.date.toLocaleString({day: '2-digit', month: '2-digit', year: 'numeric'});\n\t\t},\n\t\ttitleShort() {\n\t\t\treturn this.date.toLocaleString({day: 'numeric', month: 'numeric'});\n\t\t},\n\t\ttitleNarrow() {\n\t\t\treturn this.date.toLocaleString({day: 'numeric'});\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t{{ titleFull }}\n\t\t{{ titleLong }}\n\t\t{{ titleShort }}\n\t\t{{ titleNarrow }}\n\t\n\t`\n}\n","import CalClick from '../../../../directives/Calendar/Click.js';\n\nexport default {\n\tname: \"LabelDow\",\n\tdirectives: {\n\t\tCalClick\n\t},\n\tprops: {\n\t\tdate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\tcomputed: {\n\t\ttitleLong() {\n\t\t\treturn this.date.toLocaleString({weekday: 'long'});\n\t\t},\n\t\ttitleShort() {\n\t\t\treturn this.date.toLocaleString({weekday: 'short'});\n\t\t},\n\t\ttitleNarrow() {\n\t\t\treturn this.date.toLocaleString({weekday: 'narrow'});\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t{{ titleLong }}\n\t\t{{ titleShort }}\n\t\t{{ titleNarrow }}\n\t\n\t`\n}\n","export default {\n\tname: \"LabelTime\",\n\tprops: {\n\t\tpart: {\n\t\t\ttype: [luxon.Duration, Number, Object],\n\t\t\trequired: true,\n\t\t\tvalidator(value) {\n\t\t\t\tif (value instanceof Object) {\n\t\t\t\t\tif (value instanceof luxon.Duration)\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tlet start_ok = true;\n\t\t\t\t\tlet end_ok = true;\n\t\t\t\t\tif (value.start) {\n\t\t\t\t\t\tstart_ok = (\n\t\t\t\t\t\t\tvalue.start instanceof luxon.Duration\n\t\t\t\t\t\t\t|| Number.isInteger(value.start)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (value.end) {\n\t\t\t\t\t\tend_ok = (\n\t\t\t\t\t\t\tvalue.end instanceof luxon.Duration\n\t\t\t\t\t\t\t|| Number.isInteger(value.end)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn start_ok && end_ok;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t},\n\tcomputed: {\n\t\tsanitizedTimestamps() {\n\t\t\treturn this.part.start || this.part.end ? this.part : { start: this.part };\n\t\t},\n\t\tstart() {\n\t\t\tif (!this.sanitizedTimestamps.start)\n\t\t\t\treturn null;\n\t\t\treturn this.formatTime(this.sanitizedTimestamps.start);\n\t\t},\n\t\tend() {\n\t\t\tif (!this.sanitizedTimestamps.end)\n\t\t\t\treturn null;\n\t\t\treturn this.formatTime(this.sanitizedTimestamps.end);\n\t\t}\n\t},\n\tmethods: {\n\t\tformatTime(date) {\n\t\t\treturn date.toISOTime({ suppressSeconds: true });\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t{{ start }}\n\t\t-\n\t\t{{ end }}\n\t
    \n\t`\n}\n","import CalendarGrid from '../../Base/Grid.js';\nimport LabelDay from '../../Base/Label/Day.js';\nimport LabelDow from '../../Base/Label/Dow.js';\nimport LabelTime from '../../Base/Label/Time.js';\n\nimport { useResizeObserver } from '../../../../composables/Responsive.js';\n\nexport default {\n\tname: \"DayView\",\n\tcomponents: {\n\t\tCalendarGrid,\n\t\tLabelDay,\n\t\tLabelDow,\n\t\tLabelTime\n\t},\n\tinject: {\n\t\ttimeGrid: \"timeGrid\",\n\t\toriginalEvents: \"events\",\n\t\ttimezone: \"timezone\"\n\t},\n\tprops: {\n\t\tday: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\temptyMessage: String,\n\t\temptyMessageDetails: String\n\t},\n\temits: [\n\t\t\"requestModalOpen\",\n\t\t\"requestModalClose\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tchosenEvent: null,\n\t\t\tgridMainRef: null\n\t\t};\n\t},\n\tcomputed: {\n\t\taxisMain() {\n\t\t\treturn [this.day.startOf('day')];\n\t\t},\n\t\taxisParts() {\n\t\t\tif (this.timeGrid) {\n\t\t\t\t// create {start, end} array\n\t\t\t\treturn this.timeGrid.map(tu => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstart: luxon.Duration.fromISOTime(tu.start),\n\t\t\t\t\t\tend: luxon.Duration.fromISOTime(tu.end)\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// create 07:00-23:00\n\t\t\t\treturn Array.from({ length: 17 }, (e, i) => luxon.Duration.fromObject({ hours: i + 7 }));\n\t\t\t}\n\t\t},\n\t\tevents() {\n\t\t\treturn this.originalEvents\n\t\t\t\t.filter(event => event.start < this.day.plus({ days: 1 }) && event.end > this.day)\n\t\t\t\t.sort((a, b) => a.start.ts - b.start.ts)\n\t\t\t\t.map(evt => evt.orig);\n\t\t},\n\t\tcurrentEvent() {\n\t\t\tif (this.chosenEvent) {\n\t\t\t\tif (this.events.find(e => e == this.chosenEvent))\n\t\t\t\t\treturn this.chosenEvent;\n\t\t\t}\n\t\t\tlet first = null;\n\t\t\tif (this.events)\n\t\t\t\tfirst = this.events.find(Boolean); // undefined => none found\n\n\t\t\tif (first && first.type == 'loading')\n\t\t\t\treturn null; // null => loading\n\n\t\t\treturn first;\n\t\t},\n\t\tisToday() {\n\t\t\treturn this.day.hasSame(luxon.DateTime.now().setZone(this.timezone), 'day');\n\t\t}\n\t},\n\twatch: {\n\t\tcompact() {\n\t\t\tif (this.compact) {\n\t\t\t\tif (this.chosenEvent) {\n\t\t\t\t\tthis.$emit('requestModalOpen', {\n\t\t\t\t\t\tevent: this.chosenEvent,\n\t\t\t\t\t\tcloseFn: () => { this.chosenEvent = null; }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.$emit('requestModalClose');\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\thandleClickDefaults(evt) {\n\t\t\tif (evt.detail.source == 'event') {\n\t\t\t\tthis.chosenEvent = evt.detail.value;\n\t\t\t\tif (this.compact) {\n\t\t\t\t\tthis.$emit('requestModalOpen', {\n\t\t\t\t\t\tevent: this.chosenEvent,\n\t\t\t\t\t\tcloseFn: () => { this.chosenEvent = null; }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tsetup() {\n\t\tconst container = Vue.ref(null); // use useTemplateRef when updating to Vue 3.5\n\t\tconst { compact } = useResizeObserver(container, 750);\n\n\t\treturn {\n\t\t\tcontainer, // must be exposed or it won't be set in Vue < 3.5\n\t\t\tcompact\n\t\t};\n\t},\n\tmounted() {\n\t\tthis.gridMainRef = this.$refs.grid.$refs.main;\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t{{ emptyMessage }}\n\t\t\t\n\t\t\n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\t

    {{ emptyMessageDetails }}

    \n\t\t\t\n\t\t\n\t\n\t`\n}\n","import BaseSlider from '../Base/Slider.js';\nimport DayView from './Day/View.js';\n\nexport default {\n\tname: \"ModeDay\",\n\tcomponents: {\n\t\tBaseSlider,\n\t\tDayView\n\t},\n\tprops: {\n\t\tcurrentDate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\temits: [\n\t\t\"update:currentDate\",\n\t\t\"update:range\",\n\t\t\"click\",\n\t\t\"requestModalOpen\",\n\t\t\"requestModalClose\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tfocusDate: this.currentDate,\n\t\t\trangeOffset: 0\n\t\t};\n\t},\n\tcomputed: {\n\t\trange() {\n\t\t\tlet first = this.focusDate.startOf('day');\n\t\t\tlet last = this.focusDate.endOf('day');\n\t\t\t\n\t\t\tif (this.rangeOffset != 0) {\n\t\t\t\tif (this.rangeOffset < 0) {\n\t\t\t\t\tfirst = first.plus({ days: this.rangeOffset });\n\t\t\t\t} else {\n\t\t\t\t\tlast = last.plus({ days: this.rangeOffset });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn luxon.Interval.fromDateTimes(first, last);\n\t\t}\n\t},\n\twatch: {\n\t\tcurrentDate() {\n\t\t\tif (this.currentDate.locale != this.focusDate.locale) {\n\t\t\t\tthis.focusDate = this.currentDate;\n\t\t\t\tthis.$emit('update:range', this.range);\n\t\t\t} else {\n\t\t\t\tthis.rangeOffset = this.currentDate.startOf('day').diff(this.focusDate.startOf('day'), 'days').days;\n\t\t\t\tif (this.rangeOffset) {\n\t\t\t\t\tthis.$refs.view.$refs.grid.disableAutoScroll();\n\t\t\t\t\tthis.$emit('update:range', this.range);\n\t\t\t\t\tthis.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\tprevPage() {\n\t\t\tthis.rangeOffset = this.$refs.slider.target - 1;\n\t\t\tthis.$refs.view.$refs.grid.disableAutoScroll();\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.slider.prevPage().then(this.updatePage);\n\t\t},\n\t\tnextPage() {\n\t\t\tthis.rangeOffset = this.$refs.slider.target + 1;\n\t\t\tthis.$refs.view.$refs.grid.disableAutoScroll();\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.slider.nextPage().then(this.updatePage);\n\t\t},\n\t\tupdatePage(days) {\n\t\t\tconst newFocusDate = this.focusDate.plus({ days });\n\t\t\tthis.focusDate = newFocusDate;\n\t\t\tthis.rangeOffset = 0;\n\t\t\tthis.$emit('update:currentDate', this.focusDate);\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.view.$refs.grid.enableAutoScroll();\n\t\t},\n\t\tviewAttrs(days) {\n\t\t\tconst day = this.focusDate.plus({ days });\n\t\t\treturn { ...this.$attrs, day };\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.$emit('update:range', this.range);\n\t\tthis.$refs.view.$refs.grid.enableAutoScroll();\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t`\n}\n","/**\n * size returns the key of smallest threshold array (integer converts to\n * { compact: threshold }) entry that is bigger than the current width of\n * the element or 'full' if none is found.\n * compact is true if the smallest threshold array entry is bigger than the\n * current width or false otherwise.\n *\n * @param DOMElement|VueTemplateRef\t\telement\n * @param object|array|integer\t\t\tthreshold\n * @return object\t\t\t\t\t\t{ compact:Boolean, size:String }\n */\nexport function useResizeObserver(element, threshold) {\n\t/* Result Vars */\n\tconst compact = Vue.ref(false);\n\tconst size = Vue.ref(false);\n\n\t/* Helper Vars */\n\tconst mounted = Vue.ref(false);\n\tconst elementRef = Vue.computed(() => {\n\t\tif (!Vue.isRef(element))\n\t\t\treturn element;\n\t\t\n\t\tif (!element.value)\n\t\t\treturn element.value;\n\t\t\n\t\tif (element.value.$el) // Maybe there is a better test\n\t\t\treturn element.value.$el;\n\n\t\treturn element.value;\n\t});\n\tconst compareArray = Vue.computed(() => {\n\t\tconst input = Vue.isRef(threshold) ? threshold.value : threshold;\n\t\tif (Number.isInteger(input))\n\t\t\treturn [['compact', input]];\n\t\tif (Array.isArray(input))\n\t\t\treturn input.map((value, key) => [key, value]).sort((a, b) => a[1]-b[1]);\n\t\treturn Object.entries(input).sort((a, b) => a[1]-b[1]);\n\t});\n\n\t/* Helper Functions */\n\tfunction updateResultVars() {\n\t\tconst compare = threshold.value || threshold;\n\t\tif (elementRef.value.offsetWidth === undefined)\n\t\t\treturn;\n\n\t\tconst found = compareArray.value.find(compare => compare[1] > elementRef.value.offsetWidth);\n\n\t\tsize.value = found ? found[0] : 'full';\n\t\tcompact.value = (size.value == compareArray.value[0][0]);\n\t}\n\n\t/* Observer */\n\tconst observer = new ResizeObserver(() => {\n\t\tif (elementRef.value) {\n\t\t\tupdateResultVars();\n\t\t}\n\t});\n\t/* Observer Helper Functions */\n\tfunction addObserver() {\n\t\tif (!elementRef.value)\n\t\t\treturn;\n\n\t\tupdateResultVars();\n\t\tobserver.observe(elementRef.value);\n\t\tmounted.value = true;\n\t}\n\tfunction removeObserver() {\n\t\tif (mounted.value) {\n\t\t\tobserver.disconnect()\n\t\t}\n\t}\n\n\t/* Main Logic */\n\tVue.onMounted(addObserver);\n\tVue.onUnmounted(removeObserver);\n\t\n\tVue.watchEffect(() => {\n\t\tif (elementRef.value) {\n\t\t\tremoveObserver();\n\t\t\taddObserver();\n\t\t}\n\t});\n\n\treturn { compact, size };\n}","import BaseSlider from '../Base/Slider.js';\nimport WeekView from './Week/View.js';\n\nexport default {\n\tname: \"ModeWeek\",\n\tcomponents: {\n\t\tBaseSlider,\n\t\tWeekView\n\t},\n\tprops: {\n\t\tcurrentDate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\temits: [\n\t\t\"update:currentDate\",\n\t\t\"update:range\",\n\t\t\"click\",\n\t\t\"requestModalOpen\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tfocusDate: this.currentDate,\n\t\t\trangeOffset: 0\n\t\t};\n\t},\n\tcomputed: {\n\t\trange() {\n\t\t\tlet first = this.focusDate.startOf('week', { useLocaleWeeks: true });\n\t\t\tlet last = this.focusDate.endOf('week', { useLocaleWeeks: true });\n\n\t\t\tif (this.rangeOffset != 0) {\n\t\t\t\tif (this.rangeOffset < 0) {\n\t\t\t\t\tfirst = first.plus({ weeks: this.rangeOffset });\n\t\t\t\t} else {\n\t\t\t\t\tlast = last.plus({ weeks: this.rangeOffset });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn luxon.Interval.fromDateTimes(first, last);\n\t\t}\n\t},\n\twatch: {\n\t\tcurrentDate() {\n\t\t\tif (this.currentDate.locale != this.focusDate.locale) {\n\t\t\t\tthis.focusDate = this.currentDate;\n\t\t\t\tthis.$emit('update:range', this.range);\n\t\t\t} else {\n\t\t\t\tthis.rangeOffset = this.currentDate.startOf('week', { useLocaleWeeks: true }).diff(this.focusDate.startOf('week', { useLocaleWeeks: true }), 'weeks').weeks;\n\t\t\t\tif (this.rangeOffset) {\n\t\t\t\t\tthis.$refs.view.$refs.grid.disableAutoScroll();\n\t\t\t\t\tthis.$emit('update:range', this.range);\n\t\t\t\t\tthis.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\tprevPage() {\n\t\t\tthis.rangeOffset = this.$refs.slider.target - 1;\n\t\t\tthis.$refs.view.$refs.grid.disableAutoScroll();\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.slider.prevPage().then(this.updatePage);\n\t\t},\n\t\tnextPage() {\n\t\t\tthis.rangeOffset = this.$refs.slider.target + 1;\n\t\t\tthis.$refs.view.$refs.grid.disableAutoScroll();\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.slider.nextPage().then(this.updatePage);\n\t\t},\n\t\tupdatePage(weeks) {\n\t\t\tconst newFocusDate = this.focusDate.plus({ weeks });\n\t\t\tthis.focusDate = newFocusDate;\n\t\t\tthis.rangeOffset = 0;\n\t\t\tthis.$emit('update:currentDate', this.focusDate);\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.view.$refs.grid.enableAutoScroll();\n\t\t},\n\t\tviewAttrs(weeks) {\n\t\t\tconst day = this.focusDate.plus({ weeks });\n\t\t\treturn { ...this.$attrs, day };\n\t\t},\n\t\thandleClickDefaults(evt) {\n\t\t\tswitch (evt.detail.source) {\n\t\t\tcase 'day':\n\t\t\t\t// default: Set current-date\n\t\t\t\tthis.$emit('update:currentDate', evt.detail.value);\n\t\t\t\tbreak;\n\t\t\tcase 'event':\n\t\t\t\t// default: Request Modal\n\t\t\t\tthis.$emit('requestModalOpen', { event: evt.detail.value });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.$emit('update:range', this.range);\n\t\tthis.$refs.view.$refs.grid.enableAutoScroll();\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t`\n}\n","import CalendarGrid from '../../Base/Grid.js';\nimport LabelDay from '../../Base/Label/Day.js';\nimport LabelDow from '../../Base/Label/Dow.js';\nimport LabelTime from '../../Base/Label/Time.js';\n\nexport default {\n\tname: \"WeekView\",\n\tcomponents: {\n\t\tCalendarGrid,\n\t\tLabelDay,\n\t\tLabelDow,\n\t\tLabelTime\n\t},\n\tinject: {\n\t\ttimeGrid: \"timeGrid\",\n\t\ttimezone: \"timezone\"\n\t},\n\tprops: {\n\t\tday: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tcollapseEmptyDays: Boolean\n\t},\n\tcomputed: {\n\t\tstart() {\n\t\t\treturn this.day.startOf('week', { useLocaleWeeks: true });\n\t\t},\n\t\taxisMain() {\n\t\t\treturn Array.from({ length: 7 }, (e, i) => this.start.plus({ days: i }));\n\t\t},\n\t\taxisParts() {\n\t\t\tif (this.timeGrid) {\n\t\t\t\t// create {start, end} array\n\t\t\t\treturn this.timeGrid.map(tu => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstart: luxon.Duration.fromISOTime(tu.start),\n\t\t\t\t\t\tend: luxon.Duration.fromISOTime(tu.end)\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// create 07:00-23:00\n\t\t\t\treturn Array.from({ length: 17 }, (e, i) => luxon.Duration.fromObject({ hours: i + 7 }));\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\tisToday(date) {\n\t\t\treturn date.hasSame(luxon.DateTime.now().setZone(this.timezone), 'day');\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t
    \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    \n\t`\n}\n","import BaseSlider from '../Base/Slider.js';\nimport MonthView from './Month/View.js';\n\nexport default {\n\tname: \"ModeMonth\",\n\tcomponents: {\n\t\tBaseSlider,\n\t\tMonthView\n\t},\n\tprops: {\n\t\tcurrentDate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\temits: [\n\t\t\"update:currentDate\",\n\t\t\"update:range\",\n\t\t\"click\",\n\t\t\"requestModalOpen\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tfocusDate: this.currentDate,\n\t\t\trangeOffset: 0\n\t\t};\n\t},\n\tcomputed: {\n\t\trange() {\n\t\t\tlet first = this.focusDate.startOf('month').startOf('week', { useLocaleWeeks: true });\n\t\t\tlet last = first.plus({ days: 41 }).endOf('day'); // NOTE(chris): 6 weeks minus 1 day\n\n\t\t\tif (this.rangeOffset != 0) {\n\t\t\t\tconst nextFocusDate = this.focusDate.plus({ months: this.rangeOffset});\n\t\t\t\tconst nextRangeStart = nextFocusDate.startOf('month').startOf('week', { useLocaleWeeks: true });\n\t\t\t\tif (this.rangeOffset < 0) {\n\t\t\t\t\tfirst = nextRangeStart;\n\t\t\t\t} else {\n\t\t\t\t\tlast = nextRangeStart.plus({ days: 41 }).endOf('day');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn luxon.Interval.fromDateTimes(first, last);\n\t\t}\n\t},\n\twatch: {\n\t\tcurrentDate() {\n\t\t\tif (this.currentDate.locale != this.focusDate.locale) {\n\t\t\t\tthis.focusDate = this.currentDate;\n\t\t\t\tthis.$emit('update:range', this.range);\n\t\t\t} else {\n\t\t\t\tthis.rangeOffset = this.currentDate.startOf('month').diff(this.focusDate.startOf('month'), 'months').months;\n\t\t\t\tif (this.rangeOffset) {\n\t\t\t\t\tthis.$emit('update:range', this.range);\n\t\t\t\t\tthis.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\tprevPage() {\n\t\t\tthis.rangeOffset = this.$refs.slider.target - 1;\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.slider.prevPage().then(this.updatePage);\n\t\t},\n\t\tnextPage() {\n\t\t\tthis.rangeOffset = this.$refs.slider.target + 1;\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.slider.nextPage().then(this.updatePage);\n\t\t},\n\t\tupdatePage(months) {\n\t\t\tconst newFocusDate = this.focusDate.plus({ months });\n\t\t\tthis.focusDate = newFocusDate;\n\t\t\tthis.rangeOffset = 0;\n\t\t\tthis.$emit('update:currentDate', this.focusDate);\n\t\t\tthis.$emit('update:range', this.range);\n\t\t},\n\t\tviewAttrs(months) {\n\t\t\tconst day = this.focusDate.plus({ months });\n\t\t\treturn { day };\n\t\t},\n\t\thandleClickDefaults(evt) {\n\t\t\tswitch (evt.detail.source) {\n\t\t\tcase 'week':\n\t\t\t\t// default: Move to week if not in month\n\t\t\t\tlet dayInWeek = luxon.DateTime.fromObject({\n\t\t\t\t\tlocalWeekNumber: evt.detail.value.number,\n\t\t\t\t\tlocalWeekYear: evt.detail.value.year\n\t\t\t\t}, {\n\t\t\t\t\tzone: this.currentDate.zoneName,\n\t\t\t\t\tlocale: this.currentDate.locale\n\t\t\t\t});\n\n\t\t\t\tif (!this.focusDate.hasSame(dayInWeek.startOf('week', { useLocaleWeeks: true }), 'month')) {\n\t\t\t\t\tthis.$emit('update:currentDate', dayInWeek.startOf('week', { useLocaleWeeks: true }));\n\t\t\t\t} else if (!this.focusDate.hasSame(dayInWeek.endOf('week', { useLocaleWeeks: true }), 'month')) {\n\t\t\t\t\tthis.$emit('update:currentDate', dayInWeek.endOf('week', { useLocaleWeeks: true }));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'day':\n\t\t\t\t// default: Set current-date\n\t\t\t\tthis.$emit('update:currentDate', evt.detail.value);\n\t\t\t\tbreak;\n\t\t\tcase 'event':\n\t\t\t\t// default: Request Modal\n\t\t\t\tthis.$emit('requestModalOpen', { event: evt.detail.value });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.$emit('update:range', this.range);\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t`\n}\n","import CalendarGrid from '../../Base/Grid.js';\nimport LabelWeek from '../../Base/Label/Week.js';\nimport LabelDow from '../../Base/Label/Dow.js';\nimport LabelDay from '../../Base/Label/Day.js';\n\nexport default {\n\tname: \"MonthView\",\n\tcomponents: {\n\t\tCalendarGrid,\n\t\tLabelWeek,\n\t\tLabelDow,\n\t\tLabelDay\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\t// NOTE(chris): snap events to day\n\t\t\tevents: Vue.computed(() => {\n\t\t\t\t//const events = [];\n\t\t\t\tconst events = this.events.map(event => {\n\t\t\t\t\tconst start = event.start.startOf('day');\n\t\t\t\t\tconst end = event.end.plus({ days: 1 }).startOf('day');\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...event,\n\t\t\t\t\t\tstart,\n\t\t\t\t\t\tend\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\tfor (var w = 5; w > -1; w--) {\n\t\t\t\t\tfor (var d = 6; d > -1; d--) {\n\t\t\t\t\t\tconst startdate = this.axisMain[w].plus(this.axisParts[d]);\n\t\t\t\t\t\tevents.unshift({\n\t\t\t\t\t\t\tstart: startdate,\n\t\t\t\t\t\t\tend: startdate.plus({ days: 1 }),\n\t\t\t\t\t\t\torig: 'header'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn events;\n\t\t\t})\n\t\t};\n\t},\n\tinject: {\n\t\tevents: \"events\",\n\t\ttimezone: \"timezone\"\n\t},\n\tprops: {\n\t\tday: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\tcomputed: {\n\t\taxisMain() {\n\t\t\tconst start = this.day.startOf('month').startOf('week', { useLocaleWeeks: true });\n\t\t\treturn Array.from({ length: 6 }, (e, i) => start.plus({ weeks: i }));\n\t\t},\n\t\taxisParts() {\n\t\t\treturn Array.from({ length: 8 }, (e, i) => luxon.Duration.fromObject({ days: i }));\n\t\t}\n\t},\n\tmethods: {\n\t\tisToday(date) {\n\t\t\treturn date.hasSame(luxon.DateTime.now().setZone(this.timezone), 'day');\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t
    \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    \n\t`\n}\n","import CalClick from '../../../../directives/Calendar/Click.js';\n\nexport default {\n\tname: \"LabelWeek\",\n\tdirectives: {\n\t\tCalClick\n\t},\n\tprops: {\n\t\tdate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\tcomputed: {\n\t\tweeks() {\n\t\t\tconst firstDay = this.date.startOf('week', { useLocaleWeeks: true });\n\t\t\tconst lastDay = this.date.endOf('week', { useLocaleWeeks: true });\n\n\t\t\tconst weeks = [\n\t\t\t\t{ number: firstDay.localWeekNumber, year: firstDay.localWeekYear },\n\t\t\t\t{ number: lastDay.localWeekNumber, year: lastDay.localWeekYear }\n\t\t\t];\n\t\t\tif (weeks[0].number == weeks[1].number)\n\t\t\t\tweeks.pop();\n\t\t\treturn weeks;\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t\n\t\t\t{{ week.number }}\n\t\t\n\t
    \n\t`\n}\n","import FhcCalendar from \"./Base.js\";\n\nimport ApiLvPlan from '../../api/factory/lvPlan.js';\n\nimport { useEventLoader } from '../../composables/EventLoader.js';\n\nimport ModeDay from './Mode/Day.js';\nimport ModeWeek from './Mode/Week.js';\nimport ModeMonth from './Mode/Month.js';\n\nexport default {\n\tname: \"CalendarLvPlan\",\n\tcomponents: {\n\t\tFhcCalendar\n\t},\n\tinject: [\n\t\t\"renderers\"\n\t],\n\tprops: {\n\t\ttimezone: {\n\t\t\ttype: String,\n\t\t\trequired: true\n\t\t},\n\t\tdate: {\n\t\t\ttype: [Date, String, Number, luxon.DateTime],\n\t\t\tdefault: luxon.DateTime.local()\n\t\t},\n\t\tmode: {\n\t\t\ttype: String,\n\t\t\tdefault: 'Week'\n\t\t},\n\t\tgetPromiseFunc: {\n\t\t\ttype: Function,\n\t\t\trequired: true\n\t\t}\n\t},\n\temits: [\n\t\t\"update:date\",\n\t\t\"update:mode\",\n\t\t\"update:range\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tmodes: {\n\t\t\t\tday: Vue.markRaw(ModeDay),\n\t\t\t\tweek: Vue.markRaw(ModeWeek),\n\t\t\t\tmonth: Vue.markRaw(ModeMonth)\n\t\t\t},\n\t\t\tmodeOptions: {\n\t\t\t\tday: {\n\t\t\t\t\temptyMessage: Vue.computed(() => this.$p.t('lehre/noLvFound')),\n\t\t\t\t\temptyMessageDetails: Vue.computed(() => this.$p.t('lehre/noLvFound'))\n\t\t\t\t},\n\t\t\t\tweek: {\n\t\t\t\t\tcollapseEmptyDays: false\n\t\t\t\t}\n\t\t\t},\n\t\t\tteachingunits: null\n\t\t};\n\t},\n\tcomputed: {\n\t\tbackgrounds() {\n\t\t\tlet now = luxon.DateTime.now().setZone(this.timezone);\n\n\t\t\tif (this.mode == 'Month')\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\tclass: 'background-past',\n\t\t\t\t\t\tend: now.startOf('day')\n\t\t\t\t\t}\n\t\t\t\t];\n\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tclass: 'background-past',\n\t\t\t\t\tend: now,\n\t\t\t\t\tlabel: now.startOf('minute').toISOTime({ suppressSeconds: true, includeOffset: false })\n\t\t\t\t}\n\t\t\t];\n\t\t}\n\t},\n\tmethods: {\n\t\teventStyle(event) {\n\t\t\tif (!event.farbe)\n\t\t\t\treturn undefined;\n\t\t\treturn '--event-bg:#' + event.farbe;\n\t\t},\n\t\tupdateRange(rangeInterval) {\n\t\t\tthis.rangeInterval = rangeInterval;\n\t\t\tthis.$emit('update:range', rangeInterval);\n\t\t}\n\t},\n\tsetup(props, context) {\n\t\tconst rangeInterval = Vue.ref(null);\n\t\t\n\t\tconst { events, lv } = useEventLoader(rangeInterval, props.getPromiseFunc);\n\n\t\tVue.watch(lv, newValue => {\n\t\t\tcontext.emit('update:lv', newValue);\n\t\t});\n\n\t\treturn {\n\t\t\trangeInterval,\n\t\t\tevents,\n\t\t\tlv\n\t\t};\n\t},\n\tcreated() {\n\t\tthis.$api\n\t\t\t.call(ApiLvPlan.getStunden())\n\t\t\t.then(res => {\n\t\t\t\treturn this.teachingunits = res.data.map(el => ({\n\t\t\t\t\tid: el.stunde,\n\t\t\t\t\tstart: el.beginn,\n\t\t\t\t\tend: el.ende\n\t\t\t\t}));\n\t\t\t});\n\t},\n\ttemplate: /* html */`\n\t $emit('update:date', newDate, newMode)\"\n\t\t@update:mode=\"(newMode, newDate) => $emit('update:mode', newMode, newDate)\"\n\t\t@update:range=\"updateRange\"\n\t>\n\t\t\n\t\t\n\t`\n}\n","// TODO(chris): load events that are longer than the interval without doubling it\n\nexport function useEventLoader(rangeInterval, getPromiseFunc) {\n\tlet loading_id = 0;\n\tconst events = Vue.ref([]);\n\tconst loadingEvents = Vue.ref([]);\n\tconst allEvents = Vue.computed(() => events.value.concat(loadingEvents.value));\n\tconst lv = Vue.ref(null);\n\tconst eventsLoaded = [];\n\n\tconst mergePromiseArr = (n, o) => {\n\t\tif (Array.isArray(n))\n\t\t\treturn o.concat(n);\n\t\treturn o.push(n), o;\n\t};\n\n\tconst markEventsLoaded = (start, end) => {\n\t\tlet result = [];\n\t\tif (!eventsLoaded.length) {\n\t\t\t// empty: add new chunk\n\t\t\teventsLoaded.push(start.ts, end.ts);\n\t\t} else {\n\t\t\tif (eventsLoaded[eventsLoaded.length-1] + 1 == start.ts) {\n\t\t\t\t// add to the end of last chunk\n\t\t\t\teventsLoaded[eventsLoaded.length-1] = end.ts;\n\t\t\t} else if (eventsLoaded[eventsLoaded.length-1] < start.ts) {\n\t\t\t\t// add new chunk after the last chunk\n\t\t\t\teventsLoaded.push(start.ts, end.ts);\n\t\t\t} else if (eventsLoaded[0] == end.ts + 1) {\n\t\t\t\t// add to the start of first chunk\n\t\t\t\teventsLoaded[0] = start.ts;\n\t\t\t} else if (eventsLoaded[0] > end.ts) {\n\t\t\t\teventsLoaded.unshift(start.ts, end.ts);\n\t\t\t} else {\n\t\t\t\tlet index = eventsLoaded.findIndex(e => e >= start.ts);\n\n\t\t\t\tif (index % 2) {\n\t\t\t\t\t// starts inside an existing chunk\n\t\t\t\t\tif (eventsLoaded[index] >= end.ts)\n\t\t\t\t\t\treturn []; // Already loaded\n\n\t\t\t\t\tlet indexIsLast = (index == eventsLoaded.length - 1);\n\n\t\t\t\t\tif (indexIsLast || eventsLoaded[index + 1] > end.ts) {\n\t\t\t\t\t\t// extend an existing chunk\n\t\t\t\t\t\t// and merge with the next if necessary\n\t\t\t\t\t\tlet nStart = eventsLoaded[index] + 1;\n\t\t\t\t\t\tstart = start.plus(nStart - start.ts);\n\t\t\t\t\t\tif (!indexIsLast && eventsLoaded[index + 1] == end.ts + 1)\n\t\t\t\t\t\t\teventsLoaded.splice(index, 2);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\teventsLoaded[index] = end.ts;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// merge exising chunks\n\t\t\t\t\t\t// and load the rest if necessary\n\t\t\t\t\t\tif (eventsLoaded[index + 2] < end.ts) {\n\t\t\t\t\t\t\tlet rStart = eventsLoaded[index + 2] + 1;\n\t\t\t\t\t\t\tresult = mergePromiseArr(markEventsLoaded(start.plus(rStart - start.ts), end), result);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet nStart = eventsLoaded[index] + 1;\n\t\t\t\t\t\tstart = start.plus(nStart - start.ts);\n\t\t\t\t\t\tlet nEnd = eventsLoaded[index + 1] - 1;\n\t\t\t\t\t\tend = end.plus(nEnd - end.ts);\n\t\t\t\t\t\teventsLoaded.splice(index, 2);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// starts between two chunks or before the first\n\t\t\t\t\tif (!index) {\n\t\t\t\t\t\t// extend the first chunk\n\t\t\t\t\t\t// and load the rest if necessary\n\t\t\t\t\t\tif (eventsLoaded[1] < end.ts) {\n\t\t\t\t\t\t\tlet rStart = eventsLoaded[1] + 1;\n\t\t\t\t\t\t\tresult = mergePromiseArr(markEventsLoaded(start.plus(rStart - start.ts), end), result);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet nEnd = eventsLoaded[0] - 1;\n\t\t\t\t\t\tend = end.plus(nEnd - end.ts);\n\t\t\t\t\t\teventsLoaded[0] = start.ts;\n\t\t\t\t\t} else if (eventsLoaded[index] == start.ts) {\n\t\t\t\t\t\t// starts at the same position as an existing chunk\n\t\t\t\t\t\tif (eventsLoaded[index + 1] >= end.ts)\n\t\t\t\t\t\t\treturn []; // Already loaded\n\t\t\t\t\t\t// load the rest\n\t\t\t\t\t\tlet rStart = eventsLoaded[index + 1] + 1;\n\t\t\t\t\t\tresult = mergePromiseArr(markEventsLoaded(start.plus(rStart - start.ts), end), result);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// extend an existing chunk\n\t\t\t\t\t\t// and load the rest if necessary\n\t\t\t\t\t\tif (eventsLoaded[index + 1] < end.ts) {\n\t\t\t\t\t\t\tlet rStart = eventsLoaded[index + 1] + 1;\n\t\t\t\t\t\t\tresult = mergePromiseArr(markEventsLoaded(start.plus(rStart - start.ts), end), result);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet nEnd = eventsLoaded[index] - 1;\n\t\t\t\t\t\tend = end.plus(nEnd - end.ts);\n\t\t\t\t\t\teventsLoaded[index] = start.ts;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (start.ts >= end.ts)\n\t\t\treturn result;\n\n\t\tloadingEvents.value.push({\n\t\t\tloading_id: loading_id++,\n\t\t\ttype: \"loading\",\n\t\t\tisostart: start.toISODate() + 'T' + start.toISOTime(),\n\t\t\tisoend: end.toISODate() + 'T' + end.toISOTime()\n\t\t});\n\n\t\treturn mergePromiseArr(getPromiseFunc(start, end), result);\n\t};\n\n\tVue.watchEffect(() => {\n\t\tconst range = Vue.toValue(rangeInterval);\n\t\tif (!(range instanceof luxon.Interval))\n\t\t\treturn;\n\t\tconst promises = markEventsLoaded(range.start, range.end);\n\t\tPromise\n\t\t\t.allSettled(promises)\n\t\t\t.then(results => {\n\t\t\t\tresults.forEach(res => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tres.status === 'fulfilled'\n\t\t\t\t\t\t&& res.value.meta.status === \"success\"\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (res.value.meta.lv)\n\t\t\t\t\t\t\tlv.value = res.value.meta.lv;\n\n\t\t\t\t\t\tevents.value = events.value.concat(res.value.data);\n\t\t\t\t\t\tloadingEvents.value = [];\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t});\n\t})\n\n\treturn { events: allEvents, lv }\n}","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAuthUID() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/AuthInfo/getAuthUID'\n\t\t};\n\t},\n\tgetAuthInfo() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/AuthInfo/getAuthInfo'\n\t\t};\n\t}\n};","import FhcCalendar from \"../../Calendar/LvPlan.js\";\n\nimport ApiLvPlan from '../../../api/factory/lvPlan.js';\nimport ApiAuthinfo from '../../../api/factory/authinfo.js';\n\nexport const DEFAULT_MODE_LVPLAN = 'Week'\n\nexport default {\n\tname: 'LvPlanLehrveranstaltung',\n\tcomponents: {\n\t\tFhcCalendar\n\t},\n\tprops: {\n\t\tviewData: Object, // NOTE(chris): this is inherited from router-view\n\t\tpropsViewData: Object\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tlv: null\n\t\t};\n\t},\n\tcomputed:{\n\t\tcurrentDay() {\n\t\t\tif (!this.propsViewData?.focus_date || isNaN(new Date(this.propsViewData?.focus_date)))\n\t\t\t\treturn luxon.DateTime.now().setZone(this.viewData.timezone).toISODate();\n\t\t\treturn this.propsViewData?.focus_date;\n\t\t},\n\t\tcurrentMode() {\n\t\t\tif (!this.propsViewData?.mode || !['day', 'week', 'month'].includes(this.propsViewData?.mode.toLowerCase()))\n\t\t\t\treturn DEFAULT_MODE_LVPLAN;\n\t\t\treturn this.propsViewData?.mode;\n\t\t},\n\t\tcurrentLv() {\n\t\t\tif (isNaN(parseInt(this.propsViewData?.lv_id)))\n\t\t\t\treturn null;\n\t\t\treturn this.propsViewData.lv_id;\n\t\t},\n\t\tlvTitle() {\n\t\t\tif (this.currentLv === null)\n\t\t\t\treturn '';\n\t\t\tif (!this.lv)\n\t\t\t\treturn '';\n\n\t\t\tif (this.$p.user_language.value === 'English')\n\t\t\t\treturn this.lv.bezeichnung_english;\n\n\t\t\treturn this.lv.bezeichnung;\n\t\t}\n\t},\n\tmethods: {\n\t\thandleChangeDate(day, newMode) {\n\t\t\treturn this.handleChangeMode(newMode, day);\n\t\t},\n\t\thandleChangeMode(newMode, day) {\n\t\t\tconst mode = newMode[0].toUpperCase() + newMode.slice(1)\n\t\t\tconst focus_date = day.toISODate();\n\t\t\t\n\t\t\tthis.$router.push({\n\t\t\t\tname: \"LvPlan\",\n\t\t\t\tparams: {\n\t\t\t\t\tmode,\n\t\t\t\t\tfocus_date,\n\t\t\t\t\tlv_id: this.currentLv\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tgetPromiseFunc(start, end) {\n\t\t\treturn [\n\t\t\t\tthis.$api.call(ApiLvPlan.eventsLv(this.propsViewData.lv_id, start.toISODate(), end.toISODate())),\n\t\t\t\tthis.$api.call(ApiLvPlan.getLvPlanReservierungen(start.toISODate(), end.toISODate()))\n\t\t\t];\n\t\t}\n\t},\n\tcreated() {\n\t\tif (this.currentLv === null)\n\t\t\treturn;\n\t\tthis.$api\n\t\t\t.call(ApiLvPlan.getLv(this.propsViewData?.lv_id))\n\t\t\t.then(res => {\n\t\t\t\tthis.lv = res.data;\n\t\t\t});\n\t},\n\ttemplate: /*html*/`\n\t
    \n\t\t

    \n\t\t\t{{ $p.t('lehre/stundenplan') }}\n\t\t\t\n\t\t\t\t{{ lvTitle }}\n\t\t\t\n\t\t

    \n\t\t
    \n\t\t
    \n\t\t\t{{ $p.t('lehre/noLvFound') }}\n\t\t
    \n\t\t\n\t
    `\n};\n","import FhcCalendar from \"../../Calendar/LvPlan.js\";\n\nimport ApiLvPlan from '../../../api/factory/lvPlan.js';\nimport ApiAuthinfo from '../../../api/factory/authinfo.js';\n\nexport const DEFAULT_MODE_LVPLAN = 'Week'\n\nexport default {\n\tname: 'LvPlanPersonal',\n\tcomponents: {\n\t\tFhcCalendar\n\t},\n\tprops: {\n\t\tviewData: Object, // NOTE(chris): this is inherited from router-view\n\t\tpropsViewData: Object\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tstudiensemester_kurzbz: null,\n\t\t\tstudiensemester_start: null,\n\t\t\tstudiensemester_ende: null,\n\t\t\tuid: null,\n\t\t\tisMitarbeiter: false,\n\t\t\tisStudent: false\n\t\t};\n\t},\n\tcomputed:{\n\t\tcurrentDay() {\n\t\t\tif (!this.propsViewData?.focus_date || isNaN(new Date(this.propsViewData?.focus_date)))\n\t\t\t\treturn luxon.DateTime.now().setZone(this.viewData.timezone).toISODate();\n\t\t\treturn this.propsViewData?.focus_date;\n\t\t},\n\t\tcurrentMode() {\n\t\t\tif (!this.propsViewData?.mode || !['day', 'week', 'month'].includes(this.propsViewData?.mode.toLowerCase()))\n\t\t\t\treturn DEFAULT_MODE_LVPLAN;\n\t\t\treturn this.propsViewData?.mode;\n\t\t},\n\t\tdownloadLinks() {\n\t\t\tif (!this.studiensemester_start || !this.studiensemester_ende || !this.uid)\n\t\t\t\treturn false;\n\n\t\t\tlet type = false;\n\t\t\ttype = this.isStudent ? 'student' : type;\n\t\t\ttype = this.isMitarbeiter ? 'lektor' : type;\n\t\t\tif (false === type)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst opts = { zone: this.viewData.timezone };\n\t\t\tconst start = luxon.DateTime\n\t\t\t\t.fromISO(this.studiensemester_start, opts)\n\t\t\t\t.toUnixInteger();\n\t\t\tconst ende = luxon.DateTime\n\t\t\t\t.fromISO(this.studiensemester_ende, opts)\n\t\t\t\t.toUnixInteger();\n\n\t\t\tconst download_link = FHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t+ 'cis/private/lvplan/stpl_kalender.php'\n\t\t\t\t+ '?type=' + type\n\t\t\t\t+ '&pers_uid=' + this.uid\n\t\t\t\t+ '&begin=' + start\n\t\t\t\t+ '&ende=' + ende;\n\n\t\t\treturn [\n\t\t\t\t{ title: \"excel\", icon: 'fa-solid fa-file-excel', link: download_link + '&format=excel' },\n\t\t\t\t{ title: \"csv\", icon: 'fa-solid fa-file-csv', link: download_link + '&format=csv' },\n\t\t\t\t{ title: \"ical1\", icon: 'fa-regular fa-calendar', link: download_link + '&format=ical&version=1&target=ical' },\n\t\t\t\t{ title: \"ical2\", icon: 'fa-regular fa-calendar', link: download_link + '&format=ical&version=2&target=ical' }\n\t\t\t];\n\t\t}\n\t},\n\tmethods: {\n\t\thandleChangeDate(day, newMode) {\n\t\t\treturn this.handleChangeMode(newMode, day);\n\t\t},\n\t\thandleChangeMode(newMode, day) {\n\t\t\tconst mode = newMode[0].toUpperCase() + newMode.slice(1)\n\t\t\tconst focus_date = day.toISODate();\n\t\t\t\n\t\t\tthis.$router.push({\n\t\t\t\tname: \"MyLvPlan\",\n\t\t\t\tparams: {\n\t\t\t\t\tmode,\n\t\t\t\t\tfocus_date\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tupdateRange(rangeInterval) {\n\t\t\tthis.$api\n\t\t\t\t.call(ApiLvPlan.studiensemesterDateInterval(\n\t\t\t\t\trangeInterval.end.startOf('week').toISODate()\n\t\t\t\t))\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.studiensemester_kurzbz = res.data.studiensemester_kurzbz;\n\t\t\t\t\tthis.studiensemester_start = res.data.start;\n\t\t\t\t\tthis.studiensemester_ende = res.data.ende;\n\t\t\t\t});\n\t\t},\n\t\tgetPromiseFunc(start, end) {\n\t\t\treturn [\n\t\t\t\tthis.$api.call(ApiLvPlan.eventsPersonal(start.toISODate(), end.toISODate())),\n\t\t\t\tthis.$api.call(ApiLvPlan.getLvPlanReservierungen(start.toISODate(), end.toISODate()))\n\t\t\t];\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.$api\n\t\t\t.call(ApiAuthinfo.getAuthInfo())\n\t\t\t.then(res => {\n\t\t\t\tthis.uid = res.data.uid;\n\t\t\t\tthis.isMitarbeiter = res.data.isMitarbeiter;\n\t\t\t\tthis.isStudent = res.data.isStudent;\n\t\t\t});\n\t},\n\ttemplate: /*html*/`\n\t
    \n\t\t

    \n\t\t\t{{ $p.t('lehre/stundenplan') }}\n\t\t\t\n\t\t\t\t{{ studiensemester_kurzbz }}\n\t\t\t\n\t\t

    \n\t\t
    \n\t\t\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ title }}\n\t\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\n\t`\n};\n","import BsModal from '../../../../../Bootstrap/Modal.js';\n\nconst pruefungen = {};\n\nexport default {\n\tcomponents: {\n\t\tBsModal\n\t},\n\tmixins: [\n\t\tBsModal\n\t],\n\tprops: {\n\t\tpruefungenData: Array|null,\n\t\tbezeichnung: String,\n\t\t/*\n\t\t * NOTE(chris): \n\t\t * Hack to expose in \"emits\" declared events to $props which we use \n\t\t * in the v-bind directive to forward all events.\n\t\t * @see: https://github.com/vuejs/core/issues/3432\n\t\t*/\n\t\tonHideBsModal: Function,\n\t\tonHiddenBsModal: Function,\n\t\tonHidePreventedBsModal: Function,\n\t\tonShowBsModal: Function,\n\t\tonShownBsModal: Function\n\t},\n\tdata: () => ({\n\t\tresult: true,\n\t}),\n\tmounted() {\n\t\tthis.modal = this.$refs.modalContainer.modal;\n\t},\n\tpopup(options) {\n\t\treturn BsModal.popup.bind(this)(null, options);\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t`\n}\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetStudentenMail(lehreinheit_id) {\n\t\t// TODO(chris): seems to be called from nowhere?\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Lehre/lvStudentenMail',\n\t\t\tparams: { lehreinheit_id }\n\t\t};\n\t},\n\tgetLvInfo(studiensemester_kurzbz, lehrveranstaltung_id) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/Lehre/LV/${studiensemester_kurzbz}/${lehrveranstaltung_id}`\n\t\t};\n\t},\n\tgetStudentPruefungen(lehrveranstaltung_id) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}`\n\t\t};\n\t}\n};","import ApiLehre from '../../../../../../api/factory/lehre.js';\n\nconst infos = {};\n\nexport default {\n\tprops:{\n\t\tstudien_semester: String,\n\t\tlehrveranstaltung_id: Number,\n\t},\n\tdata: () => ({\n\t\tbezeichnung: null,\n\t\tstudiengang_kuerzel: null,\n\t\tsemester: null,\n\t\torgform_kurzbz: null,\n\t\tsprache: null,\n\t\tects: null,\n\t\tincoming: null,\n\t\tresult: true,\n\t\tinfo: null,\n\t}),\n\tcomputed: {\n\t\tlektorNamesLinks(){\n\t\t\tlet lektorenLinks = {};\n\t\t\tthis.info.lektoren.forEach(e => {\n\t\t\t\tlet name = ((e.titelpre || '') + ' ' + (e.vorname || '') + ' ' + (e.nachname || '') + ' ' + (e.titelpost || '')).trim();\n\t\t\t\tlektorenLinks[name] = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + `/Cis/Profil/View/${e.uid}`;\n\t\t\t});\n\t\t\treturn lektorenLinks;\n\t\t},\n\t\tlektorNames(){\n\t\t\treturn this.info.lektoren.map((e)=>((e.titelpre || '') + ' ' + (e.vorname || '') + ' ' + (e.nachname || '') + ' ' + (e.titelpost || '')).trim());\n\t\t},\n\t\tlvLeitung() {\n\t\t\treturn this.info.lvLeitung && this.info.lvLeitung.length ? this.info.lvLeitung.map(e => ((e.titelpre || '') + ' ' + (e.vorname || '') + ' ' + (e.nachname || '') + ' ' + (e.titelpost || '')).trim()) : null;\n\t\t},\n\t\toe() {\n\t\t\treturn this.info.oe.organisationseinheittyp ? (this.info.oe.organisationseinheittyp + ' ' + this.info.oe.bezeichnung) : '';\n\t\t},\n\t\toeLeitung() {\n\t\t\tif (!this.info.oeLeitung || !this.info.oeLeitung.length)\n\t\t\t\treturn ['-'];\n\t\t\treturn this.info.oeLeitung.map(e => ((e.titelpre || '') + ' ' + (e.vorname || '') + ' ' + (e.nachname || '') + ' ' + (e.titelpost || '')).trim());\n\t\t},\n\t\tkoordinator() {\n\t\t\tif (!this.info.koordinator || !this.info.koordinator.length)\n\t\t\t\treturn null;\n\t\t\treturn this.info.koordinator.map(e => ((e.titelpre || '') + ' ' + (e.vorname || '') + ' ' + (e.nachname || '') + ' ' + (e.titelpost || '')).trim());\n\t\t},\n\t\tcurrentLang() {\n\t\t\tif (!this.info)\n\t\t\t\treturn null;\n\t\t\tif (this.info.lastLang)\n\t\t\t\treturn this.info.lastLang;\n\t\t\tif (!this.info.lvinfo)\n\t\t\t\treturn null;\n\t\t\treturn this.info.lvinfoDefaultLang && this.info.lvinfo[this.info.lvinfoDefaultLang] ? this.info.lvinfoDefaultLang : Object.keys(this.info.lvinfo).shift();\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.$api.call(ApiLehre.getLvInfo(this.studien_semester, this.lehrveranstaltung_id))\n\t\t.then(\n\t\t\tres => res.data\n\t\t).then(data =>{\n\t\t\tObject.assign(this, \n\t\t\t\t{\n\t\t\t\t\tbezeichnung : data.bezeichnung,\n\t\t\t\t\tstudiengang_kuerzel: data.studiengang_kuerzel,\n\t\t\t\t\tsemester: data.semester,\n\t\t\t\t\torgform_kurzbz: data.orgform_kurzbz,\n\t\t\t\t\tsprache: data.sprache,\n\t\t\t\t\tects: data.ects,\n\t\t\t\t\tincoming: data.incoming ?? '-',\n\t\t\t\t});\n\t\t})\n\n\t\tif (infos[this.lehrveranstaltung_id]) {\n\t\t\tthis.info = infos[this.lehrveranstaltung_id];\n\t\t} else {\n\t\t\taxios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/components/Cis/Mylv/Info/' + this.studien_semester + '/' + this.lehrveranstaltung_id).then(res => {\n\t\t\t\tthis.info = infos[this.lehrveranstaltung_id] = res.data.retval || [];\n\t\t\t}).catch(() => this.info = {});\n\t\t}\n\t},\n\ttemplate: /*html*/`\n\t\t\t

    {{$p.t('lvinfo/lehrveranstaltungsinformationen')}}

    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    {{$p.t('lehre/lehrveranstaltung')}}{{bezeichnung}}
    {{$p.t('lehre/studiengang')}}{{studiengang_kuerzel}}
    {{$p.t('lehre/semester')}}{{semester}}
    {{$p.t('lehre/studiensemester')}}{{studien_semester}}
    {{$p.t('lehre/organisationsform')}}{{orgform_kurzbz}}
    {{$p.t('lehre/lehrbeauftragter')}}\n\t\t\t\t\t\t\t\t
      \n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{{name}}\n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    {{$p.t('lehre/lvleitung')}}\n\t\t\t\t\t\t\t\t
      \n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{{name}}\n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    {{$p.t('global/sprache')}}{{sprache}}
    {{$p.t('lehre/ects')}}{{ects}}
    {{$p.t('lehre/incomingplaetze')}}{{incoming}}
    {{$p.t('lehre/organisationseinheit')}}\n\t\t\t\t\t\t\t\t{{oe}}
    \n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t{{$p.t('global/leitung')}}: {{oeLeitung.join(', ')}}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t
    \n\t\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    1\" class=\"text-end\">\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    `\n}\n","const categories = {};\nconst loadingModules = {};\n\nfunction extractCategory(obj, category) {\n\treturn obj.filter(e => e.category == category).reduce((res, elem) => {\n\t\tif (!res[elem.phrase])\n\t\t\tres[elem.phrase] = elem.text;\n\t\treturn res;\n\t}, {});\n}\nfunction reloadRefs(category) {\n\twhile (loadingModules[category].length) {\n\t\tvar v = loadingModules[category].pop();\n\t\tv[0].value = getValueForLoadedPhrase(category, v[1], v[2]);\n\t\tVue.triggerRef(v[0]);\n\t\t/*Vue.unref(v);*/\n\t}\n}\nfunction loadLazy(category, val, phrase, params) {\n\t// NOTE(chris): load module if it's not loaded yet\n\tif (loadingModules[category]) {\n\t\tloadingModules[category].push([val, phrase, params]);\n\t\tif (categories[category]) // NOTE(chris): this is for safety in case the loading finished the moment before the val was pushed into the array\n\t\t\treloadRefs(category);\n\t\treturn;\n\t}\n\tloadingModules[category] = [[val, phrase, params]];\n\n\taxios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/components/Phrasen/loadModule/' + category).then(res => {\n\t\tif (res.data.retval)\n\t\t\tcategories[category] = extractCategory(res.data.retval, category);\n\t\telse\n\t\t\tcategories[category] = {};\n\n\t\treloadRefs(category);\n\t}).catch(err => console.error(err));\n}\nfunction getValueForLoadedPhrase(category, phrase, params) {\n\tlet result = categories[category][phrase];\n\tif (!result)\n\t\treturn '<< PHRASE ' + phrase + '>>';\n\tif (params)\n\t\tresult = result.replace(/\\{([^}]*)\\}/g, (match, p1) => params[p1] === undefined ? match : params[p1]);\n\treturn result;\n}\n\n\nconst phrasen = {\n\tt_ref(category, phrase, params) {\n\t\tif (params === undefined && (\n\t\t\t(Array.isArray(category) && category.length == 2) ||\n\t\t\t(category.split && category.split('/').length == 2))\n\t\t\t) {\n\t\t\tparams = phrase;\n\t\t\t[category, phrase] = category.split ? category.split('/') : category;\n\t\t}\n\t\tif (phrase === undefined) {\n\t\t\tconsole.error('invalid input');\n\t\t\treturn '';\n\t\t}\n\t\tif (!categories[category]) {\n\t\t\t\n\t\t\tvar initialval = '';\n \t\t\tif (window.FHC_JS_PHRASES_STORAGE_OBJECT !== undefined) {\n \t\t\t\tvar tmp_category = extractCategory(FHC_JS_PHRASES_STORAGE_OBJECT, category);\n\t\t\t\tif(tmp_category[phrase] !== undefined ) {\n\t\t\t\t\tinitialval = tmp_category[phrase];\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif (!categories[category] || Object.keys(categories[category]).length === 0) {\n\t\t\t\tcategories[category] = undefined;\n\t\t\t\tlet val = Vue.ref(initialval);\n\t\t\t\tloadLazy(category, val, phrase, params);\n\t\t\t\treturn val;\n\t\t\t}\n\t\t}\n\t\tvar result = getValueForLoadedPhrase(category, phrase, params);\n\t\treturn Vue.ref(result);\n\t},\n\tt(category, phrase, params) {\n\t\treturn Vue.unref(this.t_ref(category, phrase, params));\n\t}\n};\n\nexport default {\n\tdata: () => {\n\t\treturn {\n\t\t\tp: phrasen\n\t\t}\n\t}\n}\n\n// Composable (wrapper for mixin)\nexport function usePhrasen() {\n\n\tfunction t(category, phrase, params) {\n\t\treturn phrasen.t(category, phrase, params);\n\t}\n\n\treturn {\t\t\n\t\tt,\n\t}\n\n}\n","\nexport default {\n\tprops:{\n\t\tmenu:{\n\t\t\ttype:Array,\n\t\t\tdefault:null,\n\t\t},\n\t\tcontainerStyles: Array,\n\t\trowStyles: Array,\n\t\thasLvPlanEintraege: {\n\t\t\trequired:false,\n\t\t\tdefault:true,\n\t\t\ttype:Boolean,\n\t\t},\n\t},\n\tdata(){\n\t\treturn{\n\t\t\t\n\t\t}\n\t},\n\tmethods:{\n\t\tc4_disabled: function (menuItem) {\n\t\t\tif (!this.c4_link(menuItem) && !menuItem.c4_moodle_links?.length) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (menuItem.id == \"addon_fhtw_menu_lvplan_lva\" && !this.hasLvPlanEintraege){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tc4_target: function (menuItem) {\n\t\t\tif (menuItem.c4_moodle_links?.length > 0) return null;\n\t\t\treturn menuItem.c4_target ?? null;\n\t\t},\n\t\tc4_link(menuItem) {\n\t\t\tif (!menuItem) return null;\n\t\t\tif (Array.isArray(menuItem.c4_moodle_links) && menuItem.c4_moodle_links.length) \n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn menuItem.c4_link ?? null;\n\t\t\t}\n\t\t},\n\t\tgetMenuName(menuItem) {\n\t\t\tif(menuItem.phrase) {\n\t\t\t\treturn this.$p.t(menuItem.phrase)\n\t\t\t} else {\n\t\t\t\treturn menuItem.name\n\t\t\t}\n\t\t}\n\t},\n\ttemplate:/*html*/`\n\t
    {{$p.t('lehre','lehrveranstaltungsUnavailable')}}
    \n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t

    {{ getMenuName(menuItem) }}

    \n\t\t\t\t\t\t
    {{text}}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t`\n}","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetLvMenu(lvid, studiensemester_kurzbz) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/LvMenu/getLvMenu/${lvid}/${studiensemester_kurzbz}`\n\t\t};\n\t}\n};","import BsModal from \"../../Bootstrap/Modal.js\";\nimport LvMenu from \"./LvMenu.js\";\n\nimport ApiAddons from '../../../api/factory/addons.js';\n\nexport default {\n \n props:{\n event:{\n type:Object,\n required:true,\n default:null,\n },\n\t\tstudiensemester: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\t\ttitel: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\t\t// prop used to preselect a menu item and skip the grid overview\n\t\tpreselectedMenu: {\n\t\t\ttype: Object,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t}\n },\n data(){\n return {\n result: false,\n menu: [],\n\t\t\tisMenuSelected:false,\n\t\t\thasLvPlanEintraege: true,\n\t\t\tlvEvaluierungMessage: \"\",\n }\n },\n mixins:[BsModal],\n components:{\n BsModal,\n\t\tLvMenu,\n },\n\tinject: [\"studium_studiensemester\"],\n methods:{\n \n hiddenModal: function(){\n\t\t\tthis.isMenuSelected = false;\n },\n showModal: function(){\n\t\t\tif (!this.preselectedMenu) {\n this.$api\n\t\t\t\t\t.call(ApiAddons.getLvMenu(this.event.lehrveranstaltung_id, (this.studiensemester ?? this.event.studiensemester_kurzbz)))\n .then(res => {\n \t\t\t\t\tif (res.data) {\n \t\t\t\t\t\tthis.menu = res.data;\n \t\t\t\t\t}\n \t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.isMenuSelected = true;\n\t\t\t}\n\n\t\t\t// check lv evaluierung info\n\t\t\tif (this.studium_studiensemester) {\n\t\t\t\tthis.$fhcApi.factory.studium.getLvEvaluierungInfo(this.studium_studiensemester, this.event.lehreinheit_id ?? this.event.lehrveranstaltung_id)\n\t\t\t\t\t.then(data => data.data)\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tthis.lvEvaluierungMessage = res.message;\n\t\t\t\t\t})\n\t\t\t}\n\n\t\t\t// check if the lv has lvplan entries for this studiensemester\n\t\t\tif (this.studiensemester && this.event) {\n\t\t\t\treturn this.$fhcApi.factory.studium.getLvPlanForStudiensemester(this.studiensemester, this.event.lehreinheit_id ?? this.event.lehrveranstaltung_id)\n\t\t\t\t\t.then(data => data.data)\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tif (Array.isArray(res) && res.length > 0) {\n\t\t\t\t\t\t\tthis.hasLvPlanEintraege = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.hasLvPlanEintraege = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}\n\t\t\t\n },\n },\n\tmounted(){\n this.modal = this.$refs.modalContainer;\n },\n\tbeforeUnmount(){\n\t\tthis.$refs.modalContainer.hide();\n\t},\n template:/*html*/`\n \n\n\t\t\n \n \n \n\n \n `,\n};","import MylvSemesterStudiengang from \"./Semester/Studiengang.js\";\n\nexport default {\n\tcomponents: {\n\t\tMylvSemesterStudiengang\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tstudien_semester: Vue.computed(() => this.semester) \n\t\t}\n\t},\n\tprops: {\n\t\tsemester: [String, Number],\n\t\tlvs: Array\n\t},\n\tcomputed: {\n\t\tready() { return this.lvs !== null; },\n\t\tstudiengaenge() {\n\t\t\treturn [... new Map(\n\t\t\t\tthis.lvs\n\t\t\t\t.map(lv => [\n\t\t\t\t\tlv.studiengang_kz + '#' + lv.semester, \n\t\t\t\t\t{\n\t\t\t\t\t\tstudiengang_kz: lv.studiengang_kz, \n\t\t\t\t\t\tbezeichnung: lv.sg_bezeichnung,\n\t\t\t\t\t\tsg_bezeichnung_eng: lv.sg_bezeichnung_eng,\n\t\t\t\t\t\tkuerzel: lv.studiengang_kuerzel, \n\t\t\t\t\t\tsemester: lv.semester\n\t\t\t\t\t}\n\t\t\t\t])\n\t\t\t).values()].sort((a, b) => a.bezeichnung.toLowerCase() == b.bezeichnung.toLowerCase() ? a.semester > b.semester : a.bezeichnung.toLowerCase() > b.bezeichnung.toLowerCase());\n\t\t},\n\t},\n\tmethods: {\n\t\tlvsForStudiengang(studiengang) {\n\t\t\treturn this.lvs.filter(lv => lv.studiengang_kz == studiengang.studiengang_kz && lv.semester == studiengang.semester);\n\t\t}\n\t},\n\ttemplate: `
    \n\t\t\n\t
    \n\t
    \n\t\t\n\t
    `\n};","import MylvSemesterStudiengangLv from \"./Studiengang/Lv.js\";\nimport Phrasen from \"../../../../mixins/Phrasen.js\";\n\nexport default {\n\tcomponents: {\n\t\tMylvSemesterStudiengangLv\n\t},\n\tmixins: [\n\t\tPhrasen\n\t],\n\tprops: {\n\t\tbezeichnung: String,\n\t\tkuerzel: String,\n\t\tsemester: [String,Number],\n\t\tlvs: Array,\n\t\tsg_bezeichnung_eng: String\n\t},\n\tcomputed: {\n\t\tlehrveranstaltungen() {\n\t\t\treturn [... new Map(\n\t\t\t\tthis.lvs\n\t\t\t\t.map(lv => [\n\t\t\t\t\tlv.lehrveranstaltung_id, \n\t\t\t\t\tlv\n\t\t\t\t])\n\t\t\t).values()]\n\t\t}\n\t},\n\tmethods: {\n\t\tnote(lv) {\n\t\t\treturn lv.benotung ? lv.znote || lv.lvnote || null : null;\n\t\t}\n\t},\n\ttemplate: `
    \n\t\t
    \n\t\t\t

    {{$p.user_language.value === 'English' ? sg_bezeichnung_eng : bezeichnung}} - {{kuerzel}}\n\t\t\t\t{{semester}}.{{$p.t('lehre/semester')}}\n\t\t\t

    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    `\n};","import LvPruefungen from \"./Lv/Pruefungen.js\";\nimport LvInfo from \"./Lv/Info.js\";\nimport Phrasen from \"../../../../../mixins/Phrasen.js\";\nimport LvUebersicht from \"../../LvUebersicht.js\";\n\nimport ApiLehre from '../../../../../api/factory/lehre.js';\nimport ApiAddons from '../../../../../api/factory/addons.js';\n\n// TODO(chris): L10n\n\nexport default {\n\tcomponents:{\n\t\tLvUebersicht,\n\t},\n\tmixins: [\n\t\tPhrasen\n\t],\n\tinject: ['studien_semester'],\n\tprops: {\n\t\tlehrveranstaltung_id: Number,\n\t\tbezeichnung: String,\n\t\tbezeichnung_eng: String,\n\t\tmodule: String,\n\t\tfarbe: String,\n\t\tlvinfo: Boolean,\n\t\tbenotung: Boolean,\n\t\tlvnote: String,\n\t\tlvnotebez: Array,\n\t\tznote: String,\n\t\tznotebez: Array,\n\t\tstudiengang_kuerzel: String,\n\t\tsemester: [String, Number],\n\t\torgform_kurzbz: String,\n\t\tsprache: String,\n\t\tects: String,\n\t\tincoming: Number,\n\t\tpositiv: Boolean,\n\t\tnote_index: String\n\t},\n\tdata: () => {\n\t\treturn {\n\t\t\tpruefungenData: null,\n\t\t\tinfo: null,\n\t\t\tmenu: null,\n\t\t\tpreselectedMenuItem: null,\n\t\t}\n\t},\n\tcomputed: {\n\t\tgradeColor() {\n\t\t\t// early return if value is null or undefined\n\t\t\tif (this.positiv == null) return;\n\t\t\t// returns a suitable color for the given grade\n\t\t\tif (this.positiv)\n\t\t\t{\n\t\t\t\treturn 'var(--fhc-success)';\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn 'var(--fhc-danger)';\n\t\t\t}\n\t\t},\n\t\tis_organisatorische_einheit(){\n\t\t\treturn this.menu == \"organisatorische_einheit\";\n\t\t},\n\t\temptyMenu(){\n\t\t\treturn !this.menu || !Array.isArray(this.menu) || Array.isArray(this.menu) && this.menu.length == 0;\n\t\t},\n\t\tbodyStyle() {return {};\n\t\t\t/*const bodyStyle = {};\n\t\t\tif (this.farbe)\n\t\t\t\tbodyStyle['background-color'] = '#' + this.farbe;\n\t\t\treturn bodyStyle;*/\n\t\t},\n\t\tgrade() {\n\t\t\tconst languageIndex = this.$p.user_language.value === 'English' ? 1 : 0\n\t\t\tif(this.benotung && this.znotebez?.length) {\n\t\t\t\treturn this.znotebez[languageIndex]\n\t\t\t} else if(this.benotung && this.lvnotebez?.length) {\n\t\t\t\treturn this.lvnotebez[languageIndex]\n\t\t\t} else return null\n\t\t},\n\t\tLvHasPruefungenInformation(){\n\t\t\treturn this.pruefungenData && this.pruefungenData.length > 0;\n\t\t},\n\t},\n\tmethods: {\n\t\t\n\t\tfetchMenu(lehrveranstaltung_id = this.lehrveranstaltung_id, studien_semester = this.studien_semester) {\n\t\t\treturn this.$api\n\t\t\t\t.call(ApiAddons.getLvMenu(lehrveranstaltung_id, studien_semester))\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.menu = res.data;\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tthis.$fhcAlert.handleSystemError(error);\n\t\t\t\t\tthis.menu = [];\n\t\t\t\t});\n\t\t},\n\n\t\tc4_link(menuItem) {\n\t\t\tif (!menuItem) return null;\n\t\t\tif (Array.isArray(menuItem.c4_moodle_links) && menuItem.c4_moodle_links.length) {\n\t\t\t\treturn '#';\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn menuItem.c4_link ?? null;\n\t\t\t}\n\t\t},\n\t\topenLvOption(menuItem){\n\t\t\tif (menuItem.id == \"core_menu_mailanstudierende\"){\n\t\t\t\twindow.location.href = menuItem.c4_link;\n\t\t\t} else if (menuItem.id == \"core_menu_digitale_anwesenheitslisten\") {\n\t\t\t\twindow.location.href = menuItem.c4_link;\n\t\t\t} else{\n\t\t\t\tthis.preselectedMenuItem = menuItem;\n\t\t\t\tVue.nextTick(() => {\n\t\t\t\t\tthis.$refs.lvUebersicht.show();\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\topenPruefungen() {\n\t\t\t// early return if the pruefungenData is empty or not set\n\t\t\tif (!this.LvHasPruefungenInformation) return;\n\n\t\t\tLvPruefungen.popup({\n\t\t\t\tpruefungenData: this.pruefungenData, \n\t\t\t\tbezeichnung: this.bezeichnung\n\t\t\t});\n\t\t},\n\t\topenInfos() {\n\t\t\tif (!this.info) {\n\t\t\t\tthis.info = true;\n\t\t\t\t// TODO(chris): load all this params on ajax?\n\t\t\t\tLvInfo.popup({\n\t\t\t\t\tlehrveranstaltung_id: this.lehrveranstaltung_id, \n\t\t\t\t\tbezeichnung: this.bezeichnung,\n\t\t\t\t\tbezeichnung_eng: this.bezeichnung_eng,\n\t\t\t\t\tstudiengang_kuerzel: this.studiengang_kuerzel,\n\t\t\t\t\tsemester: this.semester,\n\t\t\t\t\tstudien_semester: this.studien_semester,\n\t\t\t\t\torgform_kurzbz: this.orgform_kurzbz,\n\t\t\t\t\tsprache: this.sprache,\n\t\t\t\t\tects: this.ects,\n\t\t\t\t\tincoming: this.incoming\n\t\t\t\t}).then(() => this.info = false).catch(() => this.info = false);\n\t\t\t}\n\t\t}\n\t},\n\twatch:{\n\t\tstudien_semester(newValue){\n\t\t\tthis.fetchMenu(this.lehrveranstaltung_id, newValue);\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.$api\n\t\t\t.call(ApiLehre.getStudentPruefungen(this.lehrveranstaltung_id))\n\t\t\t.then(res => res.data)\n\t\t\t.then(pruefungen => {\n\t\t\t\tthis.pruefungenData = pruefungen;\n\t\t\t}); \n\t},\n\tmounted() {\n\t\tthis.fetchMenu(this.lehrveranstaltung_id, this.studien_semester);\n\t},\n\ttemplate: /*html*/`
    \n\t\t\n\n\t\t
    \n\t\t\t\n\t\t\t
    {{ $p.t('lehre/organisationseinheit') }}:
    \n\t\t\t
    {{$p.user_language.value === 'English' ? bezeichnung_eng : bezeichnung}}
    \n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t
    `\n};","import MylvSemester from \"./Semester.js\";\nimport Phrasen from \"../../../mixins/Phrasen.js\";\n\n// TODO(chris): phrase: global/studiensemester_auswaehlen\n// TODO(chris): phrase: next & prev +aria-label\n\nexport default {\n\tcomponents: {\n\t\tMylvSemester\n\t},\n\tmixins: [\n\t\tPhrasen\n\t],\n\tdata: () => {\n\t\treturn {\n\t\t\tfirstLoad: true,\n\t\t\tstudiensemester: null,\n\t\t\tlvs: {},\n\t\t\tcurrentSemester: null\n\t\t};\n\t},\n\tcomputed: {\n\t\tready() {\n\t\t\treturn this.studiensemester !== null && (!this.firstLoad || this.current.lvs !== null);\n\t\t},\n\t\tcurrent() {\n\t\t\tif (this.currentSemester === null)\n\t\t\t\treturn { semester: null, lvs: [] };\n\t\t\tif (this.lvs[this.currentSemester] === undefined) {\n\t\t\t\tthis.lvs[this.currentSemester] = {\n\t\t\t\t\tsemester: this.currentSemester, \n\t\t\t\t\tlvs: null\n\t\t\t\t};\n\t\t\t\taxios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/components/Cis/Mylv/Lvs/' + this.currentSemester).then(res => {\n\t\t\t\t\tthis.lvs[this.currentSemester].lvs = res.data.retval || [];\n\t\t\t\t\tthis.firstLoad = false;\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn this.lvs[this.currentSemester];\n\t\t},\n\t\tnearestSem() {\n\t\t\tlet now = Date.now();\n\t\t\tlet nearestSem = null;\n\t\t\tlet nearestSemDiff = 0;\n\t\t\tthis.studiensemester.forEach(sem => {\n\t\t\t\tlet start = new Date(sem.start);\n\t\t\t\tlet end = new Date(sem.ende);\n\t\t\t\tif (now >= start && now <= end) {\n\t\t\t\t\tnearestSem = sem.studiensemester_kurzbz;\n\t\t\t\t\tnearestSemDiff = 0;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlet diff = Math.min(Math.abs(now - start), Math.abs(now - end));\n\t\t\t\tif (nearestSem === null || diff < nearestSemDiff) {\n\t\t\t\t\tnearestSem = sem.studiensemester_kurzbz;\n\t\t\t\t\tnearestSemDiff = diff;\n\t\t\t\t}\n\n\t\t\t});\n\t\t\treturn nearestSem;\n\t\t},\n\t\tcurrentIsFirst() {\n\t\t\treturn this.studiensemester[0].studiensemester_kurzbz == this.currentSemester;\n\t\t},\n\t\tcurrentIsLast() {\n\t\t\treturn this.studiensemester[this.studiensemester.length-1].studiensemester_kurzbz == this.currentSemester;\n\t\t}\n\t},\n\tmethods: {\n\t\tprevSem() {\n\t\t\tthis.$refs.studiensemester.selectedIndex--;\n\t\t\tthis.$refs.studiensemester.dispatchEvent(new Event('change', { bubbles: true }));\n\t\t},\n\t\tnextSem() {\n\t\t\tthis.$refs.studiensemester.selectedIndex++;\n\t\t\tthis.$refs.studiensemester.dispatchEvent(new Event('change', { bubbles: true }));\n\t\t},\n\t\tupdateRouter(val) {\n\t\t\tthis.$router.push(`/Cis/MyLv/${val}`);\n\t\t}\n\t},\n\tcreated() {\n\t\taxios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/components/Cis/Mylv/Studiensemester').then(res => {\n\t\t\tthis.studiensemester = res.data.retval || [];\n\t\t\tconst routerStudiensemester = this.$route.params.studiensemester;\n\t\t\tif (routerStudiensemester && this.studiensemester.filter(s => s.studiensemester_kurzbz == routerStudiensemester).length)\n\t\t\t\tthis.currentSemester = routerStudiensemester;\n\t\t\telse\n\t\t\t\tthis.currentSemester = this.nearestSem;\n\t\t});\n\t},\n\tbeforeRouteUpdate(to, from, next){\n\t\tif (to.params.studiensemester && this.studiensemester.filter(s => s.studiensemester_kurzbz == to.params.studiensemester).length && to.params.studiensemester != this.currentSemester)\n\t\t\tthis.currentSemester = to.params.studiensemester;\n\t\tnext();\n\n\t},\n\ttemplate: `\n\n\t

    {{$p.t('lehre/myLV')}}

    \n\t
    \n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t{{$p.t('lehre/noLvFound')}}\n\t\t
    \n\t\t\n\t
    \n\t
    \n\t\t\n\t
    `\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport const CoreFetchCmpt = {\n\temits: ['dataFetched'], // this component can emit the event dataFetched that it is catched by this component itself\n\tprops: {\n\t\trefresh: { // to refresh this component\n\t\t\ttype: Boolean\n\t\t},\n\t\tapiFunction: { // the function to call, must return a Promise\n\t\t\trequired: true,\n\t\t\ttype: Function\n\t\t},\n\t\tapiFunctionParameters: {} // parameters for the apiFunction, type mixed, optional\n\t},\n\twatch: {\n\t\t/**\n\t\t * If the refresh property is changed then call fetchData\n\t\t */\n\t\trefresh: function (newValue, oldValue) {\n\t\t\tthis.fetchData();\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tloading: false, // if in loading or not\n\t\t\terror: false, // if an error occurred while loading data\n\t\t\terrorMessage: null // the error message\n\t\t};\n\t},\n\tcreated: function() {\n\t\tthis.fetchData();\n\t},\n\tmethods: {\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchData: function() {\n\t\t\tthis.loading = true; // loader started\n\t\t\tthis.error = false;\n\t\t\tthis.errorMessage = null;\n\n\t\t\t// Checks if the apifunction is a callable function\n\t\t\tif (typeof this.apiFunction == \"function\")\n\t\t\t{\n\t\t\t\t// Call the function stored in apiFunction\n\t \t\tlet apiFunctionResult = this.apiFunction(this.apiFunctionParameters);\n\n\t\t\t\t// It is expected that the function returns a Promise\n\t\t\t\tif (apiFunctionResult instanceof Promise)\n\t\t\t\t{\n\t\t\t\t\tapiFunctionResult\n\t\t\t\t\t\t.then(this.successHandler) // on success\n\t\t\t\t\t\t.catch(this.errorHandler) // on error\n\t\t\t\t\t\t.finally(this.finallyHandler); // finally in any case\n\t\t\t\t}\n\t\t\t\telse // otherwise display an error\n\t\t\t\t{\n\t\t\t\t\tthis.setError(\"The called apiFunction does not return a Promise\");\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // otherwise display an error\n\t\t\t{\n\t\t\t\tthis.setError(\"Property apiFunction is not a function\");\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsetError: function(errorMessage) {\n\t\t\tthis.loading = false; // loading ended\n\t\t\tthis.error = true; // error occurred\n\t\t\tthis.errorMessage = errorMessage; // save the error message\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsuccessHandler: function(response) {\n\t\t\tthis.$emit('dataFetched', response ? response.data : undefined); // trigger the event dataFetched\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\terrorHandler: function(error) {\n\t\t\tif (error.response?.data?.retval)\n\t\t\t\tthis.setError(error.response.data.retval);\n\t\t\telse if (error.data?.message)\n\t\t\t\tthis.setError(error.data.message);\n\t\t\telse\n\t\t\t\tthis.setError(error.message);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfinallyHandler: function() {\n\t\t\tthis.loading = false; // loading ended\n\t\t}\n\t},\n\ttemplate: `\n\t\t\n\t\t\t
    Loading...
    \n\t\t
    \n\t\t\n\t\t\t
    {{ errorMessage }}
    \n\t\t
    \n\t\t\n\t`\n};\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nconst FILTER_COMPONENT_NEW_FILTER = 'Filter Component New Filter';\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\tfilters: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tcolumns: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tfields: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t}\n\t},\n\temits: {\n\t\tswitchFilter: ['filterId'],\n\t\tapplyFilterConfig: ['filterFields'],\n\t\tsaveCustomFilter: ['customFilterName']\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tcurrentFields: []\n\t\t};\n\t},\n\tcomputed: {\n\t\ttypes() {\n\t\t\treturn this.columns.reduce((a,c) => {\n\t\t\t\tlet type = c.type.toLowerCase();\n\t\t\t\tif (type.indexOf('int') >= 0)\n\t\t\t\t\ta[c.name] = 'Numeric';\n\t\t\t\telse if (\n\t\t\t\t\ttype.indexOf('varchar') >= 0 || \n\t\t\t\t\ttype.indexOf('text') >= 0 || \n\t\t\t\t\ttype.indexOf('bpchar') >= 0\n\t\t\t\t)\n\t\t\t\t\ta[c.name] = 'Text';\n\t\t\t\telse if (\n\t\t\t\t\ttype.indexOf('timestamp') >= 0 || \n\t\t\t\t\ttype.indexOf('date') >= 0\n\t\t\t\t)\n\t\t\t\t\ta[c.name] = 'Date';\n\t\t\t\telse\n\t\t\t\t\ta[c.name] = '';\n\t\t\t\treturn a;\n\t\t\t}, {});\n\t\t}\n\t},\n\twatch: {\n\t\tfields(n) {\n\t\t\tthis.currentFields = n;\n\t\t}\n\t},\n\tmethods: {\n\t\tswitchFilter(evt) {\n\t\t\tthis.$emit('switchFilter', evt.currentTarget.value);\n\t\t},\n\t\tapplyFilterConfig() {\n\t\t\tconst filteredFields = this.currentFields.filter(el => el.name != FILTER_COMPONENT_NEW_FILTER);\n\t\t\tif (filteredFields.filter(el => el.condition == \"\").length)\n\t\t\t\talert(\"Please fill all the filter options\");\n\t\t\telse\n\t\t\t\tthis.$emit('applyFilterConfig', filteredFields);\n\t\t},\n\t\taddField(evt) {\n\t\t\tthis.currentFields.push({\n\t\t\t\tname: FILTER_COMPONENT_NEW_FILTER\n\t\t\t});\n\t\t},\n\t\tremoveField(index) {\n\t\t\tthis.currentFields.splice(index, 1);\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\tFilter {{ index + 1 }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t`\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\tfields: Array,\n\t\tselected: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tnames: {\n\t\t\ttype: Object,\n\t\t\tdefault: {}\n\t\t}\n\t},\n\temits: {\n\t\thide: ['fieldName'],\n\t\tshow: ['fieldName']\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tselectedFields: []\n\t\t};\n\t},\n\twatch: {\n\t\tselected(n) {\n\t\t\tthis.selectedFields = n;\n\t\t}\n\t},\n\tmethods: {\n\t\ttoggle(field) {\n\t\t\tif (this.selectedFields.indexOf(field) != -1)\n\t\t\t{\n\t\t\t\tthis.selectedFields.splice(this.selectedFields.indexOf(field), 1);\n\t\t\t\tthis.$emit('hide', field);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.selectedFields.push(field);\n\t\t\t\tthis.$emit('show', field);\n\t\t\t}\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{{ names[fieldToDisplay] || fieldToDisplay }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\n\t`\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nconst DEFAULT_ICONS = {\n\tjsonLines: 'fa-file-lines',\n\txlsx: 'fa-file-excel',\n\tpdf: 'fa-file-pdf',\n\thtml: 'fa-file-code',\n\tjson: 'fa-file',\n\tcsv: 'fa-file-csv'\n};\nconst DEFAULT_LABELS = {\n\tjsonLines: 'Download as JSONLINES',\n\txlsx: 'Download as XLSX',\n\tpdf: 'Download as PDF',\n\thtml: 'Download as HTML',\n\tjson: 'Download as JSON',\n\tcsv: 'Download as CSV '\n};\n\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\ttabulator: Object,\n\t\tconfig: {\n\t\t\ttype: [Boolean, String, Function, Array, Object],\n\t\t\tdefault: false\n\t\t},\n\t\ticonClass: [String, Array, Object]\n\t},\n\tcomputed: {\n\t\tcurrentConfig() {\n\t\t\tif (!this.config)\n\t\t\t\treturn false;\n\n\t\t\tlet config = this.config;\n\n\t\t\tif (config instanceof Function)\n\t\t\t\treturn [config];\n\n\t\t\tif (config === null)\n\t\t\t\treturn [];\n\n\t\t\tif (this.config === true)\n\t\t\t\tconfig = ['csv'];\n\n\t\t\tif (Object.prototype.toString.call(config) === \"[object String]\")\n\t\t\t\tconfig = config.split(',');\n\n\t\t\tif (typeof config === 'object' && !Array.isArray(config)) {\n\t\t\t\tlet newConfig = [];\n\t\t\t\tfor (var k in config) {\n\t\t\t\t\tvar v = config[k], type;\n\t\t\t\t\t\n\t\t\t\t\tif (!v)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\n\t\t\t\t\tif (Object.prototype.toString.call(v) === \"[object String]\") {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(v);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\tlabel: v === k ? DEFAULT_LABELS[type] : k,\n\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\t\tif(type !== null) {\n\t\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\t\tlabel: v,\n\t\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\talert('neither ' + k + ' nor ' + v + ' are supported download file types');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (typeof v === 'object' && !Array.isArray(v)) {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tif (v.formatter === undefined)\n\t\t\t\t\t\t\t\tv.formatter = type;\n\t\t\t\t\t\t\tif (v.label === undefined)\n\t\t\t\t\t\t\t\tv.label = DEFAULT_LABELS[type];\n\t\t\t\t\t\t\tif (v.icon === undefined)\n\t\t\t\t\t\t\t\tv.icon = DEFAULT_ICONS[type];\n\t\t\t\t\t\t\tnewConfig.push(v);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (v.label === undefined)\n\t\t\t\t\t\t\t\tv.label = k;\n\t\t\t\t\t\t\tnewConfig.push(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\tlabel: DEFAULT_LABELS[type],\n\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\talert(k + ' is not a supported download file type');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconfig = newConfig;\n\t\t\t}\n\n\t\t\tif (Array.isArray(config))\n\t\t\t{\n\t\t\t\tconfig = config.map(el => {\n\t\t\t\t\tif (Object.prototype.toString.call(el) === \"[object String]\") {\n\t\t\t\t\t\tlet formatter = this.stringToFileFormatter(el);\n\t\t\t\t\t\tif (formatter === null)\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[formatter],\n\t\t\t\t\t\t\tlabel: DEFAULT_LABELS[formatter],\n\t\t\t\t\t\t\tformatter\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (el instanceof Function)\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tformatter: el\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (typeof el === 'object' && !Array.isArray(el) && el !== null) {\n\t\t\t\t\t\tif (el.formatter instanceof Function)\n\t\t\t\t\t\t\treturn el;\n\t\t\t\t\t\tif (this.validateFileFormatter(el.formatter))\n\t\t\t\t\t\t\treturn el;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn null;\n\t\t\t\t}).filter(el => el !== null);\n\n\t\t\t\tif (config.length < 2)\n\t\t\t\t\treturn config;\n\n\t\t\t\tif (config.filter(el => el.label || el.icon).length == config.length)\n\t\t\t\t\treturn config;\n\n\t\t\t\talert('Config not valid');\n\t\t\t}\n\n\t\t\treturn [];\n\t\t}\n\t},\n\tmethods: {\n\t\tstringToFileFormatter(input) {\n\t\t\tlet lcInput = input.toLowerCase();\n\t\t\t\n\t\t\tif (lcInput == 'jsonlines')\n\t\t\t\treturn 'jsonLines';\n\t\t\t\n\t\t\tif (['xlsx', 'pdf', 'html', 'json', 'csv'].includes(lcInput))\n\t\t\t\treturn lcInput;\n\n\t\t\treturn null;\n\t\t},\n\t\tvalidateFileFormatter(input) {\n\t\t\tlet formatter = this.stringToFileFormatter(input);\n\t\t\tif (!formatter) {\n\t\t\t\talert(input + ' is not a supported file formatter');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (formatter == 'xlsx') {\n\t\t\t\tif (!window.XLSX) {\n\t\t\t\t\talert('XLSX Library not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (formatter == 'pdf') {\n\t\t\t\tif (!window.jspdf) {\n\t\t\t\t\talert('jsPDF Library not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar doc = new jspdf.jsPDF({});\n\t\t\t\tif (!doc.autoTable) {\n\t\t\t\t\talert('jsPDF-AutoTable Plugin not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tdownload(config) {\n\t\t\tthis.tabulator.download(config.formatter, config.file, config.options)\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t`\n};\n\n","const elementDataMap = new WeakMap();\n\nexport default {\n\tmounted(el, binding) {\n\t\tlet open = false;\n\t\telementDataMap.set(el, evt => {\n\t\t\tif (!open)\n\t\t\t\treturn;\n\n\t\t\tif (el.contains(evt.target))\n\t\t\t\treturn;\n\n\t\t\tconst collapse = bootstrap.Collapse.getInstance(el)\n\t\t\tif (collapse)\n\t\t\t\tcollapse.hide();\n\t\t});\n\t\tel.addEventListener('shown.bs.collapse', () => {\n\t\t\topen = true;\n\t\t});\n\t\tel.addEventListener('hide.bs.collapse', () => {\n\t\t\topen = false;\n\t\t});\n\t\tdocument.addEventListener('click', elementDataMap.get(el), true);\n\t},\n\tbeforeUnmount(el, binding) {\n\t\tdocument.removeEventListener('click', elementDataMap.get(el));\n\t\tdelete el.collapsibleAutoHideFunc;\n\t}\n}","/**\n * This may need changes if Tabulator gets updated!\n *\n * Current working Version: 5.5.2\n * \n * This is a copy of the fitDataStretch function. The only difference\n * is the check for frozen columns on line 22.\n */\n\nexport default window.Tabulator?.extendModule(\"layout\", \"modes\", {\n\tfitDataStretchFrozen(columns, forced) {\n\t\tvar colsWidth = 0,\n\t\ttableWidth = this.table.rowManager.element.clientWidth,\n\t\tgap = 0,\n\t\tlastCol = false;\n\n\t\tcolumns.forEach((column, i) => {\n\t\t\tif (!column.widthFixed) {\n\t\t\t\tcolumn.reinitializeWidth();\n\t\t\t}\n\n\t\t\tif (this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible && !column.definition.frozen) {\n\t\t\t\tlastCol = column;\n\t\t\t}\n\n\t\t\tif (column.visible) {\n\t\t\t\tcolsWidth += column.getWidth();\n\t\t\t}\n\t\t});\n\n\t\tif (lastCol){\n\t\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\n\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\t\tlastCol.setWidth(0);\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\n\t\t\tif (gap > 0) {\n\t\t\t\tlastCol.setWidth(gap);\n\t\t\t} else {\n\t\t\t\tlastCol.reinitializeWidth();\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\t\t}\n\t}\n});\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/saveCustomFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t};\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/removeCustomFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t};\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/applyFilterFields',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t};\n\t},\n\taddFilterField(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/addFilterField',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t};\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/removeFilterField',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t};\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/filter/getFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t};\n\t},\n\tgetFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/filter/getFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t};\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport {CoreFetchCmpt} from '../../components/Fetch.js';\nimport FilterConfig from './Filter/Config.js';\nimport FilterColumns from './Filter/Columns.js';\nimport TableDownload from './Table/Download.js';\nimport collapseAutoClose from '../../directives/collapseAutoClose.js';\n\nimport moduleLayoutFitDataStretchFrozen from '../../tabulator/layouts/fitDataStretchFrozen.js';\n\nimport ApiFilter from '../../api/factory/filter.js';\n\n//\nconst FILTER_COMPONENT_NEW_FILTER = 'Filter Component New Filter';\nconst FILTER_COMPONENT_NEW_FILTER_TYPE = 'Filter Component New Filter Type';\n\nvar _uuid = 0;\n\n/**\n *\n */\nexport const CoreFilterCmpt = {\n\tcomponents: {\n\t\tCoreFetchCmpt,\n\t\tFilterConfig,\n\t\tFilterColumns,\n\t\tTableDownload\n\t},\n\tdirectives: {\n\t\tcollapseAutoClose\n\t},\n\temits: [\n\t\t'nwNewEntry',\n\t\t'click:new',\n\t\t'tableBuilt',\n\t\t'uuidDefined'\n\t],\n\tprops: {\n\t\tonNwNewEntry: Function, // NOTE(chris): Hack to get the nwNewEntry listener into $props\n\t\ttitle: String,\n\t\tdescription: String,\n\t\tsideMenu: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tfilterType: {\n\t\t\ttype: String\n\t\t},\n\t\ttabulatorOptions: Object,\n\t\ttabulatorEvents: Array,\n\t\ttableOnly: Boolean,\n\t\tnoColumnFilter:Boolean,\n\t\treload: Boolean,\n\t\treloadBtnInfotext: String,\n\t\tdownload: {\n\t\t\ttype: [Boolean, String, Function, Array, Object],\n\t\t\tdefault: false\n\t\t},\n\t\tnewBtnShow: Boolean,\n\t\tnewBtnClass: [String, Array, Object],\n\t\tnewBtnDisabled: Boolean,\n\t\tnewBtnLabel: String,\n\t\tuniqueId: String,\n\n\t\tidField: String,\n\t\tparentIdField: String,\n\t\tcountOnly: Boolean,\n\t\tuseSelectionSpan: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tuuid: 0,\n\t\t\t// FilterCmpt properties\n\t\t\tfilterName: null,\n\t\t\tfilterActive: false,\n\t\t\tfields: null,\n\t\t\tdataset: null,\n\t\t\tdatasetMetadata: null,\n\t\t\tselectedFields: null,\n\t\t\tfilterFields: null,\n\n\t\t\tavailableFilters: null,\n\t\t\tselectedFilter: null,\n\n\t\t\t// FetchCmpt binded properties\n\t\t\tfetchCmptRefresh: false,\n\t\t\tfetchCmptApiFunction: null,\n\t\t\tfetchCmptApiFunctionParams: null,\n\t\t\tfetchCmptDataFetched: null,\n\n\t\t\tfetchResult: null,\n\n\t\t\ttabulator: null,\n\t\t\ttableBuilt: false,\n\t\t\ttabulatorHasSelector: false,\n\t\t\tselectedData: [],\n\t\t\tpersistence: {\n\t\t\t\tsort: true,\n\t\t\t\tcolumns: true,\n\t\t\t\tfilter: false,\n\t\t\t\theaderFilter: false,\n\t\t\t\tgroup: false,\n\t\t\t\tpage: false,\n\t\t\t}\n\t\t};\n\t},\n\tcomputed: {\n\t\tnotSelectedFields() {\n\t\t\tif (!this.fields || !this.selectedFields)\n\t\t\t\treturn null;\n\t\t\treturn this.fields.filter(x => this.selectedFields.indexOf(x) === -1)\n\t\t},\n\t\tfilteredData() {\n\t\t\tif (!this.dataset)\n\t\t\t\treturn [];\n\t\t\treturn JSON.parse(JSON.stringify(this.dataset));\n\t\t},\n\t\tfilteredColumns() {\n\t\t\tlet fields = JSON.parse(JSON.stringify(this.fields)) || [];\n\t\t\tlet selectedFields = JSON.parse(JSON.stringify(this.selectedFields)) || [];\n\n\t\t\tlet columns = null;\n\n\t\t\t// If the tabulator options has been provided and it contains the property columns\n\t\t\tif (this.tabulatorOptions && this.tabulatorOptions.hasOwnProperty('columns'))\n\t\t\t\tcolumns = this.tabulatorOptions.columns;\n\n\t\t\t// If columns is not an array or it is an array with less elements then the array fields\n\t\t\tif (!Array.isArray(columns) || (Array.isArray(columns) && columns.length < fields.length))\n\t\t\t{\n\t\t\t\tcolumns = []; // set it as an empty array\n\n\t\t\t\t// Loop throught all the retrieved columns from database\n\t\t\t\tfor (let field of fields)\n\t\t\t\t{\n\t\t\t\t\t// Create a new column having the title equal to the field name\n\t\t\t\t\tlet column = {\n\t\t\t\t\t\ttitle: field,\n\t\t\t\t\t\tfield: field\n\t\t\t\t\t};\n\n\t\t\t\t\t// If the column has to be displayed or not\n\t\t\t\t\tcolumn.visible = selectedFields.indexOf(field) >= 0;\n\n\t\t\t\t\t// Add the new column to the list of columns\n\t\t\t\t\tcolumns.push(column);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // the property columns has been provided in the tabulator options\n\t\t\t{\n\t\t\t\t// Loop throught the property columns of the tabulator options\n\t\t\t\tfor (let col of columns)\n\t\t\t\t{\n\t\t\t\t\t// If the column has to be displayed or not\n\t\t\t\t\t/* fields.indexOf(col.field) == -1; ensures displaying formatter colums\n\t\t\t\t\te.g. column with rowSelection checkboxes or with custom formatted action buttons */\n\t\t\t\t\tcol.visible = selectedFields.indexOf(col.field) >= 0 || fields.indexOf(col.field) == -1;\n\n\t\t\t\t\tif (col.hasOwnProperty('resizable'))\n\t\t\t\t\t\tcol.resizable = col.visible;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn columns;\n\t\t},\n\t\tfieldIdsForVisibilty() {\n\t\t\tif (!this.tableBuilt)\n\t\t\t\treturn [];\n\t\t\treturn this.tabulator.getColumns().filter(col => {\n\t\t\t\tlet def = col.getDefinition();\n\t\t\t\treturn !def.frozen && def.title && def.formatter != \"responsiveCollapse\";\n\t\t\t}).map(col => col.getField());\n\t\t},\n\t\tfieldNames() {\n\t\t\tif (!this.tableBuilt)\n\t\t\t\treturn {};\n\t\t\treturn this.tabulator.getColumns().reduce((res, col) => {\n\t\t\t\tres[col.getField()] = col.getDefinition().title;\n\t\t\t\treturn res;\n\t\t\t}, {});\n\t\t},\n\t\tidExtra() {\n\t\t\tif (!this.uuid)\n\t\t\t\treturn '';\n\t\t\treturn '-' + this.uuid;\n\t\t},\n\t\tcolumnsForFilter() {\n\t\t\tif (!this.filteredColumns || !this.datasetMetadata)\n\t\t\t\treturn [];\n\t\t\tconst filterTitles = this.filteredColumns.reduce((a,c) => {\n\t\t\t\ta[c.field] = c.title;\n\t\t\t\treturn a;\n\t\t\t}, {});\n\t\t\treturn this.datasetMetadata.map(el => ({...el, ...{title: filterTitles[el.name]}}));\n\t\t}\n\t},\n\tmethods: {\n\t\treloadTable() {\n\t\t\tif (this.tableOnly)\n\t\t\t\tthis.tabulator.setData();\n\t\t\telse\n\t\t\t\tthis.getFilter();\n\t\t},\n\t\tasync initTabulator() {\n\t\t\tlet placeholder = '< Phrasen Plugin not loaded! >';\n\t\t\tif (this.$p) {\n\t\t\t\tawait this.$p.loadCategory('ui');\n\t\t\t\tplaceholder = this.$p.t('ui/keineDatenVorhanden');\n\t\t\t}\n\n\t\t\tif (!this.tableOnly) {\n\t\t\t\t// prefetch data to get fields & selectedFields for filteredColumns & filteredData\n\t\t\t\tawait new Promise(resolve => {\n\t\t\t\t\tconst filterId = window.location.hash ? window.location.hash.slice(1) : null;\n\n\t\t\t\t\tconst resolvePromiseFunc = data => {\n\t\t\t\t\t\tthis.setRenderData(data);\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t};\n\t\t\t\t\t// get the filter data\n\t\t\t\t\tif (filterId === null)\n\t\t\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilter(wsParams)),\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tresolvePromiseFunc\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilterById(wsParams)),\n\t\t\t\t\t\t\t{ filterId },\n\t\t\t\t\t\t\tresolvePromiseFunc\n\t\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Define a default tabulator options in case it was not provided\n\t\t\tlet tabulatorOptions = {...{\n\t\t\t\t\tlayout: \"fitDataStretchFrozen\",\n\t\t\t\t\tmovableColumns: true,\n\t\t\t\t\tcolumnDefaults:{\n\t\t\t\t\t\ttooltip: true\n\t\t\t\t\t},\n\t\t\t\t\tplaceholder,\n\t\t\t\t\tpersistence: this.persistence,\n\t\t\t\t}, ...(this.tabulatorOptions || {})};\n\n\t\t\t// set default height if no height property is set\n\t\t\tif (tabulatorOptions.height === undefined &&\n\t\t\t\ttabulatorOptions.minHeight === undefined &&\n\t\t\t\ttabulatorOptions.maxHeight === undefined) {\n\t\t\t\ttabulatorOptions.height = 500;\n\t\t\t}\n\n\t\t\tif (!this.tableOnly) {\n\t\t\t\ttabulatorOptions.data = this.filteredData;\n\t\t\t\ttabulatorOptions.columns = this.filteredColumns;\n\t\t\t} else {\n\t\t\t\ttabulatorOptions.columns.forEach(col => {\n\t\t\t\t\tif (col.visible === undefined)\n\t\t\t\t\t\tcol.visible = true;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (tabulatorOptions.selectable || (tabulatorOptions.columns && tabulatorOptions.columns.filter(el => el.formatter == 'rowSelection').length))\n\t\t\t\tthis.tabulatorHasSelector = true;\n\n\t\t\tif (this.idField) {\n\t\t\t\t// enable nested tabulator if parent Id given\n\t\t\t\tif (this.parentIdField) tabulatorOptions.dataTree = true;\n\t\t\t\t// set tabulator index\n\t\t\t\ttabulatorOptions.index = this.idField;\n\t\t\t}\n\n\t\t\t// Start the tabulator with the build options\n\t\t\tthis.tabulator = new Tabulator(\n\t\t\t\tthis.$refs.table,\n\t\t\t\ttabulatorOptions\n\t\t\t);\n\t\t\t// If event handlers have been provided\n\t\t\tif (Array.isArray(this.tabulatorEvents) && this.tabulatorEvents.length > 0)\n\t\t\t{\n\t\t\t\t// Attach all the provided event handlers to the started tabulator\n\t\t\t\tfor (let evt of this.tabulatorEvents)\n\t\t\t\t\tthis.tabulator.on(evt.event, evt.handler);\n\t\t\t}\n\t\t\tthis.tabulator.on('tableBuilt', () => {this.tableBuilt = true; this.$emit('tableBuilt');});\n\t\t\tthis.tabulator.on(\"rowSelectionChanged\", data => {\n\t\t\t\tthis.selectedData = data;\n\t\t\t});\n\n\t\t\t// if nested tabulator, restructure data\n\t\t\tif (this.parentIdField && this.idField) {\n\t\t\t\tthis.tabulator.on(\"dataLoading\", data => {\n\t\t\t\t\tlet toDelete = [];\n\n\t\t\t\t\t// loop through all data\n\t\t\t\t\tfor (let childIdx = 0; childIdx < data.length; childIdx++)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet child = data[childIdx];\n\n\t\t\t\t\t\t// if it has parent id, it is a child\n\t\t\t\t\t\tif (child[this.parentIdField])\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// append the child on the right place. If parent found, mark original sw child on 0 level for deleting\n\t\t\t\t\t\t\tif (this.appendChild(data, child)) toDelete.push(childIdx);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// delete the marked children from 0 level\n\t\t\t\t\tfor (let counter = 0; counter < toDelete.length; counter++)\n\t\t\t\t\t{\n\t\t\t\t\t\t// decrease index by counter as index of data array changes after every deletion\n\t\t\t\t\t\tdata.splice(toDelete[counter] - counter, 1);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (this.tableOnly) {\n\t\t\t\tthis.tabulator.on('tableBuilt', () => {\n\t\t\t\t\tconst cols = this.tabulator.getColumns();\n\t\t\t\t\tthis.fields = cols.map(col => col.getField());\n\t\t\t\t\tthis.selectedFields = cols.filter(col => col.isVisible()).map(col => col.getField());\n\t\t\t\t\tif (this.tabulator.options.persistence.headerFilter)\n\t\t\t\t\t\tthis._setHeaderFilter();\n\t\t\t\t});\n\n\t\t\t}\n\n\t\t\tthis.tabulator.on(\"dataFiltered\", filters => {\n\t\t\t\tthis.filterActive = filters.length > 0;\n\t\t\t});\n\t\t},\n\t\tupdateTabulator() {\n\t\t\tif (this.tabulator) {\n\t\t\t\tif (this.tableBuilt)\n\t\t\t\t\tthis._updateTabulator();\n\t\t\t\telse\n\t\t\t\t\tthis.tabulator.on('tableBuilt', this._updateTabulator);\n\t\t\t}\n\t\t},\n\t\t_updateTabulator() {\n\t\t\tthis.tabulatorHasSelector = this.tabulatorOptions.selectable || this.filteredColumns.filter(el => el.formatter == 'rowSelection').length;\n\t\t\tthis.tabulator.setColumns(this.filteredColumns);\n\t\t\tthis.tabulator.setData(this.filteredData);\n\t\t\tthis._setHeaderFilter()\n\t\t},\n\t\tclearFilters()\n\t\t{\n\t\t\tlet existingFilters = this.tabulator.getHeaderFilters();\n\t\t\texistingFilters.forEach(filter => {\n\t\t\t\tthis.tabulator.setHeaderFilterValue(filter.field, \"\");\n\t\t\t});\n\t\t\tthis.tabulator.clearFilter();\n\t\t\tthis.filterActive = false;\n\t\t},\n\t\t_setHeaderFilter()\n\t\t{\n\t\t\tconst existingFilters = this.tabulator.getHeaderFilters();\n\t\t\texistingFilters.forEach(filter => {\n\t\t\t\tthis.tabulator.setHeaderFilterValue(filter.field, filter.value);\n\t\t\t});\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tgetFilter() {\n\t\t\tif (this.selectedFilter === null)\n\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilter(wsParams)),\n\t\t\t\t\tnull,\n\t\t\t\t\tthis.render\n\t\t\t\t);\n\t\t\telse\n\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilterById(wsParams)),\n\t\t\t\t\t{\n\t\t\t\t\t\tfilterId: this.selectedFilter\n\t\t\t\t\t},\n\t\t\t\t\tthis.render\n\t\t\t\t);\n\t\t},\n\t\tsetRenderData(data) {\n\t\t\tthis.fetchResult = data;\n\t\t\tthis.filterName = data.filterName;\n\t\t\tthis.dataset = data.dataset;\n\t\t\tthis.datasetMetadata = data.datasetMetadata;\n\n\t\t\tthis.fields = data.fields;\n\t\t\tthis.selectedFields = data.selectedFields;\n\t\t\tthis.filterFields = [];\n\n\t\t\tfor (let i = 0; i < data.datasetMetadata.length; i++)\n\t\t\t{\n\t\t\t\tfor (let j = 0; j < data.filters.length; j++)\n\t\t\t\t{\n\t\t\t\t\tif (data.datasetMetadata[i].name == data.filters[j].name)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet filter = data.filters[j];\n\t\t\t\t\t\tfilter.type = data.datasetMetadata[i].type;\n\n\t\t\t\t\t\tthis.filterFields.push(filter);\n\t\t\t\t\t\t//break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\trender(response) {\n\t\t\tlet data = response;\n\n\t\t\tthis.setRenderData(data);\n\n\t\t\t// If the side menu is active\n\t\t\tif (this.sideMenu === true)\n\t\t\t{\n\t\t\t\tthis.setSideMenu(data);\n\t\t\t}\n\t\t\telse // otherwise use the dropdown in the filter options\n\t\t\t{\n\t\t\t\tthis.setDropDownMenu(data);\n\t\t\t}\n\t\t\tthis.updateTabulator();\n\t\t},\n\t\t/**\n\t\t * Set the menu\n\t\t */\n\t\tsetSideMenu(data) {\n\t\t\tlet filters = data.sideMenu.filters;\n\t\t\tlet personalFilters = data.sideMenu.personalFilters;\n\t\t\tlet filtersArray = [];\n\n\t\t\tfor (let filtersCount = 0; filtersCount < filters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = filters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: filters[filtersCount].filter_id,\n\t\t\t\t\tlink: link + filters[filtersCount].filter_id,\n\t\t\t\t\tdescription: filters[filtersCount].desc,\n\t\t\t\t\tsort: filtersCount,\n\t\t\t\t\tonClickCall: this.handlerGetFilterById\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (let filtersCount = 0; filtersCount < personalFilters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = personalFilters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: personalFilters[filtersCount].filter_id,\n\t\t\t\t\tlink: link + personalFilters[filtersCount].filter_id,\n\t\t\t\t\tdescription: personalFilters[filtersCount].desc,\n\t\t\t\t\tsubscriptDescription: personalFilters[filtersCount].subscriptDescription,\n\t\t\t\t\tsubscriptLinkClass: personalFilters[filtersCount].subscriptLinkClass,\n\t\t\t\t\tsubscriptLinkValue: personalFilters[filtersCount].subscriptLinkValue,\n\t\t\t\t\tsort: filtersCount,\n\t\t\t\t\tonClickCall: this.handlerGetFilterById,\n\t\t\t\t\tonClickSubscriptCall: this.handlerRemoveCustomFilter\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.availableFilters = filtersArray;\n\n\t\t\tthis.$emit(\n\t\t\t\t'nwNewEntry',\n\t\t\t\t{\n\t\t\t\t\tlink: \"#\",\n\t\t\t\t\tdescription: \"Filters\",\n\t\t\t\t\ticon: \"filter\",\n\t\t\t\t\tchildren: filtersArray\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t * Set the drop down menu\n\t\t */\n\t\tsetDropDownMenu(data) {\n\t\t\tlet filters = data.sideMenu.filters;\n\t\t\tlet personalFilters = data.sideMenu.personalFilters;\n\t\t\tlet filtersArray = [];\n\n\t\t\tfor (let filtersCount = 0; filtersCount < filters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = filters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: filters[filtersCount].filter_id,\n\t\t\t\t\toption: filters[filtersCount].filter_id,\n\t\t\t\t\tdescription: filters[filtersCount].desc\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (let filtersCount = 0; filtersCount < personalFilters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = personalFilters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: personalFilters[filtersCount].filter_id,\n\t\t\t\t\toption: personalFilters[filtersCount].filter_id,\n\t\t\t\t\tdescription: personalFilters[filtersCount].desc\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.availableFilters = filtersArray;\n\t\t},\n\t\t/**\n\t\t * Used to start/refresh the FetchCmpt\n\t\t */\n\t\tstartFetchCmpt(apiFunction, apiFunctionParameters, dataFetchedCallback) {\n\t\t\t// Assign the function api of the FetchCmpt binded property\n\t\t\tthis.fetchCmptApiFunction = apiFunction;\n\n\t\t\t// In case a null value is provided set the parameters as an empty object\n\t\t\tif (apiFunctionParameters == null) apiFunctionParameters = {};\n\n\t\t\t// Always needed parameters\n\t\t\tapiFunctionParameters.filterUniqueId = FHC_JS_DATA_STORAGE_OBJECT.called_path + \"/\" + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\t\t\tapiFunctionParameters.filterType = this.filterType;\n\n\t\t\tif (this.uniqueId)\n\t\t\t\tapiFunctionParameters.filterUniqueId += '_' + this.uniqueId;\n\n\t\t\t// Assign parameters to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptApiFunctionParams = apiFunctionParameters;\n\t\t\t// Assign data fetch callback to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptDataFetched = dataFetchedCallback;\n\t\t\t// Set the FetchCmpt binded property refresh to have the component to refresh\n\t\t\t// NOTE: this should be the last one to be called because it triggers the FetchCmpt to start to refresh\n\t\t\tthis.fetchCmptRefresh === true ? this.fetchCmptRefresh = false : this.fetchCmptRefresh = true;\n\t\t},\n\n\t\t// ------------------------------------------------------------------------------------------------------------------\n\t\t// Event handlers\n\n\t\t/**\n\t\t *\n\t\t */\n\t\thandlerSaveCustomFilter(customFilterName) {\n\t\t\tthis.selectedFilter = null;\n\t\t\t//\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.saveCustomFilter(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tcustomFilterName\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\thandlerRemoveCustomFilter(event) {\n\t\t\tlet filterId = event.currentTarget.getAttribute(\"href\").substring(1);\n\t\t\tif (filterId === this.selectedFilter)\n\t\t\t\tthis.selectedFilter = null;\n\t\t\t//\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.removeCustomFilter(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tfilterId: filterId\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\n\t\t/*\n\t\t *\n\t\t */\n\t\thandlerGetFilterById: function(event) {\n\n\t\t\tlet filterId = null;\n\n\t\t\t// Get the attribute href if side menu is rendered\n\t\t\tlet attr = event.currentTarget.getAttribute(\"href\");\n\n\t\t\t// Otherwise get the value of the drop down menu\n\t\t\tif (attr == null)\n\t\t\t{\n\t\t\t\tfilterId = event.currentTarget.value;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfilterId = attr.substring(1);\n\t\t\t}\n\n\t\t\tthis.switchFilter(filterId);\n\t\t},\n\t\tswitchFilter(filterId) {\n\t\t\tthis.selectedFilter = filterId;\n\t\t\tthis.getFilter();\n\t\t},\n\t\tapplyFilterConfig(filterFields) {\n\t\t\tthis.selectedFilter = null;\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.applyFilterFields(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tfilterFields\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\n\t\t// append child to it's parent\n\t\tappendChild(data, child) {\n\t\t\t// get parent id\n\t\t\tlet parentId = child[this.parentIdField];\n\n\t\t\t// loop thorugh all data\n\t\t\tfor (let parentIdx = 0; parentIdx < data.length; parentIdx++)\n\t\t\t{\n\t\t\t\tlet parent = data[parentIdx];\n\n\t\t\t\t// if it's the parent\n\t\t\t\tif (parent[this.idField] == parentId)\n\t\t\t\t{\n\t\t\t\t\t// create children array if not done yet\n\t\t\t\t\tif (!parent._children) parent._children = [];\n\n\t\t\t\t\t// if child is not included in children array, append the child\n\t\t\t\t\tif (!parent._children.includes(child)) parent._children.push(child);\n\n\t\t\t\t\t// parent found\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t// search children for parents\n\t\t\t\telse if (parent._children) this.appendChild(parent._children, child);\n\t\t\t}\n\n\t\t\t// parent not found\n\t\t\treturn false;\n\t\t}\n\t},\n\tbeforeCreate() {\n\t\tif (!this.tableOnly == !this.filterType)\n\t\t\talert('You can not have a filter-type in table-only mode!');\n\t},\n\tcreated() {\n\t\tif (this.sideMenu && (!this.$props.onNwNewEntry || !(this.$props.onNwNewEntry instanceof Function)))\n\t\t\talert('\"nwNewEntry\" listener is mandatory when sideMenu is true');\n\t\tthis.uuid = _uuid++;\n\t\tthis.$emit('uuidDefined', this.uuid)\n\t},\n\tmounted() {\n\t\tthis.initTabulator().then(() => {\n\t\t\tif (!this.tableOnly) {\n\t\t\t\tthis.selectedFilter = window.location.hash ? window.location.hash.slice(1) : null;\n\t\t\t\tthis.render(this.fetchResult);\n\t\t\t}\n\t\t});\n\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t\t\n\n\t\t
    \n\t\t\t
    \n\t\t\t\t

    \n\t\t\t\t\t{{ title }}\n\t\t\t\t

    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{{ selectedData.length }} ausgewählt\n\t\t\t\t\t\t Mit {{ selectedData.length }} ausgewählten:\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t[ {{ filterName }} ]\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\n\n\t\t\n\t\t
    \n\t`\n};\n","export default {\n props: {\n data: Object,\n title: { type: String },\n },\n data() {\n return {};\n },\n created(){\n\n },\n template: /*html*/`\n\t`,\n};\n","export default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: String,\n\t\t}\n\t},\n\tdata() {\n\t\treturn {}\n\t},\n\ttemplate: /*html*/`\n
    \n
    \n {{$p.t('profil','fhAusweisStatus',[data])}}\n
    \n
    `,\n}","export default {\n\t//TODO: To be implemented\n\tprops: {\n\t\tdata: {\n\t\t\ttype: String,\n\t\t},\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tmobile: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tmethods: {\n\t\thideCollapse: function () {\n\t\t\tthis.collapseOpen = false;\n\t\t},\n\t\tshowCollapse: function () {\n\t\t\tthis.collapseOpen = true;\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tcollapseOpen: false,\n\t\t};\n\t},\n\ttemplate: /*html*/ `\n
    \n \n \n
    `,\n};\n","export default {\n props:{\n data:Object,\n view:String,\n withZustelladresse:{\n type:Boolean,\n default:true,\n },\n },\n data(){\n return{}\n },\n created(){\n \n },\n template:/*html*/`\n \n
    \n \n \n
    \n \n
    \n \n
    \n
    \n
    {{$p.t('person','strasse')}}
    \n {{data.strasse}} \n
    \n
    \n \n \n
    \n
    \n
    {{$p.t('global','typ')}}
    \n {{data.typ}} \n
    \n
    \n \n
    \n
    \n
    {{$p.t('person','ort')}}
    \n {{data.ort}} \n
    \n
    \n
    \n
    \n
    {{$p.t('person','plz')}}
    \n {{data.plz}} \n
    \n
    \n\n
    \n
    \n
    {{$p.t('person','zustelladresse')}}
    \n
    \n \n
    \n
    \n
    \n
    \n`\n};","export default{\n props:{\n view:String,\n data:Object,\n },\n data(){\n return {\n\n }\n },\n created(){\n\n }, \n template:/*html*/`\n\t\n`,\n};","export default {\n\tdata() {\n\t\treturn {};\n\t},\n\tprops: {\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdata: {\n\t\t\ttype: Array,\n\t\t},\n\t},\n\ttemplate: /*html*/ `\n
    \n
    \n {{title}}\n
    \n
    \n \n
    \n
    \n\t\t\t\t\n
    \n
    \n
    \n
    `,\n};\n","export default {\n\tdata() {\n\t\treturn {}\n\t},\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t}\n\t},\n\tinject: {\n\t\t// inject info that should not be displayed\n\t\t'studiengang_kz': {\n\t\t\tfrom: 'studiengang_kz',\n\t\t\tdefault: false\n\t\t},\n\t},\n\tcomputed: {\n\t\tgetLinkGruppeListe() {\n\t\t\tif(this.studiengang_kz === false) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\treturn this.data.gruppe?.value && this.data.verband?.value && this.data.semester?.value ? FHC_JS_DATA_STORAGE_OBJECT.app_root \n\t\t\t\t+ 'cis/private/stud_in_grp.php?kz='+this.studiengang_kz+'&sem=' + this.data.semester.value\n\t\t\t\t+ '&verband=' + this.data.verband.value + '&grp=' + this.data.gruppe.value : ''\n\t\t},\n\t\tgetLinkVerbandListe() {\n\t\t\tif(this.studiengang_kz === false) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\treturn this.data.verband?.value && this.data.semester?.value ? FHC_JS_DATA_STORAGE_OBJECT.app_root \n\t\t\t\t+ 'cis/private/stud_in_grp.php?kz='+this.studiengang_kz+'&sem=' + this.data.semester.value\n\t\t\t\t+ '&verband=' + this.data.verband.value : ''\n\t\t},\n\t\tgetLinkSemesterListe() {\n\t\t\tif(this.studiengang_kz === false) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\treturn this.data.semester?.value ? FHC_JS_DATA_STORAGE_OBJECT.app_root \n\t\t\t\t+ 'cis/private/stud_in_grp.php?kz='+this.studiengang_kz+'&sem=' + this.data.semester.value : ''\n\t\t}\n\t},\n\tcreated() {\n\t\t//TODO: check if data.Telefon is a valid telefon number to call before using it as a tel: link\n\t},\n\ttemplate: `\n
    \n
    {{title}}
    \n
    \n
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{entry.label }}
    \n\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{{entry.value ?? '-'}}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ entry.value }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ entry.value }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ entry.value }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{{ entry.value ?? '-'}}\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    `\n};","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\t\n\tprofilViewData(uid) {\n\t\tlet url = \"/api/frontend/v1/Profil/profilViewData\";\n\t\tif(uid){\n\t\t\turl += `/${uid}`;\n\t\t}\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: url\n\t\t};\n\t},\n\tfotoSperre(value) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/Profil/fotoSperre/${value}`\n\t\t};\n\t\t\n\t},\n\tisStudent(uid) {\n\t\t// TODO(chris): seems to be called from nowhere?\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Profil/isStudent',\n\t\t\tparams: { uid }\n\t\t};\n\t},\n\tisMitarbeiter(uid) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/Profil/isMitarbeiter/${uid}`\n\t\t};\n\t},\n\tgetZustellAdresse() {\n\t\t// TODO(chris): seems to be called from nowhere?\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Profil/getZustellAdresse'\n\t\t};\n\t},\n\tgetZustellKontakt() {\n\t\t// TODO(chris): seems to be called from nowhere?\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Profil/getZustellKontakt'\n\t\t};\n\t},\n\tgetGemeinden(nation, zip) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/Profil/getGemeinden/${nation}/${zip}`\n\t\t};\n\t\t\n\t},\n\tgetAllNationen() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Profil/getAllNationen'\n\t\t};\n\t},\n};","import DmsItem from './Dms/Item.js';\n\nexport default {\n\tcomponents: {\n\t\tDmsItem\n\t},\n\temits: [\n\t\t'update:modelValue'\n\t],\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: [ FileList, Array ],\n\t\t\trequired: true\n\t\t},\n\t\tmultiple: Boolean,\n\t\tid: String,\n\t\tname: String,\n\t\tinputClass: [String, Array, Object],\n\t\tnoList: Boolean,\n\t\taccept: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\tmethods: {\n\t\tstringifyFile(file) {\n\t\t\treturn JSON.stringify({\n\t\t\t\tlastModified: file.lastModified,\n\t\t\t\tlastModifiedDate: file.lastModifiedDate,\n\t\t\t\tname: file.name,\n\t\t\t\tsize: file.size,\n\t\t\t\ttype: file.type\n\t\t\t});\n\t\t},\n\t\taddFiles(event) {\n\t\t\tif (!this.multiple)\n\t\t\t\treturn this.$emit('update:modelValue', event.target.files);\n\t\t\t\n\t\t\tconst dt = new DataTransfer();\n\t\t\tconst doubles = [];\n\t\t\tfor (var file of this.modelValue) {\n\t\t\t\tdt.items.add(file);\n\t\t\t\tdoubles.push(this.stringifyFile(file));\n\t\t\t}\n\t\t\tfor (var file of event.target.files) {\n\t\t\t\t// NOTE(chris): deep check (with FileReader) would require an async function so we only check the basic attributes\n\t\t\t\tif (doubles.indexOf(this.stringifyFile(file)) < 0)\n\t\t\t\t\tdt.items.add(file);\n\t\t\t}\n\t\t\tthis.$emit('update:modelValue', dt.files);\n\t\t},\n\t\tremoveFile(id) {\n\t\t\tconst fileToRemove = Array.from(this.modelValue)[id];\n\t\t\t\n\t\t\tconst dt = new DataTransfer();\n\t\t\tfor (var file of this.modelValue) {\n\t\t\t\tif (file !== fileToRemove)\n\t\t\t\t\tdt.items.add(file);\n\t\t\t}\n\t\t\tthis.$emit('update:modelValue', dt.files);\n\t\t}\n\t},\n\twatch: {\n\t\tmodelValue(n) {\n\t\t\tif (!n)\n\t\t\t\treturn;\n\t\t\tif (n instanceof FileList) {\n\t\t\t\tif (!this.$refs.upload) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn this.$refs.upload.files = n;\n\t\t\t}\n\n\t\t\tconst dt = new DataTransfer();\n\t\t\tconst dms = [];\n\t\t\tfor (var file of n) {\n\t\t\t\tif (file instanceof File) {\n\t\t\t\t\tdt.items.add(file);\n\t\t\t\t} else {\n\t\t\t\t\tconst dmsFile = new File([JSON.stringify(file)], file.name, {\n\t\t\t\t\t\ttype: 'application/x.fhc-dms+json'\n\t\t\t\t\t});\n\t\t\t\t\tdt.items.add(dmsFile);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$emit('update:modelValue', dt.files);\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t\n\t\t
      \n\t\t\t\n\t\t\t\n\t\t
    \n\t
    `\n}","export default {\n\temits: [\n\t\t'delete'\n\t],\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: [File, Object],\n\t\t\trequired: true\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tpreview: ''\n\t\t};\n\t},\n\twatch: {\n\t\tmodelValue(n) {\n\t\t\tif (n.type == 'application/x.fhc-dms+json') {\n\t\t\t\tn.text().then(result => {\n\t\t\t\t\tconst obj = JSON.parse(result);\n\t\t\t\t\tthis.preview = obj.preview || '';\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t},\n\ttemplate: `\n\t
  • \n\t\t\n\t\t{{ modelValue.name }}\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t
  • `\n}\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\t//! API calls for profil update requests\n\tgetStatus() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/getStatus'\n\t\t};\n\t},\n\tgetTopic() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/getTopic'\n\t\t};\n\t},\n\tacceptProfilRequest({profil_update_id, uid, status_message, topic, requested_change}) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/acceptProfilRequest',\n\t\t\tparams: {\n\t\t\t\tprofil_update_id,\n\t\t\t\tuid,\n\t\t\t\tstatus_message,\n\t\t\t\ttopic,\n\t\t\t\trequested_change\n\t\t\t}\n\t\t};\n\t},\n\tdenyProfilRequest({profil_update_id, uid, topic, status_message}) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/denyProfilRequest',\n\t\t\tparams: {\n\t\t\t\tprofil_update_id,\n\t\t\t\tuid,\n\t\t\t\ttopic,\n\t\t\t\tstatus_message\n\t\t\t}\n\t\t};\n\t},\n\tinsertFile(dms, replace = null) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n\t\t\tparams: dms\n\t\t};\n\t},\n\tupdateProfilbild(dms) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: `/api/frontend/v1/ProfilUpdate/updateProfilbild`,\n\t\t\tparams: dms\n\t\t};\n\t},\n\tgetProfilUpdateWithPermission(filter) {\n\t\tconst url_filter = (filter !== '') ? '/' + encodeURIComponent(filter) : '';\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/getProfilUpdateWithPermission' + url_filter\n\t\t};\n\t},\n\tgetProfilRequestFiles(requestID) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`\n\t\t};\n\t},\n\tselectProfilRequest(uid = null, id = null) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/selectProfilRequest',\n\t\t\tparams: {\n\t\t\t\t...(uid ? { uid } : {}),\n\t\t\t\t...(id ? { id } : {})\n\t\t\t}\n\t\t};\n\t},\n\tinsertProfilRequest(topic, payload, fileID = null) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/insertProfilRequest',\n\t\t\tparams: {\n\t\t\t\ttopic,\n\t\t\t\tpayload,\n\t\t\t\t...(fileID ? { fileID } : {})\n\t\t\t}\n\t\t};\n\t},\n\tupdateProfilRequest(topic, payload, ID, fileID = null) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/updateProfilRequest',\n\t\t\tparams: {\n\t\t\t\ttopic,\n\t\t\t\tpayload,\n\t\t\t\tID,\n\t\t\t\t...(fileID ? { fileID } : {})\n\t\t\t}\n\t\t};\n\t},\n\tdeleteProfilRequest(requestID) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/deleteProfilRequest',\n\t\t\tparams: { requestID }\n\t\t};\n\t}\n};","import Dms from \"../../../../Form/Upload/Dms.js\";\nimport BsModal from \"../../../../Bootstrap/Modal.js\";\n\nimport ApiProfilUpdate from '../../../../../api/factory/profilUpdate.js';\n\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tdmsData: [],\n\t\t};\n\t},\n\tcomponents: {\n\t\tDms,\n\t\tBsModal,\n\t},\n\tmixins: [BsModal],\n\tprops: {\n\t\ttitel: {\n\t\t\ttype: String,\n\t\t},\n\t\tfiles: {\n\t\t\ttype: Array,\n\t\t},\n\t\tupdateID: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tonHideBsModal: Function,\n\t\tonHiddenBsModal: Function,\n\t\tonHidePreventedBsModal: Function,\n\t\tonShowBsModal: Function,\n\t\tonShownBsModal: Function,\n\t},\n\tmethods:{\n\t\tasync uploadImage(){\n\t\t\tif(this.dmsData){\n\t\t\t\tlet formData = new FormData();\n\t\t\t\tformData.append(\"files[]\", this.dmsData[0]);\n\t\t\t\tawait this.$api\n\t\t\t\t\t.call(ApiProfilUpdate.updateProfilbild(formData))\n\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('global','hochgeladen'));\n\t\t\t\t\t\tthis.modal.hide();\n\t\t\t\t\t});\t\n\t\t\t}\n\t\t\t\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.modal = this.$refs.modalContainer.modal;\n\t\tif (this.files) {\n\t\t\tthis.dmsData = this.files;\n\t\t}\n\t},\n\tpopup(options) {\n\t\t\tBsModal.popup.bind(this);\n\t\t\treturn BsModal.popup(null, options);\n\t},\n\ttemplate: /*html*/`\n\n\t\n\t\t\n\t\t\n\t\n `,\n};\n","import ApiProfil from '../../../../api/factory/profil.js';\nimport ImageUpload from '../../Profil/ProfilModal/EditProfilComponents/ImageUpload.js';\n\nexport default {\n\tprops: {\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t},\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t\tfotoStatus:{\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t}\n\t},\n\tcomponents:{\n\t\tImageUpload,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tFotoSperre: this.data.foto_sperre,\n\t\t};\n\t},\n\temits: [\"showEditProfilModal\"],\n\tinject:[\"isEditable\"],\n\n\tmethods: {\n\t\tshowModal(){\n\t\t\tthis.$refs.imageUpload.show();\n\t\t},\n\t\tsperre_foto_function() {\n\t\t\t//TODO: refactor\n\t\t\tif (!this.data) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.$api\n\t\t\t\t.call(ApiProfil.fotoSperre(!this.FotoSperre))\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.FotoSperre = res.data.foto_sperre;\n\t\t\t\t});\n\t\t}\n\t},\n\tcomputed: {\n\t\tget_image_base64_src: function () {\n\t\t\tif (!this.data.foto) {\n\t\t\t\treturn \"\";\n\t\t\t}\n\t\t\treturn \"data:image/jpeg;base64,\" + this.data.foto;\n\t\t},\n\t\tname: function () {\n\t\t\treturn {vorname: this.data.Vorname, nachname: this.data.Nachname};\n\t\t},\n\t\tprofilInfo: function () {\n\t\t\tlet res = {};\n\t\t\tlet notIncludedProperties = [\n\t\t\t\t\"Vorname\",\n\t\t\t\t\"Nachname\",\n\t\t\t\t\"foto_sperre\",\n\t\t\t\t\"foto\",\n\t\t\t];\n\t\t\tObject.keys(this.data).forEach((key) => {\n\t\t\t\tif (!notIncludedProperties.includes(key)) {\n\t\t\t\t\tres[key] = this.data[key];\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn res;\n\t\t},\n\t},\n\ttemplate: /*html*/ `\n\n
    \n\t\n
    \n
    \n
    \n \n
    \n
    \n {{title}}\n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n \"profile\n \n
    \n \n
    \n\t\t\t\t\t\t
    \n \n
    \n
    \n
    \n \n
    \n \n \n
    \n
    \n
    \n
    \n
    {{$p.t('profilUpdate','vorname')}}
    \n {{name.vorname}} \n
    \n
    \n
    \n
    \n
    {{$p.t('profilUpdate','nachname')}}
    \n {{name.nachname}} \n
    \n
    \n
    \n
    \n
    \n
    \n
    {{$p.t('profil',bez)}}
    \n {{wert?wert:'-'}} \n
    \n
    \n
    \n
    \n
    \n`,\n};\n","import Kontakt from \"../ProfilComponents/Kontakt.js\";\nimport EditKontakt from \"./EditProfilComponents/EditKontakt.js\";\nimport Adresse from \"../ProfilComponents/Adresse.js\";\nimport EditAdresse from \"./EditProfilComponents/EditAdresse.js\";\nimport Status from \"./EditProfilComponents/Status.js\";\nimport TextInputDokument from \"./EditProfilComponents/TextInputDokument.js\";\n\nexport default {\n\tname: 'EditProfilSelect',\n\tcomponents: {\n\t\tKontakt,\n\t\tEditKontakt,\n\t\tAdresse,\n\t\tEditAdresse,\n\t\tStatus,\n\t\tTextInputDokument,\n\t},\n\tinject: [\"profilUpdateTopic\", \"isMitarbeiter\"],\n\tprops: {\n\t\tlist: Object,\n\n\t\t//? Prop used to determine how many options the select should initially show\n\t\tsize: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t\t//? Content for the aria label of the select\n\t\tariaLabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tprofilUpdate: String,\n\t\ttopic: String,\n\t\tbreadcrumb: String,\n\t},\n\temits: {\n\t\t//? update:modelValue event is needed to notify the v-model when the value has changed\n\t\t[\"update:profilUpdate\"]: null,\n\t\t[\"update:topic\"]: null,\n\t\t[\"update:breadcrumb\"]: null,\n\t\tsubmit: null,\n\t\tselect: null,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tview: null,\n\t\t\tdata: null,\n\t\t\tbreadcrumbItems: [],\n\t\t\tmodal_topic: this.topic,\n\t\t\tproperties: null,\n\t\t};\n\t},\n\n\tmethods: {\n\t\taddItem: function () {\n\t\t\tthis.view =\n\t\t\t\tthis.modal_topic == this.profilUpdateTopic[\"Private Kontakte\"]\n\t\t\t\t\t? \"EditKontakt\"\n\t\t\t\t\t: \"EditAdresse\";\n\n\t\t\t//? updates the topic when a Kontakt or an Address should be added\n\t\t\tthis.modal_topic =\n\t\t\t\tthis.modal_topic == this.profilUpdateTopic[\"Private Kontakte\"]\n\t\t\t\t\t? this.profilUpdateTopic[\"Add Kontakt\"]\n\t\t\t\t\t: this.profilUpdateTopic[\"Add Adresse\"];\n\t\t\tthis.$emit(\"update:topic\", this.modal_topic);\n\t\t\tthis.breadcrumbItems.push(this.modal_topic);\n\t\t\tthis.$emit(\"update:breadcrumb\", this.breadcrumbItems);\n\n\t\t\tthis.data =\n\t\t\t\tthis.view == \"EditAdresse\"\n\t\t\t\t\t? {\n\t\t\t\t\t\t//? add flag\n\t\t\t\t\t\tadd: true,\n\t\t\t\t\t\tadresse_id: null,\n\t\t\t\t\t\tstrasse: null,\n\t\t\t\t\t\ttyp: null,\n\t\t\t\t\t\tplz: null,\n\t\t\t\t\t\tort: null,\n\t\t\t\t\t\tzustelladresse: false,\n\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\t//? add flag\n\t\t\t\t\t\tadd: true,\n\t\t\t\t\t\tkontakt_id: null,\n\t\t\t\t\t\tkontakttyp: null,\n\t\t\t\t\t\tkontakt: null,\n\t\t\t\t\t\tanmerkung: null,\n\t\t\t\t\t\tzustellung: false,\n\t\t\t\t\t};\n\t\t},\n\n\t\tdeleteItem: function (item) {\n\t\t\t//? delete flag\n\t\t\titem.data.delete = true;\n\t\t\tthis.$emit(\"update:profilUpdate\", item.data);\n\t\t\t//? updates the topic when a Kontakt or an Address should be deleted\n\n\t\t\tthis.modal_topic = this.modal_topic == this.profilUpdateTopic[\"Private Adressen\"]\n\t\t\t\t? this.profilUpdateTopic[\"Delete Adresse\"]\n\t\t\t\t: this.profilUpdateTopic[\"Delete Kontakt\"];\n\t\t\tthis.$emit(\"update:topic\", this.modal_topic);\n\t\t\tthis.$emit(\"submit\");\n\t\t},\n\n\t\tprofilUpdateEmit: function (event) {\n\t\t\t//? passes the updated profil information to the parent component\n\t\t\tthis.$emit(\"update:profilUpdate\", event);\n\t\t},\n\n\t\tupdateOptions: function (event, item) {\n\t\t\tthis.properties = item;\n\t\t\tthis.data = item.data;\n\t\t\tthis.view = item.view;\n\t\t\tif (item.title) {\n\t\t\t\t//? emits the selected topic to the parent component\n\t\t\t\tthis.modal_topic = item.topic;\n\t\t\t\tthis.$emit(\"update:topic\", this.modal_topic);\n\n\t\t\t\t//? emits the new item for the breadcrumb in the parent component\n\t\t\t\tthis.breadcrumbItems.push(item.title);\n\t\t\t} else {\n\t\t\t\tif (item.data.kontakttyp) {\n\t\t\t\t\tthis.breadcrumbItems.push(item.data.kontakttyp);\n\t\t\t\t\tthis.breadcrumbItems.push(item.data.kontakt);\n\t\t\t\t} else if (item.data.strasse) {\n\t\t\t\t\tthis.breadcrumbItems.push(item.data.strasse);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$emit(\"update:breadcrumb\", this.breadcrumbItems);\n\t\t},\n\t},\n\tcomputed: {},\n\tcreated() {\n\t\t//? JSON parse and stringify are used to deep clone the objects\n\t\tthis.properties = {...this.list};\n\t\tthis.data = this.list.data\n\t\t\t? JSON.parse(JSON.stringify(this.list.data))\n\t\t\t: null;\n\t\tthis.view = this.list.view\n\t\t\t? JSON.parse(JSON.stringify(this.list.view))\n\t\t\t: null;\n\t},\n\tmounted() {\n\t},\n\n\ttemplate: /*html*/ `\n \n \n `,\n};\n","export default {\n props: {\n data: Object,\n },\n\n data() {\n return {\n originalValue: null,\n zustellKontakteCount: null,\n };\n },\n\n inject: [\"getZustellkontakteCount\"],\n\n methods: {\n updateValue: function (event, bind) {\n if (bind === \"zustellung\") {\n this.data[bind] = event.target.checked;\n } else {\n //? sets the value of a property to null when an empty string is entered to keep the isChanged function valid\n this.data[bind] = event.target.value === \"\" ? null : event.target.value;\n }\n this.$emit(\"profilUpdate\", this.isChanged ? this.data : null);\n this.zustellKontakteCount = this.getZustellkontakteCount();\n },\n },\n\n computed: {\n showZustellKontakteWarning: function () {\n\t // if the kontakt is already a zustellungskontakt when the user is editing the kontakt, then no warning is shown and the zustellung will be overwritten\n\t if (JSON.parse(this.originalValue).zustellung) {\n\t return false;\n\t }\n\t const kontakteOfSelectedType = this.zustellKontakteCount.filter((element) => {\n\t\t return element.kontakttyp === this.data?.kontakttyp\n\t });\n // if zustellKontakteCount is not 0 and the own kontakt has the flag zustellung set to true\n if (!this.zustellKontakteCount.some((element) => element.kontakt_id === this.data.kontakt_id)) {\n return this.data.zustellung && kontakteOfSelectedType.length;\n }\n return this.kontakteOfSelectedType.length >= 2 && this.data.zustellung;\n },\n isChanged: function () {\n //? returns true if the original passed data object was changed\n if (!this.data.kontakt || !this.data.kontakttyp) {\n return false;\n }\n return JSON.stringify(this.data) !== this.originalValue;\n },\n },\n\n created() {\n this.originalValue = JSON.stringify(this.data);\n this.zustellKontakteCount = this.getZustellkontakteCount();\n },\n \n template:\n /*html*/\n `\n\n
    \n\n
    \n\n\n
    \n
    {{$p.t('profilUpdate','kontaktTyp')}}
    \n\n \n
    \n\n
    \n
    \n\n \n\n\n
    \n
    {{data.kontakttyp?data.kontakttyp:$p.t('global','kontakt')}}
    \n\n \n
    \n\n
    \n
    \n\n
    \n
    {{$p.t('global','anmerkung')}}
    \n\n \n
    \n\n
    \n\n \n
    \n
    \n {{$p.t('profilUpdate','zustell_kontakte_warning')}}\n
    \n
    \n \n\n
    \n {{$p.t('profilUpdate','zustellungsKontakt')}}\n\n \n
    \n
    \n `,\n};\n","import Dms from \"../../../../Form/Upload/Dms.js\";\n\nimport ApiProfil from '../../../../../api/factory/profil.js';\n\nexport default {\n components: {\n AutoComplete: primevue.autocomplete,\n\tDms: Dms\n },\n\n props: {\n data: Object,\n files: {\n type: Array,\n default: []\n },\n },\n\n inject: [\"getZustelladressenCount\", \"updateFileID\", \"isMitarbeiter\"],\n\n data() {\n return {\n gemeinden: [],\n ortschaftnamen: [],\n selectedNation: null,\n nationenList: [],\n originalValue: null,\n zustellAdressenCount: null,\n\t dmsData: [],\n\t fileschanged: false\n };\n },\n\n watch: {\n \"data.gemeinde\": function (newValue, oldValue) {\n this.$emit(\"profilUpdate\", this.isChanged ? this.data : null);\n },\n \"data.ort\": function (newValue, oldValue) {\n this.$emit(\"profilUpdate\", this.isChanged ? this.data : null);\n },\n },\n\n methods: {\n\n autocompleteSearchGemeinden: function (event) {\n this.gemeinden = this.gemeinden.map((gemeinde) => gemeinde);\n },\n\n autocompleteSearchOrtschaftsnamen: function (event) {\n this.ortschaftnamen = this.ortschaftnamen.map((ortschaft) => ortschaft);\n },\n\n getGemeinde: function () {\n //? only query the gemeinde is the nation is Austria and the PLZ is greater than 999 and less than 32000\n if (\n this.data.nation &&\n this.data.nation === \"A\" &&\n this.data.plz &&\n this.data.plz > 999 &&\n this.data.plz < 32000\n ) {\n this.$api\n .call(ApiProfil.getGemeinden(this.data.nation, this.data.plz))\n .then((res) => {\n if (res.data.length) {\n this.gemeinden = [\n ...new Set(\n res.data.map((element) => {\n return element.name;\n })\n ),\n ];\n this.ortschaftnamen = [\n ...new Set(\n res.data.map((element) => {\n return element.ortschaftsname;\n })\n ),\n ];\n }\n });\n } else {\n this.gemeinden = [];\n }\n },\n\n updateValue: function (event, bind) {\n //? sets the value of a property to null when an empty string is entered to keep the isChanged function valid\n if (bind === \"zustelladresse\") {\n this.data[bind] = event.target.checked;\n\t } else if(bind === 'files') {\n\t\t if(this.dmsData.length > 0 && this.dmsData[0].type !== 'application/x.fhc-dms+json') {\n\t\t this.fileschanged = true;\n\t\t }\n\t\t this.updateFileID(this.dmsData);\n } else {\n this.data[bind] = event.target.value === \"\" ? null : event.target.value;\n }\n\n this.$emit(\"profilUpdate\", this.isChanged ? this.data : null);\n // update the zustellAdressen count\n this.zustellAdressenCount = this.getZustelladressenCount();\n },\n\n\tdeleteDmsData: function() {\n\t\tthis.dmsData = [];\n\t\tthis.updateValue(null, 'files');\n\t}\n },\n\n computed: {\n showZustellAdressenWarning: function () {\n\n\t // if the address was already a zustellungsadresse when editing the address, then the warning will not be shown and the zustellungsadresse will just be overwritten\n\t if (JSON.parse(this.originalValue).zustelladresse){\n\t\treturn false;\n\t }\n // if zustellAdressenCount is not 0 and the own kontakt has the flag zustellung set to true\n if (!this.zustellAdressenCount.includes(this.data.adresse_id)) {\n return this.data.zustelladresse && this.zustellAdressenCount.length;\n }\n return this.zustellAdressenCount.length >= 2 && this.data.zustelladresse;\n },\n isChanged: function () {\n if (\n !this.data.strasse ||\n !this.data.plz ||\n !this.data.ort ||\n !this.data.typ ||\n this.dmsData.length === 0\n ) {\n return false;\n }\n\n const datachanged = this.originalValue !== JSON.stringify(this.data);\n return datachanged || this.fileschanged;\n },\n },\n\n created() {\n // get all available nationen\n this.$api\n .call(ApiProfil.getAllNationen())\n .then(res => {\n this.nationenList = res.data;\n this.getGemeinde();\n });\n \n this.originalValue = JSON.stringify(this.data);\n this.zustellAdressenCount = this.getZustelladressenCount();\n },\n\n mounted() {\n if (this.files) {\n this.dmsData = this.files;\n }\n },\n\n template: /*html*/ `\n
    \n \n
    \n
    \n\t {{$p.t('profilUpdate','zustell_adressen_warning')}}\n
    \n
    \n \n\n\n
    \n
    \n \n \n
    \n
    \n\n \n
    \n
    \n
    {{$p.t('person','nation')}}*
    \n \n
    \n
    \n\n \n
    \n
    \n
    {{$p.t('person','plz')}}*
    \n \n
    \n
    \n\n \n
    \n
    \n
    {{$p.t('person','gemeinde')}}*
    \n \n
    \n
    \n\n \n
    \n
    \n
    {{$p.t('person','ort')}}*
    \n \n
    \n
    \n\n \n
    \n
    \n
    {{$p.t('person','strasse')}}*
    \n \n
    \n
    \n \n \n
    \n
    \n
    {{$p.t('profilUpdate','kontaktTyp')}}*
    \n \n
    \n
    \n\n\t
    \n\t\t
    \n\t\t\t
    {{$p.t('profilUpdate','meldebestaetigung')}}*
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t
     
    \n\t\t\t\n\t\t
    \n\t
    \n\n
    \n `,\n};\n","import Adresse from \"../../ProfilComponents/Adresse.js\";\nimport Kontakt from \"../../ProfilComponents/Kontakt.js\";\n\nimport ApiProfilUpdate from '../../../../../api/factory/profilUpdate.js';\n\nexport default {\n components: {\n Adresse,\n Kontakt,\n },\n inject: [\"profilUpdateTopic\"],\n data() {\n return {\n files: null,\n };\n },\n methods: {\n getDocumentLink: function (dms_id) {\n return (\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/Cis/ProfilUpdate/show/${dms_id}`\n );\n },\n },\n computed: {\n getComponentView: function () {\n if (\n this.topic == this.profilUpdateTopic[\"Private Adressen\"] ||\n this.topic == this.profilUpdateTopic[\"Add Adresse\"] ||\n this.topic == this.profilUpdateTopic[\"Delete Adresse\"]\n ) {\n return \"Adresse\";\n } else if (\n this.topic == this.profilUpdateTopic[\"Private Kontakte\"] ||\n this.topic == this.profilUpdateTopic[\"Add Kontakt\"] ||\n this.topic == this.profilUpdateTopic[\"Delete Kontakt\"]\n ) {\n return \"Kontakt\";\n } else {\n return \"text_input\";\n }\n },\n cardHeader: function () {\n if (\n this.topic == this.profilUpdateTopic[\"Delete Addresse\"] ||\n this.topic == this.profilUpdateTopic[\"Delete Kontakt\"]\n ) {\n return \"Delete\";\n } else if (\n this.topic == this.profilUpdateTopic[\"Add Adresse\"] ||\n this.topic == this.profilUpdateTopic[\"Add Kontakt\"]\n ) {\n return \"Add\";\n } else {\n return \"Update\";\n }\n },\n },\n props: {\n data: { type: Object },\n view: { type: String },\n status: { type: String },\n status_message: { type: String },\n status_timestamp: { type: String },\n updateID: { type: Number },\n topic: { type: String },\n },\n created() {\n this.$api\n .call(ApiProfilUpdate.getProfilRequestFiles(this.updateID))\n .then((res) => {\n this.files = res.data;\n });\n },\n template: /*html*/ `\n
    \n\n
    \n
    \n
    {{$p.t('global','status')}}
    \n {{status}} \n
    \n
    \n\n
    \n
    \n
    {{$p.t('global','datum')}}
    \n {{status_timestamp}} \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    {{$p.t('profilUpdate','statusMessage')}}
    \n \n
    \n
    \n
    \n\n\n
    \n
    \n \n {{cardHeader}} \n
    \n
    \n \n \n \n
    \n
    \n\n\t
    \n\t\t
    {{$p.t('profilUpdate','nachweisdokumente')}}
    \n\t\t
    \n\t\t\t{{file.name}}\n\t\t
    \n\t
    \n `,\n};\n","import Dms from \"../../../../Form/Upload/Dms.js\";\n\nexport default {\n data() {\n return {\n dmsData: [],\n originalValue: null,\n };\n },\n components: {\n Dms,\n },\n props: {\n data: {\n type: Object,\n },\n withFiles: {\n type: Boolean,\n default: false,\n },\n files: {\n type: Array,\n },\n updateID: {\n type: Boolean,\n },\n },\n inject:[\"updateFileID\"],\n computed: {\n didFilesChange: function () {\n this.updateFileID(this.dmsData);\n let res = false;\n //? case in which the profilRequest has already associated files \n if(this.files){ \n Array.from(this.dmsData).forEach((file) => {\n if (this.files.some((f) => f.name !== file.name)) {\n res = true;\n }\n });\n return !(this.dmsData.length == this.files.length) || res;\n }\n //? case in which the user creates a new profilRequest\n else{ \n return Array.from(this.dmsData).length? true:false;\n }\n },\n didDataChange: function(){\n return JSON.stringify(this.data) !== this.originalValue;\n },\n isChanged: function () {\n if (this.withFiles) {\n if(this.updateID){\n return (this.didDataChange || this.didFilesChange) && this.dmsData.length;\n }\n return this.didDataChange && this.didFilesChange;\n }\n return this.didDataChange\n },\n },\n emits: [\"profilUpdate\"],\n watch: {\n //? watcher to trigger the event emit when a file was uploaded or removed\n dmsData(value) {\n this.emitChanges();\n },\n },\n methods: {\n stringifyFile(file) {\n\t\t\treturn JSON.stringify({\n\t\t\t\tlastModified: file.lastModified,\n\t\t\t\tlastModifiedDate: file.lastModifiedDate,\n\t\t\t\tname: file.name,\n\t\t\t\tsize: file.size,\n\t\t\t\ttype: file.type\n\t\t\t});\n\t\t},\n emitChanges: function () {\n if (this.isChanged) {\n \n this.$emit(\n \"profilUpdate\", { value: this.data.value }\n );\n } else {\n this.$emit(\"profilUpdate\", null);\n }\n },\n },\n mounted() {\n this.originalValue = JSON.stringify(Vue.toRaw(this.data));\n\n if (this.files) {\n this.dmsData = this.files;\n }\n },\n template: /*html*/`\n\n

    {{$p.t('profilUpdate','profilUpdateInformationMessage',[data.titel])}}

    \n\n
    \n
    {{data.titel?data.titel:$p.t('global','titel')}}
    \n\n \n\n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n `,\n};\n","import BsModal from './Bootstrap/Modal.js';\n\nexport default {\n\tcomponents: {\n\t\tBsModal\n\t},\n\tprops: {\n\t\ttimeout: {\n\t\t\ttype: Number,\n\t\t\tdefault: 300\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tt: null,\n\t\t\tstate: 0\n\t\t}\n\t},\n\tmethods: {\n\t\tshow() {\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 0:\n\t\t\t\t\tif (this.timeout) {\n\t\t\t\t\t\tthis.state = 1;\n\t\t\t\t\t\tthis.t = window.setTimeout(() => this.$refs.modal.show(), this.timeout);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else\n\t\t\t\t\t\treturn this.$refs.modal.show();\n\t\t\t\tcase 4:\n\t\t\t\t\treturn window.setTimeout(() => this.show(), 1);\n\t\t\t}\n\t\t},\n\t\thide() {\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn window.clearTimeout(this.t);\n\t\t\t\tcase 2:\n\t\t\t\t\treturn window.setTimeout(() => this.hide(), 1);\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.$refs.modal.hide();\n\t\t\t}\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.$refs.modal.$refs.modal.addEventListener('show.bs.modal', () => {\n\t\t\tthis.state = 2;\n\t\t});\n\t\tthis.$refs.modal.$refs.modal.addEventListener('shown.bs.modal', () => {\n\t\t\tthis.state = 3;\n\t\t});\n\t\tthis.$refs.modal.$refs.modal.addEventListener('hide.bs.modal', () => {\n\t\t\tthis.state = 4;\n\t\t});\n\t\tthis.$refs.modal.$refs.modal.addEventListener('hidden.bs.modal', () => {\n\t\t\tthis.state = 0;\n\t\t});\n\t},\n\ttemplate: `\n\t\n\t\tLoading...\n\t`\n}","import BsModal from \"../../../Bootstrap/Modal.js\";\nimport Alert from \"../../../Bootstrap/Alert.js\";\nimport EditProfilSelect from \"./EditProfilSelect.js\";\nimport Loader from \"../../../Loader.js\";\n\nimport ApiProfilUpdate from '../../../../api/factory/profilUpdate.js';\n\nexport default {\n\tcomponents: {\n\t\tBsModal,\n\t\tAlert,\n\t\tEditProfilSelect,\n\t\tLoader,\n\t},\n\tmixins: [BsModal],\n\tprops: {\n\t\tisMitarbeiter: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tvalue: Object,\n\t\ttitel: String,\n\t\tzustelladressenCount: Function,\n\t\tzustellkontakteCount: Function,\n\t\t/*\n\t\t * NOTE(chris):\n\t\t * Hack to expose in \"emits\" declared events to $props which we use\n\t\t * in the v-bind directive to forward all events.\n\t\t * @see: https://github.com/vuejs/core/issues/3432\n\t\t */\n\t\tonHideBsModal: Function,\n\t\tonHiddenBsModal: Function,\n\t\tonHidePreventedBsModal: Function,\n\t\tonShowBsModal: Function,\n\t\tonShownBsModal: Function,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\ttopic: null,\n\t\t\tprofilUpdate: null,\n\t\t\teditData: this.value,\n\t\t\tfileID: null,\n\t\t\tbreadcrumb: null,\n\t\t\tloading: false,\n\t\t\tresult: false,\n\t\t\tinfo: null,\n\t\t};\n\t},\n\tinject: [\"setLoading\"],\n\tprovide() {\n\t\treturn {\n\t\t\tupdateFileID: this.updateFileIDFunction,\n\t\t\tisMitarbeiter: this.isMitarbeiter\n\t\t};\n\t},\n\n\tmethods: {\n\t\tupdateFileIDFunction: function (newFileID) {\n\t\t\tthis.fileID = newFileID;\n\t\t},\n\n\t\thandleFailedError: function (err) {\n\t\t\tconsole.error(err);\n\t\t\tthis.loading = false;\n\t\t\tthis.setLoading(false);\n\t\t\tthis.result = false;\n\t\t\tthis.hide();\n\t\t},\n\n\t\tasync submitProfilChange() {\n\n\t\t\t//? check if data is valid before making a request\n\t\t\tif (this.topic && this.profilUpdate) {\n\t\t\t\t//? if profil update contains any attachment\n\t\t\t\tif (this.fileID) {\n\t\t\t\t\tconst fileData = await this.uploadFiles(this.fileID);\n\n\t\t\t\t\tthis.fileID = fileData ? fileData : null;\n\t\t\t\t}\n\n\t\t\t\t//? inserts new row in public.tbl_cis_profil_update\n\t\t\t\t//* calls the update api call if an update field is present in the data that was passed to the modal\n\t\t\t\tconst handleApiResponse = (res) => {\n\t\t\t\t\t//? toggles the loading to false and closes the loading modal\n\t\t\t\t\tif (res.data.error) {\n\t\t\t\t\t\tthis.result = false;\n\t\t\t\t\t\tAlert.popup(\n\t\t\t\t\t\t\t\"Ein Fehler ist aufgetreten: \" + JSON.stringify(res.data.retval)\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.result = true;\n\t\t\t\t\t\tAlert.popup(\n\t\t\t\t\t\t\t\"Ihre Anfrage wurde erfolgreich gesendet. Bitte warten Sie, während sich das Team um Ihre Anfrage kümmert.\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t//* v-show on EditProfil modal binded to this.loading\n\t\t\t\t//? hides the EditProfil modal and shows the loading modal by calling a callback that was passed as prop from the parent component\n\t\t\t\tthis.loading = true;\n\t\t\t\tthis.setLoading(true);\n\n\t\t\t\t//? if an updateID is present, updateProfilRequest is called, else insertProfilRequest is called\n\t\t\t\tthis.editData.updateID ?\n\t\t\t\t\tthis.$api\n\t\t\t\t\t\t.call(ApiProfilUpdate.updateProfilRequest(\n\t\t\t\t\t\t\tthis.topic,\n\t\t\t\t\t\t\tthis.profilUpdate,\n\t\t\t\t\t\t\tthis.editData.updateID,\n\t\t\t\t\t\t\tthis.fileID ? this.fileID[0] : null\n\t\t\t\t\t\t))\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\thandleApiResponse(res);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((err) => this.$fhcAlert.handleSystemError)\n\t\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\t\tthis.loading = false;\n\t\t\t\t\t\t\tthis.setLoading(false);\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t\t})\n\t\t\t\t\t:\n\t\t\t\t\tthis.$api\n\t\t\t\t\t\t.call(ApiProfilUpdate.insertProfilRequest(\n\t\t\t\t\t\t\tthis.topic,\n\t\t\t\t\t\t\tthis.profilUpdate,\n\t\t\t\t\t\t\tthis.fileID ? this.fileID[0] : null\n\t\t\t\t\t\t))\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\thandleApiResponse(res);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((err) => this.$fhcAlert.handleSystemError)\n\t\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\t\tthis.loading = false;\n\t\t\t\t\t\t\tthis.setLoading(false);\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\tuploadFiles: async function (files) {\n\t\t\tif (files[0].type !== \"application/x.fhc-dms+json\") {\n\t\t\t\tlet formData = new FormData();\n\t\t\t\tformData.append(\"files[]\", files[0]);\n\t\t\t\tconst result = this.editData.updateID\n\t\t\t\t\t? //? updating old attachment by replacing\n\t\t\t\t\t //* second parameter of api request insertFile checks if the file has to be replaced or not\n\t\t\t\t\tawait this.$api\n\t\t\t\t\t\t.call(ApiProfilUpdate.insertFile(\n\t\t\t\t\t\t\tformData,\n\t\t\t\t\t\t\tthis.editData.updateID\n\t\t\t\t\t\t))\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\treturn res.data?.map((file) => file.dms_id);\n\t\t\t\t\t\t})\n\t\t\t\t\t: //? fresh insert of new attachment\n\t\t\t\t\tawait this.$api\n\t\t\t\t\t\t.call(ApiProfilUpdate.insertFile(formData))\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\treturn res.data?.map((file) => file.dms_id);\n\t\t\t\t\t\t});\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\t//? attachment hasn't been replaced\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\tshowFooter: function () {\n\t\t\tswitch (this.value.view) {\n\t\t\t\tcase 'Status':\n\t\t\t\t\treturn false;\n\t\t\t\tcase 'Kontakt':\n\t\t\t\t\treturn false;\n\t\t\t\tcase 'Adresse':\n\t\t\t\t\treturn false;\n\t\t\t\tdefault:\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t},\n\tcreated() {\n\t\tif (this.editData.topic) {\n\t\t\t//? if the topic was passed through the prop add it to the component\n\t\t\tthis.topic = this.editData.topic;\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.modal = this.$refs.modalContainer.modal;\n\t},\n\tpopup(options) {\n\t\tBsModal.popup.bind(this);\n\t\treturn BsModal.popup(null, options);\n\t},\n\ttemplate: /*html*/ `\n\n\t\n\t\n\t\n\t\n \n`,\n};\n","import EditProfil from \"../ProfilModal/EditProfil.js\";\n\nimport ApiProfil from '../../../../api/factory/profil.js';\nimport ApiProfilUpdate from '../../../../api/factory/profilUpdate.js';\n\n//? EditProfil is the modal used to edit the profil updates\nexport default {\n\tcomponents: {EditProfil},\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\n\tinject: [\n\t\t\"getZustellkontakteCount\",\n\t\t\"getZustelladressenCount\",\n\t\t\"profilUpdateStates\",\n\t\t\"profilUpdateTopic\",\n\t],\n\n\temits: [\"fetchUpdates\"],\n\n\tdata() {\n\t\treturn {\n\t\t\tshowUpdateModal: false,\n\t\t\tcontent: null,\n\t\t\teditProfilTitle: this.$p.t(\"profil\", \"profilBearbeiten\"),\n\t\t};\n\t},\n\n\tmethods: {\n\t\thideEditProfilModal: function () {\n\t\t\t//? checks the editModal component property result, if the user made a successful request or not\n\t\t\tif (this.$refs.updateEditModal.result) {\n\t\t\t\tthis.$emit(\"fetchUpdates\");\n\t\t\t} else {\n\t\t\t\t// when modal was closed without submitting request\n\t\t\t}\n\t\t\tthis.showUpdateModal = false;\n\t\t},\n\n\t\tasync showEditProfilModal(updateRequest) {\n\n\t\t\tlet view = this.getView(updateRequest.topic, updateRequest.status);\n\n\t\t\tlet data = null;\n\t\t\tlet content = null;\n\t\t\tlet files = null;\n\t\t\tlet withFiles = false;\n\n\t\t\tif (view === \"TextInputDokument\") {\n\t\t\t\tdata = {\n\t\t\t\t\ttitel: updateRequest.topic,\n\t\t\t\t\tvalue: updateRequest.requested_change.value,\n\t\t\t\t};\n\n\t\t\t\tconst filesFromDatabase =\n\t\t\t\t\tawait this.$api\n\t\t\t\t\t\t.call(ApiProfilUpdate.getProfilRequestFiles(\n\t\t\t\t\t\t\tupdateRequest.profil_update_id\n\t\t\t\t\t\t))\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\treturn res.data;\n\t\t\t\t\t\t});\n\n\t\t\t\tfiles = filesFromDatabase;\n\t\t\t\tif (files) {\n\t\t\t\t\twithFiles = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdata = updateRequest.requested_change;\n\t\t\t}\n\n\t\t\tcontent = {\n\t\t\t\tupdateID: updateRequest.profil_update_id,\n\t\t\t\tview: view,\n\t\t\t\tdata: data,\n\t\t\t\twithFiles: withFiles,\n\t\t\t\ttopic: updateRequest.topic,\n\t\t\t\tfiles: files,\n\t\t\t};\n\n\t\t\tif (view === \"EditAdresse\") {\n\n\t\t\t\tconst isMitarbeiter = await this.$api.call(ApiProfil.isMitarbeiter(updateRequest.uid)).then((res) => res.data);\n\n\t\t\t\tif (isMitarbeiter) {\n\t\t\t\t\tcontent[\"isMitarbeiter\"] = isMitarbeiter;\n\t\t\t\t}\n\n\t\t\t\tconst filesFromDatabase =\n\t\t\t\t\tawait this.$api\n\t\t\t\t\t\t.call(ApiProfilUpdate.getProfilRequestFiles(\n\t\t\t\t\t\t\tupdateRequest.profil_update_id\n\t\t\t\t\t\t))\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\treturn res.data;\n\t\t\t\t\t\t});\n\n\t\t\t\tfiles = filesFromDatabase;\n\t\t\t\tcontent[\"files\"] = files;\n\t\t\t}\n\n\t\t\t//? adds the status information if the profil update request was rejected or accepted\n\t\t\tif (updateRequest.status !== this.profilUpdateStates[\"Pending\"]) {\n\t\t\t\tcontent[\"status\"] = updateRequest.status;\n\t\t\t\tcontent[\"status_message\"] = updateRequest.status_message;\n\t\t\t\tcontent[\"status_timestamp\"] = updateRequest.status_timestamp;\n\t\t\t}\n\n\t\t\t//? update data of the reactive content\n\t\t\tthis.content = content;\n\t\t\tthis.editProfilTitle = updateRequest.topic;\n\n\t\t\t//? only show the popup if also the right content is available\n\t\t\tif (content) {\n\t\t\t\tthis.showUpdateModal = true;\n\t\t\t\t// after a state change, wait for the DOM updates to complete\n\t\t\t\tVue.nextTick(() => {\n\t\t\t\t\tthis.$refs.updateEditModal.show();\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\tdeleteRequest: function (item) {\n\t\t\tthis.$api\n\t\t\t\t.call(ApiProfilUpdate.deleteProfilRequest(item.profil_update_id))\n\t\t\t\t.then((res) => {\n\t\t\t\t\tif (res.data.error) {\n\t\t\t\t\t\t//? open alert\n\t\t\t\t\t\tconsole.error(\"error happened\", res.data);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.$emit(\"fetchUpdates\");\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\n\t\tgetView: function (topic, status) {\n\t\t\tif (!(status === this.profilUpdateStates[\"Pending\"])) {\n\t\t\t\treturn \"Status\";\n\t\t\t}\n\n\t\t\tswitch (topic) {\n\t\t\t\tcase this.profilUpdateTopic[\"Private Kontakte\"]:\n\t\t\t\t\treturn \"EditKontakt\";\n\t\t\t\tcase this.profilUpdateTopic[\"Add Kontakt\"]:\n\t\t\t\t\treturn \"EditKontakt\";\n\t\t\t\tcase this.profilUpdateTopic[\"Delete Kontakt\"]:\n\t\t\t\t\treturn \"Kontakt\";\n\t\t\t\tcase this.profilUpdateTopic[\"Private Adressen\"]:\n\t\t\t\t\treturn \"EditAdresse\";\n\t\t\t\tcase this.profilUpdateTopic[\"Add Adresse\"]:\n\t\t\t\t\treturn \"EditAdresse\";\n\t\t\t\tcase this.profilUpdateTopic[\"Delete Adresse\"]:\n\t\t\t\t\treturn \"Adresse\";\n\t\t\t\tdefault:\n\t\t\t\t\treturn \"TextInputDokument\";\n\t\t\t}\n\t\t},\n\n\t},\n\tcreated() {\n\t},\n\n\tcomputed: {},\n\n\ttemplate: /*html*/ `\n
    \n \n
    {{$p.t('profilUpdate','profilUpdates')}}
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {{$p.t('profilUpdate','topic')}}{{$p.t('global','status')}}{{$p.t('global','datum')}}{{$p.t('ui','aktion')}}
    {{item.topic}}{{item.status}}{{item.status_timestamp?item.status_timestamp:item.insertamum}}
    \n
    \n
    \n
    \n`,\n};\n","if (!primevue) {\n\tconsole.error('PrimeVue not loaded!');\n}\n\n// NOTE(chris): Click on clear button gives an error. This is a bug in primevue => fixed in current version\nTabulator.extendModule('filter', 'filters', {\n\t\"dates\": (headerValue, rowValue) => {\n\t\tif (!headerValue)\n\t\t\treturn true;\n\n\t\tlet rowDate = new Date(rowValue);\n\n\t\tif (Array.isArray(headerValue))\n\t\t{\n\t\t\tlet startDate = new Date(headerValue[0]);\n\t\t\tif (headerValue[1])\n\t\t\t{\n\t\t\t\tlet endDate = new Date(headerValue[1]);\n\n\t\t\t\tendDate.setHours(23, 59, 59, 999);\n\n\t\t\t\treturn rowDate >= startDate && rowDate <= endDate;\n\t\t\t}\n\n\t\t\treturn rowDate.toDateString() === startDate.toDateString();\n\t\t}\n\t\tlet singleDate = new Date(headerValue);\n\t\treturn rowDate.toDateString() === singleDate.toDateString();\n\t}\n});\n\nfunction dateFilter(cell, onRendered, success) {\n\tlet div = document.createElement('div');\n\n\tlet initialValue = null;\n\n\tlet val = cell.getValue();\n\n\tif (Array.isArray(val))\n\t{\n\t\tconst start = val[0] ? new Date(val[0]) : null;\n\t\tconst end = val[1] ? new Date(val[1]) : null;\n\t\tinitialValue = [start, end];\n\t}\n\n\tVue.createApp({\n\t\tcomponents: {\n\t\t\tPrimevueCalendar: primevue.calendar\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tval: initialValue\n\t\t\t}\n\t\t},\n\t\twatch: {\n\t\t\tval(n) {\n\t\t\t\tsuccess(n);\n\t\t\t}\n\t\t},\n\t\ttemplate: `\n\t\t\t\t `\n\t}).use(primevue.config.default).mount(div);\n\n\treturn div;\n}\nexport { dateFilter };","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport Mailverteiler from \"./ProfilComponents/Mailverteiler.js\";\nimport AusweisStatus from \"./ProfilComponents/FhAusweisStatus.js\";\nimport QuickLinks from \"./ProfilComponents/QuickLinks.js\";\nimport Adresse from \"./ProfilComponents/Adresse.js\";\nimport Kontakt from \"./ProfilComponents/Kontakt.js\";\nimport ProfilEmails from \"./ProfilComponents/ProfilEmails.js\";\nimport RoleInformation from \"./ProfilComponents/RoleInformation.js\";\nimport ProfilInformation from \"./ProfilComponents/ProfilInformation.js\";\nimport FetchProfilUpdates from \"./ProfilComponents/FetchProfilUpdates.js\";\nimport EditProfil from \"./ProfilModal/EditProfil.js\";\n\nimport ApiProfilUpdate from '../../../api/factory/profilUpdate.js';\nimport { dateFilter } from '../../../tabulator/filters/Dates.js';\n\nexport default {\n\tcomponents: {\n\t\tCoreFilterCmpt,\n\t\tMailverteiler,\n\t\tAusweisStatus,\n\t\tQuickLinks,\n\t\tAdresse,\n\t\tKontakt,\n\t\tProfilEmails,\n\t\tRoleInformation,\n\t\tProfilInformation,\n\t\tFetchProfilUpdates,\n\t\tEditProfil,\n\t},\n\tinject: [\"sortProfilUpdates\", \"collapseFunction\", \"language\",\"isEditable\"],\n\tdata() {\n\t\treturn {\n\t\t\tshowModal: false,\n\t\t\tcollapseIconBetriebsmittel: true,\n\t\t\teditDataFilter: null,\n\t\t\tpreloadedPhrasen:{},\n\t\t\t// tabulator options\n\t\t\tzutrittsgruppen_table_options: {\n\t\t\t\tpersistenceID: \"filterTableStudentProfilZutrittsgruppen\",\n\t\t\t\tpersistence: {\n\t\t\t\t\tcolumns: false\n\t\t\t\t},\n\t\t\t\tminHeight: 200,\n\t\t\t\tlayout: \"fitColumns\",\n\t\t\t\tcolumns: [{\n\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.zutrittsGruppenPhrase),\n\t\t\t\t\tfield: \"bezeichnung\"\n\t\t\t\t}],\n\t\t\t},\n\t\t\tbetriebsmittel_table_options: {\n\t\t\t\tpersistenceID: \"filterTableStudentProfilBetriebsmittel\",\n\t\t\t\tpersistence: {\n\t\t\t\t\tcolumns: false\n\t\t\t\t},\n\t\t\t\tminHeight: 300,\n\t\t\t\tlayout: \"fitColumns\",\n\t\t\t\tresponsiveLayout: \"collapse\",\n\t\t\t\tresponsiveLayoutCollapseUseFormatters: false,\n\t\t\t\tresponsiveLayoutCollapseFormatter: Vue.$collapseFormatter,\n\t\t\t\tcolumns: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\tfield: \"collapse\",\n\t\t\t\t\t\theaderSort: false,\n\t\t\t\t\t\theaderFilter: false,\n\t\t\t\t\t\tformatter: \"responsiveCollapse\",\n\t\t\t\t\t\tmaxWidth: 40,\n\t\t\t\t\t\theaderClick: this.collapseFunction,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(()=>this.preloadedPhrasen.entlehnteBetriebsmittelPhrase),\n\t\t\t\t\t\tfield: \"betriebsmittel\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() =>this.preloadedPhrasen.inventarnummerPhrase) ,\n\t\t\t\t\t\tfield: \"Nummer\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() =>this.preloadedPhrasen.ausgabedatum) ,\n\t\t\t\t\t\tfield: \"Ausgegeben_am\",\n\t\t\t\t\t\theaderFilterFunc: 'dates',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true,\n\t\t\t\t\t\tformatter:\"datetime\",\n\t\t\t\t\t\tformatterParams: this.datetimeFormatterParams()\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t};\n\t},\n\n\tprops: {\n\t\tdata: Object,\n\t\teditData: Object,\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tstudiengang_kz: Vue.computed({ get: () => this.data.studiengang_kz }),\n\t\t}\n\t},\n\tmethods: {\n\n\t\tbetriebsmittelTableBuilt: function () {\n\t\t\tthis.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns)\n\t\t\tthis.$refs.betriebsmittelTable.tabulator.setData(this.data.mittel);\n\t\t},\n\t\tzutrittsgruppenTableBuilt: function () {\n\t\t\tthis.$refs.zutrittsgruppenTable.tabulator.setColumns(this.zutrittsgruppen_table_options.columns)\n\t\t\tthis.$refs.zutrittsgruppenTable.tabulator.setData(\n\t\t\t\tthis.data.zuttritsgruppen\n\t\t\t);\n\t\t},\n\t\tfetchProfilUpdates: function () {\n\t\t\tthis.$api\n\t\t\t\t.call(ApiProfilUpdate.selectProfilRequest())\n\t\t\t\t.then((res) => {\n\t\t\t\t\tif (!res.error && res) {\n\t\t\t\t\t\tthis.data.profilUpdates = res.data?.length\n\t\t\t\t\t\t\t? res.data.sort(this.sortProfilUpdates)\n\t\t\t\t\t\t\t: null;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\n\t\thideEditProfilModal: function () {\n\t\t\t//? checks the editModal component property result, if the user made a successful request or not\n\t\t\tif (this.$refs.editModal.result) {\n\t\t\t\tthis.$api\n\t\t\t\t\t.call(ApiProfilUpdate.selectProfilRequest())\n\t\t\t\t\t.then((request) => {\n\t\t\t\t\t\tif (!request.error && request.data) {\n\t\t\t\t\t\t\tthis.data.profilUpdates = request.data;\n\t\t\t\t\t\t\tthis.data.profilUpdates.sort(this.sortProfilUpdates);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.error(\"Error when fetching profile updates: \" + request);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\tconsole.error(err);\n\t\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// when modal was closed without submitting request\n\t\t\t}\n\t\t\tthis.showModal = false;\n\t\t\tthis.editDataFilter = null;\n\t\t},\n\n\t\tshowEditProfilModal(view) {\n\t\t\tif (view) {\n\t\t\t\tthis.editDataFilter = view;\n\t\t\t}\n\t\t\tthis.showModal = true;\n\t\t\t// after a state change, wait for the DOM updates to complete\n\t\t\tVue.nextTick(() => {\n\t\t\t\tthis.$refs.editModal.show();\n\t\t\t});\n\t\t},\n\t\tdatetimeFormatterParams: function() {\n\t\t\tconst params = {\n\t\t\t\tinputFormat:\"yyyy-MM-dd\",\n\t\t\t\toutputFormat:\"dd.MM.yyyy\",\n\t\t\t\tinvalidPlaceholder:\"(invalid date)\",\n\t\t\t\ttimezone:FHC_JS_DATA_STORAGE_OBJECT.timezone\n\t\t\t};\n\t\t\treturn params;\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t\n\t\tfotoStatus() {\n\t\t\treturn this.data?.fotoStatus ?? null;\n\t\t},\n\n\t\tfilteredEditData() {\n\t\t\treturn this.editDataFilter\n\t\t\t\t? this.editData.data[this.editDataFilter]\n\t\t\t\t: this.editData;\n\t\t},\n\n\t\tprofilInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tVorname: this.data.vorname,\n\t\t\t\tNachname: this.data.nachname,\n\t\t\t\tUsername: this.data.username,\n\t\t\t\tAnrede: this.data.anrede,\n\t\t\t\tTitel: this.data.titel,\n\t\t\t\tPostnomen: this.data.postnomen,\n\t\t\t\tfoto_sperre: this.data.foto_sperre,\n\t\t\t\tfoto: this.data.foto,\n\t\t\t};\n\t\t},\n\n\t\troleInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tgeburtsdatum: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsdatum')}`,\n\t\t\t\t\tvalue: this.data.gebdatum\n\t\t\t\t},\n\t\t\t\tgeburtsort: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsort')}`,\n\t\t\t\t\tvalue: this.data.gebort\n\t\t\t\t},\n\t\t\t\tpersonenkennzeichen: {\n\t\t\t\t\tlabel: `${this.$p.t('person','personenkennzeichen')}`,\n\t\t\t\t\tvalue: this.data.personenkennzeichen\n\t\t\t\t},\n\t\t\t\tstudiengang: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','studiengang')}`,\n\t\t\t\t\tvalue: this.data.studiengang\n\t\t\t\t},\n\t\t\t\tsemester: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','semester')}`,\n\t\t\t\t\tvalue: this.data.semester\n\t\t\t\t},\n\t\t\t\tverband: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','lehrverband')}`,\n\t\t\t\t\tvalue: this.data.verband\n\t\t\t\t},\n\t\t\t\tgruppe: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','gruppe')}`,\n\t\t\t\t\tvalue: this.data.gruppe.trim()\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t},\n\tcreated() {\n\t\t// preload phrasen\n\t\tthis.$p.loadCategory('profil').then(() => {\n\t\t\tthis.preloadedPhrasen.zutrittsGruppenPhrase = this.$p.t('profil/zutrittsGruppen');\n\t\t\tthis.preloadedPhrasen.entlehnteBetriebsmittelPhrase = this.$p.t('profil/entlehnteBetriebsmittel');\n\t\t\tthis.preloadedPhrasen.inventarnummerPhrase = this.$p.t('profil/inventarnummer');\n\t\t\tthis.preloadedPhrasen.ausgabedatum = this.$p.t('profil/ausgabedatum');\n\t\t\tthis.preloadedPhrasen.loaded = true;\n\t\t});\n\t\t//? sorts the profil Updates: pending -> accepted -> rejected\n\t\tthis.data.profilUpdates?.sort(this.sortProfilUpdates);\n\t},\n\twatch: {\n\t\t'language.value'(newVal) {\n\t\t\tif(this.$refs.betriebsmittelTable) this.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns)\n\t\t\tif(this.$refs.zutrittsgruppenTable) this.$refs.zutrittsgruppenTable.tabulator.setColumns(this.zutrittsgruppen_table_options.columns)\n\t\t}\n\t},\n\ttemplate: /*html*/ `\n
    \n \n \n
    \n \n
    \n \n\n\t\t\t\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\n\n\t\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t{{$p.t('profil','privateKontakte')}}\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t{{$p.t('profil','privateAdressen')}}\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\n\t\t
    \n\t\t\n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n \n
    \n \n
    \n \n
    \n\n
    \n`,\n};\n","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport EditProfil from \"./ProfilModal/EditProfil.js\";\nimport Adresse from \"./ProfilComponents/Adresse.js\";\nimport Kontakt from \"./ProfilComponents/Kontakt.js\";\nimport FetchProfilUpdates from \"./ProfilComponents/FetchProfilUpdates.js\";\nimport Mailverteiler from \"./ProfilComponents/Mailverteiler.js\";\nimport AusweisStatus from \"./ProfilComponents/FhAusweisStatus.js\";\nimport QuickLinks from \"./ProfilComponents/QuickLinks.js\";\nimport ProfilEmails from \"./ProfilComponents/ProfilEmails.js\";\nimport RoleInformation from \"./ProfilComponents/RoleInformation.js\";\nimport ProfilInformation from \"./ProfilComponents/ProfilInformation.js\";\n\nimport ApiProfilUpdate from '../../../api/factory/profilUpdate.js';\nimport { dateFilter } from '../../../tabulator/filters/Dates.js';\n\nexport default {\n\tcomponents: {\n\t\tCoreFilterCmpt,\n\t\tEditProfil,\n\t\tAdresse,\n\t\tKontakt,\n\t\tFetchProfilUpdates,\n\t\tAusweisStatus,\n\t\tMailverteiler,\n\t\tQuickLinks,\n\t\tProfilEmails,\n\t\tRoleInformation,\n\t\tProfilInformation,\n\t},\n\n\tinject: [\"sortProfilUpdates\", \"collapseFunction\", \"language\",\"isEditable\"],\n\n\tdata() {\n\t\treturn {\n\t\t\tshowModal: false,\n\t\t\teditDataFilter: null,\n\t\t\tpreloadedPhrasen:{},\n\t\t\t// tabulator options\n\t\t\tfunktionen_table_options: {\n\t\t\t\tpersistenceID: \"filterTableMaProfilFunktionen\",\n\t\t\t\tpersistence: {\n\t\t\t\t\tcolumns: false\n\t\t\t\t},\n\t\t\t\tminHeight: 300,\n\t\t\t\tlayout: \"fitColumns\",\n\t\t\t\tresponsiveLayout: \"collapse\",\n\t\t\t\tresponsiveLayoutCollapseUseFormatters: false,\n\t\t\t\tresponsiveLayoutCollapseFormatter: Vue.$collapseFormatter,\n\t\t\t\tcolumns: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\tfield: \"collapse\",\n\t\t\t\t\t\theaderSort: false,\n\t\t\t\t\t\theaderFilter: false,\n\t\t\t\t\t\tformatter: \"responsiveCollapse\",\n\t\t\t\t\t\tmaxWidth: 40,\n\t\t\t\t\t\theaderClick: this.collapseFunction,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.bezeichnungPhrase),\n\t\t\t\t\t\tfield: \"Bezeichnung\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.organisationseinheitPhrase),\n\t\t\t\t\t\tfield: \"Organisationseinheit\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.gueltigVonPhrase),\n\t\t\t\t\t\tfield: \"Gültig_von\",\n\t\t\t\t\t\theaderFilterFunc: 'dates',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true,\n\t\t\t\t\t\tformatter:\"datetime\",\n\t\t\t\t\t\tformatterParams: this.datetimeFormatterParams()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.gueltigBisPhrase),\n\t\t\t\t\t\tfield: \"Gültig_bis\",\n\t\t\t\t\t\theaderFilterFunc: 'dates',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true,\n\t\t\t\t\t\tformatter:\"datetime\",\n\t\t\t\t\t\tformatterParams: this.datetimeFormatterParams()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.wochenstundenPhrase),\n\t\t\t\t\t\tfield: \"Wochenstunden\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\n\t\t\tbetriebsmittel_table_options: {\n\t\t\t\tpersistenceID: \"filterTableMaProfilBetriebsmittel\",\n\t\t\t\tpersistence: {\n\t\t\t\t\tcolumns: false\n\t\t\t\t},\n\t\t\t\tminHeight: 300,\n\t\t\t\tlayout: \"fitColumns\",\n\t\t\t\tresponsiveLayout: \"collapse\",\n\t\t\t\tresponsiveLayoutCollapseUseFormatters: false,\n\t\t\t\tresponsiveLayoutCollapseFormatter: Vue.$collapseFormatter,\n\t\t\t\tdata: [{betriebsmittel: \"\", Nummer: \"\", Ausgegeben_am: \"\"}],\n\t\t\t\tcolumns: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\tfield: \"collapse\",\n\t\t\t\t\t\theaderSort: false,\n\t\t\t\t\t\theaderFilter: false,\n\t\t\t\t\t\tformatter: \"responsiveCollapse\",\n\t\t\t\t\t\tmaxWidth: 40,\n\t\t\t\t\t\theaderClick: this.collapseFunction,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.entlehnteBetriebsmittelPhrase),\n\t\t\t\t\t\tfield: \"betriebsmittel\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.inventarnummerPhrase),\n\t\t\t\t\t\tfield: \"Nummer\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.ausgabedatumPhrase),\n\t\t\t\t\t\tfield: \"Ausgegeben_am\",\n\t\t\t\t\t\theaderFilterFunc: 'dates',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true,\n\t\t\t\t\t\tformatter:\"datetime\",\n\t\t\t\t\t\tformatterParams: this.datetimeFormatterParams()\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}\n\t\t};\n\t},\n\n\tprops: {\n\t\tdata: Object,\n\t\teditData: Object,\n\t},\n\t\n\tmethods: {\n\t\tbetriebsmittelTableBuilt: function () {\n\t\t\tthis.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns)\n\t\t\tthis.$refs.betriebsmittelTable.tabulator.setData(this.data.mittel);\n\t\t},\n\t\tfunktionenTableBuilt: function () {\n\t\t\tthis.$refs.funktionenTable.tabulator.setColumns(this.funktionen_table_options.columns)\n\t\t\tthis.$refs.funktionenTable.tabulator.setData(this.data.funktionen);\n\t\t},\n\t\thideEditProfilModal: function () {\n\t\t\t//? checks the editModal component property result, if the user made a successful request or not\n\t\t\tif (this.$refs.editModal.result) {\n\t\t\t\tthis.$api\n\t\t\t\t\t.call(ApiProfilUpdate.selectProfilRequest())\n\t\t\t\t\t.then((request) => {\n\t\t\t\t\t\tif (!request.error && request.data) {\n\t\t\t\t\t\t\tthis.data.profilUpdates = request.data;\n\t\t\t\t\t\t\tthis.data.profilUpdates.sort(this.sortProfilUpdates);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.error(\"Error when fetching profile updates: \" + request);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\tconsole.error(err);\n\t\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// when modal was closed without submitting request\n\t\t\t}\n\t\t\tthis.showModal = false;\n\t\t\tthis.editDataFilter = null;\n\t\t},\n\n\t\tshowEditProfilModal(view) {\n\t\t\tif (view) {\n\t\t\t\tthis.editDataFilter = view;\n\t\t\t}\n\n\t\t\tthis.showModal = true;\n\t\t\tVue.nextTick(() => {\n\t\t\t\tthis.$refs.editModal.show();\n\t\t\t});\n\n\t\t\t// after a state change, wait for the DOM updates to complete\n\t\t},\n\n\t\tfetchProfilUpdates: function () {\n\t\t\tthis.$api\n\t\t\t\t.call(ApiProfilUpdate.selectProfilRequest())\n\t\t\t\t.then((res) => {\n\t\t\t\t\tif (!res.error && res) {\n\t\t\t\t\t\tthis.data.profilUpdates = res.data?.length\n\t\t\t\t\t\t\t? res.data.sort(this.sortProfilUpdates)\n\t\t\t\t\t\t\t: null;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tsetTableColumnTitles() { // reevaluates computed phrasen\n\t\t\tif(this.$refs.betriebsmittelTable) this.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns)\n\t\t\tif(this.$refs.funktionenTable) this.$refs.funktionenTable.tabulator.setColumns(this.funktionen_table_options.columns)\n\t\t},\n\t\tdatetimeFormatterParams: function() {\n\t\t\tconst params = {\n\t\t\t\tinputFormat:\"yyyy-MM-dd\",\n\t\t\t\toutputFormat:\"dd.MM.yyyy\",\n\t\t\t\tinvalidPlaceholder:\"(invalid date)\",\n\t\t\t\ttimezone:FHC_JS_DATA_STORAGE_OBJECT.timezone\n\t\t\t};\n\t\t\treturn params;\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tfotoStatus() {\n\t\t\treturn this.data?.fotoStatus ?? null;\n\t\t},\n\t\tgetTelefonValue() {\n\t\t\tif(this.data.standort_telefon?.kontakt) {\n\t\t\t\treturn this.data.standort_telefon.kontakt + \" \" + this.data.telefonklappe\n\t\t\t} else if(this.data.standort_telefon) {\n\t\t\t\treturn this.data.standort_telefon + \" \" + this.data.telefonklappe\n\t\t\t} else {\n\t\t\t\treturn this.data.telefonklappe\n\t\t\t}\n\t\t},\n\t\tfilteredEditData() {\n\t\t\treturn this.editDataFilter\n\t\t\t\t? this.editData.data[this.editDataFilter]\n\t\t\t\t: this.editData;\n\t\t},\n\t\tprofilInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tVorname: this.data.vorname,\n\t\t\t\tNachname: this.data.nachname,\n\t\t\t\tUsername: this.data.username,\n\t\t\t\tAnrede: this.data.anrede,\n\t\t\t\tTitel: this.data.titel,\n\t\t\t\tPostnomen: this.data.postnomen,\n\t\t\t\tfoto_sperre: this.data.foto_sperre,\n\t\t\t\tfoto: this.data.foto,\n\t\t\t};\n\t\t},\n\n\t\troleInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tgeburtsdatum: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsdatum')}`,\n\t\t\t\t\tvalue: this.data.gebdatum\n\t\t\t\t},\n\t\t\t\tgeburtsort: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsort')}`,\n\t\t\t\t\tvalue: this.data.gebort\n\t\t\t\t},\n\t\t\t\tpersonenkennzeichen: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Kurzzeichen')}`,\n\t\t\t\t\tvalue: this.data.kurzbz\n\t\t\t\t},\n\t\t\t\ttelefon: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Telefon')}`,\n\t\t\t\t\tvalue: this.getTelefonValue\n\t\t\t\t},\n\t\t\t\toffice: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Büro')}`,\n\t\t\t\t\tvalue: this.data.ort_kurzbz\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t},\n\n\tcreated() {\n\t\t// preload phrasen\n\t\tthis.$p.loadCategory([\"ui\",\"lehre\",\"global\",\"profil\"]).then(() => {\n\t\t\tthis.preloadedPhrasen.bezeichnungPhrase = this.$p.t('ui/bezeichnung');\n\t\t\tthis.preloadedPhrasen.organisationseinheitPhrase = this.$p.t('lehre/organisationseinheit');\n\t\t\tthis.preloadedPhrasen.gueltigVonPhrase = this.$p.t('global/gueltigVon');\n\t\t\tthis.preloadedPhrasen.gueltigBisPhrase = this.$p.t('global/gueltigBis');\n\t\t\tthis.preloadedPhrasen.wochenstundenPhrase = this.$p.t('profil/wochenstunden');\n\t\t\tthis.preloadedPhrasen.entlehnteBetriebsmittelPhrase = this.$p.t('profil/entlehnteBetriebsmittel');\n\t\t\tthis.preloadedPhrasen.inventarnummerPhrase = this.$p.t('profil/inventarnummer');\n\t\t\tthis.preloadedPhrasen.ausgabedatumPhrase = this.$p.t('profil/ausgabedatum');\n\t\t\tthis.preloadedPhrasen.loaded=true;\n\t\t});\n\t\t//? sorts the profil Updates: pending -> accepted -> rejected\n\t\tthis.data.profilUpdates?.sort(this.sortProfilUpdates);\n\n\t},\n\twatch: {\n\t\t'data.funktionen'(newVal) {\n\t\t\tif(this.$refs.funktionenTable) this.$refs.funktionenTable.tabulator.setData(newVal);\n\t\t},\n\t\t'data.mittel'(newVal) {\n\t\t\tif(this.$refs.betriebsmittelTable) this.$refs.betriebsmittelTable.tabulator.setData(newVal);\n\t\t},\n\t\t'language.value'(newVal) {\n\t\t\tthis.setTableColumnTitles()\n\t\t}\n\t},\n\ttemplate: /*html*/ `\n
    \n \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n \n \n
    \n \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n {{$p.t('profil','privateKontakte')}}\n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n {{$p.t('profil','privateAdressen')}}\n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n \n
    \n \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n\n \n `,\n};\n","import QuickLinks from \"./ProfilComponents/QuickLinks.js\";\nimport Mailverteiler from \"./ProfilComponents/Mailverteiler.js\";\nimport ProfilEmails from \"./ProfilComponents/ProfilEmails.js\";\nimport RoleInformation from \"./ProfilComponents/RoleInformation.js\";\nimport ProfilInformation from \"./ProfilComponents/ProfilInformation.js\";\n\nexport default {\n\tdata() {\n\t\treturn {};\n\t},\n\tcomponents: {\n\t\tQuickLinks,\n\t\tMailverteiler,\n\t\tProfilEmails,\n\t\tRoleInformation,\n\t\tProfilInformation,\n\t},\n\n\tprops: [\"data\"],\n\tprovide() {\n\t\treturn {\n\t\t\tstudiengang_kz: Vue.computed({ get: () => this.data.studiengang_kz }),\n\t\t}\n\t},\n\t\n\tmethods: {},\n\n\tcomputed: {\n\t\tfotoStatus() {\n\t\t\treturn this.data?.fotoStatus ?? null;\n\t\t},\n\t\tprofilInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tVorname: this.data.vorname,\n\t\t\t\tNachname: this.data.nachname,\n\t\t\t\tUsername: this.data.username,\n\t\t\t\tAnrede: this.data.anrede,\n\t\t\t\tTitel: this.data.titel,\n\t\t\t\tPostnomen: this.data.postnomen,\n\t\t\t\tfoto_sperre: this.data.foto_sperre,\n\t\t\t\tfoto: this.data.foto,\n\t\t\t};\n\t\t},\n\n\t\tpersonEmails() {\n\t\t\treturn this.data?.emails ? this.data.emails : [];\n\t\t},\n\n\t\troleInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\n\t\t\treturn {\n\t\t\t\tgeburtsdatum: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsdatum')}`,\n\t\t\t\t\tvalue: this.data.gebdatum\n\t\t\t\t},\n\t\t\t\tgeburtsort: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsort')}`,\n\t\t\t\t\tvalue: this.data.gebort\n\t\t\t\t},\n\t\t\t\tpersonenkennzeichen: {\n\t\t\t\t\tlabel: `${this.$p.t('person','personenkennzeichen')}`,\n\t\t\t\t\tvalue: this.data.personenkennzeichen\n\t\t\t\t},\n\t\t\t\tstudiengang: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','studiengang')}`,\n\t\t\t\t\tvalue: this.data.studiengang\n\t\t\t\t},\n\t\t\t\tsemester: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','semester')}`,\n\t\t\t\t\tvalue: this.data.semester\n\t\t\t\t},\n\t\t\t\tverband: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','lehrverband')}`,\n\t\t\t\t\tvalue: this.data.verband\n\t\t\t\t},\n\t\t\t\tgruppe: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','gruppe')}`,\n\t\t\t\t\tvalue: this.data.gruppe.trim()\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t},\n\n\tmounted() {\n\t},\n\n\ttemplate: /*html*/ ` \n\n
    \n \n
    \n \n \n \n \n
    \n \n \n \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n \n
    \n \n \n
    \n \n
    \n \n
    \n \n \n \n \n \n
    \n
    \n \n \n
    \n \n
    \n \n
    \n \n
    \n \n
    \n `,\n};\n","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport Mailverteiler from \"./ProfilComponents/Mailverteiler.js\";\nimport QuickLinks from \"./ProfilComponents/QuickLinks.js\";\nimport RoleInformation from \"./ProfilComponents/RoleInformation.js\";\nimport ProfilEmails from \"./ProfilComponents/ProfilEmails.js\";\nimport ProfilInformation from \"./ProfilComponents/ProfilInformation.js\";\n\nimport { dateFilter } from '../../../tabulator/filters/Dates.js';\n\nexport default {\n\tcomponents: {\n\t\tCoreFilterCmpt,\n\t\tMailverteiler,\n\t\tQuickLinks,\n\t\tRoleInformation,\n\t\tProfilEmails,\n\t\tProfilInformation,\n\t},\n\tinject: [\"collapseFunction\", \"language\"],\n\tdata() {\n\t\treturn {\n\t\t\tcollapseIconFunktionen: true,\n\t\t\tpreloadedPhrasen:{},\n\t\t\tfunktionen_table_options: {\n\t\t\t\tpersistenceID: \"filterTableMaViewProfilFunktionen\",\n\t\t\t\tpersistence: {\n\t\t\t\t\tcolumns: false\n\t\t\t\t},\n\t\t\t\tminHeight: 300,\n\t\t\t\tlayout: \"fitColumns\",\n\t\t\t\tresponsiveLayout: \"collapse\",\n\t\t\t\tresponsiveLayoutCollapseUseFormatters: false,\n\t\t\t\tresponsiveLayoutCollapseFormatter: Vue.$collapseFormatter,\n\t\t\t\tcolumns: [\n\t\t\t\t\t//? option when wanting to hide the collapsed list\n\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\tfield: \"collapse\",\n\t\t\t\t\t\theaderSort: false,\n\t\t\t\t\t\theaderFilter: false,\n\t\t\t\t\t\tformatter: \"responsiveCollapse\",\n\t\t\t\t\t\tmaxWidth: 40,\n\t\t\t\t\t\theaderClick: this.collapseFunction,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.$p.t('ui/bezeichnung')),\n\t\t\t\t\t\tfield: \"Bezeichnung\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.$p.t('lehre/organisationseinheit')),\n\t\t\t\t\t\tfield: \"Organisationseinheit\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.$p.t('global/gueltigVon')),\n\t\t\t\t\t\tfield: \"Gültig_von\",\n\t\t\t\t\t\theaderFilterFunc: 'dates',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true,\n\t\t\t\t\t\tformatter:\"datetime\",\n\t\t\t\t\t\tformatterParams: this.datetimeFormatterParams()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.$p.t('global/gueltigBis')),\n\t\t\t\t\t\tfield: \"Gültig_bis\",\n\t\t\t\t\t\theaderFilterFunc: 'dates',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true,\n\t\t\t\t\t\tformatter:\"datetime\",\n\t\t\t\t\t\tformatterParams: this.datetimeFormatterParams()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.$p.t('profil/wochenstunden')),\n\t\t\t\t\t\tfield: \"Wochenstunden\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t};\n\t},\n\n\t//? this is the prop passed to the dynamic component with the custom data of the view\n\tprops: [\"data\"],\n\tmethods: {\n\t\tfunktionenTableBuilt: function () {\n\t\t\tthis.$refs.funktionenTable.tabulator.setData(this.data.funktionen);\n\t\t},\n\t\tdatetimeFormatterParams: function() {\n\t\t\tconst params = {\n\t\t\t\tinputFormat:\"yyyy-MM-dd\",\n\t\t\t\toutputFormat:\"dd.MM.yyyy\",\n\t\t\t\tinvalidPlaceholder:\"(invalid date)\",\n\t\t\t\ttimezone:FHC_JS_DATA_STORAGE_OBJECT.timezone\n\t\t\t};\n\t\t\treturn params;\n\t\t}\n\t},\n\twatch: {\n\t\t'data.funktionen'(newVal) {\n\t\t\tif(this.$refs.funktionenTable) this.$refs.funktionenTable.tabulator.setData(newVal);\n\t\t},\n\t\t'language.value'(newVal) { // reevaluates computed phrasen\n\t\t\tif(this.$refs.funktionenTable) this.$refs.funktionenTable.tabulator.setColumns(this.funktionen_table_options.columns)\n\t\t}\n\t},\n\tcomputed: {\n\t\tgetTelefonValue() {\n\t\t\tif(this.data.standort_telefon?.kontakt) {\n\t\t\t\treturn this.data.standort_telefon.kontakt + \" \" + this.data.telefonklappe\n\t\t\t} else if(this.data.standort_telefon) {\n\t\t\t\treturn this.data.standort_telefon + \" \" + this.data.telefonklappe\n\t\t\t} else {\n\t\t\t\treturn this.data.telefonklappe\n\t\t\t}\n\t\t},\n\t\tfotoStatus() {\n\t\t\treturn this.data?.fotoStatus ?? null;\n\t\t},\n\n\t\tpersonEmails() {\n\t\t\treturn this.data?.emails ? this.data.emails : [];\n\t\t},\n\n\t\tprofilInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tVorname: this.data.vorname,\n\t\t\t\tNachname: this.data.nachname,\n\t\t\t\tUsername: this.data.username,\n\t\t\t\tAnrede: this.data.anrede,\n\t\t\t\tTitel: this.data.titel,\n\t\t\t\tPostnomen: this.data.postnomen,\n\t\t\t\tfoto_sperre: this.data.foto_sperre,\n\t\t\t\tfoto: this.data.foto,\n\t\t\t};\n\t\t},\n\n\t\troleInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tgeburtsdatum: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsdatum')}`,\n\t\t\t\t\tvalue: this.data.gebdatum\n\t\t\t\t},\n\t\t\t\tgeburtsort: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsort')}`,\n\t\t\t\t\tvalue: this.data.gebort\n\t\t\t\t},\n\t\t\t\tpersonenkennzeichen: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Kurzzeichen')}`,\n\t\t\t\t\tvalue: this.data.kurzbz\n\t\t\t\t},\n\t\t\t\ttelefon: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Telefon')}`,\n\t\t\t\t\tvalue: this.getTelefonValue\n\t\t\t\t},\n\t\t\t\toffice: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Büro')}`,\n\t\t\t\t\tvalue: this.data.ort_kurzbz\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t},\n\tcreated(){\n\t\tthis.$p.loadCategory([\"ui\", \"lehre\", \"global\", \"profil\"]).then(() => {\n\t\t\tthis.preloadedPhrasen.bezeichnungPhrase = this.$p.t('ui/bezeichnung');\n\t\t\tthis.preloadedPhrasen.organisationseinheitPhrase = this.$p.t('lehre/organisationseinheit');\n\t\t\tthis.preloadedPhrasen.gueltigVonPhrase = this.$p.t('global/gueltigVon');\n\t\t\tthis.preloadedPhrasen.gueltigBisPhrase = this.$p.t('global/gueltigBis');\n\t\t\tthis.preloadedPhrasen.wochenstundenPhrase = this.$p.t('profil/wochenstunden');\n\t\t\tthis.preloadedPhrasen.loaded = true;\n\t\t});\n\t},\n\n\ttemplate: /*html*/ `\n\n
    \n \n
    \n \n \n \n \n
    \n \n \n \n
    \n \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n \n \n
    \n \n
    \n \n
    \n \n
    \n \n
    \n \n
    \n \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n
    \n \n
    \n \n
    \n`,\n};\n","import StudentProfil from \"./StudentProfil.js\";\nimport MitarbeiterProfil from \"./MitarbeiterProfil.js\";\nimport ViewStudentProfil from \"./StudentViewProfil.js\";\nimport ViewMitarbeiterProfil from \"./MitarbeiterViewProfil.js\";\nimport Loading from \"../../Loader.js\";\n\nimport ApiProfil from '../../../api/factory/profil.js';\nimport ApiProfilUpdate from '../../../api/factory/profilUpdate.js';\n\nVue.$collapseFormatter = function (data) {\n\t//data - an array of objects containing the column title and value for each cell\n\tvar container = document.createElement(\"div\");\n\tcontainer.classList.add(\"tabulator-collapsed-row\");\n\tcontainer.classList.add(\"text-break\");\n\n\tvar list = document.createElement(\"div\");\n\tlist.classList.add(\"row\");\n\n\tcontainer.appendChild(list);\n\n\tdata.forEach(function (col) {\n\t\tlet item = document.createElement(\"div\");\n\t\titem.classList.add(\"col-6\");\n\t\tlet item2 = document.createElement(\"div\");\n\t\titem2.classList.add(\"col-6\");\n\n\t\titem.innerHTML = \"\" + col.title + \"\";\n\t\titem2.innerHTML = col.value ? col.value : \"-\";\n\n\t\tlist.appendChild(item);\n\t\tlist.appendChild(item2);\n\t});\n\n\treturn Object.keys(data).length ? container : \"\";\n};\n\nexport const Profil = {\n\tname: 'Profil',\n\tcomponents: {\n\t\tStudentProfil,\n\t\tMitarbeiterProfil,\n\t\tViewStudentProfil,\n\t\tViewMitarbeiterProfil,\n\t\tLoading,\n\t},\n\tprops: {\n\t\tuid: {\n\t\t\ttype: String,\n\t\t\trequired:false,\n\t\t},\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\t//? loading property is used for showing/hiding the loading modal\n\t\t\tloading: false,\n\t\t\tprofilUpdateStates: null,\n\t\t\tprofilUpdateTopic: null,\n\t\t\tview: null,\n\t\t\tdata: null,\n\t\t\t// notfound is null by default, but contains an UID if no user exists with that UID\n\t\t\tnotFoundUID: null,\n\t\t\tisEditable: this.viewData.editable ?? false,\n\t\t};\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tisEditable: Vue.computed(()=>this.isEditable),\n\t\t\tprofilUpdateStates: Vue.computed(() =>\n\t\t\t\tthis.profilUpdateStates ? this.profilUpdateStates : false\n\t\t\t),\n\t\t\tprofilUpdateTopic: Vue.computed(() =>\n\t\t\t\tthis.profilUpdateTopic ? this.profilUpdateTopic : false\n\t\t\t),\n\t\t\tsetLoading: (newValue) => {\n\t\t\t\tthis.loading = newValue;\n\t\t\t},\n\t\t\tgetZustellkontakteCount: this.zustellKontakteCount,\n\t\t\tgetZustelladressenCount: this.zustellAdressenCount,\n\t\t\tcollapseFunction: (e, column) => {\n\t\t\t\t//* check if property doesn't exist already and add it to the reactive this properties\n\t\t\t\tif (this[e.target.id] === undefined) {\n\t\t\t\t\tthis[e.target.id] = true;\n\t\t\t\t}\n\t\t\t\tthis[e.target.id] = !this[e.target.id];\n\n\t\t\t\t//* gets all event icons of the different rows to use the onClick event later\n\t\t\t\tlet allClickableIcons = column._column.cells.map((row) => {\n\t\t\t\t\treturn row.element.children[0];\n\t\t\t\t});\n\n\t\t\t\t//* changes the icon that shows or hides all the collapsed columns\n\t\t\t\t//* if the replace function does not find the class to replace, it just simply returns false\n\t\t\t\tif (this[e.target.id]) {\n\t\t\t\t\te.target.classList.replace(\"fa-angle-up\", \"fa-angle-down\");\n\t\t\t\t} else {\n\t\t\t\t\te.target.classList.replace(\"fa-angle-down\", \"fa-angle-up\");\n\t\t\t\t}\n\n\t\t\t\t//* changes the icon for every collapsed column to open or closed\n\t\t\t\tif (this[e.target.id]) {\n\t\t\t\t\tallClickableIcons\n\t\t\t\t\t\t.filter((column) => {\n\t\t\t\t\t\t\treturn !column.classList.contains(\"open\");\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.forEach((col) => {\n\t\t\t\t\t\t\tcol.click();\n\t\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tallClickableIcons\n\t\t\t\t\t\t.filter((column) => {\n\t\t\t\t\t\t\treturn column.classList.contains(\"open\");\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.forEach((col) => {\n\t\t\t\t\t\t\tcol.click();\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\tsortProfilUpdates: (ele1, ele2) => {\n\t\t\t\tlet result = 0;\n\t\t\t\tif (ele1.status.toLowerCase() === \"pending\") {\n\t\t\t\t\tresult = -1;\n\t\t\t\t} else if (ele1.status.toLowerCase() === \"accepted\") {\n\t\t\t\t\tresult = ele2.status.toLowerCase() === \"rejected\" ? -1 : 1;\n\t\t\t\t} else {\n\t\t\t\t\tresult = 1;\n\t\t\t\t}\n\t\t\t\t//? if they have the same status the insert date is used for ordering\n\t\t\t\tif (ele1.status === ele2.status) {\n\t\t\t\t\tresult =\n\t\t\t\t\t\tnew Date(ele2.insertamum.split(\".\").reverse().join(\"-\")) -\n\t\t\t\t\t\tnew Date(ele1.insertamum.split(\".\").reverse().join(\"-\"));\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t},\n\t\t};\n\t},\n\tmethods: {\n\t\tasync load() {\n\t\t\t// fetch profilUpdateStates to provide them to children components\n\t\t\tawait this.$api\n\t\t\t\t.call(ApiProfilUpdate.getStatus())\n\t\t\t\t.then((response) => {\n\t\t\t\t\tthis.profilUpdateStates = response.data;\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t});\n\n\t\t\tthis.$api\n\t\t\t\t.call(ApiProfilUpdate.getTopic())\n\t\t\t\t.then((response) => {\n\t\t\t\t\tthis.profilUpdateTopic = response.data;\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t});\n\t\t\t\n\t\t\t\n\t\t\tthis.$api\n\t\t\t\t.call(ApiProfil.profilViewData(this.$route.params.uid??null))\n\t\t\t\t.then((response) => response.data).then(data=>{\n\t\t\t\t\tthis.view = data?.profil_data.view;\n\t\t\t\t\tthis.data = data?.profil_data.data;\n\t\t\t\t\tthis.isEditable = data?.editable ?? false;\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t});\n\t\t\t\n\t\t\t\n\t\t},\n\t\tzustellAdressenCount() {\n\t\t\tif (!this.data || !this.data.adressen) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tlet adressenArray = [];\n\t\t\tif (this.data.profilUpdates?.length) {\n\t\t\t\tadressenArray = adressenArray.concat(\n\t\t\t\t\tthis.data.profilUpdates\n\t\t\t\t\t\t.filter((update) => {\n\t\t\t\t\t\t\treturn update.requested_change.zustelladresse;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.map((adresse) => {\n\t\t\t\t\t\t\treturn adresse.requested_change.adresse_id;\n\t\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!this.data.profilUpdates?.length ||\n\t\t\t\t!this.data.adressen\n\t\t\t\t\t.filter((adresse) => adresse.zustelladresse)\n\t\t\t\t\t.every((adresse) =>\n\t\t\t\t\t\tthis.data.profilUpdates.some(\n\t\t\t\t\t\t\t(update) =>\n\t\t\t\t\t\t\t\tupdate.requested_change.adresse_id == adresse.adresse_id\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t) {\n\t\t\t\tadressenArray = adressenArray.concat(\n\t\t\t\t\tthis.data.adressen\n\t\t\t\t\t\t.filter((adresse) => {\n\t\t\t\t\t\t\treturn adresse.zustelladresse;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.map((adr) => {\n\t\t\t\t\t\t\treturn adr.adresse_id;\n\t\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn [...new Set(adressenArray)];\n\t\t\t\n\t\t},\n\t\tzustellKontakteCount() {\n\t\t\tif (!this.data || !this.data.kontakte) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tlet kontakteArray = [];\n\n\t\t\tif (this.data.profilUpdates?.length) {\n\t\t\t\tkontakteArray = kontakteArray.concat(\n\t\t\t\t\tthis.data.profilUpdates\n\t\t\t\t\t\t.filter((update) => {\n\t\t\t\t\t\t\treturn update.status === 'Pending' && update.requested_change.zustellung;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.map((kontant) => {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\tkontakt_id: kontant.requested_change.kontakt_id,\n\t\t\t\t\t\t\t\t\t\tkontakttyp: kontant.requested_change.kontakttyp\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!this.data.profilUpdates?.length ||\n\t\t\t\t!this.data.kontakte\n\t\t\t\t\t.filter((kontakt) => kontakt.zustellung)\n\t\t\t\t\t.every((kontakt) =>\n\t\t\t\t\t\tthis.data.profilUpdates.some(\n\t\t\t\t\t\t\t(update) =>\n\t\t\t\t\t\t\t\tupdate.status === 'Pending' && update.requested_change.kontakt_id == kontakt.kontakt_id\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t) {\n\t\t\t\tkontakteArray = kontakteArray.concat(\n\t\t\t\t\tthis.data.kontakte\n\t\t\t\t\t\t.filter((kontakt) => {\n\t\t\t\t\t\t\treturn kontakt.zustellung;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.map((kon) => {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\tkontakt_id: kon.kontakt_id,\n\t\t\t\t\t\t\t\t\t\tkontakttyp: kon.kontakttyp\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn [...new Set(kontakteArray)];\n\t\t},\n\t},\n\tcomputed: {\n\t\t\n\t\tfilteredEditData() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tview: null,\n\t\t\t\tdata: {\n\t\t\t\t\tPersonen_Informationen: {\n\t\t\t\t\t\ttitle: this.$p.t(\"profil\", \"personenInformationen\"),\n\t\t\t\t\t\ttopic: \"Personen_informationen\",\n\t\t\t\t\t\tview: null,\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tvorname: {\n\t\t\t\t\t\t\t\ttitle: this.$p.t(\"person\", \"vorname\"),\n\t\t\t\t\t\t\t\ttopic: this.profilUpdateTopic?.[\"Vorname\"],\n\t\t\t\t\t\t\t\tview: \"TextInputDokument\",\n\t\t\t\t\t\t\t\twithFiles: true,\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\ttitel: \"vorname\",\n\t\t\t\t\t\t\t\t\tvalue: this.data.vorname,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tnachname: {\n\t\t\t\t\t\t\t\ttitle: this.$p.t(\"person\", \"nachname\"),\n\t\t\t\t\t\t\t\ttopic: this.profilUpdateTopic?.[\"Nachname\"],\n\t\t\t\t\t\t\t\tview: \"TextInputDokument\",\n\t\t\t\t\t\t\t\twithFiles: true,\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\ttitel: \"nachname\",\n\t\t\t\t\t\t\t\t\tvalue: this.data.nachname,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttitel: {\n\t\t\t\t\t\t\t\ttitle: this.$p.t(\"global\", \"titel\"),\n\t\t\t\t\t\t\t\ttopic: this.profilUpdateTopic?.[\"Titel\"],\n\t\t\t\t\t\t\t\tview: \"TextInputDokument\",\n\t\t\t\t\t\t\t\twithFiles: true,\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\ttitel: \"titel\",\n\t\t\t\t\t\t\t\t\tvalue: this.data.titel,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tpostnomen: {\n\t\t\t\t\t\t\t\ttitle: this.$p.t(\"profil\", \"postnomen\"),\n\t\t\t\t\t\t\t\ttopic: this.profilUpdateTopic?.[\"Postnomen\"],\n\t\t\t\t\t\t\t\tview: \"TextInputDokument\",\n\t\t\t\t\t\t\t\twithFiles: true,\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\ttitel: \"postnomen\",\n\t\t\t\t\t\t\t\t\tvalue: this.data.postnomen,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tPrivate_Kontakte: {\n\t\t\t\t\t\ttitle: this.$p.t(\"profil\", \"privateKontakte\"),\n\t\t\t\t\t\ttopic: this.profilUpdateTopic?.[\"Private Kontakte\"],\n\t\t\t\t\t\tdata: this.data.kontakte\n\t\t\t\t\t\t\t?.filter((item) => {\n\t\t\t\t\t\t\t\t// excludes all contacts that are already used in pending profil update requests\n\t\t\t\t\t\t\t\treturn !this.data.profilUpdates?.some(\n\t\t\t\t\t\t\t\t\t(update) =>\n\t\t\t\t\t\t\t\t\t\tupdate.status === this.profilUpdateStates[\"Pending\"] &&\n\t\t\t\t\t\t\t\t\t\tupdate.requested_change?.kontakt_id === item.kontakt_id\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.map((kontakt) => {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tlistview: \"Kontakt\",\n\t\t\t\t\t\t\t\t\tview: \"EditKontakt\",\n\t\t\t\t\t\t\t\t\tdata: kontakt,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t\tPrivate_Adressen: {\n\t\t\t\t\t\ttitle: this.$p.t(\"profil\", \"privateAdressen\"),\n\t\t\t\t\t\ttopic: this.profilUpdateTopic?.[\"Private Adressen\"],\n\t\t\t\t\t\tdata: this.data.adressen\n\t\t\t\t\t\t\t?.filter((item) => {\n\t\t\t\t\t\t\t\treturn !this.data.profilUpdates?.some((update) => {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\tupdate.status === this.profilUpdateStates[\"Pending\"] &&\n\t\t\t\t\t\t\t\t\t\tupdate.requested_change?.adresse_id == item.adresse_id\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.map((adresse) => {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tlistview: \"Adresse\",\n\t\t\t\t\t\t\t\t\tview: \"EditAdresse\",\n\t\t\t\t\t\t\t\t\tdata: adresse,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t},\n\twatch: {\n\t\tloading: function (newValue) {\n\t\t\tif (newValue) {\n\t\t\t\tthis.$refs.loadingModalRef.show();\n\t\t\t} else {\n\t\t\t\tthis.$refs.loadingModalRef.hide();\n\t\t\t}\n\t\t},\n\t\tuid (newVal, oldVal) {\n\t\t\tthis.load()\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.load()\n\t},\n\ttemplate: `\n\t
    \n\t\t
    \n\t\t\t

    Es wurde keine Person mit der UID {{this.notFoundUID}} gefunden

    \n\t\t
    \n\t\t
    \n \n \n\t\t
    \n\t
    `,\n}\n\nexport default Profil","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetContentID(ort_kurbz) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Ort/ContentID',\n\t\t\tparams: { ort_kurzbz: ort_kurbz }\n\t\t};\n\t},\n\tgetRooms(datum, von, bis, typ, personenanzahl = 0) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Ort/getRooms',\n\t\t\tparams: { datum, von, bis, typ, personenanzahl }\n\t\t};\n\t},\n\tgetRoomTypes() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Ort/getTypes',\n\t\t\tparams: { }\n\t\t};\n\t}\n};","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport VueDatePicker from '../../vueDatepicker.js.php';\nimport ApiOrt from '../../../api/factory/ort.js'\nexport const Raumsuche = {\n\tname: \"Raumsuche\",\n\tprops: {\n\t\t\n\t},\n\tcomponents: {\n\t\tVueDatePicker,\n\t\tCoreFilterCmpt,\n\t\tInputNumber: primevue.inputnumber,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tphrasenPromise: null,\n\t\t\tphrasenResolved: false,\n\t\t\ttabulatorUuid: Vue.ref(0),\n\t\t\ttableBuiltResolve: null,\n\t\t\ttableBuiltPromise: null,\n\t\t\troomtypes: null,\n\t\t\tdefaultType: {\n\t\t\t\traumtyp_kurzbz: '',\n\t\t\t\tbeschreibung: Vue.computed(() => this.$p.t('global/alle'))\n\t\t\t},\n\t\t\tanzahl: 1,\n\t\t\tselectedType: null,\n\t\t\tdatum: new Date(),\n\t\t\tvon: Vue.ref({\n\t\t\t\thours: new Date().getHours(),\n\t\t\t\tminutes: new Date().getMinutes()\n\t\t\t}),\n\t\t\tbis: Vue.ref({\n\t\t\t\thours: new Date().getHours() + 1,\n\t\t\t\tminutes: new Date().getMinutes()\n\t\t\t}),\n\t\t\tdatepickerTextInputOptions: {\n\t\t\t\tenterSubmit: true,\n\t\t\t\ttabSubmit: true,\n\t\t\t\tselectOnFocus: true,\n\t\t\t\tformat: 'dd.MM.yyyy',\n\t\t\t\tescClose: true\n\t\t\t},\n\t\t\ttimepickerTextInputOptions: {\n\t\t\t\tenterSubmit: true,\n\t\t\t\ttabSubmit: true,\n\t\t\t\tselectOnFocus: true,\n\t\t\t\tformat: 'HH:mm',\n\t\t\t\tescClose: true\n\t\t\t},\n\t\t\traumsucheTableOptions: {\n\t\t\t\theight: Vue.ref(400),\n\t\t\t\tindex: 'ort_kurzbz',\n\t\t\t\tlayout: 'fitColumns',\n\t\t\t\tplaceholder: this.$p.t('global/noDataAvailable'),\n\t\t\t\tcolumns: [\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('rauminfo/raum_kurzbz')), field: 'ort_kurzbz', widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('global/bezeichnung')), field: 'bezeichnung', widthGrow: 2},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('rauminfo/raumnummer')), field: 'nummer', widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('rauminfo/personcap')), field: 'personen', widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('rauminfo/rauminfo')),\n\t\t\t\t\t\tfield: 'linkInfo', formatter: this.linkFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('rauminfo/roomReservations')), \n\t\t\t\t\t\tfield: 'linkRes', formatter: this.linkFormatter, widthGrow: 1}\n\t\t\t\t],\n\t\t\t\tpersistence: false,\n\t\t\t},\n\t\t\traumsucheTableEventHandlers: [{\n\t\t\t\tevent: \"tableBuilt\",\n\t\t\t\thandler: async () => {\n\t\t\t\t\tthis.tableBuiltResolve()\n\t\t\t\t}\n\t\t\t}\n\t\t\t]};\n\t},\n\tmethods: {\n\t\ttableResolve(resolve) {\n\t\t\tthis.tableBuiltResolve = resolve\n\t\t},\n\t\tlinkFormatter(cell) {\n\t\t\tconst val = cell.getValue();\n\t\t\tconst field = cell.getField();\n\t\t\tconst arialabel = (field === 'linkInfo') \n\t\t\t\t\t\t\t? this.$p.t('rauminfo/rauminfo') \n\t\t\t\t\t\t\t: this.$p.t('rauminfo/roomReservations');\n\t\t\tif(val) {\n\t\t\t\treturn ''\n\t\t\t} else {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'-
    '\n\t\t\t}\n\t\t},\n\t\troomPlanLink(room) {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t+ '/CisVue/Cms/getRoomInformation/' + room.ort_kurzbz\n\t\t},\n\t\troomInfoLink(room) {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ '/CisVue/Cms/content/' + room.content_id\n\t\t},\n\t\tgetTimeString(time) {\n\t\t\tconst hours = String(time.hours).padStart(2, '0');\n\t\t\tconst minutes = String(time.minutes).padStart(2, '0');\n\t\t\treturn `${hours}:${minutes}`\n\t\t},\n\t\tsetupData(data){\n\t\t\tconst d = data.map(room => {\n\t\t\t\treturn {\n\t\t\t\t\tort_kurzbz: room.ort_kurzbz,\n\t\t\t\t\tbezeichnung: room.bezeichnung.replace('&', '&'),\n\t\t\t\t\tnummer: room.planbezeichnung,\n\t\t\t\t\tpersonen: room.max_person,\n\t\t\t\t\tlinkInfo: room.content_id ? this.roomInfoLink(room) : null,\n\t\t\t\t\tlinkRes: this.roomPlanLink(room)\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\t\n\t\t\t})\n\t\t\t\n\t\t\tthis.$refs.raumsucheTable.tabulator.setData(d);\n\t\t},\n\t\tloadRoomTypes() {\n\t\t\tthis.$api.call(ApiOrt.getRoomTypes())\n\t\t\t\t.then(res => {\n\t\t\t\tres?.data?.forEach(type => {\n\t\t\t\t\ttype.beschreibung = type.beschreibung.replace('&', '&')\n\t\t\t\t})\n\t\t\t\tthis.selectedType = this.defaultType\n\t\t\t\tthis.roomtypes = res?.data ?? []\n\t\t\t})\n\t\t},\n\t\tloadRooms() {\n\t\t\tthis.$api.call(ApiOrt.getRooms(this.datum.toISOString(), this.getTimeString(this.von), this.getTimeString(this.bis), this.selectedType?.raumtyp_kurzbz ?? '', this.anzahl))\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res?.data?.retval) this.setupData(res.data.retval)\n\t\t\t})\n\t\t},\n\t\thandleUuidDefined(uuid) {\n\t\t\tthis.tabulatorUuid = uuid\n\t\t},\n\t\tsearch(){\n\t\t\tthis.loadRooms()\n\t\t},\n\t\tsetRoute(val) {\n\t\t\t// TODO: router push\n\t\t},\n\t\tdateFormat(date) {\n\t\t\tconst day = String(date.getDate()).padStart(2, '0');\n\t\t\tconst month = String(date.getMonth() + 1).padStart(2, '0');\n\t\t\tconst year = date.getFullYear();\n\t\t\treturn `${day}.${month}.${year}`\n\t\t},\n\t\ttimeFormat(date) {\n\t\t\tconst hours = String(date.getHours()).padStart(2, '0');\n\t\t\tconst minutes = String(date.getMinutes()).padStart(2, '0');\n\t\t\treturn `${hours}:${minutes}`;\n\t\t},\n\t\tasync setupMounted() {\n\t\t\t\n\t\t\tthis.tableBuiltPromise = new Promise(this.tableResolve)\n\t\t\tawait this.tableBuiltPromise\n\t\t\t\n\t\t\tthis.loadRoomTypes()\n\t\t\tthis.loadRooms()\n\n\t\t\tconst tableID = this.tabulatorUuid ? ('-' + this.tabulatorUuid) : ''\n\t\t\tconst tableDataSet = document.getElementById('filterTableDataset' + tableID);\n\t\t\tif(!tableDataSet) return\n\t\t\tconst rect = tableDataSet.getBoundingClientRect();\n\n\t\t\tconst h = window.visualViewport.height - rect.top - 100\n\t\t\tif(this.$refs.raumsucheTable) {\n\t\t\t\tthis.$refs.raumsucheTable.$refs.table.style.setProperty('height', h+'px')\n\t\t\t}\n\t\t\t\n\t\t}\n\t},\n\tcomputed: {\n\t\tisDarkMode(){\n\t\t\treturn this.$theme.theme_name.value == 'dark';\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.phrasenPromise = this.$p.loadCategory(['rauminfo', 'global'])\n\t\tthis.phrasenPromise.then(()=> {this.phrasenResolved = true})\n\t},\n\tmounted() {\n\t\tthis.setupMounted()\n\t},\n\ttemplate: `\n\t

    {{$p.t('rauminfo/roomSearch')}}

    \n\t
    \n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t\n\t\t
    \n\t\t\t\n\t\t
    \n\t\t\n\n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t
    \n\t\n\n \n `,\n};\n\nexport default Raumsuche;\n","export default {\n components: {\n paginator: primevue.paginator,\n },\n emits: [\"update:rows\"],\n props: {\n maxPageCount: {\n type: Number,\n default: 0,\n },\n page_size: {\n type: Number,\n required: true,\n },\n },\n data() {\n return {};\n },\n methods: {\n newPageEvent: function (data) {\n \n },\n },\n mounted() {},\n template: /*html*/ `\n \t\n\t
    \n\t\t$emit('page',{...data, page:data.page+1})\" :rows=\"page_size\" :totalRecords=\"maxPageCount\" :rowsPerPageOptions=\"[10, 20, 30]\" >\n\t\t\n\t
    \n\t\n\t
    \n\t\t$emit('page',{...data, page:data.page+1})\" :rows=\"page_size\" :totalRecords=\"maxPageCount\" :rowsPerPageOptions=\"[10, 20, 30]\" template=\"FirstPageLink PrevPageLink CurrentPageReport NextPageLink LastPageLink RowsPerPageDropdown\">\n\t\t\n\t
    \n `,\n};\n","export default {\n\tprops:{\n\t\tuid:String,\n\t\tvorname:String,\n\t\tnachname:String,\n\t\ttitelpre:String,\n\t\tkontakt:String,\t\n\t\ttelefoneklappe:String,\n\t\temail:String,\n\t\tplanbezeichnung:String,\n\t\tfoto:String,\n\t\tdisplayWidget:{\n\t\t\ttype:Boolean,\n\t\t\tdefault:false,\n\t\t}\n\t},\n\ttemplate:/*html*/`\n\t
    \n\t\t
    \n\t\t\t\"mitarbeiter_foto\"\n\t\t
    \n\t\t
    \n\t\t\t
    {{fullname}}
    \n\t\t
    \n\t\t
    \n\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t
    {{phone.number}}
    \n\n\t\t\t\t
    \n\t\t\t\t
    {{ort}}
    \n\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\n\t\t
    \n\t
    \n\t`,\n\tcomputed:{\n\t\tformattedEmail: function(){\n\t\t\tif(!this.email ) return null;\n\t\t\tlet emailString= this.email.replace(\"mailto:\", \"\");\n\t\t\t// when splitting a string, the letter that is used to split the string will be removed from the result\n\t\t\tlet emailArray = emailString.split('@');\n\t\t\t// returns both parts of the splitted string in combination with the removed letter and a word break\n\t\t\treturn emailArray[0] + '@' + emailArray[1];\n\t\t},\n\t\tfullname: function () {\n\t\t\tif (this.titelpre && this.vorname && this.nachname) {\n\t\t\t\treturn `${this.titelpre} ${this.vorname} ${this.nachname}`;\n\t\t\t}\n\t\t\telse if (this.vorname && this.nachname) {\n\t\t\t\treturn `${this.vorname} ${this.nachname}`;\n\t\t\t}\n\t\t\telse if (this.nachname) {\n\t\t\t\treturn this.vorname;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t\tphone: function () {\n\t\t\tif (this.kontakt && this.telefoneklappe) {\n\t\t\t\treturn {\n\t\t\t\t\tlink: \"tel:\".concat(this.kontakt).concat(\" \" + this.telefoneklappe),\n\t\t\t\t\tnumber: this.kontakt.concat(\" \" + this.telefoneklappe),\n\t\t\t\t} \n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn this.kontakt ? {\n\t\t\t\t\tlink: \"tel:\".concat(this.kontakt),\n\t\t\t\t\tnumber: this.kontakt,\n\t\t\t\t} : null;\n\t\t\t}\n\t\t},\n\t\temail_link: function () {\n\t\t\treturn this.email ? \"mailto:\".concat(this.email) : null;\n\t\t},\n\t\tbase64Image:function(){\n\t\t\treturn this.foto ? 'data:image/png;base64,'.concat(this.foto) : null;\n\t\t},\n\t\tort:function(){\n\t\t\treturn this.planbezeichnung ?? null;\n\t\t},\n\t\tprofilViewLink: function(){\n\t\t\treturn this.uid ? FHC_JS_DATA_STORAGE_OBJECT.app_root.concat(FHC_JS_DATA_STORAGE_OBJECT.ci_router).concat(\"/Cis/Profil/View/\").concat(this.uid): null; \n\t\t},\n\t},\n\t\n}","export default {\n\tprops: {\n\t\ttitle:String,\n\t\tvertretungsList:Array,\n\t\tshowBezeichnung:Boolean,\n\t},\n\ttemplate:/*html*/`\n\t
    \n\t\t
    \n\t\t\t{{title}}\n\t\t
    \n\t\t
    \n\t\t\t

    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{{vertretungFormatedName(vertretung,false)}}\n\t\t\t

    \n\t\t
    \n\t
    \n\t`,\n\tmethods: {\n\t\tprofilViewLink: function (uid) {\n\t\t\treturn uid ? FHC_JS_DATA_STORAGE_OBJECT.app_root.concat(FHC_JS_DATA_STORAGE_OBJECT.ci_router).concat(\"/Cis/Profil/View/\").concat(uid) : null;\n\t\t},\n\t\tvertretungFormatedName: function (vertretung) {\n\t\t\tif (!vertretung) return null;\n\t\t\treturn `${vertretung.vorname ?? ''} ${vertretung.nachname ?? ''} ${vertretung.bezeichnung && this.showBezeichnung ? '('.concat(vertretung.bezeichnung.replace(\"(\", \"\").replace(\")\", \"\")).concat(\")\") : ''}`\n\t\t},\n\t},\n\n}","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tstudiengangInformation() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Studgang/getStudiengangInfo'\n\t\t};\n\t},\n\tgetStudiengangByKz(studiengang_kz) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz',\n\t\t\tparams: { studiengang_kz }\n\t\t};\n\t}\n};","import StudiengangPerson from \"./StudiengangPerson.js\";\nimport StudiengangVertretung from \"./StudiengangVertretung.js\";\n\nimport ApiStudiengang from '../../../../api/factory/studiengang.js';\n\nexport default {\ndata(){\n\treturn{\n\t\tstudiengang:null,\n\t\tsemester: null,\n\t\tstg_ltg: null,\n\t\tgf_ltg: null,\n\t\tstv_ltg: null,\n\t\tass: null,\n\t\thochschulvertr: null,\n\t\tstdv: null,\n\t\tjahrgangsvertr: null,\n\t}\n},\nprops:{\n\tdisplayWidget:{\n\t\ttype:Boolean,\n\t\tdefault:false,\n\t}\n},\ncomponents:{\n\tStudiengangPerson,\n\tStudiengangVertretung,\n},\ntemplate:/*html*/`\n\t\t
    \n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t
    \n\t\n`,\ncomputed:{\n\t// this function concatenates the studiengangsleitung and the assistenz or the \n\t// geschaeftsfuehrende-Stellvertretende Leitung if both collections only contain one person\n\tcollection_array: function(){\n\t\tlet returnData = [];\n\n\t\tif (Array.isArray(this.stg_ltg) && this.stg_ltg.length == 1 && Array.isArray(this.ass) && this.ass.length == 1)\n\t\t{\n\t\t\treturnData.push({ title: `${this.$p.t('global', 'studiengangsleitung')}/${this.$p.t('studiengangInformation', 'assistenz')}` , collection: [...this.stg_ltg, ...this.ass] });\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturnData.push({ title: this.$p.t('global', 'studiengangsleitung'), collection: this.stg_ltg });\n\t\t\treturnData.push({ title: this.$p.t('studiengangInformation', 'assistenz'), collection: this.ass });\n\t\t}\n\t\tif (Array.isArray(this.gf_ltg) && this.gf_ltg.length == 1 && Array.isArray(this.stv_ltg) && this.stv_ltg.length == 1)\n\t\t{\n\t\t\treturnData.push({ title: this.$p.t('studiengangInformation', 'geschaeftsfuehrende_stellvertretende_leitung'), collection: [...this.gf_ltg, ...this.stv_ltg] });\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturnData.push({ title: this.$p.t('studiengangInformation', 'geschaeftsfuehrende_leitung'), collection: this.gf_ltg });\n\t\t\treturnData.push({ title: this.$p.t('studiengangInformation', 'stellvertretende_leitung'), collection: this.stv_ltg });\n\t\t}\n\n\t\treturn returnData;\n\t},\n\tmoodleLink: function(){\n\t\t// early return if the studiengang information is not available\n\t\tif(!this.studiengang || !this.studiengang.studiengang_kz) return;\n\n\t\treturn `https://moodle.technikum-wien.at/course/view.php?idnumber=dl` + this.studiengang.studiengang_kz;\n\t},\n},\n\tmounted() {\n\t\tthis.$api\n\t\t\t.call(ApiStudiengang.studiengangInformation())\n\t\t\t.then(res => res.data)\n\t\t\t.then(studiengangInformationen => {\n\t\t\t\tObject.assign(this, studiengangInformationen);\n\t\t\t});\n\t}\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tcontent(content_id, version=null, sprache=null, sichtbar=null) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Cms/content',\n\t\t\tparams: {\n\t\t\t\tcontent_id,\n\t\t\t\t...(version ? { version } : {}),\n\t\t\t\t...(sprache ? { sprache } : {}),\n\t\t\t\t...(sichtbar ? { sichtbar } : {})\n\t\t\t}\n\t\t};\n\t},\n\t//api function used for the news View that renders the html\n\tgetNews(page = 1, page_size = 10, sprache) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Cms/getNews',\n\t\t\tparams: {\n\t\t\t\tpage,\n\t\t\t\tpage_size,\n\t\t\t\tsprache\n\t\t\t},\n\t\t};\n\t},\n\t//api function used for the widget component\n\tnews(limit) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Cms/news',\n\t\t\tparams: { limit }\n\t\t};\n\t},\n\tgetNewsRowCount() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Cms/getNewsRowCount'\n\t\t};\n\t},\n\tgetNewsExtra() {\n\t\t// TODO(chris): seems to be called from nowhere?\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Cms/getStudiengangInfoForNews'\n\t\t};\n\t}\n};","import Pagination from \"../../Pagination/Pagination.js\";\nimport StudiengangInformation from \"./StudiengangInformation/StudiengangInformation.js\";\nimport BsConfirm from \"../../Bootstrap/Confirm.js\";\n\nimport ApiCms from '../../../api/factory/cms.js';\n\nexport default {\n\tname: \"NewsComponent\",\n components: {\n Pagination,\n\tStudiengangInformation,\n },\n data() {\n return {\n content: null,\n maxPageCount: 0,\n page_size: 10,\n\t page:1,\n };\n },\n watch:{\n\t'$p.user_language.value':function(sprache){\n\t\tthis.fetchNews();\n\t}\n },\n computed:{\n\tsprache: function(){\n\t\treturn this.$p.user_language.value;\n\t},\n },\n methods: {\n\t\tfetchNews() {\n\t\t\treturn this.$api\n\t\t\t\t.call(ApiCms.getNews(this.page, this.page_size, this.sprache))\n\t\t\t\t.then(res => res.data)\n\t\t\t\t.then(result => {\n\t\t\t\t\tthis.content = result;\n\n\t\t\t\t\tdocument.querySelectorAll(\"#cms [data-confirm]\").forEach((el) => {\n\t\t\t\t\t\tel.addEventListener(\"click\", (evt) => {\n\t\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\t\tBsConfirm.popup(el.dataset.confirm)\n\t\t\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\t\t\tAxios.get(el.href)\n\t\t\t\t\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\t\t\t\t\t// TODO(chris): check for success then show message and/or reload\n\t\t\t\t\t\t\t\t\t\t\tlocation = location;\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t.catch((err) => console.error(\"ERROR:\", err));\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\tdocument.querySelectorAll(\"#cms [data-href]\").forEach((el) => {\n\t\t\t\t\t\tel.href = el.dataset.href.replace(\n\t\t\t\t\t\t\t/^ROOT\\//,\n\t\t\t\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t\tVue.nextTick(()=>{\n\t\t\t\t\t\tdocument.querySelectorAll(\".card-header\").forEach((el) => {\n\t\t\t\t\t\t\tel.classList.add(\"fhc-primary\");\n\t\t\t\t\t\t});\n\t\t\t\t\t\tdocument.querySelectorAll(\".row\").forEach((el) => {\n\t\t\t\t\t\t\tel.classList.add(\"w-100\");\n\t\t\t\t\t\t\tel.classList.add(\"align-items-center\");\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t});\n\t\t\t\t\t\tdocument.querySelectorAll(\".row h2\").forEach((el) => {\n\t\t\t\t\t\t\tel.classList.add(\"mb-0\");\n\t\t\t\t\t\t});\n\n\t\t\t\t\t})\n\t\t\t\t});\n\t\t},\n\t\tloadNewPageContent(data) {\n\t\t\tthis.$api\n\t\t\t\t.call(ApiCms.getNews(data.page, data.rows))\n\t\t\t\t.then(res => res.data)\n\t\t\t\t.then(result => {\n\t\t\t\t\tthis.content = result;\n\t\t\t\t\t\n\t\t\t\t});\n\t\t}\n },\n created() {\n this.fetchNews();\n\n\t\tthis.$api\n\t\t\t.call(ApiCms.getNewsRowCount())\n\t\t\t.then(res => res.data)\n\t\t\t.then(result => {\n\t\t\t\tthis.maxPageCount = result;\n\t\t\t});\n },\n template: /*html*/ `\n \t

    News

    \n\t
    \n\t\n\t\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t\n\t\n `,\n};\n","\nexport default {\n\tname: \"RaumComponent\",\n\tdata() {\n\t\treturn {\n\t\t\timgContent: null\n\t\t}\n\t},\n props:{\n content:{\n type:String,\n required:true,\n },\n\t content_id:{\n\t\ttype: [Number, String],\n\t }\n },\n\tmethods: {\n\t\tsanitizeLegacyTables(table) {\n\n\t\t\t// find nested tables and replace with p element\n\t\t\tconst tt = table.querySelectorAll('table')\n\t\t\ttt.forEach(t => {\n\t\t\t\tconst textContent = t.textContent.trim();\n\t\t\t\tconst pElement = document.createElement('p');\n\t\t\t\tpElement.textContent = textContent;\n\t\t\t\tt.parentNode.replaceChild(pElement, t);\n\t\t\t})\n\n\t\t\t// find unordered lists, traverse li childs and replace with p element -> more readable than 1 p tag for ul\n\t\t\tconst ul = table.querySelectorAll('ul')\n\t\t\tul.forEach(u => {\n\t\t\t\tArray.from(u.children).forEach(li => {\n\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\tp.textContent = li.textContent\n\t\t\t\t\tu.parentNode.appendChild(p)\n\t\t\t\t})\n\t\t\t\tu.parentNode.removeChild(u)\n\n\t\t\t})\n\n\t\t\t// find bare text nodes and put into p element\n\t\t\tconst td = Array.from(table.querySelectorAll('td')).filter(el => el.scrollWidth > 100)\n\t\t\ttd.forEach(element => {\n\t\t\t\tif (element.firstChild?.nodeType === Node.TEXT_NODE && element.firstChild.length > 10) {\n\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\tp.appendChild(element.firstChild)\n\t\t\t\t\telement.appendChild(p);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// flatten nested th elements\n\t\t\tconst ths = Array.from(table.querySelectorAll('th'))\n\t\t\tths.forEach(th => {\n\n\t\t\t\tif(th.children.length > 1) {\n\t\t\t\t\tth.innerHTML = Array.from(th.childNodes).find(cn => cn.textContent).textContent\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// let p elements wrap on overflow\n\t\t\tconst p = table.querySelectorAll('p')\n\t\t\tp.forEach(p => {\n\t\t\t\tp.style.setProperty('word-wrap', 'break-word');\n\t\t\t\tp.style.setProperty('white-space', 'normal');\n\t\t\t\tp.style.setProperty('max-width', '400px');\n\t\t\t})\n\t\t}\n\t},\n mounted(){\n\t\t// replaces the tablesorter with the tabulator\n\t\tlet tables = document.getElementsByClassName(\"tablesorter\");\n\t\t\n\t\tfor (let table of tables) {\n\t\t\tthis.sanitizeLegacyTables(table)\n\t\t\tnew Tabulator(table, {\n\t\t\t\tlayout: \"fitDataStretch\",\n\n\t\t\t\tcolumnDefaults: {\n\t\t\t\t\tformatter: \"html\",\n\t\t\t\t\tresizable: false,\n\t\t\t\t\tminWidth: \"100px\",\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t\t\n\t\tlet title = document.getElementsByTagName(\"h1\");\n\t\ttitle = title.length ? title[0] : null;\n\t\t// tries to wrap the Raum titel with a link tag that redirects to the Reservierungen of that Raum\n\t\tif (title && title.innerText) \n\t\t{\n\t\t\tlet room_name = title.innerText;\n\t\t\tlet room_name_reg_exp = new RegExp(\"\\\\w*\\\\s([a-zA-Z][0-9\\\\.]+)$\");\n\t\t\tlet room_name_reg_exp_result = room_name.match(room_name_reg_exp);\n\t\t\tif(room_name_reg_exp_result)\n\t\t\t{\n\t\t\t\troom_name = room_name_reg_exp_result[0];\n\t\t\t\troom_name = room_name.replace(\" \",\"_\");\n\t\t\t\tlet link_element = document.createElement(\"a\");\n\t\t\t\tlink_element.href = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/CisVue/Cms/getRoomInformation/\" + room_name;\n\t\t\t\tlink_element.appendChild(title.cloneNode(true));\n\t\t\t\ttitle.replaceWith(link_element);\n\n\t\t\t\tlet lvplanlinks = document.querySelectorAll('.menubox a[href*=\"stpl_week.php\"]');\n\t\t\t\tfor(let lvplanlink of lvplanlinks) {\n\t\t\t\t\tlvplanlink.href = link_element.href;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconsole.error(`the regular expression did not match the room name: ${room_name}`);\n\t\t\t}\n\t\t\t\n\t\t\treturn\n\t\t}\n\t\t\n\t\tconst parser = new DOMParser()\n\t\tconst doc = parser.parseFromString(`
    ${this.content}
    `, \"text/html\");\n\n\t\tconst img = doc.querySelector(\"img\")\n\t\tif(img && img.title)\n\t\t{\n\t\t\tconst imgAttributes = {}\n\t\t\tfor (let attr of img.attributes) {\n\t\t\t\timgAttributes[attr.name] = attr.value\n\t\t\t}\n\n\t\t\tthis.imgContent = imgAttributes\n\t\t}\n\t\t\n\t\tconsole.error(`was not able to get the title of the raum_contentmittitel`);\n\t\t\n },\n template: /*html*/ `\n \n\n
    \n
    \n

    Content was not found

    \n `,\n };\n ","// collection of relative and absolute regex to replace legacy links\nconst GROUP_REPLACEMENT_STRATEGIES = {\n\tQUERY_PARAMETERS:'QUERY_PARAMETERS',\n\tPATH_SEGMENTS:'PATH_SEGMENTS',\n}\n\nconst regexList = {\n\trelative:[\n\t\t{ \n\t\t\tpriority: 1, \n\t\t\tregex: new RegExp(/^\\.\\.\\/cms\\/content\\.php\\?content_id=([0-9]+)/),\n\t\t\treplacement: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/CisVue/Cms/content',\n\t\t\tgroup_replacement_strategy:GROUP_REPLACEMENT_STRATEGIES.PATH_SEGMENTS,\n\t\t},\n\t\t{ \n\t\t\tpriority: 2,\n\t\t\tregex: new RegExp(/^\\.\\.\\/cms\\/news\\.php/),\n\t\t\treplacement: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/CisVue/Cms/news',\n\t\t},\n\t\t{ \n\t\t\tpriority: 3,\n\t\t\tregex: new RegExp(/^\\.\\.\\/index\\.ci\\.php/),\n\t\t\treplacement: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router,\n\t\t},\n\t\t{ \n\t\t\tpriority: 10, \n\t\t\tregex: new RegExp(/^\\.\\.\\//),\n\t\t\treplacement: FHC_JS_DATA_STORAGE_OBJECT.app_root,\n\t\t},\n\t],\n\tabsolute:[\n\t\t{}\n\t]\n};\n\n// sorts the relative regex array by priority ascending\nconst relative_regex = regexList.relative\n\t.sort((a, b) => {\n\t\treturn a.priority - b.priority;\n\t})\n\t.map(regex => {\n\t\treturn {\n\t\t\tregex: regex.regex, \n\t\t\treplacement: regex.replacement,\n\t\t\tgroup_replacement_strategy: regex.group_replacement_strategy,\n\t\t}\n\t});\n\n// sorts the absolute regex array by priority ascending\nconst absolute_regex = regexList.absolute\n\t.sort((a, b) => {\n\t\treturn a.priority - b.priority;\n\t})\n\t.map(regex => {\n\t\treturn {\n\t\t\tregex: regex.regex,\n\t\t\treplacement: regex.replacement,\n\t\t\tgroup_replacement_strategy: regex.group_replacement_strategy,\n\t\t}\n\t})\n\n\nexport function replaceRelativeLegacyLink(relativeLegacyLink){\n\tfor (let {regex,replacement,group_replacement_strategy} of relative_regex){\t\n\t\t// if any of the regex matches the relativeLegacyLink, replace the matched part with the new app_root path\n\t\tlet match = relativeLegacyLink.match(regex);\n\t\tif (match) {\n\t\t\tlet new_link = relativeLegacyLink.replace(regex, replacement);\n\t\t\t\n\t\t\t\tswitch (group_replacement_strategy){\n\t\t\t\t\tcase 'QUERY_PARAMETERS':\n\t\t\t\t\t\t//TODO: this doesn't really work yet because the query parameter are key/value pairs\n\t\t\t\t\t\tnew_link = new_link.concat(`?${match[1]}`);\n\t\t\t\t\t\tfor (let query_parameter of match.slice(2)) {\n\t\t\t\t\t\t\tnew_link = new_link.concat(`&${query_parameter}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'PATH_SEGMENTS':\n\t\t\t\t\t\tfor (let query_parameter of match.slice(1)) { \n\t\t\t\t\t\t\tnew_link = new_link.concat(`/${query_parameter}`);\n\t\t\t\t\t\t} \n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\n\t\t\treturn new_link; \n\t\t}\n\t}\n\t// if none of the regex matched with the string return the original path\n\treturn relativeLegacyLink;\n}\n\n","import { replaceRelativeLegacyLink } from \"../../../../helpers/LegacyLinkReplaceHelper.js\"\nexport default {\n\tname: \"GeneralComponent\",\n props:{\n content:{\n type:String,\n required:true,\n },\n },\n\tmethods: {\n\t\tsanitizeLegacyTables(table) {\n\t\t\t\n\t\t\t// find nested tables and replace with p element\n\t\t\tconst tt = table.querySelectorAll('table')\n\t\t\ttt.forEach(t => {\n\t\t\t\tconst textContent = t.textContent.trim();\n\t\t\t\tconst pElement = document.createElement('p');\n\t\t\t\tpElement.textContent = textContent;\n\t\t\t\tt.parentNode.replaceChild(pElement, t);\n\t\t\t})\n\n\t\t\t// find unordered lists, traverse li childs and replace with p element -> more readable than 1 p tag for ul\n\t\t\tconst ul = table.querySelectorAll('ul')\n\t\t\tul.forEach(u => {\n\t\t\t\tArray.from(u.children).forEach(li => {\n\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\tp.textContent = li.textContent\n\t\t\t\t\tu.parentNode.appendChild(p)\n\t\t\t\t})\n\t\t\t\tu.parentNode.removeChild(u)\n\t\t\t\t\n\t\t\t})\n\n\t\t\t// find bare text nodes and put into p element\n\t\t\tconst td = Array.from(table.querySelectorAll('td')).filter(el => el.scrollWidth > 100)\n\t\t\ttd.forEach(element => {\n\t\t\t\tif (element.firstChild?.nodeType === Node.TEXT_NODE && element.firstChild.length > 10) {\n\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\tp.appendChild(element.firstChild)\n\t\t\t\t\telement.appendChild(p);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// flatten nested th elements\n\t\t\tconst ths = Array.from(table.querySelectorAll('th'))\n\t\t\tths.forEach(th => {\n\n\t\t\t\tif(th.children.length > 1) {\n\t\t\t\t\tth.innerHTML = Array.from(th.childNodes).find(cn => cn.textContent).textContent\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// let p elements wrap on overflow\n\t\t\tconst p = table.querySelectorAll('p')\n\t\t\tp.forEach(p => {\n\t\t\t\tp.style.setProperty('word-wrap', 'break-word');\n\t\t\t\tp.style.setProperty('white-space', 'normal');\n\t\t\t\tp.style.setProperty('max-width', '400px');\n\t\t\t})\n\t\t},\n\t\tprepareContent() {\n\t\t\t// replaces the tablesorter with the tabulator\n\t\t\tlet tables = Array.from(document.getElementsByClassName(\"tablesorter\"));\n\n\t\t\ttables.forEach((table, index) => {\n\t\t\t\tthis.sanitizeLegacyTables(table)\n\n\t\t\t\tnew Tabulator(table, {\n\t\t\t\t\tindex: index,\n\t\t\t\t\tlayout: \"fitDataFill\",\n\n\t\t\t\t\tcolumnDefaults: {\n\t\t\t\t\t\tformatter: \"html\",\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: \"100px\"\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\n\t\t\tdocument.querySelectorAll(\"#cms [data-confirm]\").forEach((el) => {\n\t\t\t\tel.addEventListener(\"click\", (evt) => {\n\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\tBsConfirm.popup(el.dataset.confirm)\n\t\t\t\t\t.then(() => {\n\t\t\t\t\t\tAxios.get(el.href)\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\t// TODO(chris): check for success then show message and/or reload\n\t\t\t\t\t\t\tlocation = location;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((err) => console.error(\"ERROR:\", err));\n\t\t\t\t\t})\n\t\t\t\t\t.catch(() => {});\n\t\t\t\t});\n\t\t\t});\n\t\t\tdocument.querySelectorAll(\"#cms [data-href]\").forEach((el) => {\n\t\t\t\tel.href = el.dataset.href.replace(\n\t\t\t\t\t/^ROOT\\//,\n\t\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tdocument.querySelectorAll(\"[href]\").forEach((element) => {\n\t\t\t\tlet orignal_href = element.getAttribute(\"href\");\n\t\t\t\tlet new_href = replaceRelativeLegacyLink(orignal_href);\n\t\t\t\telement.href = new_href;\n\t\t\t});\n\n\t\t\tdocument.querySelectorAll(\"[style*=background-color]\").forEach((element) => {\n\t\t\t\tif (element.style.backgroundColor == \"rgb(255, 255, 255)\"){\n\t\t\t\t\telement.style.backgroundColor = \"var(--fhc-background)\";\n\t\t\t\t}\n\t\t\t\tif(element.querySelector(\"*[style*=background-color]\")){\n\t\t\t\t\telement.style.backgroundColor = \"var(--fhc-tertiary)\";\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\tupdated() {\n\t\tthis.prepareContent();\n\t},\n\tmounted(){\n\t\tthis.prepareContent();\n\t},\n template: /*html*/ `\n \n
    \n \t
    \n
    \n

    Content was not found

    \n `,\n };\n ","import raum_contentmittitel from './Content_types/Raum_contentmittitel.js'\nimport general from './Content_types/General.js'\nimport BsConfirm from \"../../Bootstrap/Confirm.js\";\nimport news_content from './Content_types/News_content.js';\nimport iframe_content from './Content_types/Iframe_content.js';\n\nimport ApiCms from '../../../api/factory/cms.js';\n\nexport default {\n\tname: \"ContentComponent\",\n\tprops: {\n\t\tcontent_id: {\n\t\t\ttype: [Number, String],\n\t\t\trequired: true\n\t\t},\n\t\tversion: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: null,\n\t\t},\n\t\tsichtbar: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: null,\n\t\t}\n\t},\n\tcomponents: {\n\t\traum_contentmittitel,\n\t\tnews_content,\n\t\tgeneral,\n\t\tiframe_content\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tcontent_type: null,\n\t\t\tcontent: null,\n\t\t\tcontent_id_internal: this.content_id\n\t\t};\n\t},\n\tmethods: {\n\t\tfetchContent(){\n\t\t\tthis.$api\n\t\t\t\t.call(ApiCms.content(this.content_id_internal, this.version, this.sprache, this.sichtbar))\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.$nextTick(function() {\n\t\t\t\t\t\tthis.content = res.data.content;\n\t\t\t\t\t\tthis.content_type = res.data.type;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t}\n\t},\n\twatch:{\n\t\tsprache: function(sprache){\n\t\t\tthis.fetchContent();\n\t\t},\n\t\t'$route.params.content_id'(newVal) {\n\t\t\tthis.content_id_internal = newVal\n\t\t\tthis.fetchContent();\n\t\t}\n\t},\n\tcomputed: {\n\t\tsprache(){\n\t\t\treturn this.$p.user_language.value;\n\t\t},\n\t\tcomputeContentType: function () {\n\t\t\tswitch (this.content_type) {\n\t\t\t\tcase \"raum_contentmittitel\":\n\t\t\t\t\treturn \"raum_contentmittitel\";\n\t\t\t\tcase \"news\":\n\t\t\t\t\treturn \"news_content\";\n\t\t\t\tcase \"iframe\":\n\t\t\t\t\treturn \"iframe_content\";\n\t\t\t\tdefault:\n\t\t\t\t\treturn \"general\";\n\t\t\t};\n\t\t},\n\t},\n\tcreated() {\n\t\tthis.fetchContent();\n\t},\n\ttemplate: /*html*/ `\n \n\t
    \n \t\n\t
    \n

    No content is available to display

    \n `,\n};\n","import { replaceRelativeLegacyLink } from \"../../../../helpers/LegacyLinkReplaceHelper.js\"\nexport default {\n\tname: \"NewsContentType\",\n\tprops:{\n\t content:{\n\t\t type:String,\n\t\t required:true,\n\t },\n\t},\n\tmethods: {\n\t\tsanitizeLegacyTables(table) {\n\t\t\t\n\t\t\t// find nested tables and replace with p element\n\t\t\tconst tt = table.querySelectorAll('table')\n\t\t\ttt.forEach(t => {\n\t\t\t\tconst textContent = t.textContent.trim();\n\t\t\t\tconst pElement = document.createElement('p');\n\t\t\t\tpElement.textContent = textContent;\n\t\t\t\tt.parentNode.replaceChild(pElement, t);\n\t\t\t})\n\n\t\t\t// find unordered lists, traverse li childs and replace with p element -> more readable than 1 p tag for ul\n\t\t\tconst ul = table.querySelectorAll('ul')\n\t\t\tul.forEach(u => {\n\t\t\t\tArray.from(u.children).forEach(li => {\n\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\tp.textContent = li.textContent\n\t\t\t\t\tu.parentNode.appendChild(p)\n\t\t\t\t})\n\t\t\t\tu.parentNode.removeChild(u)\n\t\t\t\t\n\t\t\t})\n\n\t\t\t// find bare text nodes and put into p element\n\t\t\tconst td = Array.from(table.querySelectorAll('td')).filter(el => el.scrollWidth > 100)\n\t\t\ttd.forEach(element => {\n\t\t\t\tif (element.firstChild?.nodeType === Node.TEXT_NODE && element.firstChild.length > 10) {\n\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\tp.appendChild(element.firstChild)\n\t\t\t\t\telement.appendChild(p);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// flatten nested th elements\n\t\t\tconst ths = Array.from(table.querySelectorAll('th'))\n\t\t\tths.forEach(th => {\n\n\t\t\t\tif(th.children.length > 1) {\n\t\t\t\t\tth.innerHTML = Array.from(th.childNodes).find(cn => cn.textContent).textContent\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// let p elements wrap on overflow\n\t\t\tconst p = table.querySelectorAll('p')\n\t\t\tp.forEach(p => {\n\t\t\t\tp.style.setProperty('word-wrap', 'break-word');\n\t\t\t\tp.style.setProperty('white-space', 'normal');\n\t\t\t\tp.style.setProperty('max-width', '400px');\n\t\t\t})\n\t\t}\n\t},\n\tmounted(){\n\t\t// replaces the tablesorter with the tabulator\n\t\tlet tables = Array.from(document.getElementsByClassName(\"tablesorter\"));\n\n\t\ttables.forEach((table, index) => {\n\t\t\tthis.sanitizeLegacyTables(table)\n\t\t\t\n\t\t\tnew Tabulator(table, {\n\t\t\t\tindex: index,\n\t\t\t\tlayout: \"fitDataFill\",\n\n\t\t\t\tcolumnDefaults: {\n\t\t\t\t\tformatter: \"html\",\n\t\t\t\t\tresizable: true,\n\t\t\t\t\tminWidth: \"100px\"\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\n\t\tdocument.querySelectorAll(\"#cms [data-confirm]\").forEach((el) => {\n\t\t\tel.addEventListener(\"click\", (evt) => {\n\t\t\t evt.preventDefault();\n\t\t\t BsConfirm.popup(el.dataset.confirm)\n\t\t\t\t.then(() => {\n\t\t\t\t Axios.get(el.href)\n\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t// TODO(chris): check for success then show message and/or reload\n\t\t\t\t\t\tlocation = location;\n\t\t\t\t\t})\n\t\t\t\t\t.catch((err) => console.error(\"ERROR:\", err));\n\t\t\t\t})\n\t\t\t\t.catch(() => {});\n\t\t\t});\n\t\t });\n\t\tdocument.querySelectorAll(\"#cms [data-href]\").forEach((el) => {\n\t\t\tel.href = el.dataset.href.replace(\n\t\t\t\t/^ROOT\\//,\n\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t);\n\t\t});\n\t\t\t\n\t\tdocument.querySelectorAll(\"[href]\").forEach((element) => {\n\t\t\tlet orignal_href = element.getAttribute(\"href\");\n\t\t\tlet new_href = replaceRelativeLegacyLink(orignal_href);\n\t\t\telement.href = new_href;\n\t\t});\n\n\t\tdocument.querySelectorAll(\"[style*=background-color]\").forEach((element) => {\n\t\t\tif (element.style.backgroundColor == \"rgb(255, 255, 255)\"){\n\t\t\t\telement.style.backgroundColor = \"var(--fhc-background)\";\n\t\t\t}\n\t\t\tif(element.querySelector(\"*[style*=background-color]\")){\n\t\t\t\telement.style.backgroundColor = \"var(--fhc-tertiary)\";\n\t\t\t}\n\t\t});\n\n\t\tVue.nextTick(() => {\n\t\t\tdocument.querySelectorAll(\".card-header\").forEach((el) => {\n\t\t\t\tel.classList.add(\"fhc-primary\");\n\t\t\t});\n\t\t\tdocument.querySelectorAll(\".row\").forEach((el) => {\n\t\t\t\tel.classList.add(\"w-100\");\n\t\t\t\tel.classList.add(\"align-items-center\");\n\n\t\t\t});\n\t\t\tdocument.querySelectorAll(\".row h2\").forEach((el) => {\n\t\t\t\tel.classList.add(\"mb-0\");\n\t\t\t});\n\n\t\t})\n\n\t},\n\ttemplate: /*html*/ `\n\t \n\t
    \n\t\t
    \n\t
    \n\t

    Content was not found

    \n\t `,\n };\n ","import { replaceRelativeLegacyLink } from \"../../../../helpers/LegacyLinkReplaceHelper.js\";\n\nexport default {\n\tname: \"iframe_content\",\n\tprops: {\n\t\tcontent: { type: String, required: true }\n\t},\n\tcomputed: {\n\t\tsrcUrl() {\n\t\t\tconst parser = new DOMParser()\n\t\t\tconst doc = parser.parseFromString(`
    ${this.content}
    `, \"text/html\");\n\t\t\tconst iframe = doc.querySelector(\"iframe[src]\");\n\n\t\t\tif (!iframe)\n\t\t\t\treturn \"\";\n\n\t\t\tlet url = iframe.getAttribute(\"src\") || \"\";\n\t\t\treturn replaceRelativeLegacyLink(url);\n\t\t}\n\t},\n\ttemplate: `\n\t\t
    \n\t\t\t\n\t\t
    Keine URL gefunden.
    \n\t\t
    \n\t`\n};\n","import FhcCalendar from \"../../Calendar/LvPlan.js\";\n\nimport ApiLvPlan from '../../../api/factory/lvPlan.js';\n\nexport const DEFAULT_MODE_RAUMINFO = 'Week'\n\nexport default {\n\tname: \"RoomInformation\",\n\tcomponents: {\n\t\tFhcCalendar\n\t},\n\tprops:{\n\t\tviewData: Object, // NOTE(chris): this is inherited from router-view\n\t\tpropsViewData: Object\n\t},\n\tcomputed: {\n\t\tcurrentDay() {\n\t\t\treturn this.propsViewData?.focus_date || luxon.DateTime.now().setZone(this.viewData.timezone).toISODate();\n\t\t},\n\t\tcurrentMode() {\n\t\t\treturn this.propsViewData?.mode || DEFAULT_MODE_RAUMINFO;\n\t\t}\n\t},\n\tmethods:{\n\t\thandleChangeDate(day, newMode) {\n\t\t\treturn this.handleChangeMode(newMode, day);\n\t\t},\n\t\thandleChangeMode(newMode, day) {\n\t\t\tconst mode = newMode[0].toUpperCase() + newMode.slice(1)\n\t\t\tconst focus_date = day.toISODate();\n\n\t\t\tthis.$router.push({\n\t\t\t\tname: \"RoomInformation\",\n\t\t\t\tparams: {\n\t\t\t\t\tmode,\n\t\t\t\t\tfocus_date,\n\t\t\t\t\tort_kurzbz: this.propsViewData.ort_kurzbz\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tgetPromiseFunc(start, end) {\n\t\t\treturn [\n\t\t\t\tthis.$api.call(ApiLvPlan.getRoomInfo(this.propsViewData.ort_kurzbz, start.toISODate(), end.toISODate())),\n\t\t\t\tthis.$api.call(ApiLvPlan.getOrtReservierungen(this.propsViewData.ort_kurzbz, start.toISODate(), end.toISODate()))\n\t\t\t];\n\t\t}\n\t},\n\ttemplate: /*html*/`\n\t
    \n\t\t

    {{ $p.t('rauminfo/rauminfo') }} {{ propsViewData.ort_kurzbz }}

    \n\t\t
    \n\t\t\n\t
    `\n};\n","import Upload from '../../../components/Form/Upload/Dms.js';\nimport BsModal from '../../Bootstrap/Modal.js';\nimport VueDatePicker from '../../vueDatepicker.js.php';\n\nconst today = new Date()\nexport const AbgabeStudentDetail = {\n\tname: \"AbgabeStudentDetail\",\n\tcomponents: {\n\t\tUpload,\n\t\tBsModal,\n\t\tInputNumber: primevue.inputnumber,\n\t\tCheckbox: primevue.checkbox,\n\t\tDropdown: primevue.dropdown,\n\t\tTextarea: primevue.textarea,\n\t\tVueDatePicker\n\t},\n\tprops: {\n\t\tprojektarbeit: {\n\t\t\ttype: Object,\n\t\t\tdefault: null\n\t\t},\n\t\tviewMode: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\teidAkzeptiert: false,\n\t\t\tenduploadTermin: null,\n\t\t\tallActiveLanguages: FHC_JS_DATA_STORAGE_OBJECT.server_languages,\n\t\t\tform: Vue.reactive({\n\t\t\t\tsprache: '',\n\t\t\t\tabstract: '',\n\t\t\t\tabstract_en: '',\n\t\t\t\tschlagwoerter: '',\n\t\t\t\tschlagwoerter_en: '',\n\t\t\t\tkontrollschlagwoerter: '',\n\t\t\t\tseitenanzahl: 1,\n\t\t\t})\n\t\t}\n\t},\n\tmethods: {\n\t\tvalidate: function(termin) {\n\t\t\tif(!termin.file.length) {\n\t\t\t\tthis.$fhcAlert.alertWarning(this.$p.t('global/warningChooseFile'));\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\t\ttriggerEndupload() {\n\t\t\tif (!this.validate(this.enduploadTermin))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\t// post endabgabe\n\t\t\tconst formData = new FormData();\n\t\t\tformData.append('paabgabetyp_kurzbz', this.enduploadTermin.paabgabetyp_kurzbz)\n\t\t\tformData.append('projektarbeit_id', this.enduploadTermin.projektarbeit_id);\n\t\t\tformData.append('paabgabe_id', this.enduploadTermin.paabgabe_id)\n\t\t\tformData.append('student_uid', this.projektarbeit.student_uid)\n\t\t\tformData.append('bperson_id', this.projektarbeit.bperson_id)\n\t\t\t\n\t\t\t// TODO: validate/check for null etc.\n\t\t\tformData.append('sprache', this.form['sprache'].sprache)\n\t\t\tformData.append('abstract', this.form['abstract'])\n\t\t\tformData.append('abstract_en', this.form['abstract_en'])\n\t\t\tformData.append('schlagwoerter', this.form['schlagwoerter'])\n\t\t\tformData.append('schlagwoerter_en', this.form['schlagwoerter_en'])\n\t\t\tformData.append('seitenanzahl', this.form['seitenanzahl'])\n\t\t\t\n\t\t\tfor (let i = 0; i < this.enduploadTermin.file.length; i++) {\n\t\t\t\tformData.append('file', this.enduploadTermin.file[i]);\n\t\t\t}\n\t\t\tthis.$fhcApi.factory.lehre.postStudentProjektarbeitEndupload(formData)\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.handleUploadRes(res)\n\t\t\t\t})\n\t\t\t\n\t\t\tthis.$refs.modalContainerEnduploadZusatzdaten.hide()\n\t\t},\n\t\tdownloadAbgabe(termin) {\n\t\t\tthis.$fhcApi.factory.lehre.getStudentProjektarbeitAbgabeFile(termin.paabgabe_id, this.projektarbeit.student_uid)\n\t\t},\n\t\tformatDate(dateParam) {\n\t\t\tconst date = new Date(dateParam)\n\t\t\t// handle missing leading 0\n\t\t\tconst padZero = (num) => String(num).padStart(2, '0');\n\n\t\t\tconst month = padZero(date.getMonth() + 1); // Months are zero-based\n\t\t\tconst day = padZero(date.getDate());\n\t\t\tconst year = date.getFullYear();\n\n\t\t\treturn `${day}.${month}.${year}`;\n\t\t},\n\t\tupload(termin) {\n\n\t\t\tif (!this.validate(termin))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\tif(termin.bezeichnung === 'Endupload') {\n\t\t\t\t// open endupload form modal for further inputs\n\t\t\t\tthis.enduploadTermin = termin\n\t\t\t\tthis.$refs.modalContainerEnduploadZusatzdaten.show()\n\t\t\t} else {\n\t\t\t\tconst formData = new FormData();\n\t\t\t\tformData.append('paabgabetyp_kurzbz', termin.paabgabetyp_kurzbz)\n\t\t\t\tformData.append('projektarbeit_id', this.projektarbeit.projektarbeit_id)\n\t\t\t\tformData.append('paabgabe_id', termin.paabgabe_id)\n\t\t\t\tformData.append('student_uid', this.projektarbeit.student_uid)\n\t\t\t\tformData.append('bperson_id', this.projektarbeit.bperson_id)\n\t\t\t\t\n\t\t\t\tfor (let i = 0; i < termin.file.length; i++) {\n\t\t\t\t\tformData.append('file', termin.file[i]);\n\t\t\t\t}\n\t\t\t\tthis.$fhcApi.factory.lehre.postStudentProjektarbeitZwischenabgabe(formData)\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tthis.handleUploadRes(res)\n\t\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\thandleUploadRes(res) {\n\t\t\tif(res.meta.status == \"success\") {\n\t\t\t\tthis.$fhcAlert.alertSuccess('File erfolgreich hochgeladen')\n\t\t\t} else {\n\t\t\t\tthis.$fhcAlert.alertError('File upload error')\n\t\t\t}\n\t\t\t\n\t\t\tif(res.meta.signaturInfo) {\n\t\t\t\tthis.$fhcAlert.alertInfo(res.meta.signaturInfo)\n\t\t\t}\n\t\t},\n\t\tdateDiffInDays(datum, today){\n\t\t\tconst oneDayMs = 1000 * 60 * 60 * 24\n\t\t\treturn Math.round((new Date(datum) - new Date(today)) / oneDayMs)\n\t\t},\n\t\tgetDateStyle(termin, mode) {\n\t\t\tconst datum = new Date(termin.datum)\n\t\t\tconst abgabedatum = new Date(termin.abgabedatum)\n\t\t\t\n\t\t\t// todo: rework styling but keep the color pattern logic\n\t\t\t// https://wiki.fhcomplete.info/doku.php?id=cis:abgabetool_fuer_studierende\n\t\t\tlet color = 'white'\n\t\t\tlet fontColor = 'black'\n\t\t\tlet icon = '';\n\t\t\tif (termin.abgabedatum === null) {\n\t\t\t\tif(datum < today) {\n\t\t\t\t\tcolor = 'red'\n\t\t\t\t\tfontColor = 'white'\n\t\t\t\t\ticon = 'fa-triangle-exclamation'\n\t\t\t\t} else if (datum > today && this.dateDiffInDays(datum, today) <= 12) {\n\t\t\t\t\tcolor = 'yellow'\n\t\t\t\t\ticon = 'fa-circle-exclamation'\n\t\t\t\t}\n\t\t\t} else if(abgabedatum > datum) {\n\t\t\t\tcolor = 'pink' // aka \"hellrot\"\n\t\t\t\tfontColor = 'white'\n\t\t\t\ticon = 'fa-circle-question'\n\t\t\t} else {\n\t\t\t\tcolor = 'green'\n\t\t\t\ticon = 'fa-square-check'\n\t\t\t}\n\t\t\t\n\t\t\t//return `font-color: ${fontColor} ; background-color: ${color}; border-radius: 50%;`\n\t\t\tif( typeof mode !== 'undefined' || mode === 'icon') {\n\t\t\t\treturn icon;\n\t\t\t} else {\n\t\t\t\treturn 'abgabe-zieldatum-border-' + color;\n\t\t\t}\n\t\t},\n\t\topenBeurteilungLink(link) {\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\tgetOptionLabel(option) {\n\t\t\treturn option.sprache\n\t\t}\n\t},\n\twatch: {\n\t\tprojektarbeit(newVal) {\n\t\t\t// default select german if projektarbeit sprache was null\n\t\t\tthis.form.sprache = newVal.sprache ? this.allActiveLanguages.find(lang => lang.sprache == newVal.sprache) : this.allActiveLanguages.find(lang => lang.sprache == 'German')\n\t\t\tthis.form.abstract = newVal.abstract\n\t\t\tthis.form.abstract_en = newVal.abstract_en\n\t\t\tthis.form.schlagwoerter = newVal.schlagwoerter\n\t\t\tthis.form.schlagwoerter_en = newVal.schlagwoerter_en\n\t\t\tthis.form.kontrollschlagwoerter = newVal.kontrollschlagwoerter\n\t\t\tthis.form.seitenanzahl = newVal.seitenanzahl\n\t\t}\n\t},\n\tcomputed: {\n\t\tgetEid() {\n\t\t\treturn this.$p.t('abgabetool/c4eidesstattlicheErklaerung')\n\t\t},\n\t\tgetEnduploadErlaubt() {\n\t\t\treturn !this.eidAkzeptiert\n\t\t}\n\t},\n\tcreated() {\n\n\t},\n\tmounted() {\n\n\t},\n\ttemplate: `\n\t\t
    \n\t\t\n\t\t\t
    {{$p.t('abgabetool/c4abgabeStudentenbereich')}}
    \n\t\t\t
    \n\t\t\t\t

    {{projektarbeit?.betreuer}}

    \n\t\t\t\t

    {{projektarbeit?.titel}}

    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    {{$p.t('abgabetool/c4fixtermin')}}
    \n\t\t\t\t\t
    {{$p.t('abgabetool/c4zieldatum')}}
    \n\t\t\t\t\t
    {{$p.t('abgabetool/c4abgabetyp')}}
    \n\t\t\t\t\t
    {{$p.t('abgabetool/c4abgabekurzbz')}}
    \n\t\t\t\t\t
    {{$p.t('abgabetool/c4abgabedatum')}}
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t{{$p.t('abgabetool/c4fileupload')}}\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    {{ termin.bezeichnung }}
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t{{ termin.abgabedatum?.split(\"-\").reverse().join(\".\") }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t \t\n\t \t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t \t\n `,\n};\n\nexport default AbgabeStudentDetail;\n","export default {\n name: 'VerticalSplit',\n data: function() {\n return { \n availHeight: 0,\n topheight: 0,\n bottomheight: 0,\n mousePosY: 0, \n resize: false,\n vsplitter: null,\n vsplitterOffset: 0,\n selfOffsetTop: 0\n }; \n },\n template: `\n
    \n
    \n \n

    Top Panel

    \n
    \n
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n \n

    \n \n

    \n
    \n `,\n mounted: function() {\n this.calcHeights();\n this.trackVerticalSplitterOffsetTop();\n window.addEventListener('resize', this.calcHeights);\n },\n updated: function() {\n this.trackVerticalSplitterOffsetTop();\n },\n methods: {\n calcHeights: function() {\n var windowheight = window.innerHeight;\n var oldavailHeight = this.availHeight;\n this.selfOffsetTop = this.$refs.verticalsplit.offsetTop;\n this.availHeight = windowheight - this.selfOffsetTop - this.$refs.vsplitter.offsetHeight;\n if( (this.topheight === 0 && this.bottomheight === 0) || oldavailHeight === 0 ) {\n this.topheight = Math.floor(this.availHeight/2);\n } else {\n this.topheight = Math.floor( ((((this.topheight * 100) / oldavailHeight) / 100) * this.availHeight) );\n }\n this.bottomheight = this.availHeight - this.topheight;\n },\n collapseTop: function() {\n this.calcHeights();\n this.topheight = 0;\n this.bottomheight = this.availHeight;\n },\n collapseBottom: function() {\n this.calcHeights();\n this.topheight = this.availHeight;\n this.bottomheight = 0;\n },\n showBoth: function() {\n this.topheight = Math.floor(this.availHeight/2);\n this.bottomheight = Math.floor(this.availHeight/2);\n },\n isCollapsed: function() {\n if( this.topheight === 0 ) {\n return 'top';\n } else if ( this.bottomheight === 0 ) {\n return 'bottom';\n } else {\n return false;\n }\n },\n dragStart: function(e) {\n e.preventDefault();\n e.stopPropagation();\n window.addEventListener('mouseup', this.dragEnd);\n window.addEventListener('mousemove', this.drag);\n this.resize = true;\n this.mousePosY = e.clientY;\n },\n drag: function(e) {\n if( !this.resize ) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n var offsetY = e.clientY - this.mousePosY;\n this.topheight = this.topheight + offsetY;\n if( this.topheight < 0 ) {\n this.topheight = 0;\n }\n if( this.topheight > this.availHeight ) {\n this.topheight = this.availHeight;\n }\n this.bottomheight = this.availHeight - this.topheight;\n this.mousePosY = e.clientY;\n },\n dragEnd: function(e) {\n e.preventDefault();\n e.stopPropagation();\n window.removeEventListener('mousemove', this.drag);\n window.removeEventListener('mouseup', this.dragEnd);\n this.resize = false;\n this.mousePosY = e.clientY;\n },\n trackVerticalSplitterOffsetTop: function() {\n this.vsplitterOffset = this.$refs.vsplitter.offsetTop;\n }\n },\n computed: {\n topOrBottomClass: function() {\n return ((this.vsplitterOffset - this.selfOffsetTop) <= Math.floor(this.availHeight/2))\n ? 'top'\n : 'bottom';\n },\n topheightcss: function() {\n return this.topheight + 'px';\n },\n bottomheightcss: function() {\n return this.bottomheight + 'px';\n }\n }\n};","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport AbgabeDetail from \"./AbgabeStudentDetail.js\";\nimport VerticalSplit from \"../../verticalsplit/verticalsplit.js\";\n\nexport const AbgabetoolStudent = {\n\tname: \"AbgabetoolStudent\",\n\tcomponents: {\n\t\tCoreFilterCmpt,\n\t\tAbgabeDetail,\n\t\tVerticalSplit\n\t},\n\tprops: {\n\t\tstudent_uid_prop: {\n\t\t\tdefault: null\n\t\t},\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: () => ({uid: ''}),\n\t\t\tvalidator(value) {\n\t\t\t\treturn value && value.uid\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\ttabulatorUuid: Vue.ref(0),\n\t\t\tdomain: '',\n\t\t\tstudent_uid: null,\n\t\t\tdetail: null,\n\t\t\tprojektarbeiten: null,\n\t\t\tselectedProjektarbeit: null,\n\t\t\ttableBuiltResolve: null,\n\t\t\ttableBuiltPromise: null,\n\t\t\tabgabeTableOptions: {\n\t\t\t\tminHeight: 250,\n\t\t\t\tindex: 'projektarbeit_id',\n\t\t\t\tlayout: 'fitColumns',\n\t\t\t\tplaceholder: this.$p.t('global/noDataAvailable'),\n\t\t\t\tcolumns: [\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4details')), field: 'details', formatter: this.detailFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4beurteilung')), field: 'beurteilung', formatter: this.beurteilungFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4sem')), field: 'sem', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4stg')), field: 'stg', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4kontakt')), field: 'mail', formatter: this.mailFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4betreuer')), field: 'betreuer', formatter: this.centeredTextFormatter,widthGrow: 2},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4projekttyp')), field: 'typ', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4titel')), field: 'titel', formatter: this.centeredTextFormatter, widthGrow: 8}\n\t\t\t\t],\n\t\t\t\tpersistence: false,\n\t\t\t},\n\t\t\tabgabeTableEventHandlers: [{\n\t\t\t\tevent: \"tableBuilt\",\n\t\t\t\thandler: async () => {\n\t\t\t\t\tthis.tableBuiltResolve()\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tevent: \"cellClick\",\n\t\t\t\thandler: async (e, cell) => {\n\t\t\t\t\t\n\t\t\t\t\tif(cell.getColumn().getField() === \"details\") {\n\t\t\t\t\t\tconst val = cell.getValue()\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(val.mode === 'detailTermine') {\n\t\t\t\t\t\t\tthis.setDetailComponent(cell.getValue())\n\t\t\t\t\t\t} else if (val.mode === 'beurteilungDownload') {\n\t\t\t\t\t\t\tconst pdfExportLink = FHC_JS_DATA_STORAGE_OBJECT.app_root + 'cis/private/pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz='+val.betreuerart_kurzbz+'&projektarbeit_id='+val.projektarbeit_id+'&person_id=' + val.betreuer_person_id\n\t\t\t\t\t\t\t// const pdfExportLink2 = FHC_JS_DATA_STORAGE_OBJECT.app_root + 'cis/private/lehre/projektbeurteilungDocumentExport.php?betreuerart_kurzbz='+val.betreuerart_kurzbz+'&projektarbeit_id='+val.projektarbeit_id+'&person_id=' + val.betreuer_person_id\n\t\t\t\t\t\t\twindow.open(pdfExportLink, '_blank')\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if (cell.getColumn().getField() === \"beurteilung\") {\n\t\t\t\t\t\tconst val = cell.getValue()\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(val != '-') window.open(val, '_blank')\n\t\t\t\t\t} \n\t\t\t\t\te.stopPropagation()\n\n\t\t\t\t}\n\t\t\t}\n\t\t\t]};\n\t},\n\tmethods: {\n\t\tisPastDate(date) {\n\t\t\treturn new Date(date) < new Date(Date.now())\t\n\t\t},\n\t\tsetDetailComponent(details){\n\t\t\tthis.loadAbgaben(details).then((res)=> {\n\t\t\t\tconst pa = this.projektarbeiten?.retval?.find(projekarbeit => projekarbeit.projektarbeit_id == details.projektarbeit_id)\n\t\t\t\tpa.abgabetermine = res.data[0].retval\n\t\t\t\tpa.abgabetermine.forEach(termin => {\n\t\t\t\t\ttermin.file = []\n\t\t\t\t\ttermin.allowedToUpload = true\n\t\t\t\t\t\n\t\t\t\t\t// TODO: fixtermin logic?\n\t\t\t\t\tif(termin.bezeichnung == 'Endupload' && this.isPastDate(termin.datum)) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t// termin.allowedToUpload = false\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// termin.allowedToUpload = true\n\t\t\t\t\t}\n\n\t\t\t\t})\n\t\t\t\tpa.betreuer = this.buildBetreuer(pa)\n\t\t\t\tpa.student_uid = this.student_uid\n\n\t\t\t\tthis.selectedProjektarbeit = pa\n\n\t\t\t\t\n\t\t\t\tthis.$refs.verticalsplit.showBoth()\n\t\t\t\t\n\t\t\t})\n\t\t\t\n\t\t},\n\t\tcenteredTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\treturn '
    ' +\n\t\t\t\t'

    '+val+'

    '\n\t\t},\n\t\tdetailFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\tif(val.mode === 'detailTermine') {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t} else if (val.mode === 'beurteilungDownload') {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t}\n\t\t},\n\t\tmailFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t},\n\t\tbeurteilungFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\tif(val) {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t} else return '-'\n\t\t},\n\t\ttableResolve(resolve) {\n\t\t\tthis.tableBuiltResolve = resolve\n\t\t},\n\t\tbuildMailToLink(abgabe) {\n\t\t\treturn 'mailto:' + abgabe.mitarbeiter_uid +'@'+ this.domain\n\t\t},\n\t\tbuildBetreuer(abgabe) {\n\t\t\treturn abgabe.betreuerart_beschreibung + ': ' + (abgabe.btitelpre ? abgabe.btitelpre + ' ' : '') + abgabe.bvorname + ' ' + abgabe.bnachname + (abgabe.btitelpost ? ' ' + abgabe.btitelpost : '')\n\t\t},\n\t\tsetupData(data){\n\t\t\tthis.projektarbeiten = data[0]\n\t\t\tthis.domain = data[1]\n\t\t\tthis.student_uid = data[2]\n\t\t\tconst d = data[0]?.retval?.map(projekt => {\n\t\t\t\tlet mode = 'detailTermine'\n\t\t\t\t\n\t\t\t\tif (projekt.babgeschickt || projekt.zweitbetreuer_abgeschickt) {\n\t\t\t\t\t// mode = 'beurteilungDownload' // build dl link for both betreuer documents\n\t\t\t\t\tprojekt.beurteilungLink = FHC_JS_DATA_STORAGE_OBJECT.app_root + 'cis/private/pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz='+projekt.betreuerart_kurzbz+'&projektarbeit_id='+projekt.projektarbeit_id+'&person_id=' + projekt.bperson_id\n\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn {\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tstudent_uid: this.student_uid,\n\t\t\t\t\t\tprojektarbeit_id: projekt.projektarbeit_id,\n\t\t\t\t\t\tbetreuer_person_id: projekt.bperson_id,\n\t\t\t\t\t\tbetreuerart_kurzbz: projekt.betreuerart_kurzbz,\n\t\t\t\t\t\tmode\n\t\t\t\t\t},\n\t\t\t\t\tbeurteilung: projekt.beurteilungLink ?? null,\n\t\t\t\t\tsem: projekt.studiensemester_kurzbz,\n\t\t\t\t\tstg: projekt.kurzbzlang,\n\t\t\t\t\tmail: this.buildMailToLink(projekt),\n\t\t\t\t\tbetreuer: this.buildBetreuer(projekt),\n\t\t\t\t\ttyp: projekt.projekttypbezeichnung,\n\t\t\t\t\ttitel: projekt.titel\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tthis.$refs.abgabeTable.tabulator.setColumns(this.abgabeTableOptions.columns)\n\t\t\tthis.$refs.abgabeTable.tabulator.setData(d);\n\t\t},\n\t\tloadProjektarbeiten() {\n\t\t\tthis.$fhcApi.factory.lehre.getStudentProjektarbeiten(this.student_uid_prop || this.viewData?.uid || null)\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res?.data) this.setupData(res.data)\n\t\t\t\t})\n\t\t},\n\t\tloadAbgaben(details) {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tthis.$fhcApi.factory.lehre.getStudentProjektabgaben(details)\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tresolve(res)\n\t\t\t\t\t})\n\t\t\t})\t\n\t\t},\n\t\thandleUuidDefined(uuid) {\n\t\t\tthis.tabulatorUuid = uuid\n\t\t},\n\t\tcalcMaxTableHeight() {\n\t\t\tconst tableID = this.tabulatorUuid ? ('-' + this.tabulatorUuid) : ''\n\t\t\tconst tableDataSet = document.getElementById('filterTableDataset' + tableID);\n\t\t\tif(!tableDataSet) return\n\t\t\tconst rect = tableDataSet.getBoundingClientRect();\n\n\t\t\tthis.abgabeTableOptions.height = window.visualViewport.height - rect.top\n\t\t\tthis.$refs.abgabeTable.tabulator.setHeight(this.abgabeTableOptions.height)\n\t\t},\n\t\tasync setupMounted() {\n\t\t\tthis.tableBuiltPromise = new Promise(this.tableResolve)\n\t\t\tawait this.tableBuiltPromise\n\t\t\t\n\t\t\tthis.loadProjektarbeiten()\n\n\t\t\tthis.$refs.verticalsplit.collapseBottom()\n\t\t\t//this.calcMaxTableHeight()\n\t\t}\n\t},\n\twatch: {\n\n\t},\n\tcomputed: {\n\t\tisViewMode() {\n\t\t\treturn this.student_uid !== this.viewData.uid\n\t\t}\n\t},\n\tcreated() {\n\n\t},\n\tmounted() {\n\t\tthis.setupMounted()\n\t},\n\ttemplate: `\n\t\t\t\t\t\n\t\t\n\t\t\n\t\n `,\n};\n\nexport default AbgabetoolStudent;\n","import BsModal from '../../Bootstrap/Modal.js';\nimport VueDatePicker from '../../vueDatepicker.js.php';\n\nconst today = new Date()\nexport const AbgabeMitarbeiterDetail = {\n\tname: \"AbgabeMitarbeiterDetail\",\n\tcomponents: {\n\t\tBsModal,\n\t\tInputNumber: primevue.inputnumber,\n\t\tCheckbox: primevue.checkbox,\n\t\tDropdown: primevue.dropdown,\n\t\tTextarea: primevue.textarea,\n\t\tVueDatePicker\n\t},\n\tprops: {\n\t\tprojektarbeit: {\n\t\t\ttype: Object,\n\t\t\tdefault: null\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\toldPaBeurteilungLink: 'https://moodle.technikum-wien.at/mod/page/view.php?id=1005052', // TODO: inject from app & app provide link from config\n\t\t\teidAkzeptiert: false,\n\t\t\tenduploadTermin: null,\n\t\t\tallActiveLanguages: FHC_JS_DATA_STORAGE_OBJECT.server_languages,\n\t\t\t// TODO: fetch types\n\t\t\tallAbgabeTypes: [\n\t\t\t\t{\n\t\t\t\t\tpaabgabetyp_kurzbz: 'abstract',\n\t\t\t\t\tbezeichnung: 'Entwurf'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpaabgabetyp_kurzbz: 'zwischen',\n\t\t\t\t\tbezeichnung: 'Zwischenabgabe'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpaabgabetyp_kurzbz: 'note',\n\t\t\t\t\tbezeichnung: 'Benotung'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpaabgabetyp_kurzbz: 'end',\n\t\t\t\t\tbezeichnung: 'Endupload'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpaabgabetyp_kurzbz: 'enda',\n\t\t\t\t\tbezeichnung: 'Endabgabe im Sekretariat'\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\tmethods: {\n\t\topenZusatzdatenModal(termin) {\n\t\t\t\t\n\t\t},\n\t\tsaveTermin(termin) {\n\t\t\tconst paabgabe_id = termin.paabgabe_id\n\t\t\tthis.$fhcApi.factory.lehre.postProjektarbeitAbgabe(termin).then( (res) => {\n\t\t\t\tif(res?.meta?.status == 'success') {\n\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('ui/gespeichert'))\n\n\t\t\t\t\tif(paabgabe_id === -1) { // new abgabe has been inserted\n\t\t\t\t\t\ttermin.paabgabe_id = res?.data?.retval\n\n\t\t\t\t\t\tthis.projektarbeit.abgabetermine.push({ // new abgatermin row\n\n\t\t\t\t\t\t\t'paabgabe_id': -1,\n\t\t\t\t\t\t\t'projektarbeit_id': this.projektarbeit.projektarbeit_id,\n\t\t\t\t\t\t\t'fixtermin': false,\n\t\t\t\t\t\t\t'kurzbz': '',\n\t\t\t\t\t\t\t'datum': new Date().toISOString().split('T')[0],\n\t\t\t\t\t\t\t'paabgabetyp_kurzbz': '',\n\t\t\t\t\t\t\t'bezeichnung': '',\n\t\t\t\t\t\t\t'abgabedatum': null,\n\t\t\t\t\t\t\t'insertvon': this.viewData?.uid ?? '',\n\t\t\t\t\t\t\t'allowedToSave': true,\n\t\t\t\t\t\t\t'allowedToDelete': true\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t} else if(res?.meta?.status == 'error'){\n\t\t\t\t\tthis.$fhcAlert.alertError()\n\t\t\t\t}\n\t\t\t\t\n\t\t\t})\n\t\t},\n\t\tdeleteTermin(termin) {\n\t\t\tthis.$fhcApi.factory.lehre.deleteProjektarbeitAbgabe(termin.paabgabe_id).then( (res) => {\n\t\t\t\tif(res?.meta?.status == 'success') {\n\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('ui/genericDeleted', [this.$p.t('abgabetool/abgabe')]))\n\t\t\t\t\t// this.$p.t('global/tooltipLektorDeleteKontrolle', [this.$entryParams.permissions.kontrolleDeleteMaxReach ])\n\t\t\t\t\tconst deletedTerminIndex = this.projektarbeit.abgabetermine.findIndex(t => t.paabgabe_id === termin.paabgabe_id)\n\t\t\t\t\tthis.projektarbeit.abgabetermine.splice(deletedTerminIndex, 1)\n\n\n\t\t\t\t} else if(res?.meta?.status == 'error'){\n\t\t\t\t\tthis.$fhcAlert.alertError()\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t\tvalidate: function(termin) {\n\t\t\tif(!termin.file.length) {\n\t\t\t\tthis.$fhcAlert.alertWarning(this.$p.t('global/warningChooseFile'));\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\t\tdownloadAbgabe(termin) {\n\t\t\tthis.$fhcApi.factory.lehre.getStudentProjektarbeitAbgabeFile(termin.paabgabe_id, this.projektarbeit.student_uid)\n\t\t},\n\t\tdateDiffInDays(datum, today){\n\t\t\tconst oneDayMs = 1000 * 60 * 60 * 24\n\t\t\treturn Math.round((new Date(datum) - new Date(today)) / oneDayMs)\n\t\t},\n\t\tgetDateStyle(termin) {\n\t\t\tconst datum = new Date(termin.datum)\n\t\t\tconst abgabedatum = new Date(termin.abgabedatum)\n\n\t\t\t// todo: rework styling but keep the color pattern logic\n\t\t\t// https://wiki.fhcomplete.info/doku.php?id=cis:abgabetool_fuer_studierende\n\t\t\tlet color = 'white'\n\t\t\tlet fontColor = 'black'\n\t\t\tif (termin.abgabedatum === null) {\n\t\t\t\tif(datum < today) {\n\t\t\t\t\tcolor = 'red'\n\t\t\t\t\tfontColor = 'white'\n\t\t\t\t} else if (datum > today && this.dateDiffInDays(datum, today) <= 12) {\n\t\t\t\t\tcolor = 'yellow'\n\t\t\t\t}\n\t\t\t} else if(abgabedatum > datum) {\n\t\t\t\tcolor = 'pink' // aka \"hellrot\"\n\t\t\t\tfontColor = 'white'\n\t\t\t} else {\n\t\t\t\tcolor = 'green'\n\t\t\t}\n\n\t\t\treturn `font-color: ${fontColor} ; background-color: ${color}; border-radius: 50%;`\n\t\t},\n\t\topenBeurteilungLink(link) {\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\tgetOptionLabelSprache(option) {\n\t\t\treturn option.sprache\n\t\t},\n\t\tgetOptionLabelAbgabetyp(option){\n\t\t\treturn option.bezeichnung\n\t\t},\n\t\tformatDate(dateParam) {\n\t\t\tconst date = new Date(dateParam)\n\t\t\t// handle missing leading 0\n\t\t\tconst padZero = (num) => String(num).padStart(2, '0');\n\n\t\t\tconst month = padZero(date.getMonth() + 1); // Months are zero-based\n\t\t\tconst day = padZero(date.getDate());\n\t\t\tconst year = date.getFullYear();\n\n\t\t\treturn `${day}.${month}.${year}`;\n\t\t},\n\t\topenStudentPage() {\n\t\t\tconst link = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ '/Cis/Abgabetool/Student/' + this.projektarbeit?.student_uid\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\topenPlagiatcheck() {\n\t\t\t// todo: hardcoded turnitin link?\n\t\t\tconst link = \"https://technikum-wien.turnitin.com/sso/sp/redwood/saml/5IyfmBr2OcSIaWQTKlFCGj/start\"\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\topenBenotung() {\n\t\t\tconst path = this.projektarbeit?.betreuerart_kurzbz == 'Zweitbegutachter' ? 'ProjektarbeitsbeurteilungZweitbegutachter' : 'ProjektarbeitsbeurteilungErstbegutachter'\n\t\t\tconst link = FHC_JS_DATA_STORAGE_OBJECT.app_root + 'index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/' + path\n\t\t\twindow.open(link, '_blank')\n\t\t}\n\t},\n\tcomputed: {\n\t\tgetEid() {\n\t\t\treturn this.$p.t('abgabetool/c4eidesstattlicheErklaerung')\n\t\t},\n\t\tgetEnduploadErlaubt() {\n\t\t\treturn !this.eidAkzeptiert\n\t\t},\n\t\tgetSemesterBenotbar(){\n\t\t\treturn this.projektarbeit?.isCurrent ?? false\n\t\t},\n\t\tendUploadVorhanden(){\n\t\t\treturn this.projektarbeit?.abgabetermine.find(abgabe => abgabe.paabgabetyp_kurzbz === 'end' && abgabe.abgabedatum !== null)\n\t\t}\n\t\t\n\t},\n\tcreated() {\n\n\t},\n\tmounted() {\n\n\t},\n\ttemplate: `\n\t\t
    \n\t\t\n\n\t\t\t
    {{$p.t('abgabetool/c4abgabeMitarbeiterbereich')}}
    \n\n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t

    {{projektarbeit?.student}}

    \n\t\t\t\t\t

    {{projektarbeit?.titel}}

    \n\t\t\t\t\t

    {{projektarbeit?.zweitbegutachter}}

    \n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tKein Endupload vorhanden!\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    {{$p.t('abgabetool/c4fixtermin')}}
    \n\t\t\t\t\t
    {{$p.t('abgabetool/c4zieldatum')}}
    \n\t\t\t\t\t
    {{$p.t('abgabetool/c4abgabetyp')}}
    \n\t\t\t\t\t
    {{$p.t('abgabetool/c4abgabekurzbz')}}
    \n\t\t\t\t\t
    {{$p.t('abgabetool/c4abgabedatum')}}
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t
    keine Termine gefunden!
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t

    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t{{ termin.abgabedatum?.split(\"-\").reverse().join(\".\") }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\n`,\n};\n\nexport default AbgabeMitarbeiterDetail;\n","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport AbgabeDetail from \"./AbgabeMitarbeiterDetail.js\";\nimport VerticalSplit from \"../../verticalsplit/verticalsplit.js\"\nimport BsModal from '../../Bootstrap/Modal.js';\nimport VueDatePicker from '../../vueDatepicker.js.php';\n\nexport const AbgabetoolMitarbeiter = {\n\tname: \"AbgabetoolMitarbeiter\",\n\tcomponents: {\n\t\tBsModal,\n\t\tCoreFilterCmpt,\n\t\tAbgabeDetail,\n\t\tVerticalSplit,\n\t\tDropdown: primevue.dropdown,\n\t\tTextarea: primevue.textarea,\n\t\tVueDatePicker\n\t},\n\tprops: {\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: () => ({name: '', uid: ''}),\n\t\t\tvalidator(value) {\n\t\t\t\treturn value && value.name && value.uid\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tsaving: false,\n\t\t\tloading: false,\n\t\t\t// TODO: fetch types\n\t\t\tallAbgabeTypes: [\n\t\t\t\t{\n\t\t\t\t\tpaabgabetyp_kurzbz: 'abstract',\n\t\t\t\t\tbezeichnung: 'Entwurf'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpaabgabetyp_kurzbz: 'zwischen',\n\t\t\t\t\tbezeichnung: 'Zwischenabgabe'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpaabgabetyp_kurzbz: 'note',\n\t\t\t\t\tbezeichnung: 'Benotung'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpaabgabetyp_kurzbz: 'end',\n\t\t\t\t\tbezeichnung: 'Endupload'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpaabgabetyp_kurzbz: 'enda',\n\t\t\t\t\tbezeichnung: 'Endabgabe im Sekretariat'\n\t\t\t\t}\n\t\t\t],\n\t\t\tserienTermin: Vue.reactive({\n\t\t\t\tdatum: new Date(),\n\t\t\t\tbezeichnung: {\n\t\t\t\t\tpaabgabetyp_kurzbz: 'zwischen',\n\t\t\t\t\tbezeichnung: 'Zwischenabgabe'\n\t\t\t\t},\n\t\t\t\tkurzbz: ''\n\t\t\t}),\n\t\t\tshowAll: false,\n\t\t\ttabulatorUuid: Vue.ref(0),\n\t\t\tselectedData: [],\n\t\t\tdomain: '',\n\t\t\tstudent_uid: null,\n\t\t\tdetail: null,\n\t\t\tdetailOffset: 0,\n\t\t\tprojektarbeiten: null,\n\t\t\tselectedProjektarbeit: null,\n\t\t\ttableBuiltResolve: null,\n\t\t\ttableBuiltPromise: null,\n\t\t\tabgabeTableOptions: {\n\t\t\t\theight: 700,\n\t\t\t\tindex: 'projektarbeit_id',\n\t\t\t\tlayout: 'fitDataStretch',\n\t\t\t\tplaceholder: this.$p.t('global/noDataAvailable'),\n\t\t\t\tselectable: true,\n\t\t\t\tselectableCheck: this.selectionCheck,\n\t\t\t\tcolumns: [\n\t\t\t\t\t{\n\t\t\t\t\t\tformatter: 'rowSelection',\n\t\t\t\t\t\ttitleFormatter: 'rowSelection',\n\t\t\t\t\t\ttitleFormatterParams: {\n\t\t\t\t\t\t\trowRange: \"active\" // Only toggle the values of the active filtered rows\n\t\t\t\t\t\t},\n\t\t\t\t\t\thozAlign:\"center\",\n\t\t\t\t\t\theaderSort: false,\n\t\t\t\t\t\tfrozen: true,\n\t\t\t\t\t\twidth: 70\n\t\t\t\t\t},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4details')), field: 'details', formatter: this.detailFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4personenkennzeichen')), field: 'pkz', formatter: this.pkzTextFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4kontakt')), field: 'mail', formatter: this.mailFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4vorname')), field: 'vorname', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4nachname')), field: 'nachname', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4projekttyp')), field: 'projekttyp_kurzbz', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4stg')), field: 'stg', formatter: this.centeredTextFormatter, widthGrow: 2},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4sem')), field: 'studiensemester_kurzbz', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4titel')), field: 'titel', formatter: this.centeredTextFormatter, maxWidth: 500, widthGrow: 8},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4betreuerart')), field: 'betreuerart_beschreibung',formatter: this.centeredTextFormatter, widthGrow: 8}\n\t\t\t\t],\n\t\t\t\tpersistence: false,\n\t\t\t},\n\t\t\tabgabeTableEventHandlers: [{\n\t\t\t\tevent: \"tableBuilt\",\n\t\t\t\thandler: async () => {\n\t\t\t\t\tthis.tableBuiltResolve()\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tevent: \"cellClick\",\n\t\t\t\thandler: async (e, cell) => {\n\t\t\t\t\tif(cell.getColumn().getField() === \"details\") {\n\t\t\t\t\t\tthis.setDetailComponent(cell.getValue())\n\t\t\t\t\t\tthis.undoSelection(cell)\n\t\t\t\t\t} else if (cell.getColumn().getField() === \"mail\") {\n\t\t\t\t\t\tthis.undoSelection(cell)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tevent: \"rowSelectionChanged\",\n\t\t\t\thandler: async(data) => {\n\t\t\t\t\tthis.selectedData = data\n\t\t\t\t}\n\t\t\t}\n\t\t\t]};\n\t},\n\tmethods: {\n\t\tgetOptionLabelAbgabetyp(option){\n\t\t\treturn option.bezeichnung\n\t\t},\n\t\tformatDate(dateParam) {\n\t\t\tconst date = new Date(dateParam)\n\t\t\t// handle missing leading 0\n\t\t\tconst padZero = (num) => String(num).padStart(2, '0');\n\n\t\t\tconst month = padZero(date.getMonth() + 1); // Months are zero-based\n\t\t\tconst day = padZero(date.getDate());\n\t\t\tconst year = date.getFullYear();\n\n\t\t\treturn `${day}.${month}.${year}`;\n\t\t},\n\t\tundoSelection(cell) {\n\t\t\t// checks if cells row is selected and unselects -> imitates columns which dont trigger row selection\n\t\t\t// but actually just revert it after the fact\n\n\t\t\tconst row = cell.getRow()\n\t\t\tif(row.isSelected()) {\n\t\t\t\trow.deselect();\n\t\t\t}\n\t\t},\n\t\tselectionCheck(row) {\n\t\t\tconst data = row.getData()\n\t\t\tif(data?.betreuerart_kurzbz == 'Zweitbegutachter') return false\n\t\t\treturn true\n\t\t},\n\t\tshowDeadlines(){\n\t\t\tconst link = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ '/Cis/Abgabetool/Deadlines'\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\ttoggleShowAll(showall) {\n\t\t\tthis.showAll = showall\n\t\t\tthis.loading = true\n\t\t\tthis.loadProjektarbeiten(showall, () => {\n\t\t\t\tthis.$refs.abgabeTable?.tabulator.redraw(true)\n\t\t\t\tthis.$refs.abgabeTable?.tabulator.setSort([]);\n\t\t\t\tthis.loading = false\n\t\t\t})\n\t\t},\n\t\topenAddSeriesModal() {\n\t\t\tthis.$refs.modalContainerAddSeries.show()\n\t\t},\n\t\taddSeries() {\n\t\t\tthis.saving = true\n\t\t\tthis.$fhcApi.factory.lehre.postSerientermin(\n\t\t\t\tthis.serienTermin.datum.toISOString(),\n\t\t\t\tthis.serienTermin.bezeichnung.paabgabetyp_kurzbz,\n\t\t\t\tthis.serienTermin.bezeichnung.bezeichnung,\n\t\t\t\tthis.serienTermin.kurzbz,\n\t\t\t\tthis.selectedData?.map(projekt => projekt.projektarbeit_id)\n\t\t\t).then(res => {\n\t\t\t\tif (res.meta.status === \"success\" && res.data) {\n\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('abgabetool/serienTerminGespeichert'))\n\t\t\t\t\t// TODO: sticky lifetime erhöhen um sinnvoll lesen zu können?\n\t\t\t\t\tthis.$fhcAlert.alertInfo(this.$p.t('abgabetool/serienTerminEmailSentInfo', [this.createInfoString(res.data)]));\n\t\t\t\t} else {\n\t\t\t\t\tthis.$fhcAlert.alertError(this.$p.t('abgabetool/errorSerienterminSpeichern'))\n\t\t\t\t}\n\t\t\t}).finally(()=>{\n\t\t\t\tthis.saving = false\n\t\t\t})\n\n\t\t\tthis.$refs.modalContainerAddSeries.hide()\n\t\t},\n\t\tcreateInfoString(data) {\n\t\t\tlet str = '';\n\t\t\t\n\t\t\tdata.forEach(name => {\n\t\t\t\tstr += name\n\t\t\t\tstr += '; '\n\t\t\t})\n\t\t\t\n\t\t\treturn str\n\t\t},\n\t\tisPastDate(date) {\n\t\t\treturn new Date(date) < new Date(Date.now())\n\t\t},\n\t\tsetDetailComponent(details){\n\t\t\tthis.loadAbgaben(details).then((res)=> {\n\t\t\t\tconst pa = this.projektarbeiten?.retval?.find(projekarbeit => projekarbeit.projektarbeit_id == details.projektarbeit_id)\n\t\t\t\tpa.abgabetermine = res.data[0].retval\n\t\t\t\tpa.isCurrent = res.data[1]\n\t\t\t\tpa.abgabetermine.push({ // new abgatermin row\n\n\t\t\t\t\t'paabgabe_id': -1,\n\t\t\t\t\t'projektarbeit_id': pa.projektarbeit_id,\n\t\t\t\t\t'fixtermin': false,\n\t\t\t\t\t'kurzbz': '',\n\t\t\t\t\t'datum': new Date().toISOString().split('T')[0],\n\t\t\t\t\t'paabgabetyp_kurzbz': '',\n\t\t\t\t\t'bezeichnung': '',\n\t\t\t\t\t'abgabedatum': null,\n\t\t\t\t\t'insertvon': this.viewData?.uid ?? ''\n\t\t\t\t\t\n\t\t\t\t})\n\t\t\t\tpa.abgabetermine.forEach(termin => {\n\t\t\t\t\ttermin.file = []\n\t\t\t\t\ttermin.allowedToSave = termin.insertvon == this.viewData?.uid && pa.betreuerart_kurzbz != 'Zweitbegutachter'\n\t\t\t\t\ttermin.allowedToDelete = termin.allowedToSave && !termin.abgabedatum\n\t\t\t\t\t\n\t\t\t\t\ttermin.bezeichnung = {\n\t\t\t\t\t\tbezeichnung: termin.bezeichnung,\n\t\t\t\t\t\tpaabgabetyp_kurzbz: termin.paabgabetyp_kurzbz\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tpa.betreuer = this.buildBetreuer(pa)\n\t\t\t\tpa.student_uid = details.student_uid\n\t\t\t\tpa.student = `${pa.vorname} ${pa.nachname}`\n\t\t\t\t\n\t\t\t\tthis.selectedProjektarbeit = pa\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tthis.$refs.verticalsplit.showBoth()\n\t\t\t\t\n\t\t\t\n\t\t\t})\n\t\t},\n\t\tcenteredTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\tif(!val) return\n\t\t\t\n\t\t\treturn '
    ' +\n\t\t\t\t'

    '+val+'

    '\n\t\t},\n\t\tdetailFormatter(cell) {\n\t\t\treturn '
    ' +\n\t\t\t\t'
    '\n\t\t},\n\t\tmailFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\treturn '
    ' +\n\t\t\t\t'
    '\n\t\t},\n\t\tbeurteilungFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\tif(val) {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t} else return '-'\n\t\t},\n\t\tpkzTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\treturn '
    ' +\n\t\t\t\t'

    '+val+'

    '\n\t\t},\n\t\ttableResolve(resolve) {\n\t\t\tthis.tableBuiltResolve = resolve\n\t\t},\n\t\tbuildMailToLink(abgabe) {\n\t\t\treturn 'mailto:' + abgabe.uid +'@'+ this.domain\n\t\t},\n\t\tbuildPKZ(projekt) {\n\t\t\treturn `${projekt.uid} / ${projekt.matrikelnr}`\n\t\t},\n\t\tbuildStg(projekt) {\n\t\t\treturn (projekt.typ + projekt.kurzbz)?.toUpperCase()\t\n\t\t},\n\t\tbuildBetreuer(abgabe) {\n\t\t\t// TODO: preload and insert own titled name of betreuer somehow\n\t\t\treturn abgabe.betreuerart_beschreibung + ': ' + (abgabe.btitelpre ? abgabe.btitelpre + ' ' : '') + abgabe.bvorname + ' ' + abgabe.bnachname + (abgabe.btitelpost ? ' ' + abgabe.btitelpost : '')\n\t\t},\n\t\tsetupData(data){\n\t\t\tthis.projektarbeiten = data[0]\n\t\t\tthis.domain = data[1]\n\t\t\t\n\t\t\tconst d = data[0]?.retval?.map(projekt => {\n\t\t\t\tlet mode = 'detailTermine'\n\n\t\t\t\treturn {\n\t\t\t\t\t...projekt,\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tstudent_uid: projekt.uid,\n\t\t\t\t\t\tprojektarbeit_id: projekt.projektarbeit_id,\n\t\t\t\t\t},\n\t\t\t\t\tpkz: this.buildPKZ(projekt),\n\t\t\t\t\tbeurteilung: projekt.beurteilungLink ?? null,\n\t\t\t\t\tsem: projekt.studiensemester_kurzbz,\n\t\t\t\t\tstg: this.buildStg(projekt),\n\t\t\t\t\tmail: this.buildMailToLink(projekt),\n\t\t\t\t\ttyp: projekt.projekttyp_kurzbz,\n\t\t\t\t\ttitel: projekt.titel\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tthis.$refs.abgabeTable.tabulator.setColumns(this.abgabeTableOptions.columns)\n\t\t\tthis.$refs.abgabeTable.tabulator.setData(d);\n\t\t},\n\t\tloadProjektarbeiten(all = false, callback) {\n\t\t\tthis.$fhcApi.factory.lehre.getMitarbeiterProjektarbeiten(this.viewData?.uid ?? null, all)\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res?.data) this.setupData(res.data)\n\t\t\t\t}).finally(() => {\n\t\t\t\t\tif(callback) {\n\t\t\t\t\t\tcallback()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\t\tloadAbgaben(details) {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tthis.$fhcApi.factory.lehre.getStudentProjektabgaben(details)\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tresolve(res)\n\t\t\t\t\t})\n\t\t\t})\n\t\t},\n\t\thandleUuidDefined(uuid) {\n\t\t\tthis.tabulatorUuid = uuid\n\t\t},\n\t\tcalcMaxTableHeight() {\n\t\t\tconst tableID = this.tabulatorUuid ? ('-' + this.tabulatorUuid) : ''\n\t\t\tconst tableDataSet = document.getElementById('filterTableDataset' + tableID);\n\t\t\tif(!tableDataSet) return\n\t\t\tconst rect = tableDataSet.getBoundingClientRect();\n\n\t\t\tthis.abgabeTableOptions.height = window.visualViewport.height - rect.top\n\t\t\tthis.$refs.abgabeTable.tabulator.setHeight(this.abgabeTableOptions.height)\n\t\t},\n\t\tasync setupMounted() {\n\t\t\tthis.tableBuiltPromise = new Promise(this.tableResolve)\n\t\t\tawait this.tableBuiltPromise\n\n\t\t\tthis.loadProjektarbeiten()\n\n\n\t\t\tthis.$refs.verticalsplit.collapseBottom()\n\t\t\tthis.calcMaxTableHeight()\n\t\t\t\n\t\t}\n\t},\n\twatch: {\n\n\t},\n\tcomputed: {\n\n\t},\n\tcreated() {\n\n\t},\n\tmounted() {\n\t\tthis.setupMounted()\n\t},\n\ttemplate: `\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\n\t \n `,\n};\n\nexport default AbgabetoolMitarbeiter;\n","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\n\nexport const DeadlineOverview = {\n\tname: \"DeadlineOverview\",\n\tcomponents: {\n\t\tCoreFilterCmpt,\n\t},\n\tprops: {\n\t\tperson_uid_prop: {\n\t\t\tdefault: null\t\n\t\t},\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: () => ({name: '', uid: ''}),\n\t\t\tvalidator(value) {\n\t\t\t\treturn value && value.name && value.uid\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tfullName: null, // TODO: fetch this somewhere\n\t\t\tdeadlines: null,\n\t\t\ttabulatorUuid: Vue.ref(0),\n\t\t\ttableBuiltResolve: null,\n\t\t\ttableBuiltPromise: null,\n\t\t\tdeadlineTableOptions: {\n\t\t\t\theight: 700,\n\t\t\t\tindex: 'projektarbeit_id',\n\t\t\t\tlayout: 'fitColumns',\n\t\t\t\tplaceholder: this.$p.t('global/noDataAvailable'),\n\t\t\t\tcolumns: [\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4zieldatum')), field: 'datum', formatter: this.centeredTextFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4fixtermin')), field: 'fixterminstring', formatter: this.centeredTextFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4abgabetyp')), field: 'typ_bezeichnung', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4abgabekurzbz')), field: 'kurzbz', formatter: this.centeredTextFormatter, widthGrow: 3},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('person/studentIn')), field: 'student', formatter: this.centeredTextFormatter, widthGrow: 2},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4stg')), field: 'stg', formatter: this.centeredTextFormatter,widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('abgabetool/c4sem')), field: 'semester', formatter: this.centeredTextFormatter, widthGrow: 1}\n\t\t\t\t],\n\t\t\t\tpersistence: false,\n\t\t\t},\n\t\t\tdeadlineTableEventHandlers: [{\n\t\t\t\tevent: \"tableBuilt\",\n\t\t\t\thandler: async () => {\n\t\t\t\t\tthis.tableBuiltResolve()\n\t\t\t\t}\n\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tevent: \"cellClick\",\n\t\t\t\t\thandler: async (e, cell) => {\n\n\t\t\t\t\t\tif(cell.getColumn().getField() === \"details\") {\n\t\t\t\t\t\t\tconst val = cell.getValue()\n\n\t\t\t\t\t\t\tif(val.mode === 'detailTermine') {\n\t\t\t\t\t\t\t\tthis.setDetailComponent(cell.getValue())\n\t\t\t\t\t\t\t} else if (val.mode === 'beurteilungDownload') {\n\t\t\t\t\t\t\t\tconst pdfExportLink = FHC_JS_DATA_STORAGE_OBJECT.app_root + 'cis/private/pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz='+val.betreuerart_kurzbz+'&projektarbeit_id='+val.projektarbeit_id+'&person_id=' + val.betreuer_person_id\n\t\t\t\t\t\t\t\t// const pdfExportLink2 = FHC_JS_DATA_STORAGE_OBJECT.app_root + 'cis/private/lehre/projektbeurteilungDocumentExport.php?betreuerart_kurzbz='+val.betreuerart_kurzbz+'&projektarbeit_id='+val.projektarbeit_id+'&person_id=' + val.betreuer_person_id\n\t\t\t\t\t\t\t\twindow.open(pdfExportLink, '_blank')\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else if (cell.getColumn().getField() === \"beurteilung\") {\n\t\t\t\t\t\t\tconst val = cell.getValue()\n\n\t\t\t\t\t\t\tif(val != '-') window.open(val, '_blank')\n\t\t\t\t\t\t}\n\t\t\t\t\t\te.stopPropagation()\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]};\n\t},\n\tmethods: {\n\t\tcenteredTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\treturn '
    ' +\n\t\t\t\t'

    '+val+'

    '\n\t\t},\n\t\ttableResolve(resolve) {\n\t\t\tthis.tableBuiltResolve = resolve\n\t\t},\n\t\tloadDeadlines() {\n\t\t\tthis.$fhcApi.factory.lehre.fetchDeadlines(this.person_uid_prop ?? null)\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res?.data) this.setupData(res.data)\n\t\t\t\t})\n\t\t},\n\t\tsetupData(data) {\n\t\t\tthis.deadlines = data\n\t\t\t\n\t\t\tthis.deadlines.forEach(dl => {\n\t\t\t\tdl.student = (dl.stud_titelpre ? (dl.stud_titelpre + ' ') :'') + dl.stud_vorname + ' ' + dl.stud_nachname + (dl.stud_titelpost ? (' ' + dl.stud_titelpost) :'')\n\t\t\t\tdl.fixterminstring = dl.fixtermin ? this.$p.t('abgabetool/c4yes') : this.$p.t('abgabetool/c4no')\n\t\t\t})\n\n\t\t\tthis.$refs.deadlineTable.tabulator.setColumns(this.deadlineTableOptions.columns)\n\t\t\tthis.$refs.deadlineTable.tabulator.setData(this.deadlines);\n\t\t},\n\t\thandleUuidDefined(uuid) {\n\t\t\tthis.tabulatorUuid = uuid\n\t\t},\n\t\tcalcMaxTableHeight() {\n\t\t\tconst tableID = this.tabulatorUuid ? ('-' + this.tabulatorUuid) : ''\n\t\t\tconst tableDataSet = document.getElementById('filterTableDataset' + tableID);\n\t\t\tif(!tableDataSet) return\n\t\t\tconst rect = tableDataSet.getBoundingClientRect();\n\n\t\t\tthis.deadlineTableOptions.height = window.visualViewport.height - rect.top\n\t\t\tthis.$refs.deadlineTable.tabulator.setHeight(this.deadlineTableOptions.height)\n\t\t},\n\t\tasync setupMounted() {\n\t\t\tthis.tableBuiltPromise = new Promise(this.tableResolve)\n\t\t\tawait this.tableBuiltPromise\n\n\t\t\tthis.loadDeadlines()\n\t\t\tthis.calcMaxTableHeight()\n\t\t}\n\t},\n\twatch: {\n\n\t},\n\tcomputed: {\n\n\t},\n\tcreated() {\n\n\t},\n\tmounted() {\n\t\tthis.setupMounted()\n\t},\n\ttemplate: `\n\t\t

    {{$p.t('abgabetool/deadlinesTitle')}} {{ fullName ? ('-' + fullName) : ''}}

    \n\t\t
    \n\t\t\t\n\t\t \n `,\n};\n\nexport default DeadlineOverview;\n","import LvUebersicht from \"../Mylv/LvUebersicht.js\";\n\n\nexport default {\n\tdata(){\n\t\treturn {\n\t\t\tstudienSemester :[],\n\t\t\tselectedStudiensemester: null,\n\t\t\tstudiengaenge:[],\n\t\t\tselectedStudiengang:null,\n\t\t\tstudienOrdnung: [],\n\t\t\tselectedStudienordnung: null,\n\t\t\tsemester:[],\n\t\t\tselectedSemester:null,\n\t\t\tlehrveranstaltungen: [],\n\t\t\tselectedLehrveranstaltung: null,\n\t\t\tmenu:null,\n\t\t}\n\t},\n\tprovide(){\n\t\treturn {\n\t\t\tstudium_studiengang : Vue.computed(()=> this.selectedStudiengang),\n\t\t\tstudium_studiensemester: Vue.computed(() => this.selectedStudiensemester),\n\t\t\tstudium_semester: Vue.computed(() => this.selectedSemester),\n\t\t\tstudium_studienordnung: Vue.computed(() => this.selectedStudienordnung),\n\n\t\t}\n\t},\n\tcomponents: {\n\t\tLvUebersicht,\n\t},\n\twatch:{\n\t\tselectedStudiensemester: function(newVal, oldVal){\n\t\t\tif(newVal && newVal != oldVal){\n\t\t\t\tconst studiensemester =this.getDataFromLocalStorage(\"sudiensemester\");\n\t\t\t\tif (newVal && (!studiensemester || (studiensemester && studiensemester != newVal))){\n\t\t\t\t\tthis.storeDataToLocalStorage(\"sudiensemester\", newVal);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tselectedSemester: function (newVal, oldVal) {\n\t\t\tif (newVal && newVal != oldVal) {\n\t\t\t\tconst semester = this.getDataFromLocalStorage(\"semester\");\n\t\t\t\tif (!semester || (semester && semester != newVal)) {\n\t\t\t\t\tthis.storeDataToLocalStorage(\"semester\", newVal);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tselectedStudiengang: function (newVal, oldVal) {\n\t\t\tif (newVal && newVal != oldVal) {\n\t\t\t\tconst studiengang = this.getDataFromLocalStorage(\"studiengang\");\n\t\t\t\tif (!studiengang || (studiengang && studiengang != newVal)) {\n\t\t\t\t\tthis.storeDataToLocalStorage(\"studiengang\", JSON.stringify(newVal));\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tselectedStudienordnung: function (newVal, oldVal) {\n\t\t\tif (newVal && newVal != oldVal) {\n\t\t\t\tconst studienordnung = this.getDataFromLocalStorage(\"studienordnung\");\n\t\t\t\tif (!studienordnung || (studienordnung && studienordnung != newVal)) {\n\t\t\t\t\tthis.storeDataToLocalStorage(\"studienordnung\", JSON.stringify(newVal));\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\tmethods:{\n\t\tchangeStudiensemester(value){\n\t\t\tlet studiensemester = this.$refs.studiensemester;\n\t\t\tstudiensemester.selectedIndex = (studiensemester.selectedIndex + value + studiensemester.options.length) % studiensemester.options.length;\n\t\t\tthis.changeSelectedStudienSemester(studiensemester.value);\n\t\t},\n\t\tchangeStudiengang(value) {\n\t\t\tlet studiengang = this.$refs.studiengaenge;\n\t\t\tstudiengang.selectedIndex = (studiengang.selectedIndex + value + studiengang.options.length) % studiengang.options.length;\n\t\t\tthis.changeSelectedStudienGang(studiengang.value);\n\t\t},\n\t\tchangeSemester(value) {\n\t\t\tlet semester = this.$refs.semester;\n\t\t\tsemester.selectedIndex = (semester.selectedIndex + value + semester.options.length) % semester.options.length;\n\t\t\tthis.changeSelectedSemester(semester.value);\n\t\t},\n\t\tchangeStudienordnung(value) {\n\t\t\tlet studienordnung = this.$refs.studienordnung;\n\t\t\tlet newSelectIndex = (studienordnung.selectedIndex + value + studienordnung.options.length) % studienordnung.options.length;\n\t\t\tif(studienordnung.options[newSelectIndex].disabled){\n\t\t\t\tnewSelectIndex = (newSelectIndex + value + studienordnung.options.length) % studienordnung.options.length;\n\t\t\t}\n\t\t\tstudienordnung.selectedIndex = newSelectIndex;\n\t\t\tthis.changeSelectedStudienPlan(studienordnung.value);\n\t\t},\n\t\t\n\t\tstoreDataToLocalStorage(key,value){\n\t\t\tlocalStorage.setItem(key, value);\n\t\t},\n\t\tgetDataFromLocalStorage(key){\n\t\t\tconst value = localStorage.getItem(key);\n\t\t\treturn value;\n\t\t},\n\t\tchangeSelectedStudienSemester(studiensemester_kurzbz) {\n\t\t\tthis.$fhcApi.factory.studium.getAllStudienSemester(studiensemester_kurzbz, this.selectedStudiengang, this.selectedSemester, this.selectedStudienordnung)\n\t\t\t\t.then(data => data.data)\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.extractPropertyValues(res);\n\t\t\t\t})\n\t\t},\n\t\tchangeSelectedStudienGang(studiengang_kz) {\n\t\t\tthis.$fhcApi.factory.studium.getAllStudienSemester(this.selectedStudiensemester, studiengang_kz, this.selectedSemester, this.selectedStudienordnung)\n\t\t\t\t.then(data => data.data)\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.extractPropertyValues(res);\n\t\t\t\t})\n\t\t},\n\t\tchangeSelectedSemester(semester) {\n\t\t\tthis.$fhcApi.factory.studium.getAllStudienSemester(this.selectedStudiensemester, this.selectedStudiengang, semester, this.selectedStudienordnung)\n\t\t\t\t.then(data => data.data)\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.extractPropertyValues(res);\n\t\t\t\t})\n\t\t},\n\t\tchangeSelectedStudienPlan(studienplan_id) {\n\t\t\tthis.$fhcApi.factory.studium.getAllStudienSemester(this.selectedStudiensemester, this.selectedStudiengang, this.selectedSemester, studienplan_id)\n\t\t\t\t.then(data => data.data)\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.extractPropertyValues(res);\n\t\t\t\t})\n\t\t},\n\t\topenLvUebersicht(lehrveranstaltung) {\n\t\t\tthis.selectedLehrveranstaltung = lehrveranstaltung;\n\t\t\t//convert lehrveranstaltung properties for compatibility with LvPlan LvModal\n\t\t\tthis.selectedLehrveranstaltung.type =\"lehreinheit\";\n\t\t\tthis.selectedLehrveranstaltung.lehreinheit_id = this.selectedLehrveranstaltung.lehrveranstaltung_id;\n\t\t\tif(this.selectedLehrveranstaltung){\n\t\t\t\tVue.nextTick(()=>{\n\t\t\t\t\tthis.$refs.lvUebersicht.show();\n\t\t\t\t})\n\t\t\t}\n\t\t\t\n\t\t},\n\t\tsortStudienSemester(studienSemester){\n\t\t\tlet regex = new RegExp(/^(WS|SS)([0-9]{4})/);\n\t\t\tstudienSemester.sort((sem1,sem2)=>{\n\t\t\t\tlet [sem1Match, sem1Semester, sem1Year] = sem1.studiensemester_kurzbz.match(regex);\n\t\t\t\tlet [sem2Match, sem2Semester, sem2Year] = sem2.studiensemester_kurzbz.match(regex);\n\t\t\t\tif(sem1Year == sem2Year){\n\t\t\t\t\treturn sem1Semester > sem2Semester? -1:1;\n\t\t\t\t}\n\t\t\t\treturn sem1Year > sem2Year? -1:1;\n\t\t\t})\n\t\t},\n\t\tsetHash(val) {\n\t\t\t// TODO: make this a router param to enable history\n\t\t\tlocation.hash = val;\n\t\t},\n\t\textractPropertyValues(res){\n\t\t\tlet { studienSemester, studiengang, semester, studienplan, lehrveranstaltungen } = res;\n\t\t\tthis.sortStudienSemester(studienSemester.all);\n\t\t\tthis.studienSemester = studienSemester.all;\n\t\t\tthis.selectedStudiensemester = studienSemester.preselected.studiensemester_kurzbz;\n\n\t\t\tthis.studiengaenge = studiengang.all;\n\t\t\tthis.selectedStudiengang = studiengang.preselected?.studiengang_kz;\n\n\t\t\tthis.semester = semester.all;\n\t\t\tthis.selectedSemester = semester?.preselected;\n\n\t\t\tthis.studienOrdnung = studienplan.all;\n\t\t\tthis.selectedStudienordnung = studienplan.preselected?.studienplan_id;\n\n\t\t\tthis.lehrveranstaltungen = lehrveranstaltungen;\n\t\t\tthis.lehrveranstaltungen.sort((lv1, lv2) => {\n\t\t\t\tif (lv1.bezeichnung.toLowerCase() > lv2.bezeichnung.toLowerCase()) {\n\t\t\t\t\treturn 1;\n\t\t\t\t} else if (lv1.bezeichnung.toLowerCase() < lv2.bezeichnung.toLowerCase()) {\n\t\t\t\t\treturn -1;\n\t\t\t\t} else {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.lehrveranstaltungen.forEach((lehrveranstaltung)=>{\n\t\t\t\tlehrveranstaltung.lehrveranstaltungen.sort((lv1,lv2)=>{\n\t\t\t\t\tif (lv1.bezeichnung.toLowerCase() > lv2.bezeichnung.toLowerCase()) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t} else if (lv1.bezeichnung.toLowerCase() < lv2.bezeichnung.toLowerCase()) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t\t},\n\t\tstudienordnungTitel(studienordnung){\n\t\t\tif(!studienordnung) return \"\";\n\t\t\treturn `${studienordnung?.bezeichnung}-${studienordnung?.orgform_kurzbz} ( ${studienordnung?.orgform_bezeichnung}, ${studienordnung?.sprache} )`;\n\t\t},\n\t\tstudiengangTitel(studiengang) {\n\t\t\tif (!studiengang) return \"\";\n\t\t\treturn `${studiengang?.kurzbzlang} (${studiengang?.bezeichnung})`;\n\t\t},\n\t\tstudiensemesterTitel(studiensemester){\n\t\t\tif (!studiensemester) return \"\";\n\t\t\tlet studiensemester_regex = new RegExp(/^(WS|SS)([0-9]{4})/);\n\t\t\tlet match = studiensemester.match(studiensemester_regex);\n\t\t\tswitch(match[1]){\n\t\t\t\tcase \"WS\":\n\t\t\t\t\treturn `Wintersemester ${match[2]}`;\n\t\t\t\tcase \"SS\":\n\t\t\t\t\treturn `Sommersemester ${match[2]}`;\t\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${studiensemester}`;\n\t\t\t}\n\t\t}\n\t},\n\n\tcomputed:{\n\t\tselectedLehrveranstaltungTitel(){\n\t\t\tconst studiengang = this.studiengaenge.find((studiengang) => studiengang.studiengang_kz == this.selectedStudiengang);\n\t\t\treturn `${this.selectedLehrveranstaltung?.bezeichnung} ${this.selectedLehrveranstaltung?.lehrform_kurzbz} / ${studiengang.kurzbzlang}-${this.selectedSemester} ${this.selectedLehrveranstaltung?.orgform_kurzbz} (${this.selectedStudiensemester})`;\n\t\t},\n\t\tcomputedStudienOrdnung(){\n\t\t\tif(!this.studienOrdnung) return null;\n\t\t\treturn Object.values(this.studienOrdnung).reduce((carry, item)=>{\n\t\t\t\tif(!carry[item.bezeichnung]){\n\t\t\t\t\tcarry[item.bezeichnung] = [];\n\t\t\t\t}\n\t\t\t\tcarry[item.bezeichnung].push(item);\n\t\t\t\treturn carry;\n\t\t\t},{});\n\t\t},\n\t\tcomputedStudienOrdnungSelectValues() {\n\t\t\tif (!this.computedStudienOrdnung) return null;\n\t\t\tlet result = [];\n\t\t\tObject.entries(this.computedStudienOrdnung).forEach(([key,value])=>{\n\t\t\t\tresult.push({\n\t\t\t\t\tbezeichnung: `Studienordnung: ${key}`,\n\t\t\t\t\tdisabled: true,\n\t\t\t\t});\n\t\t\t\tvalue.forEach((studienplan)=>{\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\tstudienplan:studienplan,\n\t\t\t\t\t\tdiabled: false,\n\t\t\t\t\t\tbezeichnung: `${studienplan?.bezeichnung}-${studienplan?.orgform_kurzbz} ( ${studienplan?.orgform_bezeichnung}, ${studienplan?.sprache} )`\n\t\t\t\t\t\t\t\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t});\n\t\t\treturn result;\n\t\t},\n\t},\n\t\n\tcreated(){\n\n\t\tconst studiensemester = this.getDataFromLocalStorage(\"sudiensemester\") ?? undefined;\n\t\tconst studiengang = JSON.parse(this.getDataFromLocalStorage(\"studiengang\")) ?? undefined;\n\t\tconst semester = this.getDataFromLocalStorage(\"semester\") ?? undefined;\n\t\tconst studienordnung = JSON.parse(this.getDataFromLocalStorage(\"studienordnung\")) ?? undefined;\n\n\t\t// only fetch default data if no data is stored in the local storage\n\t\t\n\t\tthis.$fhcApi.factory.studium.getAllStudienSemester(studiensemester, studiengang, semester, studienordnung)\n\t\t.then(data => data.data)\n\t\t.then(res => {\n\t\t\tthis.extractPropertyValues(res);\n\t\t})\n\n\t},\n\ttemplate: `\n\t
    \n\t

    Studium

    \n\t
    \n\t\n\t\t\n\t\n\t
    \n\t\t
    \n\t\t
    Studiensemester:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\n\t\t
    \n\t\t
    Studiengang:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\n\t\t
    \n\t\t
    Semester:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\n\t\t
    \n\t\t
    Studienordnung:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t
    \n\n\t
    \n\n\t
    \n\t\n\t
    \n\n\n\t
    \n\t\n\t`\n};","\nexport default {\n\t\t\n\tloadRenderers() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/RendererLoader/GetRenderers',\n\t\t\tparams: {\n\t\t\t}\n\t\t};\n\t},\n}","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tinfo(app, path) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/RouteInfo/info',\n\t\t\tparams: {\n\t\t\t\tapp: app,\n\t\t\t\tpath: path\n\t\t\t}\n\t\t};\n\t}\n};","import FhcDashboard from '../../components/Dashboard/Dashboard.js';\nimport PluginsPhrasen from '../../plugins/Phrasen.js';\nimport Theme from '../../plugins/Theme.js';\nimport contrast from '../../directives/contrast.js';\nimport {setScrollbarWidth} from \"../../helpers/CssVarCalcHelpers.js\";\nimport LvPlan from \"../../components/Cis/LvPlan/Lehrveranstaltung.js\";\nimport MyLvPlan from \"../../components/Cis/LvPlan/Personal.js\";\nimport MylvStudent from \"../../components/Cis/Mylv/Student.js\";\nimport Profil from \"../../components/Cis/Profil/Profil.js\";\nimport Raumsuche from \"../../components/Cis/Raumsuche/Raumsuche.js\";\nimport CmsNews from \"../../components/Cis/Cms/News.js\";\nimport CmsContent from \"../../components/Cis/Cms/Content.js\";\nimport Info from \"../../components/Cis/Mylv/Semester/Studiengang/Lv/Info.js\";\nimport RoomInformation, {DEFAULT_MODE_RAUMINFO} from \"../../components/Cis/Mylv/RoomInformation.js\";\nimport AbgabetoolStudent from \"../../components/Cis/Abgabetool/AbgabetoolStudent.js\";\nimport AbgabetoolMitarbeiter from \"../../components/Cis/Abgabetool/AbgabetoolMitarbeiter.js\";\nimport DeadlineOverview from \"../../components/Cis/Abgabetool/DeadlineOverview.js\";\nimport Studium from \"../../components/Cis/Studium/Studium.js\";\n\nimport ApiRenderers from '../../api/factory/renderers.js';\nimport ApiRouteInfo from '../../api/factory/routeinfo.js';\nimport {capitalize} from \"../../helpers/StringHelpers.js\";\n\nconst ciPath = FHC_JS_DATA_STORAGE_OBJECT.app_root.replace(/(https:|)(^|\\/\\/)(.*?\\/)/g, '') + FHC_JS_DATA_STORAGE_OBJECT.ci_router;\n\nconst router = VueRouter.createRouter({\n\thistory: VueRouter.createWebHistory(`/${ciPath}`),\n\troutes: [\n\t\t{\n\t\t\tpath: `/Cis/Studium`,\n\t\t\tname: 'Studium',\n\t\t\tcomponent: Studium,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/Profil/View/:uid`,\n\t\t\tname: 'ProfilView',\n\t\t\tcomponent: Profil,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/Profil`,\n\t\t\tname: 'Profil',\n\t\t\tcomponent: Profil,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/Abgabetool/Student/:student_uid_prop?`,\n\t\t\tname: 'AbgabetoolStudent',\n\t\t\tcomponent: AbgabetoolStudent,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/Abgabetool/Mitarbeiter`,\n\t\t\tname: 'AbgabetoolMitarbeiter',\n\t\t\tcomponent: AbgabetoolMitarbeiter,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/Abgabetool/Deadlines/:person_uid_prop?`,\n\t\t\tname: 'DeadlineOverview',\n\t\t\tcomponent: DeadlineOverview,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/Raumsuche`,\n\t\t\tname: 'Raumsuche',\n\t\t\tcomponent: Raumsuche,\n\t\t\tprops: true\n\t\t},\n\t\t// Redirect old links to new format\n\t\t{\n\t\t\tpath: \"/CisVue/Cms/getRoomInformation/:ort_kurzbz\",\n\t\t\tname: \"RoomInformationOld\",\n\t\t\tcomponent: RoomInformation,\n\t\t\tredirect: (to) => {\n\t\t\t\treturn { // redirect to longer Rauminfo url and map params\n\t\t\t\t\tname: \"RoomInformation\",\n\t\t\t\t\tparams: { // in this case always populate other params since they are not optional\n\t\t\t\t\t\tort_kurzbz: to.params.ort_kurzbz,\n\t\t\t\t\t\tmode: DEFAULT_MODE_RAUMINFO,\n\t\t\t\t\t\tfocus_date: new Date().toISOString().split(\"T\")[0]\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tpath: `/CisVue/Cms/getRoomInformation/:mode/:focus_date/:ort_kurzbz`,\n\t\t\tname: 'RoomInformation',\n\t\t\tcomponent: RoomInformation,\n\t\t\tprops: (route) => { // validate and set mode/focus date if for some reason missing\n\t\t\t\tconst validModes = [\"Month\", \"Week\", \"Day\"];\n\n\t\t\t\t// check mode string\n\t\t\t\tconst mode = route.params.mode &&\n\t\t\t\tvalidModes.includes(route.params.mode.charAt(0).toUpperCase() + route.params.mode.slice(1).toLowerCase())\n\t\t\t\t\t? route.params.mode.charAt(0).toUpperCase() + route.params.mode.slice(1).toLowerCase()\n\t\t\t\t\t: DEFAULT_MODE_RAUMINFO;\n\n\t\t\t\t// default to today date if not provided\n\t\t\t\tconst d = new Date(route.params.focus_date)\n\t\t\t\tconst focus_date = !isNaN(d) ? route.params.focus_date : new Date().toISOString().split(\"T\")[0];\n\n\t\t\t\t// for consistency reasons format the props into one object but actually use a new name to we dont collide with\n\t\t\t\t// existing viewData declaration written from codeigniter 3 into routerview tag\n\t\t\t\treturn {\n\t\t\t\t\tpropsViewData: {\n\t\t\t\t\t\tmode,\n\t\t\t\t\t\tfocus_date,\n\t\t\t\t\t\tort_kurzbz: route.params.ort_kurzbz\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\t\t\tbeforeEnter: (to, from, next) => {\n\t\t\t\t// missing mode or focus_date -> set defaults\n\t\t\t\tif (!to.params.mode || !to.params.focus_date) {\n\t\t\t\t\tnext({\n\t\t\t\t\t\tname: \"RoomInformation\",\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\tmode: to.params.mode || DEFAULT_MODE_RAUMINFO,\n\t\t\t\t\t\t\tfocus_date: to.params.focus_date || new Date().toISOString().split(\"T\")[0],\n\t\t\t\t\t\t\tort_kurzbz: route.params.ort_kurzbz\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpath: `/CisVue/Cms/Content/:content_id`,\n\t\t\tname: 'Content',\n\t\t\tcomponent: CmsContent,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/CisVue/Cms/News`,\n\t\t\tname: 'News',\n\t\t\tcomponent: CmsNews,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/MyLv/:studiensemester?`,\n\t\t\tname: 'MyLv',\n\t\t\tcomponent: MylvStudent,\n\t\t\tprops: true,\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/MyLv/Info/:studien_semester/:lehrveranstaltung_id`,\n\t\t\tname: 'LvInfo',\n\t\t\tcomponent: Info,\n\t\t\tprops: true\n\t\t},\n\t\t// Redirect old links to new format\n\t\t{\n\t\t\t// only trigger on first param being numeric to avoid paths like \"LvPlan/Month\" entering here\n\t\t\tpath: \"/Cis/LvPlan/:lv_id(\\\\d+)\", \n\t\t\tname: \"LvPlanOld\",\n\t\t\tcomponent: LvPlan,\n\t\t\tredirect(to) {\n\t\t\t\tconst route = Vue.unref(router.currentRoute);\n\t\t\t\tconst { mode, focus_date } = route.params; // keep mode and focus_date if available\n\t\t\t\treturn { // redirect to longer LvPlan url and map params\n\t\t\t\t\tname: \"LvPlan\",\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tmode,\n\t\t\t\t\t\tfocus_date,\n\t\t\t\t\t\tlv_id: to.params.lv_id\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/LvPlan/:mode?/:focus_date?/:lv_id?`,\n\t\t\tname: 'LvPlan',\n\t\t\tcomponent: LvPlan,\n\t\t\tprops(route) {\n\t\t\t\treturn {\n\t\t\t\t\tpropsViewData: route.params\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/MyLvPlan/:mode?/:focus_date?`,\n\t\t\tname: 'MyLvPlan',\n\t\t\tcomponent: MyLvPlan,\n\t\t\tprops(route) {\n\t\t\t\treturn {\n\t\t\t\t\tpropsViewData: route.params\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis4`,\n\t\t\tname: 'Cis4',\n\t\t\tcomponent: FhcDashboard,\n\t\t\tprops: {dashboard: 'CIS'},\n\t\t},\n\t\t{\n\t\t\tpath: `/`,\n\t\t\tname: 'FhcDashboard',\n\t\t\tcomponent: FhcDashboard,\n\t\t\tprops: {dashboard: 'CIS'},\n\t\t},\n\t\t{\n\t\t\tpath: '/:pathMatch(.*)*',\n\t\t\tname: 'Fallback',\n\t\t\tcomponent: FhcDashboard,\n\t\t\tprops: {dashboard: 'CIS'},\n\t\t\tredirect: () => {\n\t\t\t\treturn {\n\t\t\t\t\tname: \"Cis4\",\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tdashboard: 'CIS'\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t},\n\t]\n})\n\nconst app = Vue.createApp({\n\tname: 'FhcApp',\n\tdata: () => ({\n\t\tappSideMenuEntries: {},\n\t\trenderers: null,\n\t}),\n\tcomponents: {},\n\tcomputed: {\n\t\tisMobile() {\n\t\t\treturn /Mobi|Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n\t\t}\t\n\t},\n\tprovide() {\n\t\treturn { // provide injectable & watchable language property\n\t\t\tlanguage: Vue.computed(() => this.$p.user_language),\n\t\t\trenderers: Vue.computed(() => this.renderers),\n\t\t}\t\n\t},\n\tmethods: {\n\t\tisInternalRoute(href) {\n\t\t\tconst internalBase = window.location.origin\n\t\t\treturn href.startsWith(internalBase);\n\t\t},\n\t\thandleClick(event) {\n\t\t\tconst target = event.target.closest('a');\n\n\t\t\tif(target?.id == 'skiplink') return\n\t\t\tif (target && this.isInternalRoute(target.href)) {\n\t\t\t\tconst url = new URL(target.href)\n\t\t\t\t\n\t\t\t\tconst path = url.pathname\n\t\t\t\tconst base = this.$router.options.history.base\n\t\t\t\tconst route = path.replace(base, '') || '/'\n\n\t\t\t\t// let click event propagate normally if we dont route internally\n\t\t\t\tconst res = this.$router.resolve(route)\n\t\t\t\tif(!res?.matched?.length || res.name === 'Fallback') return\n\t\t\t\t\n\t\t\t\tevent.preventDefault(); // Prevent browser navigation\n\t\t\t\t\n\t\t\t\tif(this.isMobile) { // toggle the menu\n\t\t\t\t\tconst navMain = document.getElementById('nav-main');\n\t\t\t\t\t// fix unwanted toggle from off to on for some links on mobile\n\t\t\t\t\tif(navMain.classList.contains('show')){\n\t\t\t\t\t\tdocument.getElementById('nav-main-btn').click();\n\t\t\t\t\t} \n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.$router.push(route);\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t},\n\tasync created(){\n\t\tawait this.$api\n\t\t\t.call(ApiRenderers.loadRenderers())\n\t\t\t.then(res => res.data)\n\t\t\t.then(data => {\n\t\t\t\tfor (let rendertype of Object.keys(data)) {\n\t\t\t\t\tlet modalTitle = null;\n\t\t\t\t\tlet modalContent = null;\n\t\t\t\t\tlet calendarEvent = null;\n\t\t\t\t\tif (data[rendertype].modalTitle)\n\t\t\t\t\t\tmodalTitle = Vue.markRaw(Vue.defineAsyncComponent(() => import(data[rendertype].modalTitle)));\n\t\t\t\t\tif (data[rendertype].modalContent) \t\n\t\t\t\t\t\tmodalContent = Vue.markRaw(Vue.defineAsyncComponent(() => import(data[rendertype].modalContent)));\n\t\t\t\t\tif (data[rendertype].calendarEvent) \t\n\t\t\t\t\t\tcalendarEvent = Vue.markRaw(Vue.defineAsyncComponent(() => import(data[rendertype].calendarEvent)));\n\n\t\t\t\t\tif (data[rendertype].calendarEventStyles){\n\t\t\t\t\t\tvar head = document.head;\n\t\t\t\t\t\tif(!head.querySelector(`link[href=\"${data[rendertype].calendarEventStyles}\"]`)){\n\t\t\t\t\t\t\tvar link = document.createElement(\"link\");\n\t\t\t\t\t\t\tlink.type = \"text/css\";\n\t\t\t\t\t\t\tlink.rel = \"stylesheet\";\n\t\t\t\t\t\t\tlink.href = data[rendertype].calendarEventStyles;\n\t\t\t\t\t\t\thead.appendChild(link);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif(this.renderers === null) {\n\t\t\t\t\t\tthis.renderers = {};\n\t\t\t\t\t}\n\t\t\t\t\tif (!this.renderers[rendertype]) {\n\t\t\t\t\t\tthis.renderers[rendertype] = {}\n\t\t\t\t\t}\n\t\t\t\t\tthis.renderers[rendertype].modalTitle = modalTitle;\n\t\t\t\t\tthis.renderers[rendertype].modalContent = modalContent;\n\t\t\t\t\tthis.renderers[rendertype].calendarEvent = calendarEvent;\n\t\t\t\t}\n\t\t\t});\n\t},\n\tmounted() {\n\t\tdocument.addEventListener('click', this.handleClick);\n\t},\n\tbeforeUnmount() {\n\t\tdocument.removeEventListener('click', this.handleClick);\n\t},\n});\n\n// kind of a bandaid for bad css on some pages to avoid horizontal scroll\nsetScrollbarWidth();\napp.config.globalProperties.$capitalize = capitalize;\napp.use(router);\napp.use(primevue.config.default, {\n\tzIndex: {\n\t\toverlay: 9000,\n\t\ttooltip: 8000\n\t}\n})\napp.directive('tooltip', primevue.tooltip);\napp.use(PluginsPhrasen);\napp.use(Theme);\napp.directive('contrast', contrast);\napp.mount('#fhccontent');\n\nrouter.afterEach((to, from, failure) => {\n\tapp.config.globalProperties.$api.call(ApiRouteInfo.info('cis4', to.fullPath));\n});","// Create a temporary div element, set styles to ensure it's scrollable and off-screen, get scrollbar width from that\nfunction getScrollbarWidth() {\n\tconst div = document.createElement('div');\n\n\tdiv.style.position = 'absolute';\n\tdiv.style.top = '-9999px';\n\tdiv.style.width = '100px';\n\tdiv.style.height = '100px';\n\tdiv.style.overflow = 'scroll';\n\n\tdocument.body.appendChild(div);\n\tconst scrollbarWidth = div.offsetWidth - div.clientWidth;\n\tdocument.body.removeChild(div);\n\n\treturn scrollbarWidth;\n}\n\n// Detect the browser and set a CSS variable for the scrollbar width since chrome scrollbars mess with 100vw/vh css\nexport function setScrollbarWidth() {\n\tconst isChromium = /Chrome/.test(navigator.userAgent);\n\tconst isFirefox = /Firefox/.test(navigator.userAgent);\n\n\tif (isChromium) {\n\t\tconst width = getScrollbarWidth() + 'px';\n\t\tdocument.body.style.setProperty('--scrollbar-width', width); // Set the value for Chrome\n\t} else if (isFirefox) {\n\t\tdocument.body.style.setProperty('--scrollbar-width', '0px'); // Set the value for Firefox or adjust as needed\n\t}\n}","export function capitalize(string) {\n\tif (!string) return '';\n\treturn string[0].toUpperCase() + string.slice(1);\n}"],"names":["BsModal","name","data","modal","fullscreen","props","backdrop","type","Boolean","String","default","validator","value","includes","focus","keyboard","noCloseBtn","dialogClass","Array","Object","headerClass","bodyClass","footerClass","allowFullscreenExpand","emits","methods","dispose","this","handleUpdate","hide","show","relatedTarget","toggle","toggleFullscreen","mounted","$refs","bootstrap","Modal","popup","body","options","title","footer","slots","undefined","includedPrimevue","primevue","Promise","resolve","reject","instance","Vue","createApp","setup","h","class","ref","unmount","beforeUnmount","result","unmounted","wrapper","parentElement","removeChild","document","createElement","use","config","zIndex","overlay","then","Phrasen$1","Phrasen","mount","appendChild","template","Alert","components","mixins","onHideBsModal","Function","onHiddenBsModal","onHidePreventedBsModal","onShowBsModal","onShownBsModal","modalContainer","msg","bind","BsConfirm$1","BsAlert","GridItem","inject","item","active","dragAction","dragging","computed","registerDragAction","evt","$emit","target","hasAttribute","getAttribute","parent","closest","tryDragStart","touchDragEnd","touchStart","event","touchMove","preventDefault","GridLogic","constructor","w","grid","isFreeSlot","x","y","i","getMaxY","reduce","acc","getFreeSlots","freeSlots","biggestY","totalSpaces","length","Math","floor","push","add","prefer","occupiers","getItemsInFrame","frame","forEach","f","index","max","intermGrid","possiblities","tryMoving","bestOption","sort","a","b","cost","moves","v","move","currItem","getItemFrame","remove","console","error","place","pinned","originalFrame","isArray","some","occupiersData","map","occupier","occupiersFrame","flat","replaceUpdate","newOccupierFrames","occ","shift","getSingleFramePosition","updates","resize","newPoss","possiblity","p","directions","weight","dir","res","tryMovingInDirection","filter","amount","targetframe","unshift","clearWeights","indexOf","j","debug","DropGrid","cols","Number","items","itemsSetup","resizeLimit","marginForExtraRow","additionalRow","clientX","clientY","mode","dragGrid","permUpdates","positionUpdates","fixedPositionUpdates","draggedOffset","draggedItem","draggedNode","reorderedItems","clonedWidget","sectionName","additionalRowComputed","get","set","items_hashmap","needsReordering","rearrangedPosition","widget","widgetid","pop","items_placeholders","placeholders","col_max","rows_max","rows","occupied","keys","current_item","max_x","max_y","occupied_y","occupied_x","placeholder","id","padStart","placedItems_withPlaceholders","placedItems","gridStyle","addH","indexedItems","prePlacedItems","mappedPlacedItems","height_diff","width_diff","temporaryResizeItems","newItem","resizeOverlay","blank","showEmptyTileHover","widgetSetup","widgetsSetup","ele","widget_id","watch","dragCancel","handler","immediate","updated","createNewGrid","deep","toggleDraggedItemOverlay","condition","firstElementChild","classList","containerRect","container","getBoundingClientRect","clonedWidgetRect","desiredTop","desiredLeft","minTop","maxTop","height","minLeft","maxLeft","width","constrainedTop","min","constrainedLeft","style","top","left","sortedItems","firstFreeSlot","targetX","targetW","convertGridResultToUpdate","input","output","baseArray","mouseLeave","updateCursor","rect","touches","gridX","clientWidth","gridY","clientHeight","_dragStart","dataTransfer","setDragImage","dropEffect","effectAllowed","startMove","setTimeout","clone","cloneNode","querySelector","removeProperty","startResize","dragOver","checkPinnedWidgetAnimation","checkWidgetSizeLimitAnimation","removeWidgetClones","dragEnd","getElementById","from","getElementsByClassName","_updateFixedPositions","additionalUpdates","emptyTileClicked","updateCursorOnMouseMove","itemAtPosition","pinNode","contains","draggedItemSetup","draggedItemMaxWidth","draggedItemMinWidth","draggedItemMaxHeight","draggedItemMinHeight","draggedItemNode","width_after_resize","height_after_resize","widgetClones","mouseDown","mouseUp","__widgets","__widgetsStarted","__path","FHC_JS_DATA_STORAGE_OBJECT","app_root","ci_router","CachedWidgetLoader","getWidget","loadWidget","axios","params","retval","arguments","JSON","parse","catch","response","setPath","path","DashboardItem","HeightTransition","onEnter","el","done","scrollHeight","onLeave","component","tmpConfig","isLoading","hasConfig","sharedData","maxHeight","maxWidth","prototype","toString","call","minHeight","minWidth","isResizeable","isPinned","ready","unpin","editMode","item_data","pinItem","getWidgetC4Link","cis4link","handleShowBsModal","handleHideBsModal","e","startDrag","dragHandle","resizeHandle","openConfig","setConfig","changeConfig","sendChangeConfig","changeConfigManually","k","created","import","file","fhcomplete_build_version","$options","WidgetIcon","required","src","DashboardSection","adminMode","configOpened","gridWidth","gridHeight","provide","editModeIsActive","computedWidgetsSetup","getSectionStyle","widgets","reorder","sectionNameTranslation","$p","t","showSectionInformation","handleConfigOpened","handleConfigClosed","checkResizeLimit","minmaxW","minmaxH","removeWidget","revert","custom","BsConfirm","update","hidden","updatePreset","saveConfig","payload","updatePositions","self","cont","parseInt","window","getComputedStyle","getPropertyValue","addEventListener","DashboardWidgetPicker","callbacks","close","pick","ObjectUtils","mergeDeep","objects","isObject","obj","prev","key","pVal","oVal","concat","ApiDashboard","getViewData","method","url","FhcDashboard","dashboard","viewData","uid","timezone","sections","viewDataInternal","apiurl","widgetAdd","section_name","db","err","widgetpicker","Date","valueOf","loading","section","post","funktion_kurzbz","newId","splice","alert","widgetUpdate","wid","prop","_x","_y","_w","_h","preset","widgetRemove","loadCategory","section1","section2","beforeMount","$api","search","searchsettings","$fhcApi","searchAdvanced","searchdummy","phrasen$2","category","setLanguage","categories","language","getLanguage","getActiveDbLanguages","navigation","getHeader","navigation_page","getMenu","filter$1","saveCustomFilter","wsParams","filterUniqueId","filterType","customFilterName","removeCustomFilter","filterId","applyFilterFields","filterFields","addFilterField","filterField","removeFilterField","getFilterById","getFilter","studstatus","abmeldung","getDetails","antrag_id","prestudent_id","create","stdsem","grund","studiensemester","errorHandling","cancel","allSettled","antrag","studierendenantrag_id","errorHeader","unterbrechung","datum_wiedereinstieg","attachment","wiederholung","getLvs","saveLvs","forbiddenLvs","mandatoryLvs","leitung","getStgs","getAntraege","getHistory","getPrestudents","query","signal","timeout","approve","reopen","pause","unpause","object","approveObjection","denyObjection","profil","getView","fotoSperre","isStudent","isMitarbeiter","getZustellAdresse","getZustellKontakt","getGemeinden","nation","zip","getAllNationen","profilUpdate","getStatus","getTopic","acceptProfilRequest","profil_update_id","status_message","topic","requested_change","denyProfilRequest","insertFile","dms","replace","getProfilRequestFiles","requestID","selectProfilRequest","insertProfilRequest","fileID","updateProfilRequest","ID","deleteProfilRequest","lvPlan","getRoomInfo","ort_kurzbz","start_date","end_date","getStunden","getOrtReservierungen","getLvPlanReservierungen","getLehreinheitStudiensemester","lehreinheit_id","studiensemesterDateInterval","date","LvPlanEvents","lv_id","stv","verband","favorites","students","studiensemester_kurzbz","encodeURIComponent","getUri","prestudent","person","person_id","relative_path","getStg","setStg","studiengang_kz","konto","tabulatorConfig","ajaxURL","ajaxParams","modelValue","only_open","studiengang_kz_intern","stg_kz","ajaxRequestFunc","ajaxResponse","checkDoubles","form","confirmErrorHandler","insert","counter","edit","delete","buchungsnr","getBuchungstypen","group","getGruppen","deleteGroup","kontakt","getAdressen","addNewAddress","loadAddress","address_id","updateAddress","deleteAddress","getPlaces","plz","getFirmen","searchString","getNations","getAdressentypen","getBankverbindung","addNewBankverbindung","loadBankverbindung","bankverbindung_id","updateBankverbindung","deleteBankverbindung","getKontakte","addNewContact","loadContact","kontakt_id","updateContact","deleteContact","getStandorteByFirma","getKontakttypen","updatePrestudent","getBezeichnungZGV","getBezeichnungMZgv","getBezeichnungDZgv","getAusbildung","getAufmerksamdurch","getBerufstaetigkeit","getTypenStg","getBisstandort","getHistoryPrestudent","getMaxSem","studiengang_kzs","advanceStatus","status_kurzbz","ausbildungssemester","confirmStatus","isLastStatus","deleteStatus","getLastBismeldestichtag","getHistoryPrestudents","status","insertStatus","loadStatus","updateStatus","getStudienplaene","getStudiengang","getStatusgruende","getStati","addStudent","changeStatus","getStatusarray","details","save","exam","getPruefungen","loadPruefung","pruefung_id","getTypenPruefungen","getAllLehreinheiten","getLvsByStudent","getLvsandLesByStudent","semester","getLvsAndMas","getMitarbeiterLv","getNoten","checkZeugnisnoteLv","addPruefung","updatePruefung","deletePruefung","abschlusspruefung","getAbschlusspruefung","addNewAbschlusspruefung","loadAbschlusspruefung","updateAbschlusspruefung","deleteAbschlusspruefung","getTypenAbschlusspruefung","getTypenAntritte","getBeurteilungen","getAkadGrade","getTypStudiengang","getMitarbeiter","getPruefer","checkForExistingExams","uids","grades","list","getCertificate","getTeacherProposal","getRepeaterGrades","updateCertificate","lehrveranstaltung_id","student_uid","note","lehrveranstaltung_bezeichnung","deleteCertificate","copyTeacherProposalToCertificate","copyRepeaterGradeToCertificate","studierendenantrag_lehrveranstaltung_id","lv_bezeichnung","getGradeFromPoints","points","manualErrorHandling","mobility","getMobilitaeten","getProgramsMobility","addNewMobility","loadMobility","bisio_id","updateMobility","deleteMobility","getLVList","getPurposes","getSupports","getListPurposes","getListSupports","deleteMobilityPurpose","addMobilityPurpose","deleteMobilitySupport","addMobilitySupport","archiv","getArchivVorlagen","archive","archiveSigned","akte_id","documents","getDocumentsUnaccepted","getDocumentsAccepted","deleteZuordnung","dokument_kurzbz","createZuordnung","loadAkte","getDoktypen","updateFile","deleteFile","uploadFile","exemptions","getAnrechnungen","getLehrveranstaltungen","getBegruendungen","getLvsKompatibel","getLektoren","addNewAnrechnung","loadAnrechnung","anrechnung_id","editAnrechnung","deleteAnrechnung","jointstudies","getStudies","getTypenMobility","getStudiensemester","getStudyprograms","getListPartner","getStatiPrestudent","loadStudy","insertStudy","updateStudy","deleteStudy","courselist","getCourselist","group_consecutiveHours","dbStundenplanTable","configStudent","configStudents","notiz","getNotizen","getUid","addNewNotiz","formData","loadNotiz","notiz_id","loadDokumente","deleteNotiz","type_id","updateNotiz","isBerechtigt","betriebsmittel","getAllBetriebsmittel","addNewBetriebsmittel","loadBetriebsmittel","betriebsmittelperson_id","updateBetriebsmittel","deleteBetriebsmittel","getTypenBetriebsmittel","loadInventarliste","checkperson","updatePersonUnrulyStatus","unrulyParam","unruly","filterPerson","base","ort","getContentID","ort_kurbz","getRooms","datum","von","bis","typ","personenanzahl","getRoomTypes","cms","content","content_id","version","sprache","sichtbar","getNews","page","page_size","news","limit","getNewsRowCount","getNewsExtra","lehre","getStudentenMail","getLvInfo","getStudentPruefungen","getStudentProjektarbeiten","getStudentProjektabgaben","detail","projektarbeit_id","postStudentProjektarbeitEndupload","Headers","postStudentProjektarbeitZwischenabgabe","getStudentProjektarbeitAbgabeFile","paabgabe_id","location","getMitarbeiterProjektarbeiten","all","postProjektarbeitAbgabe","termin","paabgabetyp_kurzbz","bezeichnung","fixtermin","insertvon","kurzbz","deleteProjektarbeitAbgabe","postSerientermin","projektarbeit_ids","fetchDeadlines","addons","getLvMenu","lvid","messages","getMessages","size","getVorlagen","getMsgVarsLoggedInUser","getMessageVarsPerson","getMsgVarsPrestudent","getPersonId","getDataVorlage","vorlage_kurzbz","getNameOfDefaultRecipient","getPreviewText","getReplyData","messageId","sendMessageFromModalContext","sendMessage","deleteMessage","vorlagen","getVorlagenByLoggedInUser","studium","getAllStudienSemester","studiengang","studienplan","getStudiengaengeForStudienSemester","getStudienplaeneBySemester","getLvPlanForStudiensemester","getLvEvaluierungInfo","FhcApiFactory","phrasen","bookmark","getBookmarks","bookmark_id","tag","ampeln","open","confirm","ampel_id","studiengangInformation","getStudiengangByKz","menu","authinfo","getAuthUID","getAuthInfo","getAll","OldFhcApi","install","app","globalProperties","factory","warn","addEndpoints","_get_config","uri","TypeError","clearValidation","setFeedback","_clean_return_value","meta","fhcApiAxios","baseURL","interceptors","request","FormData","values","every","FileList","File","newData","entries","nd","append","jsondata","stringify","errors","_defaultErrorHandlers","code","handled","$fhcAlert","alertDefault","message","responseURL","alertError","validation","apply","general","php","filename","line","backtrace","function","severity","alertSystemError","exception","heading","sql","join","auth","controller","required_permissions","FhcApiFactoryWrapper","factorypart","root","defineProperty","noWarn","CORE_REST_CLIENT_ERROR","CORE_REST_CLIENT_RETVAL","CoreRESTClient","wsURL","wsParameters","axiosParameters","_axiosCall","isSuccess","hasOwnProperty","isError","hasData","trim","getData","getError","getErrorCode","_generateRouterURI","_printDebug","parameters","errorThrown","axiosCallObj","helperAppContainer","helperApp","PvToast","PvConfirm","mailToUrl","slotProps","systemerror_mailto","called_path","called_method","openMessagecard","Collapse","getOrCreateInstance","showmaillink","PvConfig","PvConfirmationService","helperAppInstance","FhcAlert","FhcPhrasen","alertSuccess","toast","summary","life","alertInfo","alertWarning","confirmDelete","$confirm","require","header","acceptLabel","acceptClass","rejectLabel","rejectClass","accept","sticky","html","alertMultiple","messageArray","handleSystemError","toLowerCase","errMsg","toUpperCase","stack","handleSystemMessage","resetFormValidation","Event","querySelectorAll","dispatchEvent","handleFormValidation","nodeType","Node","ELEMENT_NODE","notFound","CustomEvent","arr","PluginsApi","_send_array_or_object","func","errs","DEFAULT_ERROR_CONFIG","success","fail","combine","async","_format_toast","_default","field","msgs","n_errors","n","get_config","clean_return_value","_merge_error_config","get_error_handler","formHandler","get_error_list","popHandleableErrors","copy","newType","newTypeCombinesType","newTypeHasHandler","errorConfig","remaining","configoverwrite","typedErrors","allowed","reason","errType","getErrorHandler","ApiPhrasen","reactive","loadingModules","user_language","user_locale","server_languages","find","LC_Time","catArray","row","phrase","text","elem","extractCategory","t_ref","split","val","match","p1","getValueForLoadedPhrase","PluginsPhrasen","cat","lang","theme_name","theme","theme_modes","modes","toggleTheme","documentElement","setAttribute","stylesheet","attributes","href","localStorage","setItem","Theme","initializeTheme","getItem","$theme","switchTheme","rgbToHex","hex","getContrastYIQ","hexcolor","substring","contrast","element","binding","bgColor","backgroundColor","rgbRegEx","RegExp","isRgb","r","g","hexColor","color","TYPE_DEFINITION","lehreinheit","dragIcon","extras","vevent","student","VALID_TYPES","isValidDragObject","substr","extra","getValidTransferData","allowedTypes","strict","getTransferData","_error","types","base_type","collection","DragAndDrop","isValidTransferData","convertToValidDragObject","converted","sorted","found","typedef","setTransferData","validDragObject","dragElements","icon","label","iconContainer","className","textContent","boxShadow","itemContainer","requestAnimationFrame","setData","eventHasTypes","bindDragEnterLeave","skipLeave","skipLeaveParent","init","globalDragenter","globalDragleave","globalDrop","removeEventListener","cleanup","wasDropped","CalDnd","vnode","arg","cancelable","bubbles","offsetX","offsetWidth","offsetY","offsetHeight","originalEvent","hitbox","pos","pageX","scrollLeft","pageY","scrollTop","modifiers","once","timestamp","prevVnode","BaseDraganddrop","directives","events","correctedEvents","backgrounds","dropAllowed","dropableEvents","draggedInternalEvent","draggedExternalEvent","targetTimestamp","targetGridEnds","shadowPreview","findIndex","previewEvent","toSpliced","correctedBackgrounds","start","end","orig","onDragstart","convertToTransferData","onDragend","onDragenter","isostart","luxon","DateTime","fromISO","setZone","local","isoend","onDragleave","onDragchange","ends","onDrop","BaseHeader","DatePicker","VueDatePicker","listLength","convertedDate","keepLocalTime","current","month","year","startOf","ts","plus","days","useLocaleWeeks","endOf","toLocaleString","localWeekYear","week","toFormat","DATE_FULL","weekStart","Info","getStartOfWeek","fromObject","setLocale","locale","fromJSDate","weekNumbers","localWeekNumber","modeOptions","btnMonth","btnWeek","btnDay","btnList","clickMode","defaultPrevented","BaseSlider","time","extrasAfter","extrasBefore","running","promiseResolve","itemsAfter","itemsBefore","styleSlider","position","transition","styleBefore","display","right","styleAfter","prevPage","slidePages","nextPage","newTarget","endSlide","clickListeners","saveAddClickListener","source","listener","stopPropagation","customEvent","CalClick","finalEvent","FhcCalendar$1","timeGrid","draggableEvents","hasDragoverFunc","onDragover","now","showBtns","internalView","internalDate","modalEvent","convertedEvents","convertedBackgrounds","bg","isInteger","fromMillis","zone","sDate","cDate","cMode","sMode","o","isValid","hasSame","clickPrev","clickNext","handleClickDefaults","number","zoneName","onDropItem","showEventModal","eventObj","hideEventModal","closeFn","onModalHidden","ApiLvPlan","getLvPlan","eventsPersonal","eventsLv","getLv","GridLineEvent","isHeaderOrFooter","draggable","classes","startsHere","endsHere","CalendarGrid","GridLine","LineEvent","LineBackground","flipAxis","background","styles","perc","border","diff","axisRow","eventsWithRowInfo","toMillis","originalEvents","originalBackgrounds","axisMain","axisParts","Duration","allDayEvents","axisMainCollapsible","snapToGrid","resizeObserver","mutationObserver","userScroll","axisCol","axisPartsWithBreaks","tu","lastTuEnd","slice","axisPartsSave","partsEnds","part","axisMainBorders","curr","eventsAllDay","mapIntoMainAxis","allDayEvent","eventsNormal","hasValidEvents","styleGridCols","styleGridRows","gridlines","mainIndex","day","laneStart","laneEnd","getPageTop","pageTop","offsetTop","offsetParent","getPageLeft","pageLeft","offsetLeft","getTimestampFromMouse","dayTimestamp","mouse","mouseFrac","main","enableAutoScroll","ResizeObserver","scrollToEarliestEvent","observe","MutationObserver","mutations","m","addedNodes","matches","subtree","childList","disableAutoScroll","disconnect","eventElements","scroller","earliestEventOffset","scrollIntoView","behavior","scrollTo","LabelDay","titleFull","titleLong","titleShort","titleNarrow","LabelDow","weekday","LabelTime","start_ok","end_ok","sanitizedTimestamps","formatTime","toISOTime","suppressSeconds","ModeDay","DayView","emptyMessage","emptyMessageDetails","chosenEvent","gridMainRef","fromISOTime","hours","currentEvent","first","isToday","compact","threshold","elementRef","isRef","$el","compareArray","updateResultVars","compare","observer","addObserver","removeObserver","onMounted","onUnmounted","watchEffect","useResizeObserver","currentDate","focusDate","rangeOffset","range","last","Interval","fromDateTimes","view","slider","updatePage","newFocusDate","viewAttrs","$attrs","ModeWeek","WeekView","collapseEmptyDays","weeks","ModeMonth","MonthView","LabelWeek","firstDay","lastDay","d","startdate","nextRangeStart","months","dayInWeek","FhcCalendar","getPromiseFunc","markRaw","teachingunits","includeOffset","eventStyle","farbe","updateRange","rangeInterval","context","lv","loading_id","loadingEvents","allEvents","eventsLoaded","mergePromiseArr","markEventsLoaded","indexIsLast","nStart","rStart","nEnd","toISODate","toValue","promises","results","useEventLoader","newValue","emit","stunde","beginn","ende","ApiAuthinfo","LvPlan","propsViewData","currentDay","focus_date","isNaN","currentMode","currentLv","lvTitle","bezeichnung_english","handleChangeDate","newMode","handleChangeMode","$router","MyLvPlan","studiensemester_start","studiensemester_ende","downloadLinks","opts","toUnixInteger","download_link","link","LvPruefungen","pruefungenData","ApiLehre","infos","studien_semester","studiengang_kuerzel","orgform_kurzbz","ects","incoming","info","lektorNamesLinks","lektorenLinks","lektoren","titelpre","vorname","nachname","titelpost","lektorNames","lvLeitung","oe","organisationseinheittyp","oeLeitung","koordinator","currentLang","lastLang","lvinfo","lvinfoDefaultLang","assign","reloadRefs","triggerRef","initialval","FHC_JS_PHRASES_STORAGE_OBJECT","tmp_category","loadLazy","unref","LvMenu","containerStyles","rowStyles","hasLvPlanEintraege","c4_disabled","menuItem","c4_link","c4_moodle_links","c4_target","getMenuName","ApiAddons","LvUebersicht","titel","preselectedMenu","isMenuSelected","lvEvaluierungMessage","hiddenModal","showModal","studium_studiensemester","MylvSemester","MylvSemesterStudiengang","MylvSemesterStudiengangLv","bezeichnung_eng","module","benotung","lvnote","lvnotebez","znote","znotebez","positiv","note_index","preselectedMenuItem","gradeColor","is_organisatorische_einheit","emptyMenu","bodyStyle","grade","languageIndex","LvHasPruefungenInformation","fetchMenu","openLvOption","nextTick","lvUebersicht","openPruefungen","openInfos","LvInfo","pruefungen","kuerzel","lvs","sg_bezeichnung_eng","lehrveranstaltungen","Map","studiengaenge","sg_bezeichnung","lvsForStudiengang","MylvStudent","firstLoad","currentSemester","nearestSem","nearestSemDiff","sem","abs","currentIsFirst","currentIsLast","prevSem","selectedIndex","nextSem","updateRouter","routerStudiensemester","$route","s","beforeRouteUpdate","to","next","CoreFetchCmpt","refresh","apiFunction","apiFunctionParameters","oldValue","fetchData","errorMessage","apiFunctionResult","successHandler","errorHandler","finally","finallyHandler","setError","FILTER_COMPONENT_NEW_FILTER","FilterConfig","filters","columns","fields","switchFilter","applyFilterConfig","currentFields","c","currentTarget","filteredFields","addField","removeField","FilterColumns","selected","names","selectedFields","DEFAULT_ICONS","jsonLines","xlsx","pdf","json","csv","DEFAULT_LABELS","TableDownload","tabulator","iconClass","currentConfig","newConfig","stringToFileFormatter","formatter","validateFileFormatter","lcInput","XLSX","jspdf","jsPDF","autoTable","download","elementDataMap","WeakMap","collapseAutoClose","collapse","getInstance","collapsibleAutoHideFunc","Tabulator","extendModule","fitDataStretchFrozen","forced","colsWidth","tableWidth","table","rowManager","gap","lastCol","column","widthFixed","reinitializeWidth","responsiveLayout","modules","responsive","visible","definition","frozen","getWidth","modExists","setWidth","ApiFilter","_uuid","CoreFilterCmpt","onNwNewEntry","description","sideMenu","tabulatorOptions","tabulatorEvents","tableOnly","noColumnFilter","reload","reloadBtnInfotext","newBtnShow","newBtnClass","newBtnDisabled","newBtnLabel","uniqueId","idField","parentIdField","countOnly","useSelectionSpan","uuid","filterName","filterActive","dataset","datasetMetadata","availableFilters","selectedFilter","fetchCmptRefresh","fetchCmptApiFunction","fetchCmptApiFunctionParams","fetchCmptDataFetched","fetchResult","tableBuilt","tabulatorHasSelector","selectedData","persistence","headerFilter","notSelectedFields","filteredData","filteredColumns","col","resizable","fieldIdsForVisibilty","getColumns","def","getDefinition","getField","fieldNames","idExtra","columnsForFilter","filterTitles","reloadTable","initTabulator","hash","resolvePromiseFunc","setRenderData","startFetchCmpt","layout","movableColumns","columnDefaults","tooltip","selectable","dataTree","on","toDelete","childIdx","child","isVisible","_setHeaderFilter","updateTabulator","_updateTabulator","setColumns","clearFilters","getHeaderFilters","setHeaderFilterValue","clearFilter","render","setSideMenu","setDropDownMenu","personalFilters","filtersArray","filtersCount","filter_id","desc","onClickCall","handlerGetFilterById","subscriptDescription","subscriptLinkClass","subscriptLinkValue","onClickSubscriptCall","handlerRemoveCustomFilter","children","option","dataFetchedCallback","handlerSaveCustomFilter","attr","parentId","parentIdx","_children","beforeCreate","$props","Mailverteiler","AusweisStatus","QuickLinks","mobile","hideCollapse","collapseOpen","showCollapse","Adresse","withZustelladresse","Kontakt","ProfilEmails","RoleInformation","getLinkGruppeListe","gruppe","getLinkVerbandListe","getLinkSemesterListe","ApiProfil","profilViewData","Upload","DmsItem","preview","multiple","inputClass","noList","disabled","stringifyFile","lastModified","lastModifiedDate","addFiles","files","dt","DataTransfer","doubles","removeFile","fileToRemove","upload","dmsFile","ApiProfilUpdate","updateProfilbild","getProfilUpdateWithPermission","ImageUpload","dmsData","Dms","updateID","uploadImage","ProfilInformation","fotoStatus","FotoSperre","foto_sperre","imageUpload","sperre_foto_function","get_image_base64_src","foto","Vorname","Nachname","profilInfo","notIncludedProperties","EditProfilSelect","EditKontakt","originalValue","zustellKontakteCount","updateValue","checked","isChanged","getZustellkontakteCount","showZustellKontakteWarning","zustellung","kontakteOfSelectedType","kontakttyp","EditAdresse","AutoComplete","autocomplete","gemeinden","ortschaftnamen","selectedNation","nationenList","zustellAdressenCount","fileschanged","autocompleteSearchGemeinden","gemeinde","autocompleteSearchOrtschaftsnamen","ortschaft","getGemeinde","Set","ortschaftsname","updateFileID","getZustelladressenCount","deleteDmsData","showZustellAdressenWarning","zustelladresse","adresse_id","strasse","Status","getDocumentLink","dms_id","getComponentView","profilUpdateTopic","cardHeader","status_timestamp","TextInputDokument","withFiles","didFilesChange","didDataChange","emitChanges","toRaw","ariaLabel","breadcrumb","submit","select","breadcrumbItems","modal_topic","properties","addItem","anmerkung","deleteItem","profilUpdateEmit","updateOptions","Loading","state","clearTimeout","EditProfil","Loader","zustelladressenCount","zustellkontakteCount","editData","updateFileIDFunction","newFileID","handleFailedError","setLoading","submitProfilChange","fileData","uploadFiles","handleApiResponse","showFooter","FetchProfilUpdates","showUpdateModal","editProfilTitle","hideEditProfilModal","updateEditModal","showEditProfilModal","updateRequest","profilUpdateStates","deleteRequest","dateFilter","cell","onRendered","div","initialValue","getValue","PrimevueCalendar","calendar","dates","headerValue","rowValue","rowDate","startDate","endDate","setHours","toDateString","singleDate","StudentProfil","collapseIconBetriebsmittel","editDataFilter","preloadedPhrasen","zutrittsgruppen_table_options","persistenceID","zutrittsGruppenPhrase","betriebsmittel_table_options","responsiveLayoutCollapseUseFormatters","responsiveLayoutCollapseFormatter","$collapseFormatter","headerSort","headerClick","collapseFunction","entlehnteBetriebsmittelPhrase","inventarnummerPhrase","ausgabedatum","headerFilterFunc","formatterParams","datetimeFormatterParams","betriebsmittelTableBuilt","betriebsmittelTable","mittel","zutrittsgruppenTableBuilt","zutrittsgruppenTable","zuttritsgruppen","fetchProfilUpdates","profilUpdates","sortProfilUpdates","editModal","inputFormat","outputFormat","invalidPlaceholder","filteredEditData","profilInformation","Username","username","Anrede","anrede","Titel","Postnomen","postnomen","roleInformation","geburtsdatum","gebdatum","geburtsort","gebort","personenkennzeichen","loaded","newVal","MitarbeiterProfil","funktionen_table_options","bezeichnungPhrase","organisationseinheitPhrase","gueltigVonPhrase","gueltigBisPhrase","wochenstundenPhrase","Nummer","Ausgegeben_am","ausgabedatumPhrase","funktionenTableBuilt","funktionenTable","funktionen","setTableColumnTitles","getTelefonValue","standort_telefon","telefonklappe","telefon","office","ViewStudentProfil","personEmails","emails","ViewMitarbeiterProfil","collapseIconFunktionen","item2","innerHTML","Profil","notFoundUID","isEditable","editable","allClickableIcons","_column","cells","click","ele1","ele2","insertamum","reverse","load","profil_data","adressen","adressenArray","adresse","adr","kontakte","kontakteArray","kontant","kon","Personen_Informationen","Private_Kontakte","listview","Private_Adressen","loadingModalRef","oldVal","ApiOrt","Raumsuche","InputNumber","inputnumber","phrasenPromise","phrasenResolved","tabulatorUuid","tableBuiltResolve","tableBuiltPromise","roomtypes","defaultType","raumtyp_kurzbz","beschreibung","anzahl","selectedType","getHours","minutes","getMinutes","datepickerTextInputOptions","enterSubmit","tabSubmit","selectOnFocus","format","escClose","timepickerTextInputOptions","raumsucheTableOptions","widthGrow","linkFormatter","raumsucheTableEventHandlers","tableResolve","arialabel","roomPlanLink","room","roomInfoLink","getTimeString","setupData","nummer","planbezeichnung","personen","max_person","linkInfo","linkRes","raumsucheTable","loadRoomTypes","loadRooms","toISOString","handleUuidDefined","setRoute","dateFormat","getDate","getMonth","getFullYear","timeFormat","setupMounted","tableID","tableDataSet","visualViewport","setProperty","isDarkMode","Pagination","paginator","maxPageCount","newPageEvent","StudiengangPerson","telefoneklappe","email","displayWidget","formattedEmail","emailArray","fullname","phone","email_link","base64Image","profilViewLink","StudiengangVertretung","vertretungsList","showBezeichnung","vertretungFormatedName","vertretung","ApiStudiengang","StudiengangInformation","stg_ltg","gf_ltg","stv_ltg","ass","hochschulvertr","stdv","jahrgangsvertr","collection_array","returnData","moodleLink","studiengangInformationen","ApiCms","CmsNews","fetchNews","Axios","loadNewPageContent","raum_contentmittitel","imgContent","sanitizeLegacyTables","pElement","parentNode","replaceChild","u","li","scrollWidth","firstChild","TEXT_NODE","th","childNodes","cn","tables","getElementsByTagName","innerText","room_name","room_name_reg_exp","room_name_reg_exp_result","link_element","replaceWith","lvplanlinks","lvplanlink","img","DOMParser","parseFromString","imgAttributes","regexList","relative","priority","regex","replacement","group_replacement_strategy","absolute","relative_regex","replaceRelativeLegacyLink","relativeLegacyLink","new_link","query_parameter","prepareContent","new_href","CmsContent","news_content","iframe_content","srcUrl","iframe","content_type","content_id_internal","fetchContent","$nextTick","computeContentType","DEFAULT_MODE_RAUMINFO","RoomInformation","today","AbgabeStudentDetail","Checkbox","checkbox","Dropdown","dropdown","Textarea","textarea","projektarbeit","viewMode","eidAkzeptiert","enduploadTermin","allActiveLanguages","abstract","abstract_en","schlagwoerter","schlagwoerter_en","kontrollschlagwoerter","seitenanzahl","validate","triggerEndupload","bperson_id","handleUploadRes","modalContainerEnduploadZusatzdaten","downloadAbgabe","formatDate","dateParam","padZero","num","signaturInfo","dateDiffInDays","round","getDateStyle","abgabedatum","openBeurteilungLink","getOptionLabel","getEid","getEnduploadErlaubt","VerticalSplit","availHeight","topheight","bottomheight","mousePosY","vsplitter","vsplitterOffset","selfOffsetTop","calcHeights","trackVerticalSplitterOffsetTop","windowheight","innerHeight","oldavailHeight","verticalsplit","collapseTop","collapseBottom","showBoth","isCollapsed","dragStart","drag","topOrBottomClass","topheightcss","bottomheightcss","AbgabetoolStudent","AbgabeDetail","student_uid_prop","domain","projektarbeiten","selectedProjektarbeit","abgabeTableOptions","detailFormatter","beurteilungFormatter","centeredTextFormatter","mailFormatter","abgabeTableEventHandlers","getColumn","setDetailComponent","pdfExportLink","betreuerart_kurzbz","betreuer_person_id","isPastDate","loadAbgaben","pa","projekarbeit","abgabetermine","allowedToUpload","betreuer","buildBetreuer","buildMailToLink","abgabe","mitarbeiter_uid","betreuerart_beschreibung","btitelpre","bvorname","bnachname","btitelpost","projekt","babgeschickt","zweitbetreuer_abgeschickt","beurteilungLink","beurteilung","stg","kurzbzlang","mail","projekttypbezeichnung","abgabeTable","loadProjektarbeiten","calcMaxTableHeight","setHeight","isViewMode","AbgabeMitarbeiterDetail","oldPaBeurteilungLink","allAbgabeTypes","openZusatzdatenModal","saveTermin","allowedToSave","allowedToDelete","deleteTermin","deletedTerminIndex","fontColor","getOptionLabelSprache","getOptionLabelAbgabetyp","openStudentPage","openPlagiatcheck","openBenotung","getSemesterBenotbar","isCurrent","endUploadVorhanden","AbgabetoolMitarbeiter","saving","serienTermin","showAll","detailOffset","selectableCheck","selectionCheck","titleFormatter","titleFormatterParams","rowRange","hozAlign","pkzTextFormatter","undoSelection","getRow","isSelected","deselect","showDeadlines","toggleShowAll","showall","redraw","setSort","openAddSeriesModal","modalContainerAddSeries","addSeries","createInfoString","str","buildPKZ","matrikelnr","buildStg","pkz","projekttyp_kurzbz","callback","DeadlineOverview","person_uid_prop","fullName","deadlines","deadlineTableOptions","deadlineTableEventHandlers","loadDeadlines","dl","stud_titelpre","stud_vorname","stud_nachname","stud_titelpost","fixterminstring","deadlineTable","Studium","studienSemester","selectedStudiensemester","selectedStudiengang","studienOrdnung","selectedStudienordnung","selectedSemester","selectedLehrveranstaltung","studium_studiengang","studium_semester","studium_studienordnung","getDataFromLocalStorage","storeDataToLocalStorage","studienordnung","changeStudiensemester","changeSelectedStudienSemester","changeStudiengang","changeSelectedStudienGang","changeSemester","changeSelectedSemester","changeStudienordnung","newSelectIndex","changeSelectedStudienPlan","extractPropertyValues","studienplan_id","openLvUebersicht","lehrveranstaltung","sortStudienSemester","sem1","sem2","sem1Match","sem1Semester","sem1Year","sem2Match","sem2Semester","sem2Year","setHash","preselected","lv1","lv2","studienordnungTitel","orgform_bezeichnung","studiengangTitel","studiensemesterTitel","studiensemester_regex","selectedLehrveranstaltungTitel","lehrform_kurzbz","computedStudienOrdnung","carry","computedStudienOrdnungSelectValues","diabled","ApiRenderers","loadRenderers","ApiRouteInfo","ciPath","router","VueRouter","createRouter","history","createWebHistory","routes","redirect","route","charAt","beforeEnter","currentRoute","appSideMenuEntries","renderers","isMobile","test","navigator","userAgent","isInternalRoute","internalBase","origin","startsWith","handleClick","URL","pathname","matched","rendertype","modalTitle","modalContent","calendarEvent","defineAsyncComponent","calendarEventStyles","head","rel","isChromium","isFirefox","overflow","scrollbarWidth","getScrollbarWidth","setScrollbarWidth","$capitalize","string","directive","afterEach","failure","fullPath"],"mappings":"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"} \ No newline at end of file diff --git a/public/dist/js/apps/DashboardAdmin.js b/public/dist/js/apps/DashboardAdmin.js index edcce522a..3ff862168 100644 --- a/public/dist/js/apps/DashboardAdmin.js +++ b/public/dist/js/apps/DashboardAdmin.js @@ -1,4 +1,4 @@ -import t from"../../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js?2025102901";import e from"../../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js?2025102901";import i from"../../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js?2025102901";import r from"../../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js?2025102901";const n={emits:["dataFetched"],props:{refresh:{type:Boolean},apiFunction:{required:!0,type:Function},apiFunctionParameters:{}},watch:{refresh:function(t,e){this.fetchData()}},data:function(){return{loading:!1,error:!1,errorMessage:null}},created:function(){this.fetchData()},methods:{fetchData:function(){if(this.loading=!0,this.error=!1,this.errorMessage=null,"function"==typeof this.apiFunction){let t=this.apiFunction(this.apiFunctionParameters);t instanceof Promise?t.then(this.successHandler).catch(this.errorHandler).finally(this.finallyHandler):this.setError("The called apiFunction does not return a Promise")}else this.setError("Property apiFunction is not a function")},setError:function(t){this.loading=!1,this.error=!0,this.errorMessage=t},successHandler:function(t){this.$emit("dataFetched",t?t.data:void 0)},errorHandler:function(t){t.response?.data?.retval?this.setError(t.response.data.retval):t.data?.message?this.setError(t.data.message):this.setError(t.message)},finallyHandler:function(){this.loading=!1}},template:'\n\t\t\n\t\t\t
    Loading...
    \n\t\t
    \n\t\t\n\t\t\t
    {{ errorMessage }}
    \n\t\t
    \n\t\t\n\t'};var s={getHeader:t=>({method:"get",url:"/api/frontend/v1/navigation/header",params:{navigation_page:t}}),getMenu:t=>({method:"get",url:"/api/frontend/v1/navigation/menu",params:{navigation_page:t}})};const a={components:{CoreFetchCmpt:n},props:{addHeaderMenuEntries:Object,addSideMenuEntries:Object,hideTopMenu:Boolean,leftNavCssClasses:{type:String,default:"navbar navbar-left-side"}},data:()=>({headerMenu:{},sideMenu:{}}),computed:{headerMenuEntries(){let t=this.headerMenu?{...this.headerMenu}:{};return null!=this.headerMenu&&null!=this.addHeaderMenuEntries&&Object.keys(this.addHeaderMenuEntries).length>0&&(t[this.addHeaderMenuEntries.description]=this.addHeaderMenuEntries),t},sideMenuEntries(){let t=this.sideMenu?{...this.sideMenu}:{};return null!=this.sideMenu&&null!=this.addSideMenuEntries&&Object.keys(this.addSideMenuEntries).length>0&&(t[this.addSideMenuEntries.description]=this.addSideMenuEntries),t}},methods:{getNavigationPage:()=>FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,fetchCmptApiFunctionHeader(){return this.$api.call(s.getHeader(this.getNavigationPage()))},fetchCmptApiFunctionSideMenu(){return this.$api.call(s.getMenu(this.getNavigationPage()))},fetchCmptDataFetchedHeader(t){this.headerMenu=t||{}},fetchCmptDataFetchedMenu(t){this.sideMenu=t||{}},getDataBsToggle:t=>t.children?"dropdown":null},template:'\n\t\t\x3c!-- Load head menu --\x3e\n\t\t\n\t\t\x3c!-- Load side menu --\x3e\n\t\t\n\n\t\t\x3c!-- Top menu --\x3e\n\t\t\n\n\t\t\x3c!-- Left side menu --\x3e\n\t\t\n\t'};var o={name:"BootstrapModal",data:()=>({modal:null,fullscreen:!1}),props:{backdrop:{type:[Boolean,String],default:!0,validator:t=>["static",!0,!1].includes(t)},focus:{type:Boolean,default:!0},keyboard:{type:Boolean,default:!0},noCloseBtn:Boolean,dialogClass:[String,Array,Object],headerClass:{type:[String,Array,Object],default:""},bodyClass:{type:[String,Array,Object],default:"px-4 py-5"},footerClass:{type:[String,Array,Object],default:""},allowFullscreenExpand:{type:Boolean,default:!1}},emits:["hideBsModal","hiddenBsModal","hidePreventedBsModal","showBsModal","shownBsModal"],methods:{dispose(){return this.modal.dispose()},handleUpdate(){return this.modal.handleUpdate()},hide(){return this.modal.hide()},show(t){return this.modal.show(t)},toggle(){return this.modal.toggle()},toggleFullscreen(){this.fullscreen=!this.fullscreen}},mounted(){this.$refs.modal&&(this.modal=new bootstrap.Modal(this.$refs.modal,{backdrop:this.backdrop,focus:this.focus,keyboard:this.keyboard}))},popup(t,e,i,r){const n=this,s={};void 0!==t&&(s.default=()=>t),void 0!==i&&(s.title=()=>i),void 0!==r&&(s.footer=()=>r);let a=!1;return"undefined"!=typeof primevue&&(a=!0),new Promise((t,i)=>{const r=Vue.createApp({name:"ModalTmpApp",setup:()=>()=>Vue.h(n,{class:"fade",...e,ref:"modal","onHidden.bs.modal":r.unmount},s),mounted(){this.$refs.modal.show()},beforeUnmount(){this.$refs.modal&&(!1!==this.$refs.modal.result?t(this.$refs.modal.result):i())},unmounted(){o.parentElement.removeChild(o)}}),o=document.createElement("div");a&&r.use(primevue.config.default,{zIndex:{overlay:9999}}),Promise.resolve().then(function(){return et}).then(t=>{r.use(t.default),r.mount(o),document.body.appendChild(o)})})},template:''},d={name:"BootstrapAlert",components:{BsModal:o},mixins:[o],props:{dialogClass:{type:[String,Array,Object],default:"modal-dialog-centered"},onHideBsModal:Function,onHiddenBsModal:Function,onHidePreventedBsModal:Function,onShowBsModal:Function,onShownBsModal:Function},data:()=>({result:!0}),mounted(){this.modal=this.$refs.modalContainer.modal},popup(t,e){return o.popup.bind(this)(t,e)},template:'\n\t\t\n\t\t\n\t'},l={name:"BootstrapPrompt",mixins:[d],props:{placeholder:String,default:String},data:()=>({value:"",result:!1}),created(){this.default&&(this.value=this.default)},popup(t,e){return"string"==typeof e&&(e={default:e}),d.popup.bind(this)(t,e)},template:'\n\t\t\n\t\t\n\t'},c={name:"BootstrapConfirm",mixins:[d],data:()=>({result:!1}),popup(t,e){return d.popup.bind(this)(t,e)},template:'\n\t\t\n\t\t\n\t'},p={emits:["change","delete"],props:{dashboard_id:Number,dashboard_kurzbz:String,beschreibung:String},data(){return{kurzbz:this.dashboard_kurzbz,desc:this.beschreibung}},methods:{sendDelete(){c.popup("Sure?").then(()=>this.$emit("delete",this.dashboard_id)).catch()}},template:'
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t
    '},h={emits:["change","assignWidgets"],props:{dashboard_id:Number,widgets:Array},computed:{apiurl:()=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/dashboard"},methods:{sendChange(t){let e=!this.widgets.find(e=>e.widget_id==t).allowed;axios.post(this.apiurl+"/Widget/setAllowed",{dashboard_id:this.dashboard_id,widget_id:t,action:e?"add":"delete"}).catch(t=>console.error("ERROR: "+t))}},created(){axios.get(this.apiurl+"/Widget/getAll",{params:{dashboard_id:this.dashboard_id}}).then(t=>{this.$emit("assignWidgets",t.data.retval.map(t=>({...t,setup:JSON.parse(t.setup),arguments:JSON.parse(t.arguments),allowed:!!t.allowed})))}).catch(t=>console.error("ERROR:",t))},template:'\n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t
    '},u={name:"GridItem",components:{},inject:{},props:{item:Object,active:Boolean},emits:["mouseDown","mouseUp","startMove","startResize","dragging","endDrag","dropDrag","item","touchStart","touchEnd"],data:()=>({dragAction:"",dragging:!1}),computed:{},methods:{registerDragAction(t){if(this.$emit("mouseDown",t),t.target.hasAttribute("drag-action"))this.dragAction=t.target.getAttribute("drag-action");else{let e=t.target.closest("[drag-action]");this.dragAction=e?e.getAttribute("drag-action"):""}},tryDragStart(t,e){let i=this.dragAction||t.target.getAttribute("drag-action");if(i){if(this.dragging=!0,"move"==i)return this.$emit("startMove",t,e);if("resize"==i)return this.$emit("startResize",t,e)}},touchDragEnd(t){this.dragging&&(this.dragging=!1,this.$emit("touchEnd",t))},touchStart(t){this.$emit("touchStart",t),this.registerDragAction(t),this.tryDragStart(t,this.item)},touchMove(t){this.dragging&&(t.preventDefault(),this.$emit("dragging",t))}},template:'\n\t
    \n\t\t\n\t
    '};class g{constructor(t){t.w?(this.w=t.w,this.h=t.h,this.data=[...t.data],this.grid=[...t.grid]):(this.w=t,this.h=1,this.data=[],this.grid=[])}isFreeSlot(t,e){const i=e*this.w+t;return!this.grid[i]&&0!==this.grid[i]}getMaxY(){return this.data.reduce((t,e)=>(e?.y>t&&(t=e.y),t),0)}getFreeSlots(){const t=[];let e=this.getMaxY(),i=this.w*(e+1);for(let t=0;tthis.grid[e]=t.index),this.data[t.index]=t,this.h=Math.max(this.h,t.y+t.h),[];{const r=new g(this);t.frame.forEach(t=>r.grid[t]=-1);const n=r.tryMoving(i,e);if(n.length){const e=n.sort((t,e)=>(void 0===t.cost&&(t.cost=t.moves.reduce((t,e)=>t*e.cost,1)),void 0===e.cost&&(e.cost=e.moves.reduce((t,e)=>t*e.cost,1)),t.cost>e.cost)),i=[];return e[0].moves.forEach(t=>{const e={...this.data[t.index]};e.x+=t.x,e.y+=t.y,e.frame=this.getItemFrame(e),this.h=Math.max(this.h,e.y+e.h),this.remove(e),e.frame.forEach(t=>this.grid[t]=e.index),this.data[t.index]=e,i[t.index]={index:e.index,x:e.x,y:e.y}}),t.frame.forEach(e=>this.grid[e]=t.index),this.data[t.index]=t,i}console.error("FATAL","can't arrange item on grid")}}move(t,e,i){if(t.data.place[this.w]?.pinned)return[];if(t.x==e&&t.y==i)return[];let r;this.remove(t),t.x==e?r=i-t.y>0?0:3:t.y==i&&(r=e-t.x>0?1:2);const n=Array.isArray(t.frame)?[...t.frame]:[t.frame],s={...t};s.x=e,s.y=i,s.frame=this.getItemFrame(s);let a=this.getItemsInFrame(s.frame);if(a.some(t=>this.data[t]?.data.place[this.w]?.pinned))return[];let o=a.map(t=>this.data[t]),d=o.map(t=>t.frame).flat();if(!d.some(t=>!s.frame.includes(t))&&!d.some(t=>n.includes(t))){let r=[],s=[];for(let t of n){if(s.includes(t))continue;let e=o.shift();e&&(s=[...s,...this.getItemFrame({...e,...this.getSingleFramePosition(t)})],r[e.index]={index:e.index,...this.getSingleFramePosition(t)})}return r[t.index]={index:t.index,x:e,y:i},r}const l=this.add(s,r);return l[t.index]={index:t.index,x:e,y:i},l}resize(t,e,i){if(t.w==e&&t.h==i)return[];this.remove(t);const r={...t};r.w=e,r.h=i,r.frame=this.getItemFrame(r);const n=this.add(r);return n&&(n[t.index]={index:t.index,w:e,h:i,x:t.x,y:t.y,resize:!0}),n}tryMoving(t,e){if(Array.isArray(t)){t.forEach(t=>this.remove({index:t}));let i=[{grid:this,moves:[]}];return t.forEach(t=>{let r=[];i.forEach(i=>{i.grid.tryMoving(t,e).forEach(t=>{i.moves,t.moves=[...t.moves,...i.moves],r.push(t)})}),i=r}),i}const i=[0,3,1,2];this.remove({index:t});const r=1+.2*(this.data[t].weight||0);return i.reduce((i,n)=>{let s=this.tryMovingInDirection(n,t,1,(e===n?.5:1+.1*n)*r);return s?[...i,...s]:i},[]).filter(t=>t)}tryMovingInDirection(t,e,i,r){const n={index:e,x:0,y:0,cost:r};let s;switch(t){case 0:if(this.data[e].data?.place[this.w]?.pinned||this.data[e].y-i<0)return!1;s=this.data[e].frame.map(t=>t-this.w*i),n.y=-i;break;case 3:if(this.data[e].data?.place[this.w]?.pinned)return!1;this.data[e].y+this.data[e].h+i>this.h&&(r+=.4),s=this.data[e].frame.map(t=>t+this.w*i),n.y=i;break;case 1:if(this.data[e].data?.place[this.w]?.pinned||this.data[e].x-i<0)return!1;s=this.data[e].frame.map(t=>t-i),n.x=-i;break;case 2:if(this.data[e].data?.place[this.w]?.pinned||this.data[e].x+this.data[e].w+i>this.w)return!1;s=this.data[e].frame.map(t=>t+i),n.x=i}const a=this.getItemsInFrame(s);if(a.includes(-1))return this.tryMovingInDirection(t,e,i+1,r);const o=new g(this);if(s.forEach(t=>o.grid[t]=-1),!a.length)return[{grid:o,moves:[n]}];const d=o.tryMoving(a).map(t=>t.moves.unshift(n)&&t);return!!d.length&&d}clearWeights(){this.data.forEach(t=>t.weight=void 0)}getItemsInFrame(t){return t.map(t=>this.grid[t]).filter((t,e,i)=>(t||0===t)&&i.indexOf(t)===e)}remove(t){this.grid=this.grid.map(e=>e!=t.index?e:void 0)}getItemFrame(t){const e=[];for(let i=0;i({x:-1,y:-1,clientX:0,clientY:0,mode:0,grid:null,dragGrid:null,permUpdates:[],positionUpdates:null,fixedPositionUpdates:null,draggedOffset:[0,0],draggedItem:null,draggedNode:null,reorderedItems:[],clonedWidget:null}),inject:{sectionName:{type:String,default:""}},computed:{additionalRowComputed:{get(){return this.additionalRow},set(t){this.$emit("update:additionalRow",t)}},items_hashmap(){let t={};return this.items.forEach(e=>{if(this.reorderedItems.length>0&&this.needsReordering(e)){let t=this.reorderedItems.filter(t=>t.data.widgetid==e.widgetid)?.pop();t&&(e.x=t.x,e.y=t.y)}t[`x${e.x}y${e.y}`]=e}),t},items_placeholders(){let t=[],e=this.cols,i=this.rows,r={};for(let n=0;n({index:e,x:t.x,y:t.y,w:t.w,h:t.h,weight:t.weight||0,data:t}))},prePlacedItems(){return this.fixedPositionUpdates?this.indexedItems.map(t=>this.fixedPositionUpdates[t.index]?{index:t.index,weight:t.weight,data:t.data,x:void 0===this.fixedPositionUpdates[t.index].x?t.x:this.fixedPositionUpdates[t.index].x,y:void 0===this.fixedPositionUpdates[t.index].y?t.y:this.fixedPositionUpdates[t.index].y,w:void 0===this.fixedPositionUpdates[t.index].w?t.w:this.fixedPositionUpdates[t.index].w,h:void 0===this.fixedPositionUpdates[t.index].h?t.h:this.fixedPositionUpdates[t.index].h}:t):this.indexedItems},placedItems(){if(!this.positionUpdates)return this.prePlacedItems;let t=this.prePlacedItems.map(t=>{if(!this.positionUpdates[t.index])return t;let e=this.positionUpdates[t.index]?.h-t.h,i=this.positionUpdates[t.index]?.w-t.w;return{resize:this.positionUpdates[t.index]?.resize,index:t.index,weight:t.weight,data:t.data,x:void 0===this.positionUpdates[t.index].x?t.x:this.positionUpdates[t.index].x,y:void 0===this.positionUpdates[t.index].y?t.y:this.positionUpdates[t.index].y,w:i>0||void 0===this.positionUpdates[t.index].w?t.w:this.positionUpdates[t.index].w,h:e>0||void 0===this.positionUpdates[t.index].h?t.h:this.positionUpdates[t.index].h}}),e=[];return t.forEach(t=>{if(t.resize){let i={...t,w:void 0===this.positionUpdates[t.index].w?t.w:this.positionUpdates[t.index].w,h:void 0===this.positionUpdates[t.index].h?t.h:this.positionUpdates[t.index].h,resizeOverlay:!0,blank:!0};e.push(i)}}),[...t,...e]},showEmptyTileHover(){return!(!this.active||!this.grid||0!=this.mode||this.x<0||this.y<0||this.x>=this.cols||this.y>=this.rows)&&this.grid.isFreeSlot(this.x,this.y)},widgetSetup(){if(this.widgetsSetup)return this.widgetsSetup.reduce((t,e)=>(t[e.widget_id]=e,t),{})}},watch:{active(t){t||this.dragCancel()},cols(){this.dragCancel()},rows:{handler(t){this.$emit("gridHeight",t)},immediate:!0},indexedItems:{handler(t){this.dragCancel();const e=this.createNewGrid(t);this.fixedPositionUpdates=e,e.length&&this.$emit("rearrangeItems",e.filter(t=>t))},immediate:!0,deep:!0}},methods:{needsReordering(t){return!t?.data?.place[this.cols]},toggleDraggedItemOverlay(t){this.draggedNode&&(t?this.draggedNode.firstElementChild.classList.add("dashboard-item-overlay"):this.draggedNode.firstElementChild.classList.remove("dashboard-item-overlay"))},dragging(t){if(1==this.mode){this.toggleDraggedItemOverlay(!0);const t=this.$refs.container.getBoundingClientRect(),e=this.clonedWidget.getBoundingClientRect();let i=this.clientY-20,r=this.clientX-15;const n=0,s=t.height-e.height,a=0,o=t.width-e.width,d=Math.max(n,Math.min(s,i)),l=Math.max(a,Math.min(o,r));this.clonedWidget.style.top=`${d}px`,this.clonedWidget.style.left=`${l}px`}},createNewGrid(t){this.grid=new g(this.cols);const e=[];let i=[...t].sort((t,e)=>this.needsReordering(t)&&this.needsReordering(e)?0:this.needsReordering(t)?999:this.needsReordering(e)?-999:t.weight>e.weight),r=[];return i.forEach(i=>{let n=this.grid.getFreeSlots();if(this.needsReordering(i)){let t=n.shift();t?(i.x=t.x,i.y=t.y):(i.x=0,i.y=this.grid.h),r.push(i)}if(i.x+i.w>this.cols){let t,r=this.cols-i.x;this.resizeLimit&&([r]=this.resizeLimit(i.data,r,i.h)),r<1&&(r=1),r>this.cols&&(r=this.cols),i.x+r>this.cols&&(t=this.cols-r),r==i.w&&(r=void 0),e[i.index]={item:i.data,x:t,w:r}}i.frame=this.grid.getItemFrame(i),this.convertGridResultToUpdate(this.grid.add(i),e,t)}),this.reorderedItems=r,this.grid.clearWeights(),e},convertGridResultToUpdate(t,e,i){t&&(i||(i=this.indexedItems),t.forEach(t=>{let r={item:i[t.index].data};void 0!==t.x&&(r.x=t.x),void 0!==t.y&&(r.y=t.y),void 0!==t.w&&(r.w=t.w),void 0!==t.h&&(r.h=t.h),e[t.index]=r}))},mouseLeave(){},updateCursor(t){if(!this.active)return this.x=this.y=-1,!1;const e=this.active?this.marginForExtraRow:0,i=this.$refs.container.getBoundingClientRect();t.clientX||t.clientY||!t.touches||(t.clientX=t.touches[0].clientX,t.clientY=t.touches[0].clientY),this.clientX=t.clientX-i.left,this.clientY=t.clientY-i.top;const r=Math.floor(this.cols*(t.clientX-i.left)/this.$refs.container.clientWidth),n=Math.floor((this.rows+e)*(t.clientY-i.top)/this.$refs.container.clientHeight);return(this.x!=r||this.y!=n)&&(this.x=r,this.y=n,!0)},_dragStart(t,e){t.dataTransfer&&(t.dataTransfer.setDragImage(t.target,-99999,-99999),t.dataTransfer.dropEffect="move",t.dataTransfer.effectAllowed="move")},startMove(t,e){this.active&&(this.mode=1,this.draggedItem=e,this.$emit("draggedItem",e),setTimeout(()=>{this.draggedNode=t.target.closest(".drop-grid-item");let e=t.target.closest(".drop-grid-item")?.cloneNode(!0);e.style.zIndex=5,e.classList.add("widgetClone"),this.$refs.container.appendChild(e);e.querySelector("[style='display: none;']").style.removeProperty("display"),this.clonedWidget=e},0),this.draggedOffset=[e.x-this.x,e.y-this.y],this._dragStart(t,e))},startResize(t,e){this.active&&(this.mode=2,this.draggedItem=e,this.$emit("draggedItem",e),this._dragStart(t))},dragOver(t){if(this.y+1>this.rows&&(1==this.mode||2==this.mode)&&this.dragCancel(),!this.active)return this.dragCancel();if(this.checkPinnedWidgetAnimation(),2==this.mode&&this.checkWidgetSizeLimitAnimation(),this.updateCursor(t))switch(this.mode){case 1:{t.preventDefault(),this.dragGrid=new g(this.grid);let e=this.x+this.draggedOffset[0],i=this.y+this.draggedOffset[1];e<0?(this.draggedOffset[0]+=e,e=0):e+this.draggedItem.w>this.cols&&(this.draggedOffset[0]+=this.cols-this.draggedItem.w-e,e=this.cols-this.draggedItem.w),i<0&&(this.draggedOffset[1]+=i,i=0),this.positionUpdates=this.dragGrid.move(this.draggedItem,e,i);break}case 2:{t.preventDefault(),this.dragGrid=new g(this.grid);let e=Math.min(this.cols-this.draggedItem.x,Math.max(1,this.x-this.draggedItem.x+1)),i=Math.max(1,this.y-this.draggedItem.y+1);this.resizeLimit&&([e,i]=this.resizeLimit(this.draggedItem.data,e,i)),this.positionUpdates=this.dragGrid.resize(this.draggedItem,e,i);break}}},dragCancel(){this.removeWidgetClones(),this.additionalRowComputed=!1,this.toggleDraggedItemOverlay(!1),this.mode=0,this.positionUpdates=null,this.draggedOffset=[0,0],this.draggedItem=null,this.$emit("draggedItem",null),this.draggedNode=null},dragEnd(){if(this.removeWidgetClones(),this.toggleDraggedItemOverlay(!1),0==this.mode)return;document.getElementById(this.draggedItem.data.widgetid).classList.remove("border-danger"),Array.from(document.getElementsByClassName("denied-dragging-animation"))?.forEach(t=>{t.classList.remove("denied-dragging-animation")}),this.mode=0;let t=[];this.convertGridResultToUpdate(this.positionUpdates,t),t=this._updateFixedPositions(t),t.length&&this.$emit("rearrangeItems",t.filter(t=>t)),this.draggedItem=null,this.draggedNode=null,this.$emit("draggedItem",null)},_updateFixedPositions(t){t.forEach((t,e)=>{this.fixedPositionUpdates[e]?this.fixedPositionUpdates[e]={...this.fixedPositionUpdates[e],...t}:this.fixedPositionUpdates[e]=t});let e=this.createNewGrid(this.prePlacedItems);return e.length?(e.forEach((e,i)=>t[i]=e),this._updateFixedPositions(t)):t},emptyTileClicked(){this.additionalRowComputed=!1,this.$emit("newItem",this.x,this.y)},updateCursorOnMouseMove(t){0==this.mode&&this.updateCursor(t)},checkPinnedWidgetAnimation(){let t=[];switch(this.mode){case 2:for(let e=this.draggedItem.x;e<=this.x;e++)for(let i=this.draggedItem.y;i<=this.y;i++)this.items.forEach(r=>{r.x==e&&r.y==i&&t.push(r)});break;case 1:t=this.items.filter(t=>t.x==this.x&&t.y==this.y)}Array.from(document.getElementsByClassName("denied-dragging-animation"))?.forEach(t=>{t.classList.remove("denied-dragging-animation")}),t.forEach(t=>{if(t.place[this.cols]&&t.place[this.cols].pinned){let e=document.getElementById(t.widgetid).querySelector("[pinned='true']");e.classList.contains("denied-dragging-animation")||e.classList.add("denied-dragging-animation")}})},checkWidgetSizeLimitAnimation(){let t=this.itemsSetup[this.draggedItem.data.widget],e=t.width.max??t.width,i=t.width.min??t.width,r=t.height.max??t.height,n=t.height.min??t.height,s=document.getElementById(this.draggedItem.data.widgetid),a=this.x-this.draggedItem.x+1,o=this.y-this.draggedItem.y+1;a>0&&(a>e||a0&&(o>r||o\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t'};let m={},v={},A=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/dashboard/Widget";var b={getWidget:t=>m[t],loadWidget:t=>m[t]?Promise.resolve(m[t]):v[t]?v[t]:A?(v[t]=new Promise((e,i)=>{axios.get(A,{params:{id:t}}).then(i=>{i.data.retval.arguments=JSON.parse(i.data.retval.arguments),i.data.retval.setup=JSON.parse(i.data.retval.setup),m[t]=i.data.retval,v[t]=void 0,e(m[t])}).catch(t=>i(t.response.data.retval.error))}),v[t]):Promise.reject("Widget could not be loaded because there is no path yet!"),setPath(t){A=t}},y={name:"Item",components:{BsModal:o,HeightTransition:{data:()=>({}),methods:{onEnter(t,e){t.style.height="0",t.style.height=t.scrollHeight+"px"},onLeave(t,e){t.style.height=t.scrollHeight+"px",t.style.height="0"}},template:'\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t'}},data:()=>({component:"",arguments:null,target:!1,widget:null,tmpConfig:{},isLoading:!1,hasConfig:!1,sharedData:null}),emits:["change","remove","dragstart","resizestart","configOpened","configClosed","pinItem","unPinItem"],props:["id","widgetID","config","width","height","custom","hidden","editMode","loading","item_data","place","setup","dragstate","resizeOverlay","additionalRow"],computed:{maxHeight(){return this.setup?.height?.max},maxWidth(){return"[object Number]"==Object.prototype.toString.call(this.setup?.width)?this.setup?.width:this.setup?.width?.max},minHeight(){return this.setup?.height?.min},minWidth(){return this.setup?.width?.min},isResizeable(){return this.maxWidth>1||this.maxHeight>1},isPinned(){return!!this.place?.pinned},ready(){return this.component&&null!==this.arguments}},methods:{unpin(){if(!this.editMode)return;let t={item:this.item_data,x:this.item_data.x,y:this.item_data.y};this.$emit("unPinItem",[t])},pinItem(){let t={item:this.item_data,x:this.item_data.x,y:this.item_data.y};this.$emit("pinItem",[t])},getWidgetC4Link:t=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+t.setup.cis4link,handleShowBsModal(){this.$emit("configOpened")},handleHideBsModal(){this.$emit("configClosed")},mouseDown(t){this.target=t.target},startDrag(t){this.$refs.dragHandle.contains(this.target)?this.$emit("dragstart",t):this.isResizeable&&this.$refs.resizeHandle.contains(this.target)&&this.isResizeable?this.$emit("resizestart",t):t.preventDefault()},openConfig(){this.tmpConfig={...this.arguments},this.$refs.config.show()},setConfig(t){this.hasConfig=t},changeConfig(){this.isLoading=!0;let t={...this.tmpConfig};this.sendChangeConfig(t)},changeConfigManually(){let t={...this.arguments};this.sendChangeConfig(t)},sendChangeConfig(t){for(var e in t)this.widget.arguments[e]==t[e]&&delete t[e];this.$emit("change",t)}},watch:{config(){this.arguments={...this.widget?.arguments,...this.config},this.tmpConfig={...this.arguments},this.$refs.config&&this.$refs.config.hide(),this.isLoading=!1}},async created(){this.widget=await b.loadWidget(this.id);let t=(await import(FHC_JS_DATA_STORAGE_OBJECT.app_root+this.widget.setup.file+"?"+FHC_JS_DATA_STORAGE_OBJECT.fhcomplete_build_version)).default;this.$options.components["widget"+this.widget.widget_id]=t,this.component="widget"+this.widget.widget_id,this.arguments={...this.widget.arguments,...this.config},this.tmpConfig={...this.arguments}},template:'\n\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t
    \n\t
    \n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{{ widget.setup.name }}\n\t\t\t\n\t\t\t\n\t\t\t\n \t\t\n \t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t
    \n\t
    '},_={data:()=>({}),props:{widget:{type:Object,required:!0}},methods:{path:t=>"/"==t[0]?FHC_JS_DATA_STORAGE_OBJECT.app_root+t:t},emits:["select"],template:'\n\t
    \n\t\t\n\t\t
    \n\t\t\t
    {{ widget.setup.name || widget.widget_kurzbz }}
    \n\t\t\t

    {{ widget.beschreibung }}

    \n\t\t
    \n\t
    '},$={name:"Section",components:{DropGrid:f,DashboardItem:y,WidgetIcon:_},inject:{widgetsSetup:{type:Array,default:[]},adminMode:{type:Boolean,default:!1},editMode:{type:Boolean,default:!1}},props:["name","widgets"],emits:["widgetAdd","widgetUpdate","widgetRemove"],data:()=>({configOpened:!1,gridWidth:1,gridHeight:null,draggedItem:null,additionalRow:!1}),provide(){return{editModeIsActive:Vue.computed(()=>this.editModeIsActive),sectionName:Vue.computed(()=>this.name)}},computed:{computedWidgetsSetup(){return this.widgetsSetup?this.widgetsSetup.reduce((t,e)=>(t[e.widget_id]=e.setup,t),{}):{}},editModeIsActive(){return(this.editMode||this.adminMode)&&!this.configOpened},getSectionStyle:()=>"margin-bottom: 8px;",items(){return this.widgets.map(t=>(!t?.widgetid&&t?.id&&(t.widgetid=t.id),{...t,reorder:!1,...t.place[this.gridWidth]||{reorder:!0,x:0,y:0,w:1,h:1}}))}},methods:{sectionNameTranslation(){switch(this.name){case"general":case"custom":return this.$p.t("dashboard",this.name);default:return this.name}},showSectionInformation(){return"general"==this.name?this.$p.t("dashboard","dashboardGeneralSectionDescription"):"custom"==this.name?this.$p.t("dashboard","dashboardCustomSectionDescription"):this.$p.t("dashboard","dashboardSectionDescription",[this.name])},handleConfigOpened(){this.configOpened=!0},handleConfigClosed(){this.configOpened=!1},checkResizeLimit(t,e,i){let r=b.getWidget(t.widget);if(r){let t=r.setup.width;t.max?t.min=t.min||1:t={min:t,max:t},et.max&&(e=t.max);let n=r.setup.height;n.max?n.min=n.min||1:n={min:n,max:n},in.max&&(i=n.max)}return[e,i]},removeWidget(t,e){if(t.custom)c.popup("Are you sure you want to delete this widget?").then(()=>this.$emit("widgetRemove",this.name,t.id));else{let i={};i[t.id]={hidden:!e},this.updatePreset(i)}},saveConfig(t,e){let i={};i[e.id]={config:t},this.updatePreset(i)},updatePositions(t,e=!1){let i={};t.forEach(t=>{let r={...t.item};r.placeholder||(r.place[this.gridWidth]||(r.place[this.gridWidth]={x:0,y:0,w:1,h:1}),delete r.x,delete r.y,delete r.w,delete r.h,delete r.place[this.gridWidth].pinned,void 0!==t.x&&(r.place[this.gridWidth].x=t.x),void 0!==t.y&&(r.place[this.gridWidth].y=t.y),void 0!==t.w&&(r.place[this.gridWidth].w=t.w),void 0!==t.h&&(r.place[this.gridWidth].h=t.h),e&&(r.place[this.gridWidth].pinned=!0),i[r.id]=r)}),this.updatePreset(i)},updatePreset(t){let e={};e[this.name]=t,this.$emit("widgetUpdate",this.name,e)}},mounted(){let t=this,e=t.$refs.container;t.gridWidth=parseInt(window.getComputedStyle(e).getPropertyValue("--fhc-dashboard-grid-size")),window.addEventListener("resize",()=>{t.gridWidth=parseInt(window.getComputedStyle(e).getPropertyValue("--fhc-dashboard-grid-size"))})},template:'\n\t
    \n\t\t

    \n\t\t\t\n\t\t\t{{sectionNameTranslation()}}:\n\t\t

    \n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    '},w={components:{BsModal:o,WidgetIcon:_},props:["widgets"],data:()=>({callbacks:{}}),methods:{getWidget(){return new Promise((t,e)=>{this.callbacks={resolve:t,reject:e},this.$refs.modal.show()})},close(){this.callbacks.reject&&this.callbacks.reject(),this.callbacks={}},pick(t){this.callbacks.resolve&&this.callbacks.resolve(t),this.callbacks={},this.$refs.modal.hide()}},template:'
    \n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    '},E={mergeDeep(...t){const e=t=>t&&"object"==typeof t;return t.reduce((t,i)=>(Object.keys(i).forEach(r=>{const n=t[r],s=i[r];Array.isArray(n)&&Array.isArray(s)?t[r]=n.concat(...s):e(n)&&e(s)?t[r]=this.mergeDeep(n,s):t[r]=s}),t),{})}},S={components:{DashboardAdminEdit:p,DashboardAdminWidgets:h,DashboardAdminPresets:{components:{DashboardSection:$,DashboardWidgetPicker:w},props:{dashboard:String,widgets:Array},data:()=>({funktionen:{},sections:[],tmpLoading:""}),computed:{apiurl:()=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/dashboard",pickerWidgets(){return this.widgets.filter(t=>t.allowed)}},methods:{widgetAdd(t,e){this.$refs.widgetpicker.getWidget().then(i=>{e.widget=i,delete e.custom,e.preset=1;let r={...e};r.loading=!0,this.sections.forEach(e=>{e.name==t&&e.widgets.push(r)}),axios.post(this.apiurl+"/Config/addWidgetsToPreset",{db:this.dashboard,funktion_kurzbz:t,widgets:[e]}).then(i=>{let n=Object.keys(i.data.retval.data[t].widgets).pop();e.id=n,e.custom=1,this.sections.forEach(i=>{i.name==t&&(i.widgets.splice(i.widgets.indexOf(r),1),i.widgets.push(e))})}).catch(t=>{console.error("ERROR: ",t),alert("ERROR: "+t.response.data.retval)})}).catch(()=>{})},widgetUpdate(t,e){for(var i in e=e[t]){for(var r in this.sections)if(this.sections[r].name==t){for(var n in this.sections[r].widgets)if(this.sections[r].widgets[n].id==i){for(var s in e[i]=E.mergeDeep(this.sections[r].widgets[n],e[i]),{_x:1,_y:1,_w:1,_h:1,index:1,id:1})e[i][s]&&delete e[i][s];break}break}e[i].widgetid=i,delete e[i].custom}axios.post(this.apiurl+"/Config/addWidgetsToPreset",{db:this.dashboard,funktion_kurzbz:t,widgets:e}).then(()=>{this.sections.forEach(i=>{i.name==t&&i.widgets.forEach((t,r)=>{e[t.id]&&(e[t.id].id=t.id,e[t.id].index=t.index,i.widgets[r]=e[t.id],i.widgets[r].custom=1)})})}).catch(t=>{console.error("ERROR: ",t),alert("ERROR: "+t.response.data.retval)})},widgetRemove(t,e){axios.post(this.apiurl+"/Config/removeWidgetFromPreset",{db:this.dashboard,funktion_kurzbz:t,widgetid:e}).then(()=>{this.sections.forEach(i=>{i.name==t&&(i.widgets=i.widgets.filter(t=>t.id!=e))})}).catch(t=>{console.error("ERROR: ",t),alert("ERROR: "+t.response.data.retval)})},loadSections(t){let e=Array.from(t.target.querySelectorAll("option:checked"),t=>t.value);this.sections=[],this.tmpLoading=e.join("###"),axios.get(this.apiurl+"/Config/presetBatch",{params:{db:this.dashboard,funktionen:e}}).then(t=>{if(this.tmpLoading===e.join("###"))for(var i in t.data.retval){let e=[];for(var r in t.data.retval[i])t.data.retval[i][r].id=r,t.data.retval[i][r].custom=1,e.push(t.data.retval[i][r]);this.sections.push({name:i,widgets:e})}}).catch(t=>console.error("ERROR:",t))}},created(){axios.get(this.apiurl+"/Config/funktionen").then(t=>{this.funktionen={general:"GENERAL"},t.data.retval.forEach(t=>{this.funktionen[t.funktion_kurzbz]=t.beschreibung})}).catch(t=>console.error("ERROR:",t))},watch:{dashboard(){this.loadSections({target:this.$refs.funktionenList})}},template:'
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t\n\t
    '}},provide:()=>({adminMode:!0}),data:()=>({dashboards:[],current:-1,widgets:[]}),computed:{apiurl:()=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/dashboard",dashboard(){return this.dashboards.find(t=>t.dashboard_id==this.current)}},methods:{dashboardAdd(){let t="";l.popup("New Dashboard name").then(e=>(t=e,axios.post(this.apiurl+"/Dashboard/create",{dashboard_kurzbz:e}))).then(e=>{let i={dashboard_id:e.data.retval,dashboard_kurzbz:t,beschreibung:""};this.dashboards.push(i),this.current=i.dashboard_id}).catch(t=>void 0!==t?console.error("ERROR:",t):0)},dashboardUpdate(t){axios.post(this.apiurl+"/Dashboard/update",t).then(()=>{let e=this.dashboards.find(e=>e.dashboard_id==t.dashboard_id);e.dashboard_kurzbz=t.dashboard_kurzbz,e.beschreibung=t.beschreibung}).catch(t=>console.error("ERROR:",t))},dashboardDelete(t){axios.post(this.apiurl+"/Dashboard/delete",{dashboard_id:t}).then(()=>{this.current=-1,this.dashboards=this.dashboards.filter(e=>e.dashboard_id!=t)}).catch(t=>console.error("ERROR:",t))},assignWidgets(t){this.widgets=t}},created(){axios.get(this.apiurl+"/Dashboard").then(t=>{this.dashboards=t.data.retval}).catch(t=>console.error("ERROR:",t))},template:'
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    '},C={search(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/search",t,e)},searchAdvanced(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/searchAdvanced",t,e)},searchdummy(t){return this.$fhcApi.post("public/js/apps/api/dummyapi.php/Search",t)}},P={loadCategory(t){return this.$fhcApi.get("/api/frontend/v1/phrasen/loadModule/"+t)},setLanguage(t,e){const i={categories:t,language:e};return this.$fhcApi.post("/api/frontend/v1/phrasen/setLanguage",i)},getLanguage(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getLanguage",{})},getActiveDbLanguages(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getAllLanguages",{})}},k={getHeader(t){return this.$fhcApi.get("/api/frontend/v1/navigation/header",{navigation_page:t})},getMenu:function(t){return this.$fhcApi.get("/api/frontend/v1/navigation/menu",{navigation_page:t})}},T={saveCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/saveCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,customFilterName:t.customFilterName})},removeCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},applyFilterFields(t){return this.$fhcApi.post("/api/frontend/v1/filter/applyFilterFields",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterFields:t.filterFields})},addFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/addFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},removeFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},getFilterById(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},getFilter(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType})}},x={abmeldung:{getDetails(t,e){const i="/api/frontend/v1/studstatus/abmeldung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(i)},create(t,e,i){return this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/createAntrag",{studiensemester:t,prestudent_id:e,grund:i},{errorHandling:"strict"})},cancel(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t.studierendenantrag_id},{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t})}},unterbrechung:{getDetails(t,e){const i="/api/frontend/v1/studstatus/unterbrechung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(i)},create(t,e,i,r,n){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/createAntrag",{studiensemester:t,prestudent_id:e,grund:i,datum_wiedereinstieg:r,attachment:n},{errorHandling:"strict"})},cancel(t){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/cancelAntrag",{antrag_id:t},{errorHandling:"strict"})}},wiederholung:{getDetails(t){const e="/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/"+t;return this.$fhcApi.get(e)},getLvs(t){const e="/api/frontend/v1/studstatus/wiederholung/getLvs/"+t;return this.$fhcApi.get(e)},create(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/createAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},cancel(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/cancelAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},saveLvs(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/saveLvs",{forbiddenLvs:t,mandatoryLvs:e})}},leitung:{getStgs(){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getActiveStgs")},getAntraege(t,e,i){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getAntraege/"+t).then(t=>t.data)},getHistory(t){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getHistory/"+t)},getPrestudents(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/getPrestudents",{query:t},{signal:e,timeout:3e4})},approve(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t)},reject(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t)},reopen(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t)},pause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t)},unpause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t)},object(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t)},approveObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t)},denyObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t)}}},O={getView:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getView/${t}`,{})},fotoSperre:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/fotoSperre/${t}`,{})},isStudent:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/isStudent",{uid:t})},isMitarbeiter:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/isMitarbeiter/${t}`,{})},getZustellAdresse:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellAdresse",{})},getZustellKontakt:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellKontakt",{})},getGemeinden:function(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getGemeinden/${t}/${e}`,{})},getAllNationen:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getAllNationen",{})}},D={ +import t from"../../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js?2025111701";import e from"../../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js?2025111701";import i from"../../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js?2025111701";import r from"../../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js?2025111701";const n={emits:["dataFetched"],props:{refresh:{type:Boolean},apiFunction:{required:!0,type:Function},apiFunctionParameters:{}},watch:{refresh:function(t,e){this.fetchData()}},data:function(){return{loading:!1,error:!1,errorMessage:null}},created:function(){this.fetchData()},methods:{fetchData:function(){if(this.loading=!0,this.error=!1,this.errorMessage=null,"function"==typeof this.apiFunction){let t=this.apiFunction(this.apiFunctionParameters);t instanceof Promise?t.then(this.successHandler).catch(this.errorHandler).finally(this.finallyHandler):this.setError("The called apiFunction does not return a Promise")}else this.setError("Property apiFunction is not a function")},setError:function(t){this.loading=!1,this.error=!0,this.errorMessage=t},successHandler:function(t){this.$emit("dataFetched",t?t.data:void 0)},errorHandler:function(t){t.response?.data?.retval?this.setError(t.response.data.retval):t.data?.message?this.setError(t.data.message):this.setError(t.message)},finallyHandler:function(){this.loading=!1}},template:'\n\t\t\n\t\t\t
    Loading...
    \n\t\t
    \n\t\t\n\t\t\t
    {{ errorMessage }}
    \n\t\t
    \n\t\t\n\t'};var s={getHeader:t=>({method:"get",url:"/api/frontend/v1/navigation/header",params:{navigation_page:t}}),getMenu:t=>({method:"get",url:"/api/frontend/v1/navigation/menu",params:{navigation_page:t}})};const a={components:{CoreFetchCmpt:n},props:{addHeaderMenuEntries:Object,addSideMenuEntries:Object,hideTopMenu:Boolean,leftNavCssClasses:{type:String,default:"navbar navbar-left-side"}},data:()=>({headerMenu:{},sideMenu:{}}),computed:{headerMenuEntries(){let t=this.headerMenu?{...this.headerMenu}:{};return null!=this.headerMenu&&null!=this.addHeaderMenuEntries&&Object.keys(this.addHeaderMenuEntries).length>0&&(t[this.addHeaderMenuEntries.description]=this.addHeaderMenuEntries),t},sideMenuEntries(){let t=this.sideMenu?{...this.sideMenu}:{};return null!=this.sideMenu&&null!=this.addSideMenuEntries&&Object.keys(this.addSideMenuEntries).length>0&&(t[this.addSideMenuEntries.description]=this.addSideMenuEntries),t}},methods:{getNavigationPage:()=>FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,fetchCmptApiFunctionHeader(){return this.$api.call(s.getHeader(this.getNavigationPage()))},fetchCmptApiFunctionSideMenu(){return this.$api.call(s.getMenu(this.getNavigationPage()))},fetchCmptDataFetchedHeader(t){this.headerMenu=t||{}},fetchCmptDataFetchedMenu(t){this.sideMenu=t||{}},getDataBsToggle:t=>t.children?"dropdown":null},template:'\n\t\t\x3c!-- Load head menu --\x3e\n\t\t\n\t\t\x3c!-- Load side menu --\x3e\n\t\t\n\n\t\t\x3c!-- Top menu --\x3e\n\t\t\n\n\t\t\x3c!-- Left side menu --\x3e\n\t\t\n\t'};var o={name:"BootstrapModal",data:()=>({modal:null,fullscreen:!1}),props:{backdrop:{type:[Boolean,String],default:!0,validator:t=>["static",!0,!1].includes(t)},focus:{type:Boolean,default:!0},keyboard:{type:Boolean,default:!0},noCloseBtn:Boolean,dialogClass:[String,Array,Object],headerClass:{type:[String,Array,Object],default:""},bodyClass:{type:[String,Array,Object],default:"px-4 py-5"},footerClass:{type:[String,Array,Object],default:""},allowFullscreenExpand:{type:Boolean,default:!1}},emits:["hideBsModal","hiddenBsModal","hidePreventedBsModal","showBsModal","shownBsModal"],methods:{dispose(){return this.modal.dispose()},handleUpdate(){return this.modal.handleUpdate()},hide(){return this.modal.hide()},show(t){return this.modal.show(t)},toggle(){return this.modal.toggle()},toggleFullscreen(){this.fullscreen=!this.fullscreen}},mounted(){this.$refs.modal&&(this.modal=new bootstrap.Modal(this.$refs.modal,{backdrop:this.backdrop,focus:this.focus,keyboard:this.keyboard}))},popup(t,e,i,r){const n=this,s={};void 0!==t&&(s.default=()=>t),void 0!==i&&(s.title=()=>i),void 0!==r&&(s.footer=()=>r);let a=!1;return"undefined"!=typeof primevue&&(a=!0),new Promise((t,i)=>{const r=Vue.createApp({name:"ModalTmpApp",setup:()=>()=>Vue.h(n,{class:"fade",...e,ref:"modal","onHidden.bs.modal":r.unmount},s),mounted(){this.$refs.modal.show()},beforeUnmount(){this.$refs.modal&&(!1!==this.$refs.modal.result?t(this.$refs.modal.result):i())},unmounted(){o.parentElement.removeChild(o)}}),o=document.createElement("div");a&&r.use(primevue.config.default,{zIndex:{overlay:9999}}),Promise.resolve().then(function(){return et}).then(t=>{r.use(t.default),r.mount(o),document.body.appendChild(o)})})},template:''},d={name:"BootstrapAlert",components:{BsModal:o},mixins:[o],props:{dialogClass:{type:[String,Array,Object],default:"modal-dialog-centered"},onHideBsModal:Function,onHiddenBsModal:Function,onHidePreventedBsModal:Function,onShowBsModal:Function,onShownBsModal:Function},data:()=>({result:!0}),mounted(){this.modal=this.$refs.modalContainer.modal},popup(t,e){return o.popup.bind(this)(t,e)},template:'\n\t\t\n\t\t\n\t'},l={name:"BootstrapPrompt",mixins:[d],props:{placeholder:String,default:String},data:()=>({value:"",result:!1}),created(){this.default&&(this.value=this.default)},popup(t,e){return"string"==typeof e&&(e={default:e}),d.popup.bind(this)(t,e)},template:'\n\t\t\n\t\t\n\t'},c={name:"BootstrapConfirm",mixins:[d],data:()=>({result:!1}),popup(t,e){return d.popup.bind(this)(t,e)},template:'\n\t\t\n\t\t\n\t'},p={emits:["change","delete"],props:{dashboard_id:Number,dashboard_kurzbz:String,beschreibung:String},data(){return{kurzbz:this.dashboard_kurzbz,desc:this.beschreibung}},methods:{sendDelete(){c.popup("Sure?").then(()=>this.$emit("delete",this.dashboard_id)).catch()}},template:'
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t
    '},h={emits:["change","assignWidgets"],props:{dashboard_id:Number,widgets:Array},computed:{apiurl:()=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/dashboard"},methods:{sendChange(t){let e=!this.widgets.find(e=>e.widget_id==t).allowed;axios.post(this.apiurl+"/Widget/setAllowed",{dashboard_id:this.dashboard_id,widget_id:t,action:e?"add":"delete"}).catch(t=>console.error("ERROR: "+t))}},created(){axios.get(this.apiurl+"/Widget/getAll",{params:{dashboard_id:this.dashboard_id}}).then(t=>{this.$emit("assignWidgets",t.data.retval.map(t=>({...t,setup:JSON.parse(t.setup),arguments:JSON.parse(t.arguments),allowed:!!t.allowed})))}).catch(t=>console.error("ERROR:",t))},template:'\n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t
    '},u={name:"GridItem",components:{},inject:{},props:{item:Object,active:Boolean},emits:["mouseDown","mouseUp","startMove","startResize","dragging","endDrag","dropDrag","item","touchStart","touchEnd"],data:()=>({dragAction:"",dragging:!1}),computed:{},methods:{registerDragAction(t){if(this.$emit("mouseDown",t),t.target.hasAttribute("drag-action"))this.dragAction=t.target.getAttribute("drag-action");else{let e=t.target.closest("[drag-action]");this.dragAction=e?e.getAttribute("drag-action"):""}},tryDragStart(t,e){let i=this.dragAction||t.target.getAttribute("drag-action");if(i){if(this.dragging=!0,"move"==i)return this.$emit("startMove",t,e);if("resize"==i)return this.$emit("startResize",t,e)}},touchDragEnd(t){this.dragging&&(this.dragging=!1,this.$emit("touchEnd",t))},touchStart(t){this.$emit("touchStart",t),this.registerDragAction(t),this.tryDragStart(t,this.item)},touchMove(t){this.dragging&&(t.preventDefault(),this.$emit("dragging",t))}},template:'\n\t
    \n\t\t\n\t
    '};class g{constructor(t){t.w?(this.w=t.w,this.h=t.h,this.data=[...t.data],this.grid=[...t.grid]):(this.w=t,this.h=1,this.data=[],this.grid=[])}isFreeSlot(t,e){const i=e*this.w+t;return!this.grid[i]&&0!==this.grid[i]}getMaxY(){return this.data.reduce((t,e)=>(e?.y>t&&(t=e.y),t),0)}getFreeSlots(){const t=[];let e=this.getMaxY(),i=this.w*(e+1);for(let t=0;tthis.grid[e]=t.index),this.data[t.index]=t,this.h=Math.max(this.h,t.y+t.h),[];{const r=new g(this);t.frame.forEach(t=>r.grid[t]=-1);const n=r.tryMoving(i,e);if(n.length){const e=n.sort((t,e)=>(void 0===t.cost&&(t.cost=t.moves.reduce((t,e)=>t*e.cost,1)),void 0===e.cost&&(e.cost=e.moves.reduce((t,e)=>t*e.cost,1)),t.cost>e.cost)),i=[];return e[0].moves.forEach(t=>{const e={...this.data[t.index]};e.x+=t.x,e.y+=t.y,e.frame=this.getItemFrame(e),this.h=Math.max(this.h,e.y+e.h),this.remove(e),e.frame.forEach(t=>this.grid[t]=e.index),this.data[t.index]=e,i[t.index]={index:e.index,x:e.x,y:e.y}}),t.frame.forEach(e=>this.grid[e]=t.index),this.data[t.index]=t,i}console.error("FATAL","can't arrange item on grid")}}move(t,e,i){if(t.data.place[this.w]?.pinned)return[];if(t.x==e&&t.y==i)return[];let r;this.remove(t),t.x==e?r=i-t.y>0?0:3:t.y==i&&(r=e-t.x>0?1:2);const n=Array.isArray(t.frame)?[...t.frame]:[t.frame],s={...t};s.x=e,s.y=i,s.frame=this.getItemFrame(s);let a=this.getItemsInFrame(s.frame);if(a.some(t=>this.data[t]?.data.place[this.w]?.pinned))return[];let o=a.map(t=>this.data[t]),d=o.map(t=>t.frame).flat();if(!d.some(t=>!s.frame.includes(t))&&!d.some(t=>n.includes(t))){let r=[],s=[];for(let t of n){if(s.includes(t))continue;let e=o.shift();e&&(s=[...s,...this.getItemFrame({...e,...this.getSingleFramePosition(t)})],r[e.index]={index:e.index,...this.getSingleFramePosition(t)})}return r[t.index]={index:t.index,x:e,y:i},r}const l=this.add(s,r);return l[t.index]={index:t.index,x:e,y:i},l}resize(t,e,i){if(t.w==e&&t.h==i)return[];this.remove(t);const r={...t};r.w=e,r.h=i,r.frame=this.getItemFrame(r);const n=this.add(r);return n&&(n[t.index]={index:t.index,w:e,h:i,x:t.x,y:t.y,resize:!0}),n}tryMoving(t,e){if(Array.isArray(t)){t.forEach(t=>this.remove({index:t}));let i=[{grid:this,moves:[]}];return t.forEach(t=>{let r=[];i.forEach(i=>{i.grid.tryMoving(t,e).forEach(t=>{i.moves,t.moves=[...t.moves,...i.moves],r.push(t)})}),i=r}),i}const i=[0,3,1,2];this.remove({index:t});const r=1+.2*(this.data[t].weight||0);return i.reduce((i,n)=>{let s=this.tryMovingInDirection(n,t,1,(e===n?.5:1+.1*n)*r);return s?[...i,...s]:i},[]).filter(t=>t)}tryMovingInDirection(t,e,i,r){const n={index:e,x:0,y:0,cost:r};let s;switch(t){case 0:if(this.data[e].data?.place[this.w]?.pinned||this.data[e].y-i<0)return!1;s=this.data[e].frame.map(t=>t-this.w*i),n.y=-i;break;case 3:if(this.data[e].data?.place[this.w]?.pinned)return!1;this.data[e].y+this.data[e].h+i>this.h&&(r+=.4),s=this.data[e].frame.map(t=>t+this.w*i),n.y=i;break;case 1:if(this.data[e].data?.place[this.w]?.pinned||this.data[e].x-i<0)return!1;s=this.data[e].frame.map(t=>t-i),n.x=-i;break;case 2:if(this.data[e].data?.place[this.w]?.pinned||this.data[e].x+this.data[e].w+i>this.w)return!1;s=this.data[e].frame.map(t=>t+i),n.x=i}const a=this.getItemsInFrame(s);if(a.includes(-1))return this.tryMovingInDirection(t,e,i+1,r);const o=new g(this);if(s.forEach(t=>o.grid[t]=-1),!a.length)return[{grid:o,moves:[n]}];const d=o.tryMoving(a).map(t=>t.moves.unshift(n)&&t);return!!d.length&&d}clearWeights(){this.data.forEach(t=>t.weight=void 0)}getItemsInFrame(t){return t.map(t=>this.grid[t]).filter((t,e,i)=>(t||0===t)&&i.indexOf(t)===e)}remove(t){this.grid=this.grid.map(e=>e!=t.index?e:void 0)}getItemFrame(t){const e=[];for(let i=0;i({x:-1,y:-1,clientX:0,clientY:0,mode:0,grid:null,dragGrid:null,permUpdates:[],positionUpdates:null,fixedPositionUpdates:null,draggedOffset:[0,0],draggedItem:null,draggedNode:null,reorderedItems:[],clonedWidget:null}),inject:{sectionName:{type:String,default:""}},computed:{additionalRowComputed:{get(){return this.additionalRow},set(t){this.$emit("update:additionalRow",t)}},items_hashmap(){let t={};return this.items.forEach(e=>{if(this.reorderedItems.length>0&&this.needsReordering(e)){let t=this.reorderedItems.filter(t=>t.data.widgetid==e.widgetid)?.pop();t&&(e.x=t.x,e.y=t.y)}t[`x${e.x}y${e.y}`]=e}),t},items_placeholders(){let t=[],e=this.cols,i=this.rows,r={};for(let n=0;n({index:e,x:t.x,y:t.y,w:t.w,h:t.h,weight:t.weight||0,data:t}))},prePlacedItems(){return this.fixedPositionUpdates?this.indexedItems.map(t=>this.fixedPositionUpdates[t.index]?{index:t.index,weight:t.weight,data:t.data,x:void 0===this.fixedPositionUpdates[t.index].x?t.x:this.fixedPositionUpdates[t.index].x,y:void 0===this.fixedPositionUpdates[t.index].y?t.y:this.fixedPositionUpdates[t.index].y,w:void 0===this.fixedPositionUpdates[t.index].w?t.w:this.fixedPositionUpdates[t.index].w,h:void 0===this.fixedPositionUpdates[t.index].h?t.h:this.fixedPositionUpdates[t.index].h}:t):this.indexedItems},placedItems(){if(!this.positionUpdates)return this.prePlacedItems;let t=this.prePlacedItems.map(t=>{if(!this.positionUpdates[t.index])return t;let e=this.positionUpdates[t.index]?.h-t.h,i=this.positionUpdates[t.index]?.w-t.w;return{resize:this.positionUpdates[t.index]?.resize,index:t.index,weight:t.weight,data:t.data,x:void 0===this.positionUpdates[t.index].x?t.x:this.positionUpdates[t.index].x,y:void 0===this.positionUpdates[t.index].y?t.y:this.positionUpdates[t.index].y,w:i>0||void 0===this.positionUpdates[t.index].w?t.w:this.positionUpdates[t.index].w,h:e>0||void 0===this.positionUpdates[t.index].h?t.h:this.positionUpdates[t.index].h}}),e=[];return t.forEach(t=>{if(t.resize){let i={...t,w:void 0===this.positionUpdates[t.index].w?t.w:this.positionUpdates[t.index].w,h:void 0===this.positionUpdates[t.index].h?t.h:this.positionUpdates[t.index].h,resizeOverlay:!0,blank:!0};e.push(i)}}),[...t,...e]},showEmptyTileHover(){return!(!this.active||!this.grid||0!=this.mode||this.x<0||this.y<0||this.x>=this.cols||this.y>=this.rows)&&this.grid.isFreeSlot(this.x,this.y)},widgetSetup(){if(this.widgetsSetup)return this.widgetsSetup.reduce((t,e)=>(t[e.widget_id]=e,t),{})}},watch:{active(t){t||this.dragCancel()},cols(){this.dragCancel()},rows:{handler(t){this.$emit("gridHeight",t)},immediate:!0},indexedItems:{handler(t){this.dragCancel();const e=this.createNewGrid(t);this.fixedPositionUpdates=e,e.length&&this.$emit("rearrangeItems",e.filter(t=>t))},immediate:!0,deep:!0}},methods:{needsReordering(t){return!t?.data?.place[this.cols]},toggleDraggedItemOverlay(t){this.draggedNode&&(t?this.draggedNode.firstElementChild.classList.add("dashboard-item-overlay"):this.draggedNode.firstElementChild.classList.remove("dashboard-item-overlay"))},dragging(t){if(1==this.mode){this.toggleDraggedItemOverlay(!0);const t=this.$refs.container.getBoundingClientRect(),e=this.clonedWidget.getBoundingClientRect();let i=this.clientY-20,r=this.clientX-15;const n=0,s=t.height-e.height,a=0,o=t.width-e.width,d=Math.max(n,Math.min(s,i)),l=Math.max(a,Math.min(o,r));this.clonedWidget.style.top=`${d}px`,this.clonedWidget.style.left=`${l}px`}},createNewGrid(t){this.grid=new g(this.cols);const e=[];let i=[...t].sort((t,e)=>this.needsReordering(t)&&this.needsReordering(e)?0:this.needsReordering(t)?999:this.needsReordering(e)?-999:t.weight>e.weight),r=[];return i.forEach(i=>{let n=this.grid.getFreeSlots();if(this.needsReordering(i)){let t=n.shift();t?(i.x=t.x,i.y=t.y):(i.x=0,i.y=this.grid.h),r.push(i)}if(i.x+i.w>this.cols){let t,r=this.cols-i.x;this.resizeLimit&&([r]=this.resizeLimit(i.data,r,i.h)),r<1&&(r=1),r>this.cols&&(r=this.cols),i.x+r>this.cols&&(t=this.cols-r),r==i.w&&(r=void 0),e[i.index]={item:i.data,x:t,w:r}}i.frame=this.grid.getItemFrame(i),this.convertGridResultToUpdate(this.grid.add(i),e,t)}),this.reorderedItems=r,this.grid.clearWeights(),e},convertGridResultToUpdate(t,e,i){t&&(i||(i=this.indexedItems),t.forEach(t=>{let r={item:i[t.index].data};void 0!==t.x&&(r.x=t.x),void 0!==t.y&&(r.y=t.y),void 0!==t.w&&(r.w=t.w),void 0!==t.h&&(r.h=t.h),e[t.index]=r}))},mouseLeave(){},updateCursor(t){if(!this.active)return this.x=this.y=-1,!1;const e=this.active?this.marginForExtraRow:0,i=this.$refs.container.getBoundingClientRect();t.clientX||t.clientY||!t.touches||(t.clientX=t.touches[0].clientX,t.clientY=t.touches[0].clientY),this.clientX=t.clientX-i.left,this.clientY=t.clientY-i.top;const r=Math.floor(this.cols*(t.clientX-i.left)/this.$refs.container.clientWidth),n=Math.floor((this.rows+e)*(t.clientY-i.top)/this.$refs.container.clientHeight);return(this.x!=r||this.y!=n)&&(this.x=r,this.y=n,!0)},_dragStart(t,e){t.dataTransfer&&(t.dataTransfer.setDragImage(t.target,-99999,-99999),t.dataTransfer.dropEffect="move",t.dataTransfer.effectAllowed="move")},startMove(t,e){this.active&&(this.mode=1,this.draggedItem=e,this.$emit("draggedItem",e),setTimeout(()=>{this.draggedNode=t.target.closest(".drop-grid-item");let e=t.target.closest(".drop-grid-item")?.cloneNode(!0);e.style.zIndex=5,e.classList.add("widgetClone"),this.$refs.container.appendChild(e);e.querySelector("[style='display: none;']").style.removeProperty("display"),this.clonedWidget=e},0),this.draggedOffset=[e.x-this.x,e.y-this.y],this._dragStart(t,e))},startResize(t,e){this.active&&(this.mode=2,this.draggedItem=e,this.$emit("draggedItem",e),this._dragStart(t))},dragOver(t){if(this.y+1>this.rows&&(1==this.mode||2==this.mode)&&this.dragCancel(),!this.active)return this.dragCancel();if(this.checkPinnedWidgetAnimation(),2==this.mode&&this.checkWidgetSizeLimitAnimation(),this.updateCursor(t))switch(this.mode){case 1:{t.preventDefault(),this.dragGrid=new g(this.grid);let e=this.x+this.draggedOffset[0],i=this.y+this.draggedOffset[1];e<0?(this.draggedOffset[0]+=e,e=0):e+this.draggedItem.w>this.cols&&(this.draggedOffset[0]+=this.cols-this.draggedItem.w-e,e=this.cols-this.draggedItem.w),i<0&&(this.draggedOffset[1]+=i,i=0),this.positionUpdates=this.dragGrid.move(this.draggedItem,e,i);break}case 2:{t.preventDefault(),this.dragGrid=new g(this.grid);let e=Math.min(this.cols-this.draggedItem.x,Math.max(1,this.x-this.draggedItem.x+1)),i=Math.max(1,this.y-this.draggedItem.y+1);this.resizeLimit&&([e,i]=this.resizeLimit(this.draggedItem.data,e,i)),this.positionUpdates=this.dragGrid.resize(this.draggedItem,e,i);break}}},dragCancel(){this.removeWidgetClones(),this.additionalRowComputed=!1,this.toggleDraggedItemOverlay(!1),this.mode=0,this.positionUpdates=null,this.draggedOffset=[0,0],this.draggedItem=null,this.$emit("draggedItem",null),this.draggedNode=null},dragEnd(){if(this.removeWidgetClones(),this.toggleDraggedItemOverlay(!1),0==this.mode)return;document.getElementById(this.draggedItem.data.widgetid).classList.remove("border-danger"),Array.from(document.getElementsByClassName("denied-dragging-animation"))?.forEach(t=>{t.classList.remove("denied-dragging-animation")}),this.mode=0;let t=[];this.convertGridResultToUpdate(this.positionUpdates,t),t=this._updateFixedPositions(t),t.length&&this.$emit("rearrangeItems",t.filter(t=>t)),this.draggedItem=null,this.draggedNode=null,this.$emit("draggedItem",null)},_updateFixedPositions(t){t.forEach((t,e)=>{this.fixedPositionUpdates[e]?this.fixedPositionUpdates[e]={...this.fixedPositionUpdates[e],...t}:this.fixedPositionUpdates[e]=t});let e=this.createNewGrid(this.prePlacedItems);return e.length?(e.forEach((e,i)=>t[i]=e),this._updateFixedPositions(t)):t},emptyTileClicked(){this.additionalRowComputed=!1,this.$emit("newItem",this.x,this.y)},updateCursorOnMouseMove(t){0==this.mode&&this.updateCursor(t)},checkPinnedWidgetAnimation(){let t=[];switch(this.mode){case 2:for(let e=this.draggedItem.x;e<=this.x;e++)for(let i=this.draggedItem.y;i<=this.y;i++)this.items.forEach(r=>{r.x==e&&r.y==i&&t.push(r)});break;case 1:t=this.items.filter(t=>t.x==this.x&&t.y==this.y)}Array.from(document.getElementsByClassName("denied-dragging-animation"))?.forEach(t=>{t.classList.remove("denied-dragging-animation")}),t.forEach(t=>{if(t.place[this.cols]&&t.place[this.cols].pinned){let e=document.getElementById(t.widgetid).querySelector("[pinned='true']");e.classList.contains("denied-dragging-animation")||e.classList.add("denied-dragging-animation")}})},checkWidgetSizeLimitAnimation(){let t=this.itemsSetup[this.draggedItem.data.widget],e=t.width.max??t.width,i=t.width.min??t.width,r=t.height.max??t.height,n=t.height.min??t.height,s=document.getElementById(this.draggedItem.data.widgetid),a=this.x-this.draggedItem.x+1,o=this.y-this.draggedItem.y+1;a>0&&(a>e||a0&&(o>r||o\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t'};let m={},v={},A=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/dashboard/Widget";var b={getWidget:t=>m[t],loadWidget:t=>m[t]?Promise.resolve(m[t]):v[t]?v[t]:A?(v[t]=new Promise((e,i)=>{axios.get(A,{params:{id:t}}).then(i=>{i.data.retval.arguments=JSON.parse(i.data.retval.arguments),i.data.retval.setup=JSON.parse(i.data.retval.setup),m[t]=i.data.retval,v[t]=void 0,e(m[t])}).catch(t=>i(t.response.data.retval.error))}),v[t]):Promise.reject("Widget could not be loaded because there is no path yet!"),setPath(t){A=t}},y={name:"Item",components:{BsModal:o,HeightTransition:{data:()=>({}),methods:{onEnter(t,e){t.style.height="0",t.style.height=t.scrollHeight+"px"},onLeave(t,e){t.style.height=t.scrollHeight+"px",t.style.height="0"}},template:'\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t'}},data:()=>({component:"",arguments:null,target:!1,widget:null,tmpConfig:{},isLoading:!1,hasConfig:!1,sharedData:null}),emits:["change","remove","dragstart","resizestart","configOpened","configClosed","pinItem","unPinItem"],props:["id","widgetID","config","width","height","custom","hidden","editMode","loading","item_data","place","setup","dragstate","resizeOverlay","additionalRow"],computed:{maxHeight(){return this.setup?.height?.max},maxWidth(){return"[object Number]"==Object.prototype.toString.call(this.setup?.width)?this.setup?.width:this.setup?.width?.max},minHeight(){return this.setup?.height?.min},minWidth(){return this.setup?.width?.min},isResizeable(){return this.maxWidth>1||this.maxHeight>1},isPinned(){return!!this.place?.pinned},ready(){return this.component&&null!==this.arguments}},methods:{unpin(){if(!this.editMode)return;let t={item:this.item_data,x:this.item_data.x,y:this.item_data.y};this.$emit("unPinItem",[t])},pinItem(){let t={item:this.item_data,x:this.item_data.x,y:this.item_data.y};this.$emit("pinItem",[t])},getWidgetC4Link:t=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+t.setup.cis4link,handleShowBsModal(){this.$emit("configOpened")},handleHideBsModal(){this.$emit("configClosed")},mouseDown(t){this.target=t.target},startDrag(t){this.$refs.dragHandle.contains(this.target)?this.$emit("dragstart",t):this.isResizeable&&this.$refs.resizeHandle.contains(this.target)&&this.isResizeable?this.$emit("resizestart",t):t.preventDefault()},openConfig(){this.tmpConfig={...this.arguments},this.$refs.config.show()},setConfig(t){this.hasConfig=t},changeConfig(){this.isLoading=!0;let t={...this.tmpConfig};this.sendChangeConfig(t)},changeConfigManually(){let t={...this.arguments};this.sendChangeConfig(t)},sendChangeConfig(t){for(var e in t)this.widget.arguments[e]==t[e]&&delete t[e];this.$emit("change",t)}},watch:{config(){this.arguments={...this.widget?.arguments,...this.config},this.tmpConfig={...this.arguments},this.$refs.config&&this.$refs.config.hide(),this.isLoading=!1}},async created(){this.widget=await b.loadWidget(this.id);let t=(await import(FHC_JS_DATA_STORAGE_OBJECT.app_root+this.widget.setup.file+"?"+FHC_JS_DATA_STORAGE_OBJECT.fhcomplete_build_version)).default;this.$options.components["widget"+this.widget.widget_id]=t,this.component="widget"+this.widget.widget_id,this.arguments={...this.widget.arguments,...this.config},this.tmpConfig={...this.arguments}},template:'\n\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t
    \n\t
    \n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{{ widget.setup.name }}\n\t\t\t\n\t\t\t\n\t\t\t\n \t\t\n \t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t
    \n\t
    '},_={data:()=>({}),props:{widget:{type:Object,required:!0}},methods:{path:t=>"/"==t[0]?FHC_JS_DATA_STORAGE_OBJECT.app_root+t:t},emits:["select"],template:'\n\t
    \n\t\t\n\t\t
    \n\t\t\t
    {{ widget.setup.name || widget.widget_kurzbz }}
    \n\t\t\t

    {{ widget.beschreibung }}

    \n\t\t
    \n\t
    '},$={name:"Section",components:{DropGrid:f,DashboardItem:y,WidgetIcon:_},inject:{widgetsSetup:{type:Array,default:[]},adminMode:{type:Boolean,default:!1},editMode:{type:Boolean,default:!1}},props:["name","widgets"],emits:["widgetAdd","widgetUpdate","widgetRemove"],data:()=>({configOpened:!1,gridWidth:1,gridHeight:null,draggedItem:null,additionalRow:!1}),provide(){return{editModeIsActive:Vue.computed(()=>this.editModeIsActive),sectionName:Vue.computed(()=>this.name)}},computed:{computedWidgetsSetup(){return this.widgetsSetup?this.widgetsSetup.reduce((t,e)=>(t[e.widget_id]=e.setup,t),{}):{}},editModeIsActive(){return(this.editMode||this.adminMode)&&!this.configOpened},getSectionStyle:()=>"margin-bottom: 8px;",items(){return this.widgets.map(t=>(!t?.widgetid&&t?.id&&(t.widgetid=t.id),{...t,reorder:!1,...t.place[this.gridWidth]||{reorder:!0,x:0,y:0,w:1,h:1}}))}},methods:{sectionNameTranslation(){switch(this.name){case"general":case"custom":return this.$p.t("dashboard",this.name);default:return this.name}},showSectionInformation(){return"general"==this.name?this.$p.t("dashboard","dashboardGeneralSectionDescription"):"custom"==this.name?this.$p.t("dashboard","dashboardCustomSectionDescription"):this.$p.t("dashboard","dashboardSectionDescription",[this.name])},handleConfigOpened(){this.configOpened=!0},handleConfigClosed(){this.configOpened=!1},checkResizeLimit(t,e,i){let r=b.getWidget(t.widget);if(r){let t=r.setup.width;t.max?t.min=t.min||1:t={min:t,max:t},et.max&&(e=t.max);let n=r.setup.height;n.max?n.min=n.min||1:n={min:n,max:n},in.max&&(i=n.max)}return[e,i]},removeWidget(t,e){if(t.custom)c.popup("Are you sure you want to delete this widget?").then(()=>this.$emit("widgetRemove",this.name,t.id));else{let i={};i[t.id]={hidden:!e},this.updatePreset(i)}},saveConfig(t,e){let i={};i[e.id]={config:t},this.updatePreset(i)},updatePositions(t,e=!1){let i={};t.forEach(t=>{let r={...t.item};r.placeholder||(r.place[this.gridWidth]||(r.place[this.gridWidth]={x:0,y:0,w:1,h:1}),delete r.x,delete r.y,delete r.w,delete r.h,delete r.place[this.gridWidth].pinned,void 0!==t.x&&(r.place[this.gridWidth].x=t.x),void 0!==t.y&&(r.place[this.gridWidth].y=t.y),void 0!==t.w&&(r.place[this.gridWidth].w=t.w),void 0!==t.h&&(r.place[this.gridWidth].h=t.h),e&&(r.place[this.gridWidth].pinned=!0),i[r.id]=r)}),this.updatePreset(i)},updatePreset(t){let e={};e[this.name]=t,this.$emit("widgetUpdate",this.name,e)}},mounted(){let t=this,e=t.$refs.container;t.gridWidth=parseInt(window.getComputedStyle(e).getPropertyValue("--fhc-dashboard-grid-size")),window.addEventListener("resize",()=>{t.gridWidth=parseInt(window.getComputedStyle(e).getPropertyValue("--fhc-dashboard-grid-size"))})},template:'\n\t
    \n\t\t

    \n\t\t\t\n\t\t\t{{sectionNameTranslation()}}:\n\t\t

    \n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    '},w={components:{BsModal:o,WidgetIcon:_},props:["widgets"],data:()=>({callbacks:{}}),methods:{getWidget(){return new Promise((t,e)=>{this.callbacks={resolve:t,reject:e},this.$refs.modal.show()})},close(){this.callbacks.reject&&this.callbacks.reject(),this.callbacks={}},pick(t){this.callbacks.resolve&&this.callbacks.resolve(t),this.callbacks={},this.$refs.modal.hide()}},template:'
    \n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    '},E={mergeDeep(...t){const e=t=>t&&"object"==typeof t;return t.reduce((t,i)=>(Object.keys(i).forEach(r=>{const n=t[r],s=i[r];Array.isArray(n)&&Array.isArray(s)?t[r]=n.concat(...s):e(n)&&e(s)?t[r]=this.mergeDeep(n,s):t[r]=s}),t),{})}},S={components:{DashboardAdminEdit:p,DashboardAdminWidgets:h,DashboardAdminPresets:{components:{DashboardSection:$,DashboardWidgetPicker:w},props:{dashboard:String,widgets:Array},data:()=>({funktionen:{},sections:[],tmpLoading:""}),computed:{apiurl:()=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/dashboard",pickerWidgets(){return this.widgets.filter(t=>t.allowed)}},methods:{widgetAdd(t,e){this.$refs.widgetpicker.getWidget().then(i=>{e.widget=i,delete e.custom,e.preset=1;let r={...e};r.loading=!0,this.sections.forEach(e=>{e.name==t&&e.widgets.push(r)}),axios.post(this.apiurl+"/Config/addWidgetsToPreset",{db:this.dashboard,funktion_kurzbz:t,widgets:[e]}).then(i=>{let n=Object.keys(i.data.retval.data[t].widgets).pop();e.id=n,e.custom=1,this.sections.forEach(i=>{i.name==t&&(i.widgets.splice(i.widgets.indexOf(r),1),i.widgets.push(e))})}).catch(t=>{console.error("ERROR: ",t),alert("ERROR: "+t.response.data.retval)})}).catch(()=>{})},widgetUpdate(t,e){for(var i in e=e[t]){for(var r in this.sections)if(this.sections[r].name==t){for(var n in this.sections[r].widgets)if(this.sections[r].widgets[n].id==i){for(var s in e[i]=E.mergeDeep(this.sections[r].widgets[n],e[i]),{_x:1,_y:1,_w:1,_h:1,index:1,id:1})e[i][s]&&delete e[i][s];break}break}e[i].widgetid=i,delete e[i].custom}axios.post(this.apiurl+"/Config/addWidgetsToPreset",{db:this.dashboard,funktion_kurzbz:t,widgets:e}).then(()=>{this.sections.forEach(i=>{i.name==t&&i.widgets.forEach((t,r)=>{e[t.id]&&(e[t.id].id=t.id,e[t.id].index=t.index,i.widgets[r]=e[t.id],i.widgets[r].custom=1)})})}).catch(t=>{console.error("ERROR: ",t),alert("ERROR: "+t.response.data.retval)})},widgetRemove(t,e){axios.post(this.apiurl+"/Config/removeWidgetFromPreset",{db:this.dashboard,funktion_kurzbz:t,widgetid:e}).then(()=>{this.sections.forEach(i=>{i.name==t&&(i.widgets=i.widgets.filter(t=>t.id!=e))})}).catch(t=>{console.error("ERROR: ",t),alert("ERROR: "+t.response.data.retval)})},loadSections(t){let e=Array.from(t.target.querySelectorAll("option:checked"),t=>t.value);this.sections=[],this.tmpLoading=e.join("###"),axios.get(this.apiurl+"/Config/presetBatch",{params:{db:this.dashboard,funktionen:e}}).then(t=>{if(this.tmpLoading===e.join("###"))for(var i in t.data.retval){let e=[];for(var r in t.data.retval[i])t.data.retval[i][r].id=r,t.data.retval[i][r].custom=1,e.push(t.data.retval[i][r]);this.sections.push({name:i,widgets:e})}}).catch(t=>console.error("ERROR:",t))}},created(){axios.get(this.apiurl+"/Config/funktionen").then(t=>{this.funktionen={general:"GENERAL"},t.data.retval.forEach(t=>{this.funktionen[t.funktion_kurzbz]=t.beschreibung})}).catch(t=>console.error("ERROR:",t))},watch:{dashboard(){this.loadSections({target:this.$refs.funktionenList})}},template:'
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t\n\t
    '}},provide:()=>({adminMode:!0}),data:()=>({dashboards:[],current:-1,widgets:[]}),computed:{apiurl:()=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/dashboard",dashboard(){return this.dashboards.find(t=>t.dashboard_id==this.current)}},methods:{dashboardAdd(){let t="";l.popup("New Dashboard name").then(e=>(t=e,axios.post(this.apiurl+"/Dashboard/create",{dashboard_kurzbz:e}))).then(e=>{let i={dashboard_id:e.data.retval,dashboard_kurzbz:t,beschreibung:""};this.dashboards.push(i),this.current=i.dashboard_id}).catch(t=>void 0!==t?console.error("ERROR:",t):0)},dashboardUpdate(t){axios.post(this.apiurl+"/Dashboard/update",t).then(()=>{let e=this.dashboards.find(e=>e.dashboard_id==t.dashboard_id);e.dashboard_kurzbz=t.dashboard_kurzbz,e.beschreibung=t.beschreibung}).catch(t=>console.error("ERROR:",t))},dashboardDelete(t){axios.post(this.apiurl+"/Dashboard/delete",{dashboard_id:t}).then(()=>{this.current=-1,this.dashboards=this.dashboards.filter(e=>e.dashboard_id!=t)}).catch(t=>console.error("ERROR:",t))},assignWidgets(t){this.widgets=t}},created(){axios.get(this.apiurl+"/Dashboard").then(t=>{this.dashboards=t.data.retval}).catch(t=>console.error("ERROR:",t))},template:'
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    '},C={search(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/search",t,e)},searchAdvanced(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/searchAdvanced",t,e)},searchdummy(t){return this.$fhcApi.post("public/js/apps/api/dummyapi.php/Search",t)}},P={loadCategory(t){return this.$fhcApi.get("/api/frontend/v1/phrasen/loadModule/"+t)},setLanguage(t,e){const i={categories:t,language:e};return this.$fhcApi.post("/api/frontend/v1/phrasen/setLanguage",i)},getLanguage(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getLanguage",{})},getActiveDbLanguages(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getAllLanguages",{})}},k={getHeader(t){return this.$fhcApi.get("/api/frontend/v1/navigation/header",{navigation_page:t})},getMenu:function(t){return this.$fhcApi.get("/api/frontend/v1/navigation/menu",{navigation_page:t})}},T={saveCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/saveCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,customFilterName:t.customFilterName})},removeCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},applyFilterFields(t){return this.$fhcApi.post("/api/frontend/v1/filter/applyFilterFields",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterFields:t.filterFields})},addFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/addFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},removeFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},getFilterById(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},getFilter(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType})}},x={abmeldung:{getDetails(t,e){const i="/api/frontend/v1/studstatus/abmeldung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(i)},create(t,e,i){return this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/createAntrag",{studiensemester:t,prestudent_id:e,grund:i},{errorHandling:"strict"})},cancel(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t.studierendenantrag_id},{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t})}},unterbrechung:{getDetails(t,e){const i="/api/frontend/v1/studstatus/unterbrechung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(i)},create(t,e,i,r,n){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/createAntrag",{studiensemester:t,prestudent_id:e,grund:i,datum_wiedereinstieg:r,attachment:n},{errorHandling:"strict"})},cancel(t){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/cancelAntrag",{antrag_id:t},{errorHandling:"strict"})}},wiederholung:{getDetails(t){const e="/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/"+t;return this.$fhcApi.get(e)},getLvs(t){const e="/api/frontend/v1/studstatus/wiederholung/getLvs/"+t;return this.$fhcApi.get(e)},create(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/createAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},cancel(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/cancelAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},saveLvs(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/saveLvs",{forbiddenLvs:t,mandatoryLvs:e})}},leitung:{getStgs(){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getActiveStgs")},getAntraege(t,e,i){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getAntraege/"+t).then(t=>t.data)},getHistory(t){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getHistory/"+t)},getPrestudents(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/getPrestudents",{query:t},{signal:e,timeout:3e4})},approve(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t)},reject(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t)},reopen(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t)},pause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t)},unpause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t)},object(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t)},approveObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t)},denyObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t)}}},O={getView:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getView/${t}`,{})},fotoSperre:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/fotoSperre/${t}`,{})},isStudent:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/isStudent",{uid:t})},isMitarbeiter:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/isMitarbeiter/${t}`,{})},getZustellAdresse:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellAdresse",{})},getZustellKontakt:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellKontakt",{})},getGemeinden:function(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getGemeinden/${t}/${e}`,{})},getAllNationen:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getAllNationen",{})}},D={ //! API calls for profil update requests -getStatus:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getStatus",{})},getTopic:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getTopic",{})},acceptProfilRequest:function({profil_update_id:t,uid:e,status_message:i,topic:r,requested_change:n}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/acceptProfilRequest",{profil_update_id:t,uid:e,status_message:i,topic:r,requested_change:n})},denyProfilRequest:function({profil_update_id:t,uid:e,topic:i,status_message:r}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/denyProfilRequest",{profil_update_id:t,uid:e,topic:i,status_message:r})},insertFile:function(t,e=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/insertFile/${e}`,t)},getProfilRequestFiles:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${t}`,{})},selectProfilRequest:function(t=null,e=null){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/selectProfilRequest",{...t?{uid:t}:{},...e?{id:e}:{}})},insertProfilRequest:function(t,e,i=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/insertProfilRequest",{topic:t,payload:e,...i?{fileID:i}:{}})},updateProfilRequest:function(t,e,i,r=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/updateProfilRequest",{topic:t,payload:e,ID:i,...r?{fileID:r}:{}})},deleteProfilRequest:function(t){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/deleteProfilRequest",{requestID:t})}},F={getRoomInfo(t,e,i){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getRoomplan",{ort_kurzbz:t,start_date:e,end_date:i})},getStunden(){return this.$fhcApi.get("/api/frontend/v1/LvPlan/Stunden",{})},getOrtReservierungen(t,e,i){return this.$fhcApi.post(`/api/frontend/v1/LvPlan/getReservierungen/${t}`,{start_date:e,end_date:i})},getLvPlanReservierungen(t,e){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getReservierungen",{start_date:t,end_date:e})},getLehreinheitStudiensemester(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${t}`,{})},studiensemesterDateInterval(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${t}`,{})},LvPlanEvents(t,e,i){return this.$fhcApi.get("/api/frontend/v1/LvPlan/LvPlanEvents",{start_date:t,end_date:e,lv_id:i})}},R={verband:{get(){return this.$fhcApi.get("api/frontend/v1/stv/verband")},favorites:{get(){return this.$fhcApi.get("api/frontend/v1/stv/favorites")},set(t){return this.$fhcApi.post("api/frontend/v1/stv/favorites/set",{favorites:t})}}},students:{uid(t,e){let i="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/uid/"+encodeURIComponent(t);return this.$fhcApi.getUri(i)},prestudent(t,e){let i="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/prestudent/"+encodeURIComponent(t);return this.$fhcApi.getUri(i)},person(t,e){let i="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/person/"+encodeURIComponent(t);return this.$fhcApi.getUri(i)},verband(t){return this.$fhcApi.getUri("api/frontend/v1/stv/students/"+t)}},filter:{getStg(){return this.$fhcApi.get("api/frontend/v1/stv/filter/getStg")},setStg(t){return this.$fhcApi.post("api/frontend/v1/stv/filter/setStg",{studiengang_kz:t})}},konto:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/konto/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id),only_open:e.filter,studiengang_kz:e.studiengang_kz_intern?e.stg_kz:""}),t.ajaxRequestFunc=(t,e,i)=>this.$fhcApi.post(t,i,e),t.ajaxResponse=(t,e,i)=>i.data,t},checkDoubles(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/checkDoubles",e,{confirmErrorHandler:t=>!0})},insert(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/insert",e)},counter(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/counter",t)},edit(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/update",e)},delete(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/delete",{buchungsnr:t})},getBuchungstypen(){return this.$fhcApi.get("api/frontend/v1/stv/konto/getBuchungstypen")}},group:{getGruppen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/Gruppen/getGruppen/"+i.id)},deleteGroup(t){return this.$fhcApi.post("api/frontend/v1/stv/Gruppen/deleteGruppe/",t)}},kontakt:{getAdressen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressen/"+i.id)},addNewAddress(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewAddress/"+e,i)},loadAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadAddress/",{address_id:t})},updateAddress(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateAddress/"+e,i)},deleteAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteAddress/",{address_id:t})},getPlaces(t){return this.$fhcApi.get("api/frontend/v1/stv/address/getPlaces/"+t)},getFirmen(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getFirmen/"+t)},getNations(){return this.$fhcApi.get("api/frontend/v1/stv/address/getNations/")},getAdressentypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressentypen/")},getBankverbindung(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getBankverbindung/"+i.id)},addNewBankverbindung(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewBankverbindung/"+e,i)},loadBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadBankverbindung/",{bankverbindung_id:t})},updateBankverbindung(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateBankverbindung/"+e,i)},deleteBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteBankverbindung/",{bankverbindung_id:t})},getKontakte(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakte/"+i.id)},addNewContact(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewContact/"+e,i)},loadContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadContact/",{kontakt_id:t})},updateContact(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateContact/"+e,i)},deleteContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteContact/",{kontakt_id:t})},getStandorteByFirma(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getStandorteByFirma/"+t)},getKontakttypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakttypen/")}},prestudent:{get(t,e){return this.$fhcApi.post("api/frontend/v1/stv/prestudent/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e))},updatePrestudent(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/prestudent/updatePrestudent/"+e,i)},getBezeichnungZGV(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungZGV/")},getBezeichnungMZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungMZgv/")},getBezeichnungDZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungDZgv/")},getStgs(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStgs/")},getAusbildung(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAusbildung/")},getAufmerksamdurch(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAufmerksamdurch/")},getBerufstaetigkeit(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBerufstaetigkeit/")},getTypenStg(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getTypenStg/")},getBisstandort(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBisstandort/")},getHistoryPrestudent(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/status/getHistoryPrestudent/"+i.id)},getMaxSem(t){return this.$fhcApi.post("api/frontend/v1/stv/status/getMaxSemester/",{studiengang_kzs:t})},advanceStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/advanceStatus/"+t+"/"+e+"/"+i+"/"+r)},confirmStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/confirmStatus/"+t+"/"+e+"/"+i+"/"+r)},isLastStatus(t){return this.$fhcApi.get("api/frontend/v1/stv/status/isLastStatus/"+t)},deleteStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/deleteStatus/"+t+"/"+e+"/"+i+"/"+r)},getLastBismeldestichtag(){return this.$fhcApi.get("api/frontend/v1/stv/status/getLastBismeldestichtag/")},getHistoryPrestudents(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getHistoryPrestudents/"+i.id)}},status:{insertStatus(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/insertStatus/"+e,i)},loadStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/loadStatus/"+t+"/"+e+"/"+i+"/"+r)},updateStatus(t,{prestudent_id:e,status_kurzbz:i,studiensemester_kurzbz:r,ausbildungssemester:n},s){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/updateStatus/"+e+"/"+i+"/"+r+"/"+n,s)},getStudienplaene(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudienplaene/"+t)},getStudiengang(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudiengang/"+t)},getStatusgruende(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusgruende/")},getStati(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStati/")},addStudent(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/addStudent/"+t,e,{errorHeader:t})},changeStatus(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/changeStatus/"+t,e,{errorHeader:t})},getStatusarray(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusarray/")}},details:{get(t,e){let i="api/frontend/v1/stv/student/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e);return this.$fhcApi.post(i)},save(t,e,i,r){let n="api/frontend/v1/stv/student/save/"+encodeURIComponent(e)+"/"+encodeURIComponent(i);return this.$fhcApi.post(t,n,r)}},exam:{getPruefungen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getPruefungen/"+i.id)},loadPruefung(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/loadPruefung/"+t)},getTypenPruefungen(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getTypenPruefungen")},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/getAllLehreinheiten/",t)},getLvsByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsByStudent/"+t)},getLvsandLesByStudent(t,e){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsandLesByStudent/"+t+"/"+e)},getLvsAndMas(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsAndMas/"+t)},getMitarbeiterLv(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getMitarbeiterLv/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getNoten")},checkZeugnisnoteLv(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/",t)},addPruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/insertPruefung/",e)},updatePruefung(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/updatePruefung/"+e,i)},deletePruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/deletePruefung/"+t)}},abschlusspruefung:{getAbschlusspruefung(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/"+i.id)},addNewAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/",e)},loadAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/",{id:t})},updateAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/",e)},deleteAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/",{id:t})},getTypenAbschlusspruefung(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/")},getTypenAntritte(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/")},getBeurteilungen(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/")},getAkadGrade(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getAkadGrade/",{studiengang_kz:t})},getTypStudiengang(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/",{studiengang_kz:t})},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/"+t)},getPruefer(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getPruefer/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getNoten/")},checkForExistingExams(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/",{uids:t})}},grades:{list(){return this.$fhcApi.get("api/frontend/v1/stv/grades/list")},getCertificate(t,e){let i="api/frontend/v1/stv/grades/getCertificate/"+encodeURIComponent(t);return e&&(i=i+"/"+encodeURIComponent(e)),this.$fhcApi.get(i)},getTeacherProposal(t,e){let i="api/frontend/v1/stv/grades/getTeacherProposal/"+encodeURIComponent(t);return e&&(i=i+"/"+encodeURIComponent(e)),this.$fhcApi.get(i)},getRepeaterGrades(t,e){let i="api/frontend/v1/stv/grades/getRepeaterGrades/"+encodeURIComponent(t);return e&&(i=i+"/"+encodeURIComponent(e)),this.$fhcApi.get(i)},updateCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,note:r,lehrveranstaltung_bezeichnung:n}){return this.$fhcApi.post("api/frontend/v1/stv/grades/updateCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,note:r},{errorHeader:n})},deleteCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,lehrveranstaltung_bezeichnung:r}){return this.$fhcApi.post("api/frontend/v1/stv/grades/deleteCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i},{errorHeader:r})},copyTeacherProposalToCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,lehrveranstaltung_bezeichnung:r}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyTeacherProposalToCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i},{errorHeader:r})},copyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id:t,lv_bezeichnung:e}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate",{studierendenantrag_lehrveranstaltung_id:t},{errorHeader:e})},getGradeFromPoints(t,e,i,r){const n=r?{errorHandling:!1}:{};return this.$fhcApi.post("api/frontend/v1/stv/grades/getGradeFromPoints",{points:t,lehrveranstaltung_id:e,studiensemester_kurzbz:i},n)}},mobility:{getMobilitaeten(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getMobilitaeten/"+i.id)},getProgramsMobility(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getProgramsMobility/")},addNewMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/insertMobility/",e)},loadMobility(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/loadMobility/"+t)},updateMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/updateMobility/",e)},deleteMobility(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobility/"+t)},getLVList(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLVList/"+t)},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/getAllLehreinheiten/",t)},getLvsandLesByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLvsandLesByStudent/"+t)},getPurposes(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getPurposes/"+i.id)},getSupports(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getSupports/"+i.id)},getListPurposes(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListPurposes/")},getListSupports(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListSupports/")},deleteMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilityPurpose/"+t.bisio_id,t)},addMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilityPurpose/"+t.bisio_id,t)},deleteMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilitySupport/"+t.bisio_id,t)},addMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilitySupport/"+t.bisio_id,t)}},archiv:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/archiv/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id)}),t.ajaxRequestFunc=(t,e,i)=>this.$fhcApi.post(t,i,e),t.ajaxResponse=(t,e,i)=>i.data,t},getArchivVorlagen(){return this.$fhcApi.post("api/frontend/v1/stv/archiv/getArchivVorlagen")},archive(t){return this.$fhcApi.post("api/frontend/v1/documents/archive",t)},archiveSigned(t){return this.$fhcApi.post("api/frontend/v1/documents/archiveSigned",t)},update(t){return this.$fhcApi.post("api/frontend/v1/stv/archiv/update",t)},delete({akte_id:t,studiengang_kz:e}){return this.$fhcApi.post("api/frontend/v1/stv/archiv/delete",{akte_id:t,studiengang_kz:e})}},documents:{getDocumentsUnaccepted(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/"+i.id+"/"+i.studiengang_kz)},getDocumentsAccepted(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsAccepted/"+i.id+"/"+i.studiengang_kz)},deleteZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},createZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/createZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},loadAkte(t){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/loadAkte/"+t)},getDoktypen(){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDoktypen/")},updateFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/updateAkte/"+t,e)},deleteFile(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteAkte/"+t)},uploadFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/uploadDokument/"+t,e)}},exemptions:{getAnrechnungen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getAnrechnungen/"+i.id)},getLehrveranstaltungen(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/"+t)},getBegruendungen(){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getBegruendungen/")},getLvsKompatibel(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLvsKompatibel/"+t)},getLektoren(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLektoren/"+t)},addNewAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/insertAnrechnung/",e)},loadAnrechnung(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/loadAnrechnung/"+t)},editAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/updateAnrechnung/",e)},deleteAnrechnung(t){return this.$fhcApi.post("api/frontend/v1/stv/anrechnungen/deleteAnrechnung/"+t)}},jointstudies:{getStudies(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudien/"+i.id)},getTypenMobility(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/")},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/")},getStudyprograms(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/")},getListPartner(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/")},getStatiPrestudent(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/")},loadStudy(t){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/loadStudie/"+t)},insertStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/insertStudie/",e)},updateStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/updateStudie/",e)},deleteStudy(t){return this.$fhcApi.post("api/frontend/v1/stv/GemeinsameStudien/deleteStudie/"+t)}},courselist:{getCourselist(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStundenplan/"+i.student_uid+"/"+i.start_date+"/"+i.end_date+"/"+i.group_consecutiveHours+"/"+i.dbStundenplanTable)},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStudiensemester/")}},configStudent(){return this.$fhcApi.get("api/frontend/v1/stv/config/student")},configStudents(){return this.$fhcApi.get("api/frontend/v1/stv/config/students")}},H={person:{getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getUid/")},addNewNotiz(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/addNewNotiz/"+e,i)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/updateNotiz/"+e,i)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getMitarbeiter/"+t)},isBerechtigt(t,e){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/isBerechtigt/")}}},B={person:{getAllBetriebsmittel(t,e,i){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/"+i.type+"/"+i.id)},addNewBetriebsmittel(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/"+e,i)},loadBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/"+t)},updateBetriebsmittel(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/"+e,i)},deleteBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/"+t)},getTypenBetriebsmittel(){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/")},loadInventarliste(t){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/"+t)}}},z={updatePersonUnrulyStatus(t,e){try{const i={person_id:t,unruly:e},r="/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus";return this.$fhcApi.post(r,i,null)}catch(t){throw t}},filterPerson(t,e=""){try{const i=e+"/api/frontend/v1/checkperson/CheckPerson/filterPerson";return axios.post(i,t)}catch(t){throw t}}},M={getContentID(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/ContentID",{ort_kurzbz:t})},getRooms(t,e,i,r,n=0){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getRooms",{datum:t,von:e,bis:i,typ:r,personenanzahl:n})},getRoomTypes(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getTypes")}},L={content(t,e=null,i=null,r=null){return this.$fhcApi.get("/api/frontend/v1/Cms/content",{content_id:t,...e?{version:e}:{},...i?{sprache:i}:{},...r?{sichtbar:r}:{}})},getNews(t=1,e=10,i){return this.$fhcApi.get("/api/frontend/v1/Cms/getNews",{page:t,page_size:e,sprache:i})},news(t){return this.$fhcApi.get("/api/frontend/v1/Cms/news",{limit:t})},getNewsRowCount:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getNewsRowCount",{})},getNewsExtra:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getStudiengangInfoForNews",{})}},J={getStudentenMail(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Lehre/lvStudentenMail",{lehreinheit_id:t})},getLvInfo(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/LV/${t}/${e}`,{})},getStudentPruefungen(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/Pruefungen/${t}`,{})},getStudentProjektarbeiten(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/getStudentProjektarbeiten/${t}`,{})},getStudentProjektabgaben(t){return this.$fhcApi.get("/api/frontend/v1/Lehre/getStudentProjektabgaben",{projektarbeit_id:t.projektarbeit_id,student_uid:t.student_uid})},postStudentProjektarbeitEndupload(t){return this.$fhcApi.post("/api/frontend/v1/Lehre/postStudentProjektarbeitEndupload",t,{Headers:{"Content-Type":"multipart/form-data"}})},postStudentProjektarbeitZwischenabgabe(t){return this.$fhcApi.post("/api/frontend/v1/Lehre/postStudentProjektarbeitZwischenabgabe",t,{Headers:{"Content-Type":"multipart/form-data"}})},getStudentProjektarbeitAbgabeFile(t,e){const i=`/Cis/Abgabetool/getStudentProjektarbeitAbgabeFile?paabgabe_id=${t}&student_uid=${e}`;window.location=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+i},getMitarbeiterProjektarbeiten(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/getMitarbeiterProjektarbeiten?showall=${e}`,{})},postProjektarbeitAbgabe(t){const e={paabgabe_id:t.paabgabe_id,paabgabetyp_kurzbz:t.bezeichnung.paabgabetyp_kurzbz,datum:t.datum,fixtermin:t.fixtermin,insertvon:t.insertvon,kurzbz:t.kurzbz,projektarbeit_id:t.projektarbeit_id};return this.$fhcApi.post("/api/frontend/v1/Lehre/postProjektarbeitAbgabe",e,null)},deleteProjektarbeitAbgabe(t){const e={paabgabe_id:t};return this.$fhcApi.post("/api/frontend/v1/Lehre/deleteProjektarbeitAbgabe",e,null)},postSerientermin(t,e,i,r,n){const s={datum:t,paabgabetyp_kurzbz:e,bezeichnung:i,kurzbz:r,projektarbeit_ids:n};return this.$fhcApi.post("/api/frontend/v1/Lehre/postSerientermin",s,null)},fetchDeadlines(t){const e={person_id:t};return this.$fhcApi.post("/api/frontend/v1/Lehre/fetchDeadlines",e,null)}},I={getLvMenu(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/LvMenu/getLvMenu/${t}/${e}`,{})}},j={person:{getMessages(t,e,i){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessages/"+i.id+"/"+i.type+"/"+i.size+"/"+i.page)},getVorlagen(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getVorlagen/")},getMsgVarsLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/")},getMessageVarsPerson(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessageVarsPerson/"+t.id+"/"+t.type_id)},getMsgVarsPrestudent(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsPrestudent/"+t.id+"/"+t.type_id)},getPersonId(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getPersonId/"+t.id+"/"+t.type_id)},getUid(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getUid/"+t.id+"/"+t.type_id)},getVorlagentext(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getVorlagentext/"+t)},getNameOfDefaultRecipient(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getNameOfDefaultRecipient/"+t.id+"/"+t.type_id)},getPreviewText(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/getPreviewText/"+t.id+"/"+t.type_id,e)},getReplyData(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getReplyData/"+t)},sendMessageFromModalContext(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/messages/messages/sendMessage/"+e,i)},sendMessage(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/sendMessage/"+t,e)},deleteMessage(t){return this.$fhcApi.post("api/frontend/v1/messages/messages/deleteMessage/"+t)}}},U={getVorlagen(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagen/")},getVorlagenByLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/")}},G={getStudiensemester:function(){return this.$fhcApi.get("/components/Cis/Mylv/Studiensemester",{})},getAllStudienSemester:function(t=void 0,e=void 0,i=void 0,r=void 0){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienAllSemester",{studiensemester:t,studiengang:e,semester:i,studienplan:r})},getStudiengaengeForStudienSemester:function(t){return this.$fhcApi.get(`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${t}`,{})},getStudienplaeneBySemester:function(t,e){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienplaeneBySemester",{studiengang:t,studiensemester:e})},getLvPlanForStudiensemester:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${t}/${e}`,{})},getLvEvaluierungInfo:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/Studium/getLvEvaluierungInfo/${t}/${e}`,{})}},N={search:C,phrasen:P,navigation:k,dashboard:{async getViewData(){return this.$fhcApi.get("/api/frontend/v1/Cis4FhcApi/getViewData",null,null)}},filter:T,studstatus:x,profil:O,profilUpdate:D,lvPlan:F,bookmark:{getBookmarks:function(){return this.$fhcApi.get("/api/frontend/v1/Bookmark/getBookmarks",{})},delete:function(t){return this.$fhcApi.get(`/api/frontend/v1/Bookmark/delete/${t}`,{})},update:function({bookmark_id:t,url:e,title:i,tag:r=null}){return this.$fhcApi.post(`/api/frontend/v1/Bookmark/update/${t}`,{url:e,title:i})},insert:function({url:t,title:e,tag:i}){return this.$fhcApi.post("/api/frontend/v1/Bookmark/insert",{url:t,title:e,tag:i})}},stv:R,notiz:H,betriebsmittel:B,checkperson:z,ampeln:{open:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/open",{})},all:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/all",{})},confirm:function(t){return this.$fhcApi.get(`/api/frontend/v1/Ampeln/confirm/${t}`,{})}},ort:M,cms:L,lehre:J,addons:I,messages:j,vorlagen:U,addons:I,studiengang:{studiengangInformation:function(){return this.$fhcApi.get("/api/frontend/v1/Studgang/getStudiengangInfo",{})},getStudiengangByKz:function(t){return this.$fhcApi.get("/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz",{studiengang_kz:t})}},menu:{getMenu:function(){return this.$fhcApi.get("/api/frontend/v1/CisMenu/getMenu",{})}},authinfo:{getAuthUID(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthUID",{})},getAuthInfo(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthInfo",{})}},studium:G,language:{getAll(){return this.$fhcApi.get("/api/frontend/v1/language/get")}}},W={install:(t,e)=>{if(t.config.globalProperties.$fhcApi)return void(e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory.addEndpoints(e.factory)));function i(t,e,i,r){if("string"==typeof t&&void 0===r)[e,i,r]=[t,e,i],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===i&&void 0===r&&(r=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},r?r.form=t:r={form:t}}return[e,i,r]}function r(t){const e=t.data;return delete t.data,e.meta?e.meta.response=t:e.meta={response:t},e}FHC_JS_DATA_STORAGE_OBJECT.app_root,FHC_JS_DATA_STORAGE_OBJECT.ci_router;const n=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});n.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,i])=>{if(i instanceof FileList)for(const r of i)t.FormData.append(e+(i.length>1?"[]":""),r);else Array.isArray(i)?i.every(t=>!(t instanceof File))?t.jsondata[e]=i:i.forEach(r=>t.FormData.append(e+(i.length>1?"[]":""),r)):t.jsondata[e]=i;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),n.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(i=>(e.config[i.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[i.type])(i,e.config))),r(e)),e=>"ERR_CANCELED"==e.code?Promise.reject({handled:!0,...e}):"off"==e.config?.errorHandling||!1===e.config?.errorHandling||"success"==e.config?.errorHandling?Promise.reject(e):e.response?404==e.response.status?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL,!0),Promise.reject({handled:!0,...e})):(e.response.data.errors=e.response.data.errors.filter(i=>(e.config[i.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[i.type])(i,e.config)),e.response.data.errors.length?Promise.reject(e):Promise.reject({handled:!0,...e})):e.request?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL),Promise.reject({handled:!0,...e})):(t.config.globalProperties.$fhcAlert.alertError(e.message),Promise.reject({handled:!0,...e}))),t.config.globalProperties.$fhcApi={getUri:t=>(console.warn("$fhcApi.getUri is DEPRECATED! Use $api.getUri instead."),n.getUri({url:t})),get:(t,e,r,s)=>(console.warn("$fhcApi.get is DEPRECATED! Use $api.get instead."),[e,r,s]=i(t,e,r,s),r&&(s?s.params=r:s={params:r}),n.get(e,s)),post:(t,e,r,s)=>(console.warn("$fhcApi.post is DEPRECATED! Use $api.post instead."),[e,r,s]=i(t,e,r,s),n.post(e,r,s)),_defaultErrorHandlers:{validation(e,i){const r=t.config.globalProperties.$fhcAlert;return i?.form?(i.form.clearValidation(),i.form.setFeedback(!1,e.messages),!1):Array.isArray(e.messages)?(e.messages.forEach(r.alertError),!1):"object"!=typeof e.messages||(i?.errorHeader?Object.values(e.messages).forEach(e=>r.alertDefault("error",Array.isArray(i.errorHeader)?t.config.globalProperties.$p.t.apply(null,i.errorHeader):i.errorHeader,e,!0)):Object.entries(e.messages).forEach(([t,e])=>r.alertDefault("error",t,e,!0)),!1)},general(e,i){const r=t.config.globalProperties.$fhcAlert;i?.form?i.form.setFeedback(!1,e.message):i?.errorHeader?r.alertDefault("error",Array.isArray(i.errorHeader)?t.config.globalProperties.$p.t.apply(null,i.errorHeader):i.errorHeader,e.message,!0):r.alertError(e.message)},php(e){const i=t.config.globalProperties.$fhcAlert;var r="";switch(r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":i.alertDefault("warn","PHP "+e.severity,r,!0);break;case"Notice":case"User Notice":case"Runtime Notice":i.alertDefault("info","PHP "+e.severity,r,!0);break;default:r="Type: PHP "+e.severity+"\n\n"+r,i.alertSystemError(r)}},exception(e){const i=t.config.globalProperties.$fhcAlert;var r="";r+="Type: "+e.class+"\n\n",r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),i.alertSystemError(r)},db(e){const i=t.config.globalProperties.$fhcAlert;var r="";void 0!==e.heading&&(r+=e.heading+"\n\n"),void 0!==e.code&&(r+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(r+="SQL: "+e.sql+"\n\n"),void 0!==e.message?r+="Message: "+e.message+"\n\n":void 0!==e.messages&&(r+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(r+="Filename: "+e.filename+"\n"),void 0!==e.line&&(r+="Line Number: "+e.line+"\n"),i.alertSystemError(r)},auth(e,i){const r=t.config.globalProperties.$fhcAlert;var n="";n+="Controller name: "+e.controller+"\n",n+="Method name: "+e.method+"\n",n+="Required permissions: "+e.required_permissions,i?.errorHeader?r.alertDefault("error",Array.isArray(i.errorHeader)?t.config.globalProperties.$p.t.apply(null,i.errorHeader):i.errorHeader,e.message,!0):r.alertDefault("error",e.message,n)}}};class s{constructor(e,i){void 0===i?(this.$fhcApi={getUri:e=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.getUri(e)),get:(e,i,r,n)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.get(e,i,r,n)),post:(e,i,r,n)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.post(e,i,r,n))},Object.defineProperty(this.$fhcApi,"factory",{get:()=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory)}),t.config.globalProperties.$fhcApi.factory=this):Object.defineProperty(this,"$fhcApi",{get(){return(i||this).$fhcApi}}),this.addEndpoints(e,!0)}addEndpoints(t,e){Object.keys(t).forEach(e=>{Object.defineProperty(this,e,{get(){return"function"==typeof t[e]?t[e].bind(this):new s(t[e],this.$fhcApi.factory)}})}),e||console.warn("$fhcApi.factory.addEndpoints() is DEPRECATED!")}}const a=new s(N);e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),a.addEndpoints(e.factory)),t.config.globalProperties.$fhcApi.factory=a,t.provide("$fhcApi",t.config.globalProperties.$fhcApi)}},V={install:(t,e)=>{if(t.config.globalProperties.$api)return;function i(t,e){Array.isArray(t)?t.forEach(e):Object.entries(t).forEach(([t,i])=>i.forEach(i=>e(i,t)))}t.config.globalProperties.$fhcAlert||t.use(dt);let r={success:!0,fail:!0,combine:{form:["validation","general"],toast:["validation","general","not_found","site_failed"]},handler:{form(t,e){t.clearValidation(),e.forEach(e=>t.setFeedback(!1,e.messages||e.message))},async toast(e){const i=t.config.globalProperties.$p;if(!i)return Promise.reject("Phrasen plugin not loaded!");async function r(t){t=t.reduce((t,e)=>{switch(e.type){case"not_found":case"site_failed":e.message?t[e.message]=[e.url]:t._default=[e.url];break;case"general":t._default||(t._default=[]),t._default.push(e.message);break;case"validation":Object.entries(e.messages).forEach(([e,i])=>{t[e]||(t[e]=[]),Array.isArray(i)?t[e].push(...i):t[e].push(i)})}return t},{});let e=0;const r=await Promise.all(Object.entries(t).sort((t,e)=>["_default"].indexOf(e[0])-["_default"].indexOf(t[0])).map(async([t,r])=>{if("_default"==t){await i.loadCategory("dashboard");t='
    '+i.t("dashboard/general")+"
    "}else t="
    "+t+"
    ";return e+=r.length,t+"
    "+r.join("
    ")+"
    "}));return{counter:e,msgs:r}}let n,s;Array.isArray(e)?({counter:n,msgs:s}=await r(e)):({counter:n,msgs:s}=await Object.entries(e).reduce(async(t,[e,i])=>{const n=await t,{counter:s,msgs:a}=await r(i);return n.counter+=s,n.msgs.push("
    "+e+"
    "+a.join("")+"
    "),n},Promise.resolve({counter:0,msgs:[]}))),await i.loadCategory("ui");const a=i.t("ui/n_errors",{n:n});t.config.globalProperties.$fhcAlert.alertDefault("error",a,"
    "+s.join("")+"
    ",!0,!0)},php(e){i(e,(e,i)=>{var r="";switch(r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":i?i+=": PHP "+e.severity:i="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("warn",i,r,!0);break;case"Notice":case"User Notice":case"Runtime Notice":i?i+=": PHP "+e.severity:i="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("info",i,r,!0);break;default:r="Type: PHP "+e.severity+"\n\n"+r,i&&(r=i+"\n\n"+r),t.config.globalProperties.$fhcAlert.alertSystemError(r)}})},exception(e){i(e,(e,i)=>{var r="";i&&(r+=i+"\n\n"),r+="Type: "+e.class+"\n\n",r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),t.config.globalProperties.$fhcAlert.alertSystemError(r)})},db(e){i(e,(e,i)=>{var r="";i&&(r+=i+"\n\n"),void 0!==e.heading&&(r+=e.heading+"\n\n"),void 0!==e.code&&(r+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(r+="SQL: "+e.sql+"\n\n"),void 0!==e.message?r+="Message: "+e.message+"\n\n":void 0!==e.messages&&(r+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(r+="Filename: "+e.filename+"\n"),void 0!==e.line&&(r+="Line Number: "+e.line+"\n"),t.config.globalProperties.$fhcAlert.alertSystemError(r)})},auth(e){i(e,(e,i)=>{i?i+=": "+e.message:i=e.message;var r="";r+="Controller name: "+e.controller+"\n",r+="Method name: "+e.method+"\n",r+="Required permissions: "+e.required_permissions,t.config.globalProperties.$fhcAlert.alertDefault("error",i,r,!0)})}}};function n(t,e,i,r){if("string"==typeof t&&void 0===r)[e,i,r]=[t,e,i],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===i&&void 0===r&&(r=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},r?r.form=t:r={form:t}}return[e,i,r]}function s(t){if("string"==typeof t.data||t.data instanceof String)return s({data:t});const e=t.data;return delete t.data,e?(e.meta?e.meta.response=t:e.meta={response:t},e):{meta:{response:t},data:null}}function a(t){if(!1===t||"off"===t)return{...r,success:!1,fail:!1};if(!t||!0===t)return{...r};if("success"===t)return{...r,fail:!1};if("fail"===t)return{...r,success:!1};const{success:e,fail:i,handler:n,combine:s}=t;return t={...r},Object.entries({fail:i,success:e}).forEach(([e,i])=>{void 0!==i&&(t[e]=i)}),Object.entries({handler:n,combine:s}).forEach(([e,i])=>{void 0!==i&&(t[e]={...t[e],...i})}),t}function o(t){const e=a(t?.errorHandling);if(t?.form){const i=e.handler.form;e.handler={...e.handler,form:e=>i(t.form,e)}}else e.combine={...e.combine,form:[]};return e}function d(t){return t.response?404==t.response.status?[{type:"not_found",message:t.message,url:t.request.responseURL}]:null==t.response.data.errors?[]:t.response.data.errors:t.request?[{type:"site_failed",message:t.message,url:t.request.responseURL}]:[{type:"script",message:t.message}]}function l(t,e){const i={},r=[];if(null==e)return{};for(;e.length;)r.push(e.pop());for(var n of r){let r=n.type,a=null;for(var s in t.combine){let e=t.combine[s].includes(r),i=t.handler[s];if(e&&i&&(a=s,"form"==a))break}a&&(r=a);t.handler[r]?(i[r]||(i[r]=[]),Array.isArray(n)?i[r].push(...n):i[r].push(n)):e.push(n)}return i}void 0!==e?.errorHandling&&(r=a(e.errorHandling));const c=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});c.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,i])=>{if(i instanceof FileList)for(const r of i)t.FormData.append(e+(i.length>1?"[]":""),r);else Array.isArray(i)?i.every(t=>!(t instanceof File))?t.jsondata[e]=i:i.forEach(r=>t.FormData.append(e+(i.length>1?"[]":""),r)):t.jsondata[e]=i;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),c.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(i=>(e.config[i.type+"ErrorHandler"]||t.config.globalProperties.$api._defaultErrorHandlers[i.type])(i,e.config))),s(e)),t=>{if("ERR_CANCELED"==t.code)return Promise.reject({handled:!0,...t});const e=o(t.config);if(!e.fail)return Promise.reject(t);const i=d(t),r=l(e,i);for(var n in r)e.handler[n](r[n]);return i.length?Promise.reject(t):Promise.reject({handled:!0,...t})}),t.config.globalProperties.$api={getUri:t=>c.getUri({url:t}),get:(t,e,i,r)=>([e,i,r]=n(t,e,i,r),i&&(r?r.params=i:r={params:i}),c.get(e,r)),post:(t,e,i,r)=>([e,i,r]=n(t,e,i,r),c.post(e,i,r)),call(e,i,r){if(Array.isArray(e)){const s=t.config.globalProperties.$api;return Promise.allSettled(e.map((t,e)=>(Array.isArray(t)||(t=["#"+e,t]),s.call(t[1],{errorHeader:t[0],errorHandling:!1})))).then(t=>{const[,,e]=n(r,void 0,void 0,i||{}),s=o(e);if(!s.success&&!s.fail)return t;const a={};for(var c of t){const[t,e]="fulfilled"===c.status?[s.success,c.value]:[s.fail,c.reason];if(!t)return;const i=l(s,d(e));for(var p in i)a[p]?a[p][e.config.errorHeader]=i[p]:a[p]={[e.config.errorHeader]:i[p]}}for(var h in a)s.handler[h](a[h]);return t})}let{method:s,url:a,params:c,config:p}=e;return void 0!==i&&(p=i),s||(s="get"),s.toLowerCase&&(s=s.toLowerCase()),"get"==s?this.get(r,a,c,p):"post"==s?this.post(r,a,c,p):void console.error("FhcApi: method not allowed:",s)}},t.provide("$api",t.config.globalProperties.$api)}},q={loadCategory:t=>({method:"get",url:"/api/frontend/v1/phrasen/loadModule/"+t}),setLanguage:(t,e)=>({method:"post",url:"/api/frontend/v1/phrasen/setLanguage",params:{categories:t,language:e}}),getLanguage:()=>({method:"get",url:"/api/frontend/v1/phrasen/getLanguage"}),getActiveDbLanguages:()=>({method:"get",url:"/api/frontend/v1/phrasen/getAllLanguages"})};const Z=Vue.reactive({}),K={};let Y=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language),X=Vue.computed(()=>Y.value?FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(t=>t.sprache==Y.value).LC_Time:null);const Q={user_language:Y,user_locale:X,setLanguage(t){const e=Object.keys(Z);return this.config.globalProperties.$api.call(q.setLanguage(e,t)).then(e=>(e.data.forEach(t=>{Z[t.category][t.phrase]=t.text}),Y.value=t,e))},loadCategory(t){return Array.isArray(t)?Promise.all(t.map(this.config.globalProperties.$p.loadCategory)):(K[t]||(K[t]=this.config.globalProperties.$api.call(q.loadCategory(t)).then(e=>e?.data?function(t,e){return t.filter(t=>t.category==e).reduce((t,e)=>(t[e.phrase]||(t[e.phrase]=e.text),t),{})}(e.data,t):{}).then(e=>{Z[t]=e})),K[t])},t_ref(t,e,i){return console.warn("deprecated"),Vue.computed(()=>this.t(t,e,i))},t(t,e,i){if(void 0===i&&(Array.isArray(t)&&2==t.length||t.split&&2==t.split("/").length)&&(i=e,[t,e]=t.split?t.split("/"):t),void 0===e)return console.error("invalid input",t,e,i),"";let r=Vue.computed(()=>Z[t]?function(t,e,i){let r=Z[t][e];return r?(i&&(r=r.replace(/\{([^}]*)\}/g,(t,e)=>void 0===i[e]?t:i[e])),r):"<< PHRASE "+e+">>"}(t,e,i):"");return Z[t]||this.loadCategory(t),r.value}};var tt={install(t,e){t.config.globalProperties.$fhcApi||t.use(W),t.config.globalProperties.$api||t.use(V),t.config.globalProperties.$p={t:Q.t,loadCategory:e=>Q.loadCategory.call(t,e),setLanguage:e=>Q.setLanguage.call(t,e),user_language:Y,user_locale:X,t_ref:Q.t_ref},t.provide("$p",t.config.globalProperties.$p)}},et=Object.freeze({__proto__:null,default:tt,user_locale:X});const it="error",rt="retval",nt={get:function(t,e,i=null){return nt._axiosCall(t,e,"get",i)},post:function(t,e,i=null){return nt._axiosCall(t,e,"post",i)},isSuccess:function(t){return!("object"!=typeof t||!t.hasOwnProperty(it)||!t.hasOwnProperty(rt)||0!=t.error)},isError:function(t){return!nt.isSuccess(t)},hasData:function(t){return!(!nt.isSuccess(t)||!("object"==typeof t[rt]&&Object.keys(t[rt]).length>0||"array"==typeof t[rt]&&t[rt].length>0||"string"==typeof t[rt]&&""!=t[rt].trim()||"number"==typeof t[rt]))},getData:function(t){return nt.hasData(t)?t[rt]:null},getError:function(t){return"object"==typeof t&&Object.keys(t).length>0&&t.hasOwnProperty(rt)?t[rt]:"Generic error"},getErrorCode:function(t){return"object"==typeof t&&t.hasOwnProperty(it)?t[it]:1},_generateRouterURI:function(t){var e=null;return"undefined"!=typeof FHC_JS_DATA_STORAGE_OBJECT&&(e=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"+t),e},_printDebug:function(t,e,i){},_axiosCall:function(t,e,i,r){let n={method:i,url:nt._generateRouterURI(t),timeout:5e3};if("get"==i?n.params=e:n.data=e,"object"==typeof r)for(var s in r)n[s]=r[s];return axios(n)}},st=document.createElement("div"),at=Vue.createApp({name:"FhcAlertApp",components:{PvToast:e,PvConfirm:i},methods:{mailToUrl:t=>"mailto:"+FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto+"?subject=Meldung%20Systemfehler&body="+("\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method+"%0D%0A\n\t\t\t\tFehler Meldung: "+t.message.detail+"%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!"),openMessagecard(t){bootstrap.Collapse.getOrCreateInstance(t.target.getAttribute("href")).toggle()}},unmounted(){st.parentElement.removeChild(st)},computed:{showmaillink:function(){return""!==FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto}},template:'\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t'});at.use(t),at.use(r);const ot=at.mount(st);document.body.appendChild(st);var dt={install:(t,e)=>{t.config.globalProperties.$p||t.use(tt);const i={alertSuccess(t){if(Array.isArray(t))return t.forEach(this.alertSuccess);ot.$refs.toast.add({severity:"success",summary:"Info",detail:t,life:1e3})},alertInfo(t){if(Array.isArray(t))return t.forEach(this.alertInfo);ot.$refs.toast.add({severity:"info",summary:"Info",detail:t,life:3e3})},alertWarning(t){if(Array.isArray(t))return t.forEach(this.alertWarning);ot.$refs.toast.add({severity:"warn",summary:"Achtung",detail:t})},alertError(t){if(Array.isArray(t))return t.forEach(this.alertError);ot.$refs.toast.add({severity:"error",summary:"Achtung",detail:t})},alertSystemError(e){if(Array.isArray(e))return e.forEach(this.alertSystemError);ot.$refs.alert.add({severity:"error",summary:Vue.computed(()=>t.config.globalProperties.$p.t("alert/systemerror")),detail:e})},confirmDelete:()=>new Promise((e,i)=>{ot.$confirm.require({group:"fhcAlertConfirm",header:Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:Vue.computed(()=>t.config.globalProperties.$p.t("alert/confirm_delete")),acceptLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/loeschen")),acceptClass:"p-button-danger",rejectLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:"p-button-secondary",accept(){e(!0)},reject(){e(!1)}})}),confirm:e=>new Promise((i,r)=>{ot.$confirm.require({group:e?.group??"fhcAlertConfirm",header:e?.header??Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:e?.message??"",acceptLabel:e?.acceptLabel??"Ok",acceptClass:e?.acceptClass??"btn btn-primary",rejectLabel:e?.rejectLabel??Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:e?.rejectClass??"btn btn-outline-secondary",accept(){i(!0)},reject(){i(!1)}})}),alertDefault(t,e,i,r=!1,n=!1){let s={severity:t,summary:e,detail:i,html:n};r||(s.life=3e3),ot.$refs.toast.add(s)},alertMultiple(t,e="info",i="Info",r=!1,n=!1){return!!t.every(t=>"string"==typeof t)&&(t.forEach(t=>this.alertDefault(e,i,t,r,n)),!0)},handleSystemError(t){if(!t.hasOwnProperty("name")||t.name.toLowerCase()!=="AbortError".toLowerCase()){if("string"==typeof t)return i.alertSystemError(t);if(Array.isArray(t)&&t.every(t=>"string"==typeof t))return t.every(i.alertSystemError);if(!t.hasOwnProperty("handled")||!t.handled){if("object"==typeof t&&null!==t){let e="";return t.hasOwnProperty("response")&&t.response?.data?.retval?e+="Error Message: "+(t.response.data.retval.message||t.response.data.retval)+"\r\n":t.hasOwnProperty("message")&&(e+="Error Message: "+t.message.toUpperCase()+"\r\n"),t.hasOwnProperty("config")&&t.config.hasOwnProperty("url")&&(e+="Error ConfigURL: "+t.config.url+"\r\n"),t.hasOwnProperty("stack")&&(e+="Error Stack: "+t.stack+"\r\n"),""==e&&(e="Error Message: "+JSON.stringify(t)+"\r\n"),e+="Error Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,i.alertSystemError(e)}i.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method)}}},handleSystemMessage(t){if("string"==typeof t)return i.alertWarning(t);if(Array.isArray(t)){if(t.every(t=>"string"==typeof t))return t.every(i.alertWarning);if(t.every(t=>"object"==typeof t)&&null!==msg)return t.every(t=>{t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?i.alertWarning(JSON.stringify(t.data.retval)):i.alertSystemError(JSON.stringify(t))})}"object"!=typeof t||null===t?i.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method):t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?i.alertWarning(JSON.stringify(t.data.retval)):i.alertSystemError(JSON.stringify(t))},resetFormValidation(t){const e=new Event("fhc-form-reset");t.querySelectorAll(["[data-fhc-form-validate],[data-fhc-form-error]"]).forEach(t=>t.dispatchEvent(e))},handleFormValidation(t,e){if(void 0===e){if(t&&t.nodeType===Node.ELEMENT_NODE)return e=>i.handleFormValidation(e,t)}else if(400==t?.response?.status){let r=nt.getError(t.response.data);"object"!=typeof r&&(r=t.response.data),i.resetFormValidation(e);const n=Object.entries(r).filter(([t,i])=>{const r=e.querySelector('[data-fhc-form-validate="'+t+'"]');return!r||(r.dispatchEvent(new CustomEvent("fhc-form-invalidate",{detail:i})),!1)}).map(t=>t[1]),s=e.querySelector("[data-fhc-form-error]");return void(s&&n.length?s.dispatchEvent(new CustomEvent("fhc-form-error",{detail:n})):n.forEach(i.alertError))}if(400==t?.response?.status){let e=nt.getError(t.response.data);i.alertError("object"==typeof e?Object.values(e):e)}else i.handleSystemError(t)}};t.config.globalProperties.$fhcAlert=i,t.provide("$fhcAlert",t.config.globalProperties.$fhcAlert)}};console.warn("plugin/FhcApi.js is DEPRECATED! Use plugins/Api.js instead.");var lt={install:(t,e)=>{if(t.config.globalProperties.$fhcApi)return void(e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory.addEndpoints(e.factory)));function i(t,e,i,r){if("string"==typeof t&&void 0===r)[e,i,r]=[t,e,i],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===i&&void 0===r&&(r=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},r?r.form=t:r={form:t}}return[e,i,r]}function r(t){const e=t.data;return delete t.data,e?(e.meta?e.meta.response=t:e.meta={response:t},e):{meta:{response:t},data:null}}t.use(dt),t.use(V),FHC_JS_DATA_STORAGE_OBJECT.app_root,FHC_JS_DATA_STORAGE_OBJECT.ci_router;const n=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});n.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,i])=>{if(i instanceof FileList)for(const r of i)t.FormData.append(e+(i.length>1?"[]":""),r);else Array.isArray(i)?i.every(t=>!(t instanceof File))?t.jsondata[e]=i:i.forEach(r=>t.FormData.append(e+(i.length>1?"[]":""),r)):t.jsondata[e]=i;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),n.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(i=>(e.config[i.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[i.type])(i,e.config))),r(e)),e=>"ERR_CANCELED"==e.code?Promise.reject({handled:!0,...e}):"off"==e.config?.errorHandling||!1===e.config?.errorHandling||"success"==e.config?.errorHandling?Promise.reject(e):e.response?404==e.response.status?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL,!0),Promise.reject({handled:!0,...e})):(e.response.data.errors=e.response.data.errors.filter(i=>(e.config[i.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[i.type])(i,e.config)),e.response.data.errors.length?Promise.reject(e):Promise.reject({handled:!0,...e})):e.request?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL),Promise.reject({handled:!0,...e})):(t.config.globalProperties.$fhcAlert.alertError(e.message),Promise.reject({handled:!0,...e}))),t.config.globalProperties.$fhcApi={getUri:t=>n.getUri({url:t}),get:(t,e,r,s)=>([e,r,s]=i(t,e,r,s),r&&(s?s.params=r:s={params:r}),n.get(e,s)),post:(t,e,r,s)=>([e,r,s]=i(t,e,r,s),n.post(e,r,s)),_defaultErrorHandlers:{validation(e,i){const r=t.config.globalProperties.$fhcAlert;return i?.form?(i.form.clearValidation(),i.form.setFeedback(!1,e.messages),!1):Array.isArray(e.messages)?(e.messages.forEach(r.alertError),!1):"object"!=typeof e.messages||(i?.errorHeader?Object.values(e.messages).forEach(e=>r.alertDefault("error",Array.isArray(i.errorHeader)?t.config.globalProperties.$p.t.apply(null,i.errorHeader):i.errorHeader,e,!0)):Object.entries(e.messages).forEach(([t,e])=>r.alertDefault("error",t,e,!0)),!1)},general(e,i){const r=t.config.globalProperties.$fhcAlert;i?.form?i.form.setFeedback(!1,e.message):i?.errorHeader?r.alertDefault("error",Array.isArray(i.errorHeader)?t.config.globalProperties.$p.t.apply(null,i.errorHeader):i.errorHeader,e.message,!0):r.alertError(e.message)},php(e){const i=t.config.globalProperties.$fhcAlert;var r="";switch(r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":i.alertDefault("warn","PHP "+e.severity,r,!0);break;case"Notice":case"User Notice":case"Runtime Notice":i.alertDefault("info","PHP "+e.severity,r,!0);break;default:r="Type: PHP "+e.severity+"\n\n"+r,i.alertSystemError(r)}},exception(e){const i=t.config.globalProperties.$fhcAlert;var r="";r+="Type: "+e.class+"\n\n",r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),i.alertSystemError(r)},db(e){const i=t.config.globalProperties.$fhcAlert;var r="";void 0!==e.heading&&(r+=e.heading+"\n\n"),void 0!==e.code&&(r+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(r+="SQL: "+e.sql+"\n\n"),void 0!==e.message?r+="Message: "+e.message+"\n\n":void 0!==e.messages&&(r+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(r+="Filename: "+e.filename+"\n"),void 0!==e.line&&(r+="Line Number: "+e.line+"\n"),i.alertSystemError(r)},auth(e,i){const r=t.config.globalProperties.$fhcAlert;var n="";n+="Controller name: "+e.controller+"\n",n+="Method name: "+e.method+"\n",n+="Required permissions: "+e.required_permissions,i?.errorHeader?r.alertDefault("error",Array.isArray(i.errorHeader)?t.config.globalProperties.$p.t.apply(null,i.errorHeader):i.errorHeader,e.message,!0):r.alertDefault("error",e.message,n)}}};class s{constructor(e,i){void 0===i?(this.$fhcApi={getUri:e=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.getUri(e)),get:(e,i,r,n)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.get(e,i,r,n)),post:(e,i,r,n)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.post(e,i,r,n))},Object.defineProperty(this.$fhcApi,"factory",{get:()=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory)}),t.config.globalProperties.$fhcApi.factory=this):Object.defineProperty(this,"$fhcApi",{get(){return(i||this).$fhcApi}}),this.addEndpoints(e)}addEndpoints(t){Object.keys(t).forEach(e=>{Object.defineProperty(this,e,{get(){return"function"==typeof t[e]?t[e].bind(this):new s(t[e],this.$fhcApi.factory)}})}),console.warn("$fhcApi.factory.addEndpoints() is DEPRECATED!")}}const a=new s(N);e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),a.addEndpoints(e.factory)),t.config.globalProperties.$fhcApi.factory=a,t.provide("$fhcApi",t.config.globalProperties.$fhcApi)}};console.warn("plugin/Phrasen.js is DEPRECATED! Use plugins/Phrasen.js instead.");const ct=Vue.reactive({}),pt={};let ht=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language),ut=Vue.computed(()=>ht.value?FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(t=>t.sprache==ht.value).LC_Time:null);const gt={user_language:ht,user_locale:ut,setLanguage(t){const e=Object.keys(ct);return this.config.globalProperties.$api.call(q.setLanguage(e,t)).then(e=>(e.data.forEach(t=>{ct[t.category][t.phrase]=t.text}),ht.value=t,e))},loadCategory(t){return Array.isArray(t)?Promise.all(t.map(this.config.globalProperties.$p.loadCategory)):(this.config.globalProperties.$fhcApi,this.config.globalProperties.$fhcApiFactory,pt[t]||(pt[t]=this.config.globalProperties.$api.call(q.loadCategory(t)).then(e=>e?.data?function(t,e){return t.filter(t=>t.category==e).reduce((t,e)=>(t[e.phrase]||(t[e.phrase]=e.text),t),{})}(e.data,t):{}).then(e=>{ct[t]=e})),pt[t])},t_ref(t,e,i){return console.warn("deprecated"),Vue.computed(()=>this.t(t,e,i))},t(t,e,i){if(void 0===i&&(Array.isArray(t)&&2==t.length||t.split&&2==t.split("/").length)&&(i=e,[t,e]=t.split?t.split("/"):t),void 0===e)return console.error("invalid input",t,e,i),"";let r=Vue.computed(()=>ct[t]?function(t,e,i){let r=ct[t][e];return r?(i&&(r=r.replace(/\{([^}]*)\}/g,(t,e)=>void 0===i[e]?t:i[e])),r):"<< PHRASE "+e+">>"}(t,e,i):"");return ct[t]||this.loadCategory(t),r.value}};var ft={install(t,e){t.use(lt,e?.fhcApi||void 0),t.config.globalProperties.$p={t:gt.t,loadCategory:e=>gt.loadCategory.call(t,e),setLanguage:e=>gt.setLanguage.call(t,e),user_language:ht,user_locale:ut,t_ref:gt.t_ref},t.provide("$p",t.config.globalProperties.$p)}};Vue.createApp({name:"DashboardAdminApp",data:()=>({appSideMenuEntries:{}}),components:{CoreNavigationCmpt:a,DashboardAdmin:S},mounted(){}}).use(ft).mount("#main"); +getStatus:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getStatus",{})},getTopic:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getTopic",{})},acceptProfilRequest:function({profil_update_id:t,uid:e,status_message:i,topic:r,requested_change:n}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/acceptProfilRequest",{profil_update_id:t,uid:e,status_message:i,topic:r,requested_change:n})},denyProfilRequest:function({profil_update_id:t,uid:e,topic:i,status_message:r}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/denyProfilRequest",{profil_update_id:t,uid:e,topic:i,status_message:r})},insertFile:function(t,e=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/insertFile/${e}`,t)},getProfilRequestFiles:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${t}`,{})},selectProfilRequest:function(t=null,e=null){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/selectProfilRequest",{...t?{uid:t}:{},...e?{id:e}:{}})},insertProfilRequest:function(t,e,i=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/insertProfilRequest",{topic:t,payload:e,...i?{fileID:i}:{}})},updateProfilRequest:function(t,e,i,r=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/updateProfilRequest",{topic:t,payload:e,ID:i,...r?{fileID:r}:{}})},deleteProfilRequest:function(t){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/deleteProfilRequest",{requestID:t})}},F={getRoomInfo(t,e,i){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getRoomplan",{ort_kurzbz:t,start_date:e,end_date:i})},getStunden(){return this.$fhcApi.get("/api/frontend/v1/LvPlan/Stunden",{})},getOrtReservierungen(t,e,i){return this.$fhcApi.post(`/api/frontend/v1/LvPlan/getReservierungen/${t}`,{start_date:e,end_date:i})},getLvPlanReservierungen(t,e){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getReservierungen",{start_date:t,end_date:e})},getLehreinheitStudiensemester(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${t}`,{})},studiensemesterDateInterval(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${t}`,{})},LvPlanEvents(t,e,i){return this.$fhcApi.get("/api/frontend/v1/LvPlan/LvPlanEvents",{start_date:t,end_date:e,lv_id:i})}},R={verband:{get(){return this.$fhcApi.get("api/frontend/v1/stv/verband")},favorites:{get(){return this.$fhcApi.get("api/frontend/v1/stv/favorites")},set(t){return this.$fhcApi.post("api/frontend/v1/stv/favorites/set",{favorites:t})}}},students:{uid(t,e){let i="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/uid/"+encodeURIComponent(t);return this.$fhcApi.getUri(i)},prestudent(t,e){let i="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/prestudent/"+encodeURIComponent(t);return this.$fhcApi.getUri(i)},person(t,e){let i="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/person/"+encodeURIComponent(t);return this.$fhcApi.getUri(i)},verband(t){return this.$fhcApi.getUri("api/frontend/v1/stv/students/"+t)}},filter:{getStg(){return this.$fhcApi.get("api/frontend/v1/stv/filter/getStg")},setStg(t){return this.$fhcApi.post("api/frontend/v1/stv/filter/setStg",{studiengang_kz:t})}},konto:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/konto/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id),only_open:e.filter,studiengang_kz:e.studiengang_kz_intern?e.stg_kz:""}),t.ajaxRequestFunc=(t,e,i)=>this.$fhcApi.post(t,i,e),t.ajaxResponse=(t,e,i)=>i.data,t},checkDoubles(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/checkDoubles",e,{confirmErrorHandler:t=>!0})},insert(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/insert",e)},counter(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/counter",t)},edit(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/update",e)},delete(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/delete",{buchungsnr:t})},getBuchungstypen(){return this.$fhcApi.get("api/frontend/v1/stv/konto/getBuchungstypen")}},group:{getGruppen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/Gruppen/getGruppen/"+i.id)},deleteGroup(t){return this.$fhcApi.post("api/frontend/v1/stv/Gruppen/deleteGruppe/",t)}},kontakt:{getAdressen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressen/"+i.id)},addNewAddress(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewAddress/"+e,i)},loadAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadAddress/",{address_id:t})},updateAddress(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateAddress/"+e,i)},deleteAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteAddress/",{address_id:t})},getPlaces(t){return this.$fhcApi.get("api/frontend/v1/stv/address/getPlaces/"+t)},getFirmen(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getFirmen/"+t)},getNations(){return this.$fhcApi.get("api/frontend/v1/stv/address/getNations/")},getAdressentypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressentypen/")},getBankverbindung(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getBankverbindung/"+i.id)},addNewBankverbindung(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewBankverbindung/"+e,i)},loadBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadBankverbindung/",{bankverbindung_id:t})},updateBankverbindung(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateBankverbindung/"+e,i)},deleteBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteBankverbindung/",{bankverbindung_id:t})},getKontakte(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakte/"+i.id)},addNewContact(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewContact/"+e,i)},loadContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadContact/",{kontakt_id:t})},updateContact(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateContact/"+e,i)},deleteContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteContact/",{kontakt_id:t})},getStandorteByFirma(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getStandorteByFirma/"+t)},getKontakttypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakttypen/")}},prestudent:{get(t,e){return this.$fhcApi.post("api/frontend/v1/stv/prestudent/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e))},updatePrestudent(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/prestudent/updatePrestudent/"+e,i)},getBezeichnungZGV(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungZGV/")},getBezeichnungMZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungMZgv/")},getBezeichnungDZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungDZgv/")},getStgs(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStgs/")},getAusbildung(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAusbildung/")},getAufmerksamdurch(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAufmerksamdurch/")},getBerufstaetigkeit(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBerufstaetigkeit/")},getTypenStg(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getTypenStg/")},getBisstandort(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBisstandort/")},getHistoryPrestudent(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/status/getHistoryPrestudent/"+i.id)},getMaxSem(t){return this.$fhcApi.post("api/frontend/v1/stv/status/getMaxSemester/",{studiengang_kzs:t})},advanceStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/advanceStatus/"+t+"/"+e+"/"+i+"/"+r)},confirmStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/confirmStatus/"+t+"/"+e+"/"+i+"/"+r)},isLastStatus(t){return this.$fhcApi.get("api/frontend/v1/stv/status/isLastStatus/"+t)},deleteStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/deleteStatus/"+t+"/"+e+"/"+i+"/"+r)},getLastBismeldestichtag(){return this.$fhcApi.get("api/frontend/v1/stv/status/getLastBismeldestichtag/")},getHistoryPrestudents(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getHistoryPrestudents/"+i.id)}},status:{insertStatus(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/insertStatus/"+e,i)},loadStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/loadStatus/"+t+"/"+e+"/"+i+"/"+r)},updateStatus(t,{prestudent_id:e,status_kurzbz:i,studiensemester_kurzbz:r,ausbildungssemester:n},s){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/updateStatus/"+e+"/"+i+"/"+r+"/"+n,s)},getStudienplaene(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudienplaene/"+t)},getStudiengang(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudiengang/"+t)},getStatusgruende(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusgruende/")},getStati(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStati/")},addStudent(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/addStudent/"+t,e,{errorHeader:t})},changeStatus(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/changeStatus/"+t,e,{errorHeader:t})},getStatusarray(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusarray/")}},details:{get(t,e){let i="api/frontend/v1/stv/student/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e);return this.$fhcApi.post(i)},save(t,e,i,r){let n="api/frontend/v1/stv/student/save/"+encodeURIComponent(e)+"/"+encodeURIComponent(i);return this.$fhcApi.post(t,n,r)}},exam:{getPruefungen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getPruefungen/"+i.id)},loadPruefung(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/loadPruefung/"+t)},getTypenPruefungen(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getTypenPruefungen")},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/getAllLehreinheiten/",t)},getLvsByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsByStudent/"+t)},getLvsandLesByStudent(t,e){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsandLesByStudent/"+t+"/"+e)},getLvsAndMas(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsAndMas/"+t)},getMitarbeiterLv(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getMitarbeiterLv/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getNoten")},checkZeugnisnoteLv(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/",t)},addPruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/insertPruefung/",e)},updatePruefung(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/updatePruefung/"+e,i)},deletePruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/deletePruefung/"+t)}},abschlusspruefung:{getAbschlusspruefung(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/"+i.id)},addNewAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/",e)},loadAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/",{id:t})},updateAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/",e)},deleteAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/",{id:t})},getTypenAbschlusspruefung(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/")},getTypenAntritte(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/")},getBeurteilungen(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/")},getAkadGrade(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getAkadGrade/",{studiengang_kz:t})},getTypStudiengang(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/",{studiengang_kz:t})},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/"+t)},getPruefer(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getPruefer/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getNoten/")},checkForExistingExams(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/",{uids:t})}},grades:{list(){return this.$fhcApi.get("api/frontend/v1/stv/grades/list")},getCertificate(t,e){let i="api/frontend/v1/stv/grades/getCertificate/"+encodeURIComponent(t);return e&&(i=i+"/"+encodeURIComponent(e)),this.$fhcApi.get(i)},getTeacherProposal(t,e){let i="api/frontend/v1/stv/grades/getTeacherProposal/"+encodeURIComponent(t);return e&&(i=i+"/"+encodeURIComponent(e)),this.$fhcApi.get(i)},getRepeaterGrades(t,e){let i="api/frontend/v1/stv/grades/getRepeaterGrades/"+encodeURIComponent(t);return e&&(i=i+"/"+encodeURIComponent(e)),this.$fhcApi.get(i)},updateCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,note:r,lehrveranstaltung_bezeichnung:n}){return this.$fhcApi.post("api/frontend/v1/stv/grades/updateCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,note:r},{errorHeader:n})},deleteCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,lehrveranstaltung_bezeichnung:r}){return this.$fhcApi.post("api/frontend/v1/stv/grades/deleteCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i},{errorHeader:r})},copyTeacherProposalToCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,lehrveranstaltung_bezeichnung:r}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyTeacherProposalToCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i},{errorHeader:r})},copyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id:t,lv_bezeichnung:e}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate",{studierendenantrag_lehrveranstaltung_id:t},{errorHeader:e})},getGradeFromPoints(t,e,i,r){const n=r?{errorHandling:!1}:{};return this.$fhcApi.post("api/frontend/v1/stv/grades/getGradeFromPoints",{points:t,lehrveranstaltung_id:e,studiensemester_kurzbz:i},n)}},mobility:{getMobilitaeten(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getMobilitaeten/"+i.id)},getProgramsMobility(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getProgramsMobility/")},addNewMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/insertMobility/",e)},loadMobility(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/loadMobility/"+t)},updateMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/updateMobility/",e)},deleteMobility(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobility/"+t)},getLVList(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLVList/"+t)},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/getAllLehreinheiten/",t)},getLvsandLesByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLvsandLesByStudent/"+t)},getPurposes(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getPurposes/"+i.id)},getSupports(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getSupports/"+i.id)},getListPurposes(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListPurposes/")},getListSupports(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListSupports/")},deleteMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilityPurpose/"+t.bisio_id,t)},addMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilityPurpose/"+t.bisio_id,t)},deleteMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilitySupport/"+t.bisio_id,t)},addMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilitySupport/"+t.bisio_id,t)}},archiv:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/archiv/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id)}),t.ajaxRequestFunc=(t,e,i)=>this.$fhcApi.post(t,i,e),t.ajaxResponse=(t,e,i)=>i.data,t},getArchivVorlagen(){return this.$fhcApi.post("api/frontend/v1/stv/archiv/getArchivVorlagen")},archive(t){return this.$fhcApi.post("api/frontend/v1/documents/archive",t)},archiveSigned(t){return this.$fhcApi.post("api/frontend/v1/documents/archiveSigned",t)},update(t){return this.$fhcApi.post("api/frontend/v1/stv/archiv/update",t)},delete({akte_id:t,studiengang_kz:e}){return this.$fhcApi.post("api/frontend/v1/stv/archiv/delete",{akte_id:t,studiengang_kz:e})}},documents:{getDocumentsUnaccepted(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/"+i.id+"/"+i.studiengang_kz)},getDocumentsAccepted(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsAccepted/"+i.id+"/"+i.studiengang_kz)},deleteZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},createZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/createZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},loadAkte(t){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/loadAkte/"+t)},getDoktypen(){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDoktypen/")},updateFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/updateAkte/"+t,e)},deleteFile(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteAkte/"+t)},uploadFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/uploadDokument/"+t,e)}},exemptions:{getAnrechnungen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getAnrechnungen/"+i.id)},getLehrveranstaltungen(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/"+t)},getBegruendungen(){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getBegruendungen/")},getLvsKompatibel(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLvsKompatibel/"+t)},getLektoren(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLektoren/"+t)},addNewAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/insertAnrechnung/",e)},loadAnrechnung(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/loadAnrechnung/"+t)},editAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/updateAnrechnung/",e)},deleteAnrechnung(t){return this.$fhcApi.post("api/frontend/v1/stv/anrechnungen/deleteAnrechnung/"+t)}},jointstudies:{getStudies(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudien/"+i.id)},getTypenMobility(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/")},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/")},getStudyprograms(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/")},getListPartner(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/")},getStatiPrestudent(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/")},loadStudy(t){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/loadStudie/"+t)},insertStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/insertStudie/",e)},updateStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/updateStudie/",e)},deleteStudy(t){return this.$fhcApi.post("api/frontend/v1/stv/GemeinsameStudien/deleteStudie/"+t)}},courselist:{getCourselist(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStundenplan/"+i.student_uid+"/"+i.start_date+"/"+i.end_date+"/"+i.group_consecutiveHours+"/"+i.dbStundenplanTable)},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStudiensemester/")}},configStudent(){return this.$fhcApi.get("api/frontend/v1/stv/config/student")},configStudents(){return this.$fhcApi.get("api/frontend/v1/stv/config/students")}},H={person:{getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getUid/")},addNewNotiz(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/addNewNotiz/"+e,i)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/updateNotiz/"+e,i)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getMitarbeiter/"+t)},isBerechtigt(t,e){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/isBerechtigt/")}}},B={person:{getAllBetriebsmittel(t,e,i){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/"+i.type+"/"+i.id)},addNewBetriebsmittel(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/"+e,i)},loadBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/"+t)},updateBetriebsmittel(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/"+e,i)},deleteBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/"+t)},getTypenBetriebsmittel(){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/")},loadInventarliste(t){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/"+t)}}},z={updatePersonUnrulyStatus(t,e){try{const i={person_id:t,unruly:e},r="/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus";return this.$fhcApi.post(r,i,null)}catch(t){throw t}},filterPerson(t,e=""){try{const i=e+"/api/frontend/v1/checkperson/CheckPerson/filterPerson";return axios.post(i,t)}catch(t){throw t}}},M={getContentID(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/ContentID",{ort_kurzbz:t})},getRooms(t,e,i,r,n=0){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getRooms",{datum:t,von:e,bis:i,typ:r,personenanzahl:n})},getRoomTypes(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getTypes")}},L={content(t,e=null,i=null,r=null){return this.$fhcApi.get("/api/frontend/v1/Cms/content",{content_id:t,...e?{version:e}:{},...i?{sprache:i}:{},...r?{sichtbar:r}:{}})},getNews(t=1,e=10,i){return this.$fhcApi.get("/api/frontend/v1/Cms/getNews",{page:t,page_size:e,sprache:i})},news(t){return this.$fhcApi.get("/api/frontend/v1/Cms/news",{limit:t})},getNewsRowCount:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getNewsRowCount",{})},getNewsExtra:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getStudiengangInfoForNews",{})}},J={getStudentenMail(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Lehre/lvStudentenMail",{lehreinheit_id:t})},getLvInfo(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/LV/${t}/${e}`,{})},getStudentPruefungen(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/Pruefungen/${t}`,{})},getStudentProjektarbeiten(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/getStudentProjektarbeiten/${t}`,{})},getStudentProjektabgaben(t){return this.$fhcApi.get("/api/frontend/v1/Lehre/getStudentProjektabgaben",{projektarbeit_id:t.projektarbeit_id,student_uid:t.student_uid})},postStudentProjektarbeitEndupload(t){return this.$fhcApi.post("/api/frontend/v1/Lehre/postStudentProjektarbeitEndupload",t,{Headers:{"Content-Type":"multipart/form-data"}})},postStudentProjektarbeitZwischenabgabe(t){return this.$fhcApi.post("/api/frontend/v1/Lehre/postStudentProjektarbeitZwischenabgabe",t,{Headers:{"Content-Type":"multipart/form-data"}})},getStudentProjektarbeitAbgabeFile(t,e){const i=`/Cis/Abgabetool/getStudentProjektarbeitAbgabeFile?paabgabe_id=${t}&student_uid=${e}`;window.location=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+i},getMitarbeiterProjektarbeiten(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/getMitarbeiterProjektarbeiten?showall=${e}`,{})},postProjektarbeitAbgabe(t){const e={paabgabe_id:t.paabgabe_id,paabgabetyp_kurzbz:t.bezeichnung.paabgabetyp_kurzbz,datum:t.datum,fixtermin:t.fixtermin,insertvon:t.insertvon,kurzbz:t.kurzbz,projektarbeit_id:t.projektarbeit_id};return this.$fhcApi.post("/api/frontend/v1/Lehre/postProjektarbeitAbgabe",e,null)},deleteProjektarbeitAbgabe(t){const e={paabgabe_id:t};return this.$fhcApi.post("/api/frontend/v1/Lehre/deleteProjektarbeitAbgabe",e,null)},postSerientermin(t,e,i,r,n){const s={datum:t,paabgabetyp_kurzbz:e,bezeichnung:i,kurzbz:r,projektarbeit_ids:n};return this.$fhcApi.post("/api/frontend/v1/Lehre/postSerientermin",s,null)},fetchDeadlines(t){const e={person_id:t};return this.$fhcApi.post("/api/frontend/v1/Lehre/fetchDeadlines",e,null)}},I={getLvMenu(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/LvMenu/getLvMenu/${t}/${e}`,{})}},j={person:{getMessages(t,e,i){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessages/"+i.id+"/"+i.type+"/"+i.size+"/"+i.page)},getVorlagen(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getVorlagen/")},getMsgVarsLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/")},getMessageVarsPerson(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessageVarsPerson/"+t.id+"/"+t.type_id)},getMsgVarsPrestudent(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsPrestudent/"+t.id+"/"+t.type_id)},getPersonId(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getPersonId/"+t.id+"/"+t.type_id)},getUid(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getUid/"+t.id+"/"+t.type_id)},getDataVorlage(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getDataVorlage/"+t)},getNameOfDefaultRecipient(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getNameOfDefaultRecipient/"+t.id+"/"+t.type_id)},getPreviewText(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/getPreviewText/"+t.id+"/"+t.type_id,e)},getReplyData(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getReplyData/"+t)},sendMessageFromModalContext(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/messages/messages/sendMessage/"+e,i)},sendMessage(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/sendMessage/"+t,e)},deleteMessage(t){return this.$fhcApi.post("api/frontend/v1/messages/messages/deleteMessage/"+t)}}},U={getVorlagen(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagen/")},getVorlagenByLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/")}},G={getStudiensemester:function(){return this.$fhcApi.get("/components/Cis/Mylv/Studiensemester",{})},getAllStudienSemester:function(t=void 0,e=void 0,i=void 0,r=void 0){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienAllSemester",{studiensemester:t,studiengang:e,semester:i,studienplan:r})},getStudiengaengeForStudienSemester:function(t){return this.$fhcApi.get(`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${t}`,{})},getStudienplaeneBySemester:function(t,e){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienplaeneBySemester",{studiengang:t,studiensemester:e})},getLvPlanForStudiensemester:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${t}/${e}`,{})},getLvEvaluierungInfo:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/Studium/getLvEvaluierungInfo/${t}/${e}`,{})}},N={search:C,phrasen:P,navigation:k,dashboard:{async getViewData(){return this.$fhcApi.get("/api/frontend/v1/Cis4FhcApi/getViewData",null,null)}},filter:T,studstatus:x,profil:O,profilUpdate:D,lvPlan:F,bookmark:{getBookmarks:function(){return this.$fhcApi.get("/api/frontend/v1/Bookmark/getBookmarks",{})},delete:function(t){return this.$fhcApi.get(`/api/frontend/v1/Bookmark/delete/${t}`,{})},update:function({bookmark_id:t,url:e,title:i,tag:r=null}){return this.$fhcApi.post(`/api/frontend/v1/Bookmark/update/${t}`,{url:e,title:i})},insert:function({url:t,title:e,tag:i}){return this.$fhcApi.post("/api/frontend/v1/Bookmark/insert",{url:t,title:e,tag:i})}},stv:R,notiz:H,betriebsmittel:B,checkperson:z,ampeln:{open:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/open",{})},all:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/all",{})},confirm:function(t){return this.$fhcApi.get(`/api/frontend/v1/Ampeln/confirm/${t}`,{})}},ort:M,cms:L,lehre:J,addons:I,messages:j,vorlagen:U,addons:I,studiengang:{studiengangInformation:function(){return this.$fhcApi.get("/api/frontend/v1/Studgang/getStudiengangInfo",{})},getStudiengangByKz:function(t){return this.$fhcApi.get("/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz",{studiengang_kz:t})}},menu:{getMenu:function(){return this.$fhcApi.get("/api/frontend/v1/CisMenu/getMenu",{})}},authinfo:{getAuthUID(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthUID",{})},getAuthInfo(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthInfo",{})}},studium:G,language:{getAll(){return this.$fhcApi.get("/api/frontend/v1/language/get")}}},W={install:(t,e)=>{if(t.config.globalProperties.$fhcApi)return void(e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory.addEndpoints(e.factory)));function i(t,e,i,r){if("string"==typeof t&&void 0===r)[e,i,r]=[t,e,i],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===i&&void 0===r&&(r=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},r?r.form=t:r={form:t}}return[e,i,r]}function r(t){const e=t.data;return delete t.data,e.meta?e.meta.response=t:e.meta={response:t},e}FHC_JS_DATA_STORAGE_OBJECT.app_root,FHC_JS_DATA_STORAGE_OBJECT.ci_router;const n=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});n.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,i])=>{if(i instanceof FileList)for(const r of i)t.FormData.append(e+(i.length>1?"[]":""),r);else Array.isArray(i)?i.every(t=>!(t instanceof File))?t.jsondata[e]=i:i.forEach(r=>t.FormData.append(e+(i.length>1?"[]":""),r)):t.jsondata[e]=i;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),n.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(i=>(e.config[i.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[i.type])(i,e.config))),r(e)),e=>"ERR_CANCELED"==e.code?Promise.reject({handled:!0,...e}):"off"==e.config?.errorHandling||!1===e.config?.errorHandling||"success"==e.config?.errorHandling?Promise.reject(e):e.response?404==e.response.status?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL,!0),Promise.reject({handled:!0,...e})):(e.response.data.errors=e.response.data.errors.filter(i=>(e.config[i.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[i.type])(i,e.config)),e.response.data.errors.length?Promise.reject(e):Promise.reject({handled:!0,...e})):e.request?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL),Promise.reject({handled:!0,...e})):(t.config.globalProperties.$fhcAlert.alertError(e.message),Promise.reject({handled:!0,...e}))),t.config.globalProperties.$fhcApi={getUri:t=>(console.warn("$fhcApi.getUri is DEPRECATED! Use $api.getUri instead."),n.getUri({url:t})),get:(t,e,r,s)=>(console.warn("$fhcApi.get is DEPRECATED! Use $api.get instead."),[e,r,s]=i(t,e,r,s),r&&(s?s.params=r:s={params:r}),n.get(e,s)),post:(t,e,r,s)=>(console.warn("$fhcApi.post is DEPRECATED! Use $api.post instead."),[e,r,s]=i(t,e,r,s),n.post(e,r,s)),_defaultErrorHandlers:{validation(e,i){const r=t.config.globalProperties.$fhcAlert;return i?.form?(i.form.clearValidation(),i.form.setFeedback(!1,e.messages),!1):Array.isArray(e.messages)?(e.messages.forEach(r.alertError),!1):"object"!=typeof e.messages||(i?.errorHeader?Object.values(e.messages).forEach(e=>r.alertDefault("error",Array.isArray(i.errorHeader)?t.config.globalProperties.$p.t.apply(null,i.errorHeader):i.errorHeader,e,!0)):Object.entries(e.messages).forEach(([t,e])=>r.alertDefault("error",t,e,!0)),!1)},general(e,i){const r=t.config.globalProperties.$fhcAlert;i?.form?i.form.setFeedback(!1,e.message):i?.errorHeader?r.alertDefault("error",Array.isArray(i.errorHeader)?t.config.globalProperties.$p.t.apply(null,i.errorHeader):i.errorHeader,e.message,!0):r.alertError(e.message)},php(e){const i=t.config.globalProperties.$fhcAlert;var r="";switch(r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":i.alertDefault("warn","PHP "+e.severity,r,!0);break;case"Notice":case"User Notice":case"Runtime Notice":i.alertDefault("info","PHP "+e.severity,r,!0);break;default:r="Type: PHP "+e.severity+"\n\n"+r,i.alertSystemError(r)}},exception(e){const i=t.config.globalProperties.$fhcAlert;var r="";r+="Type: "+e.class+"\n\n",r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),i.alertSystemError(r)},db(e){const i=t.config.globalProperties.$fhcAlert;var r="";void 0!==e.heading&&(r+=e.heading+"\n\n"),void 0!==e.code&&(r+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(r+="SQL: "+e.sql+"\n\n"),void 0!==e.message?r+="Message: "+e.message+"\n\n":void 0!==e.messages&&(r+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(r+="Filename: "+e.filename+"\n"),void 0!==e.line&&(r+="Line Number: "+e.line+"\n"),i.alertSystemError(r)},auth(e,i){const r=t.config.globalProperties.$fhcAlert;var n="";n+="Controller name: "+e.controller+"\n",n+="Method name: "+e.method+"\n",n+="Required permissions: "+e.required_permissions,i?.errorHeader?r.alertDefault("error",Array.isArray(i.errorHeader)?t.config.globalProperties.$p.t.apply(null,i.errorHeader):i.errorHeader,e.message,!0):r.alertDefault("error",e.message,n)}}};class s{constructor(e,i){void 0===i?(this.$fhcApi={getUri:e=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.getUri(e)),get:(e,i,r,n)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.get(e,i,r,n)),post:(e,i,r,n)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.post(e,i,r,n))},Object.defineProperty(this.$fhcApi,"factory",{get:()=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory)}),t.config.globalProperties.$fhcApi.factory=this):Object.defineProperty(this,"$fhcApi",{get(){return(i||this).$fhcApi}}),this.addEndpoints(e,!0)}addEndpoints(t,e){Object.keys(t).forEach(e=>{Object.defineProperty(this,e,{get(){return"function"==typeof t[e]?t[e].bind(this):new s(t[e],this.$fhcApi.factory)}})}),e||console.warn("$fhcApi.factory.addEndpoints() is DEPRECATED!")}}const a=new s(N);e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),a.addEndpoints(e.factory)),t.config.globalProperties.$fhcApi.factory=a,t.provide("$fhcApi",t.config.globalProperties.$fhcApi)}},V={install:(t,e)=>{if(t.config.globalProperties.$api)return;function i(t,e){Array.isArray(t)?t.forEach(e):Object.entries(t).forEach(([t,i])=>i.forEach(i=>e(i,t)))}t.config.globalProperties.$fhcAlert||t.use(dt);let r={success:!0,fail:!0,combine:{form:["validation","general"],toast:["validation","general","not_found","site_failed"]},handler:{form(t,e){t.clearValidation(),e.forEach(e=>t.setFeedback(!1,e.messages||e.message))},async toast(e){const i=t.config.globalProperties.$p;if(!i)return Promise.reject("Phrasen plugin not loaded!");async function r(t){t=t.reduce((t,e)=>{switch(e.type){case"not_found":case"site_failed":e.message?t[e.message]=[e.url]:t._default=[e.url];break;case"general":t._default||(t._default=[]),t._default.push(e.message);break;case"validation":Object.entries(e.messages).forEach(([e,i])=>{t[e]||(t[e]=[]),Array.isArray(i)?t[e].push(...i):t[e].push(i)})}return t},{});let e=0;const r=await Promise.all(Object.entries(t).sort((t,e)=>["_default"].indexOf(e[0])-["_default"].indexOf(t[0])).map(async([t,r])=>{if("_default"==t){await i.loadCategory("dashboard");t='
    '+i.t("dashboard/general")+"
    "}else t="
    "+t+"
    ";return e+=r.length,t+"
    "+r.join("
    ")+"
    "}));return{counter:e,msgs:r}}let n,s;Array.isArray(e)?({counter:n,msgs:s}=await r(e)):({counter:n,msgs:s}=await Object.entries(e).reduce(async(t,[e,i])=>{const n=await t,{counter:s,msgs:a}=await r(i);return n.counter+=s,n.msgs.push("
    "+e+"
    "+a.join("")+"
    "),n},Promise.resolve({counter:0,msgs:[]}))),await i.loadCategory("ui");const a=i.t("ui/n_errors",{n:n});t.config.globalProperties.$fhcAlert.alertDefault("error",a,"
    "+s.join("")+"
    ",!0,!0)},php(e){i(e,(e,i)=>{var r="";switch(r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":i?i+=": PHP "+e.severity:i="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("warn",i,r,!0);break;case"Notice":case"User Notice":case"Runtime Notice":i?i+=": PHP "+e.severity:i="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("info",i,r,!0);break;default:r="Type: PHP "+e.severity+"\n\n"+r,i&&(r=i+"\n\n"+r),t.config.globalProperties.$fhcAlert.alertSystemError(r)}})},exception(e){i(e,(e,i)=>{var r="";i&&(r+=i+"\n\n"),r+="Type: "+e.class+"\n\n",r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),t.config.globalProperties.$fhcAlert.alertSystemError(r)})},db(e){i(e,(e,i)=>{var r="";i&&(r+=i+"\n\n"),void 0!==e.heading&&(r+=e.heading+"\n\n"),void 0!==e.code&&(r+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(r+="SQL: "+e.sql+"\n\n"),void 0!==e.message?r+="Message: "+e.message+"\n\n":void 0!==e.messages&&(r+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(r+="Filename: "+e.filename+"\n"),void 0!==e.line&&(r+="Line Number: "+e.line+"\n"),t.config.globalProperties.$fhcAlert.alertSystemError(r)})},auth(e){i(e,(e,i)=>{i?i+=": "+e.message:i=e.message;var r="";r+="Controller name: "+e.controller+"\n",r+="Method name: "+e.method+"\n",r+="Required permissions: "+e.required_permissions,t.config.globalProperties.$fhcAlert.alertDefault("error",i,r,!0)})}}};function n(t,e,i,r){if("string"==typeof t&&void 0===r)[e,i,r]=[t,e,i],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===i&&void 0===r&&(r=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},r?r.form=t:r={form:t}}return[e,i,r]}function s(t){if("string"==typeof t.data||t.data instanceof String)return s({data:t});const e=t.data;return delete t.data,e?(e.meta?e.meta.response=t:e.meta={response:t},e):{meta:{response:t},data:null}}function a(t){if(!1===t||"off"===t)return{...r,success:!1,fail:!1};if(!t||!0===t)return{...r};if("success"===t)return{...r,fail:!1};if("fail"===t)return{...r,success:!1};const{success:e,fail:i,handler:n,combine:s}=t;return t={...r},Object.entries({fail:i,success:e}).forEach(([e,i])=>{void 0!==i&&(t[e]=i)}),Object.entries({handler:n,combine:s}).forEach(([e,i])=>{void 0!==i&&(t[e]={...t[e],...i})}),t}function o(t){const e=a(t?.errorHandling);if(t?.form){const i=e.handler.form;e.handler={...e.handler,form:e=>i(t.form,e)}}else e.combine={...e.combine,form:[]};return e}function d(t){return t.response?404==t.response.status?[{type:"not_found",message:t.message,url:t.request.responseURL}]:null==t.response.data.errors?[]:t.response.data.errors:t.request?[{type:"site_failed",message:t.message,url:t.request.responseURL}]:[{type:"script",message:t.message}]}function l(t,e){const i={},r=[];if(null==e)return{};for(;e.length;)r.push(e.pop());for(var n of r){let r=n.type,a=null;for(var s in t.combine){let e=t.combine[s].includes(r),i=t.handler[s];if(e&&i&&(a=s,"form"==a))break}a&&(r=a);t.handler[r]?(i[r]||(i[r]=[]),Array.isArray(n)?i[r].push(...n):i[r].push(n)):e.push(n)}return i}void 0!==e?.errorHandling&&(r=a(e.errorHandling));const c=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});c.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,i])=>{if(i instanceof FileList)for(const r of i)t.FormData.append(e+(i.length>1?"[]":""),r);else Array.isArray(i)?i.every(t=>!(t instanceof File))?t.jsondata[e]=i:i.forEach(r=>t.FormData.append(e+(i.length>1?"[]":""),r)):t.jsondata[e]=i;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),c.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(i=>(e.config[i.type+"ErrorHandler"]||t.config.globalProperties.$api._defaultErrorHandlers[i.type])(i,e.config))),s(e)),t=>{if("ERR_CANCELED"==t.code)return Promise.reject({handled:!0,...t});const e=o(t.config);if(!e.fail)return Promise.reject(t);const i=d(t),r=l(e,i);for(var n in r)e.handler[n](r[n]);return i.length?Promise.reject(t):Promise.reject({handled:!0,...t})}),t.config.globalProperties.$api={getUri:t=>c.getUri({url:t}),get:(t,e,i,r)=>([e,i,r]=n(t,e,i,r),i&&(r?r.params=i:r={params:i}),c.get(e,r)),post:(t,e,i,r)=>([e,i,r]=n(t,e,i,r),c.post(e,i,r)),call(e,i,r){if(Array.isArray(e)){const s=t.config.globalProperties.$api;return Promise.allSettled(e.map((t,e)=>(Array.isArray(t)||(t=["#"+e,t]),s.call(t[1],{errorHeader:t[0],errorHandling:!1})))).then(t=>{const[,,e]=n(r,void 0,void 0,i||{}),s=o(e);if(!s.success&&!s.fail)return t;const a={};for(var c of t){const[t,e]="fulfilled"===c.status?[s.success,c.value]:[s.fail,c.reason];if(!t)return;const i=l(s,d(e));for(var p in i)a[p]?a[p][e.config.errorHeader]=i[p]:a[p]={[e.config.errorHeader]:i[p]}}for(var h in a)s.handler[h](a[h]);return t})}let{method:s,url:a,params:c,config:p}=e;return void 0!==i&&(p=i),s||(s="get"),s.toLowerCase&&(s=s.toLowerCase()),"get"==s?this.get(r,a,c,p):"post"==s?this.post(r,a,c,p):void console.error("FhcApi: method not allowed:",s)},getErrorHandler:t=>o(t)},t.provide("$api",t.config.globalProperties.$api)}},q={loadCategory:t=>({method:"get",url:"/api/frontend/v1/phrasen/loadModule/"+t}),setLanguage:(t,e)=>({method:"post",url:"/api/frontend/v1/phrasen/setLanguage",params:{categories:t,language:e}}),getLanguage:()=>({method:"get",url:"/api/frontend/v1/phrasen/getLanguage"}),getActiveDbLanguages:()=>({method:"get",url:"/api/frontend/v1/phrasen/getAllLanguages"})};const Z=Vue.reactive({}),K={};let Y=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language),X=Vue.computed(()=>Y.value?FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(t=>t.sprache==Y.value).LC_Time:null);const Q={user_language:Y,user_locale:X,setLanguage(t){const e=Object.keys(Z);return this.config.globalProperties.$api.call(q.setLanguage(e,t)).then(e=>(e.data.forEach(t=>{Z[t.category][t.phrase]=t.text}),Y.value=t,e))},loadCategory(t){return Array.isArray(t)?Promise.all(t.map(this.config.globalProperties.$p.loadCategory)):(K[t]||(K[t]=this.config.globalProperties.$api.call(q.loadCategory(t)).then(e=>e?.data?function(t,e){return t.filter(t=>t.category==e).reduce((t,e)=>(t[e.phrase]||(t[e.phrase]=e.text),t),{})}(e.data,t):{}).then(e=>{Z[t]=e})),K[t])},t_ref(t,e,i){return console.warn("deprecated"),Vue.computed(()=>this.t(t,e,i))},t(t,e,i){if(void 0===i&&(Array.isArray(t)&&2==t.length||t.split&&2==t.split("/").length)&&(i=e,[t,e]=t.split?t.split("/"):t),void 0===e)return console.error("invalid input",t,e,i),"";let r=Vue.computed(()=>Z[t]?function(t,e,i){let r=Z[t][e];return r?(i&&(r=r.replace(/\{([^}]*)\}/g,(t,e)=>void 0===i[e]?t:i[e])),r):"<< PHRASE "+e+">>"}(t,e,i):"");return Z[t]||this.loadCategory(t),r.value}};var tt={install(t,e){t.config.globalProperties.$fhcApi||t.use(W),t.config.globalProperties.$api||t.use(V),t.config.globalProperties.$p={t:Q.t,loadCategory:e=>Q.loadCategory.call(t,e),setLanguage:e=>Q.setLanguage.call(t,e),user_language:Y,user_locale:X,t_ref:Q.t_ref},t.provide("$p",t.config.globalProperties.$p)}},et=Object.freeze({__proto__:null,default:tt,user_locale:X});const it="error",rt="retval",nt={get:function(t,e,i=null){return nt._axiosCall(t,e,"get",i)},post:function(t,e,i=null){return nt._axiosCall(t,e,"post",i)},isSuccess:function(t){return!("object"!=typeof t||!t.hasOwnProperty(it)||!t.hasOwnProperty(rt)||0!=t.error)},isError:function(t){return!nt.isSuccess(t)},hasData:function(t){return!(!nt.isSuccess(t)||!("object"==typeof t[rt]&&Object.keys(t[rt]).length>0||"array"==typeof t[rt]&&t[rt].length>0||"string"==typeof t[rt]&&""!=t[rt].trim()||"number"==typeof t[rt]))},getData:function(t){return nt.hasData(t)?t[rt]:null},getError:function(t){return"object"==typeof t&&Object.keys(t).length>0&&t.hasOwnProperty(rt)?t[rt]:"Generic error"},getErrorCode:function(t){return"object"==typeof t&&t.hasOwnProperty(it)?t[it]:1},_generateRouterURI:function(t){var e=null;return"undefined"!=typeof FHC_JS_DATA_STORAGE_OBJECT&&(e=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"+t),e},_printDebug:function(t,e,i){},_axiosCall:function(t,e,i,r){let n={method:i,url:nt._generateRouterURI(t),timeout:5e3};if("get"==i?n.params=e:n.data=e,"object"==typeof r)for(var s in r)n[s]=r[s];return axios(n)}},st=document.createElement("div"),at=Vue.createApp({name:"FhcAlertApp",components:{PvToast:e,PvConfirm:i},methods:{mailToUrl:t=>"mailto:"+FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto+"?subject=Meldung%20Systemfehler&body="+("\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method+"%0D%0A\n\t\t\t\tFehler Meldung: "+t.message.detail+"%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!"),openMessagecard(t){bootstrap.Collapse.getOrCreateInstance(t.target.getAttribute("href")).toggle()}},unmounted(){st.parentElement.removeChild(st)},computed:{showmaillink:function(){return""!==FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto}},template:'\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t'});at.use(t),at.use(r);const ot=at.mount(st);document.body.appendChild(st);var dt={install:(t,e)=>{t.config.globalProperties.$p||t.use(tt);const i={alertSuccess(t){if(Array.isArray(t))return t.forEach(this.alertSuccess);ot.$refs.toast.add({severity:"success",summary:"Info",detail:t,life:1e3})},alertInfo(t){if(Array.isArray(t))return t.forEach(this.alertInfo);ot.$refs.toast.add({severity:"info",summary:"Info",detail:t,life:3e3})},alertWarning(t){if(Array.isArray(t))return t.forEach(this.alertWarning);ot.$refs.toast.add({severity:"warn",summary:"Achtung",detail:t})},alertError(t){if(Array.isArray(t))return t.forEach(this.alertError);ot.$refs.toast.add({severity:"error",summary:"Achtung",detail:t})},alertSystemError(e){if(Array.isArray(e))return e.forEach(this.alertSystemError);ot.$refs.alert.add({severity:"error",summary:Vue.computed(()=>t.config.globalProperties.$p.t("alert/systemerror")),detail:e})},confirmDelete:()=>new Promise((e,i)=>{ot.$confirm.require({group:"fhcAlertConfirm",header:Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:Vue.computed(()=>t.config.globalProperties.$p.t("alert/confirm_delete")),acceptLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/loeschen")),acceptClass:"p-button-danger",rejectLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:"p-button-secondary",accept(){e(!0)},reject(){e(!1)}})}),confirm:e=>new Promise((i,r)=>{ot.$confirm.require({group:e?.group??"fhcAlertConfirm",header:e?.header??Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:e?.message??"",acceptLabel:e?.acceptLabel??"Ok",acceptClass:e?.acceptClass??"btn btn-primary",rejectLabel:e?.rejectLabel??Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:e?.rejectClass??"btn btn-outline-secondary",accept(){i(!0)},reject(){i(!1)}})}),alertDefault(t,e,i,r=!1,n=!1){let s={severity:t,summary:e,detail:i,html:n};r||(s.life=3e3),ot.$refs.toast.add(s)},alertMultiple(t,e="info",i="Info",r=!1,n=!1){return!!t.every(t=>"string"==typeof t)&&(t.forEach(t=>this.alertDefault(e,i,t,r,n)),!0)},handleSystemError(t){if(!t.hasOwnProperty("name")||t.name.toLowerCase()!=="AbortError".toLowerCase()){if("string"==typeof t)return i.alertSystemError(t);if(Array.isArray(t)&&t.every(t=>"string"==typeof t))return t.every(i.alertSystemError);if(!t.hasOwnProperty("handled")||!t.handled){if("object"==typeof t&&null!==t){let e="";return t.hasOwnProperty("response")&&t.response?.data?.retval?e+="Error Message: "+(t.response.data.retval.message||t.response.data.retval)+"\r\n":t.hasOwnProperty("message")&&(e+="Error Message: "+t.message.toUpperCase()+"\r\n"),t.hasOwnProperty("config")&&t.config.hasOwnProperty("url")&&(e+="Error ConfigURL: "+t.config.url+"\r\n"),t.hasOwnProperty("stack")&&(e+="Error Stack: "+t.stack+"\r\n"),""==e&&(e="Error Message: "+JSON.stringify(t)+"\r\n"),e+="Error Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,i.alertSystemError(e)}i.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method)}}},handleSystemMessage(t){if("string"==typeof t)return i.alertWarning(t);if(Array.isArray(t)){if(t.every(t=>"string"==typeof t))return t.every(i.alertWarning);if(t.every(t=>"object"==typeof t)&&null!==msg)return t.every(t=>{t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?i.alertWarning(JSON.stringify(t.data.retval)):i.alertSystemError(JSON.stringify(t))})}"object"!=typeof t||null===t?i.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method):t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?i.alertWarning(JSON.stringify(t.data.retval)):i.alertSystemError(JSON.stringify(t))},resetFormValidation(t){const e=new Event("fhc-form-reset");t.querySelectorAll(["[data-fhc-form-validate],[data-fhc-form-error]"]).forEach(t=>t.dispatchEvent(e))},handleFormValidation(t,e){if(void 0===e){if(t&&t.nodeType===Node.ELEMENT_NODE)return e=>i.handleFormValidation(e,t)}else if(400==t?.response?.status){let r=nt.getError(t.response.data);"object"!=typeof r&&(r=t.response.data),i.resetFormValidation(e);const n=Object.entries(r).filter(([t,i])=>{const r=e.querySelector('[data-fhc-form-validate="'+t+'"]');return!r||(r.dispatchEvent(new CustomEvent("fhc-form-invalidate",{detail:i})),!1)}).map(t=>t[1]),s=e.querySelector("[data-fhc-form-error]");return void(s&&n.length?s.dispatchEvent(new CustomEvent("fhc-form-error",{detail:n})):n.forEach(i.alertError))}if(400==t?.response?.status){let e=nt.getError(t.response.data);i.alertError("object"==typeof e?Object.values(e):e)}else i.handleSystemError(t)}};t.config.globalProperties.$fhcAlert=i,t.provide("$fhcAlert",t.config.globalProperties.$fhcAlert)}};console.warn("plugin/FhcApi.js is DEPRECATED! Use plugins/Api.js instead.");var lt={install:(t,e)=>{if(t.config.globalProperties.$fhcApi)return void(e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory.addEndpoints(e.factory)));function i(t,e,i,r){if("string"==typeof t&&void 0===r)[e,i,r]=[t,e,i],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===i&&void 0===r&&(r=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},r?r.form=t:r={form:t}}return[e,i,r]}function r(t){const e=t.data;return delete t.data,e?(e.meta?e.meta.response=t:e.meta={response:t},e):{meta:{response:t},data:null}}t.use(dt),t.use(V),FHC_JS_DATA_STORAGE_OBJECT.app_root,FHC_JS_DATA_STORAGE_OBJECT.ci_router;const n=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});n.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,i])=>{if(i instanceof FileList)for(const r of i)t.FormData.append(e+(i.length>1?"[]":""),r);else Array.isArray(i)?i.every(t=>!(t instanceof File))?t.jsondata[e]=i:i.forEach(r=>t.FormData.append(e+(i.length>1?"[]":""),r)):t.jsondata[e]=i;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),n.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(i=>(e.config[i.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[i.type])(i,e.config))),r(e)),e=>"ERR_CANCELED"==e.code?Promise.reject({handled:!0,...e}):"off"==e.config?.errorHandling||!1===e.config?.errorHandling||"success"==e.config?.errorHandling?Promise.reject(e):e.response?404==e.response.status?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL,!0),Promise.reject({handled:!0,...e})):(e.response.data.errors=e.response.data.errors.filter(i=>(e.config[i.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[i.type])(i,e.config)),e.response.data.errors.length?Promise.reject(e):Promise.reject({handled:!0,...e})):e.request?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL),Promise.reject({handled:!0,...e})):(t.config.globalProperties.$fhcAlert.alertError(e.message),Promise.reject({handled:!0,...e}))),t.config.globalProperties.$fhcApi={getUri:t=>n.getUri({url:t}),get:(t,e,r,s)=>([e,r,s]=i(t,e,r,s),r&&(s?s.params=r:s={params:r}),n.get(e,s)),post:(t,e,r,s)=>([e,r,s]=i(t,e,r,s),n.post(e,r,s)),_defaultErrorHandlers:{validation(e,i){const r=t.config.globalProperties.$fhcAlert;return i?.form?(i.form.clearValidation(),i.form.setFeedback(!1,e.messages),!1):Array.isArray(e.messages)?(e.messages.forEach(r.alertError),!1):"object"!=typeof e.messages||(i?.errorHeader?Object.values(e.messages).forEach(e=>r.alertDefault("error",Array.isArray(i.errorHeader)?t.config.globalProperties.$p.t.apply(null,i.errorHeader):i.errorHeader,e,!0)):Object.entries(e.messages).forEach(([t,e])=>r.alertDefault("error",t,e,!0)),!1)},general(e,i){const r=t.config.globalProperties.$fhcAlert;i?.form?i.form.setFeedback(!1,e.message):i?.errorHeader?r.alertDefault("error",Array.isArray(i.errorHeader)?t.config.globalProperties.$p.t.apply(null,i.errorHeader):i.errorHeader,e.message,!0):r.alertError(e.message)},php(e){const i=t.config.globalProperties.$fhcAlert;var r="";switch(r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":i.alertDefault("warn","PHP "+e.severity,r,!0);break;case"Notice":case"User Notice":case"Runtime Notice":i.alertDefault("info","PHP "+e.severity,r,!0);break;default:r="Type: PHP "+e.severity+"\n\n"+r,i.alertSystemError(r)}},exception(e){const i=t.config.globalProperties.$fhcAlert;var r="";r+="Type: "+e.class+"\n\n",r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),i.alertSystemError(r)},db(e){const i=t.config.globalProperties.$fhcAlert;var r="";void 0!==e.heading&&(r+=e.heading+"\n\n"),void 0!==e.code&&(r+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(r+="SQL: "+e.sql+"\n\n"),void 0!==e.message?r+="Message: "+e.message+"\n\n":void 0!==e.messages&&(r+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(r+="Filename: "+e.filename+"\n"),void 0!==e.line&&(r+="Line Number: "+e.line+"\n"),i.alertSystemError(r)},auth(e,i){const r=t.config.globalProperties.$fhcAlert;var n="";n+="Controller name: "+e.controller+"\n",n+="Method name: "+e.method+"\n",n+="Required permissions: "+e.required_permissions,i?.errorHeader?r.alertDefault("error",Array.isArray(i.errorHeader)?t.config.globalProperties.$p.t.apply(null,i.errorHeader):i.errorHeader,e.message,!0):r.alertDefault("error",e.message,n)}}};class s{constructor(e,i){void 0===i?(this.$fhcApi={getUri:e=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.getUri(e)),get:(e,i,r,n)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.get(e,i,r,n)),post:(e,i,r,n)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.post(e,i,r,n))},Object.defineProperty(this.$fhcApi,"factory",{get:()=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory)}),t.config.globalProperties.$fhcApi.factory=this):Object.defineProperty(this,"$fhcApi",{get(){return(i||this).$fhcApi}}),this.addEndpoints(e)}addEndpoints(t){Object.keys(t).forEach(e=>{Object.defineProperty(this,e,{get(){return"function"==typeof t[e]?t[e].bind(this):new s(t[e],this.$fhcApi.factory)}})}),console.warn("$fhcApi.factory.addEndpoints() is DEPRECATED!")}}const a=new s(N);e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),a.addEndpoints(e.factory)),t.config.globalProperties.$fhcApi.factory=a,t.provide("$fhcApi",t.config.globalProperties.$fhcApi)}};console.warn("plugin/Phrasen.js is DEPRECATED! Use plugins/Phrasen.js instead.");const ct=Vue.reactive({}),pt={};let ht=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language),ut=Vue.computed(()=>ht.value?FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(t=>t.sprache==ht.value).LC_Time:null);const gt={user_language:ht,user_locale:ut,setLanguage(t){const e=Object.keys(ct);return this.config.globalProperties.$api.call(q.setLanguage(e,t)).then(e=>(e.data.forEach(t=>{ct[t.category][t.phrase]=t.text}),ht.value=t,e))},loadCategory(t){return Array.isArray(t)?Promise.all(t.map(this.config.globalProperties.$p.loadCategory)):(this.config.globalProperties.$fhcApi,this.config.globalProperties.$fhcApiFactory,pt[t]||(pt[t]=this.config.globalProperties.$api.call(q.loadCategory(t)).then(e=>e?.data?function(t,e){return t.filter(t=>t.category==e).reduce((t,e)=>(t[e.phrase]||(t[e.phrase]=e.text),t),{})}(e.data,t):{}).then(e=>{ct[t]=e})),pt[t])},t_ref(t,e,i){return console.warn("deprecated"),Vue.computed(()=>this.t(t,e,i))},t(t,e,i){if(void 0===i&&(Array.isArray(t)&&2==t.length||t.split&&2==t.split("/").length)&&(i=e,[t,e]=t.split?t.split("/"):t),void 0===e)return console.error("invalid input",t,e,i),"";let r=Vue.computed(()=>ct[t]?function(t,e,i){let r=ct[t][e];return r?(i&&(r=r.replace(/\{([^}]*)\}/g,(t,e)=>void 0===i[e]?t:i[e])),r):"<< PHRASE "+e+">>"}(t,e,i):"");return ct[t]||this.loadCategory(t),r.value}};var ft={install(t,e){t.use(lt,e?.fhcApi||void 0),t.config.globalProperties.$p={t:gt.t,loadCategory:e=>gt.loadCategory.call(t,e),setLanguage:e=>gt.setLanguage.call(t,e),user_language:ht,user_locale:ut,t_ref:gt.t_ref},t.provide("$p",t.config.globalProperties.$p)}};Vue.createApp({name:"DashboardAdminApp",data:()=>({appSideMenuEntries:{}}),components:{CoreNavigationCmpt:a,DashboardAdmin:S},mounted(){}}).use(ft).mount("#main"); //# sourceMappingURL=DashboardAdmin.js.map diff --git a/public/dist/js/apps/DashboardAdmin.js.map b/public/dist/js/apps/DashboardAdmin.js.map index 46fcd9a4a..f9a043d90 100644 --- a/public/dist/js/apps/DashboardAdmin.js.map +++ b/public/dist/js/apps/DashboardAdmin.js.map @@ -1 +1 @@ -{"version":3,"file":"DashboardAdmin.js","sources":["../../../js/components/Fetch.js","../../../js/api/factory/navigation.js","../../../js/components/navigation/Navigation.js","../../../js/components/Bootstrap/Modal.js","../../../js/components/Bootstrap/Alert.js","../../../js/components/Bootstrap/Prompt.js","../../../js/components/Bootstrap/Confirm.js","../../../js/components/Dashboard/Admin/Edit.js","../../../js/components/Dashboard/Admin/Widgets.js","../../../js/components/Drop/Grid/Item.js","../../../js/composables/GridLogic.js","../../../js/components/Drop/Grid.js","../../../js/composables/Dashboard/CachedWidgetLoader.js","../../../js/components/Dashboard/Item.js","../../../js/components/Tranistion/HeightTransition.js","../../../js/components/Dashboard/Widget/WidgetIcon.js","../../../js/components/Dashboard/Section.js","../../../js/components/Dashboard/Widget/Picker.js","../../../js/helpers/ObjectUtils.js","../../../js/components/Dashboard/Admin.js","../../../js/components/Dashboard/Admin/Presets.js","../../../js/api/search.js","../../../js/api/phrasen.js","../../../js/api/navigation.js","../../../js/api/filter.js","../../../js/api/studstatus.js","../../../js/api/profil.js","../../../js/api/profilUpdate.js","../../../js/api/lvPlan.js","../../../js/api/stv.js","../../../js/api/stv/verband.js","../../../js/api/stv/students.js","../../../js/api/stv/filter.js","../../../js/api/stv/konto.js","../../../js/api/stv/group.js","../../../js/api/stv/kontakt.js","../../../js/api/stv/prestudent.js","../../../js/api/stv/status.js","../../../js/api/stv/details.js","../../../js/api/stv/exam.js","../../../js/api/stv/abschlusspruefung.js","../../../js/api/stv/grades.js","../../../js/api/stv/mobility.js","../../../js/api/stv/archiv.js","../../../js/api/stv/documents.js","../../../js/api/stv/exemptions.js","../../../js/api/stv/jointstudies.js","../../../js/api/stv/courselist.js","../../../js/api/notiz.js","../../../js/api/notiz/person.js","../../../js/api/betriebsmittel.js","../../../js/api/betriebsmittel/person.js","../../../js/api/checkperson.js","../../../js/api/ort.js","../../../js/api/cms.js","../../../js/api/lehre.js","../../../js/api/addons.js","../../../js/api/messages.js","../../../js/api/messages/person.js","../../../js/api/vorlagen.js","../../../js/api/studium.js","../../../js/api/fhcapifactory.js","../../../js/api/dashboard.js","../../../js/api/bookmark.js","../../../js/api/ampeln.js","../../../js/api/studiengang.js","../../../js/api/menu.js","../../../js/api/authinfo.js","../../../js/api/language.js","../../../js/plugin/OldFhcApi.js","../../../js/plugins/Api.js","../../../js/api/factory/phrasen.js","../../../js/plugins/Phrasen.js","../../../js/RESTClient.js","../../../js/plugins/FhcAlert.js","../../../js/plugin/FhcApi.js","../../../js/plugin/Phrasen.js","../../../js/apps/DashboardAdmin.js"],"sourcesContent":["/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport const CoreFetchCmpt = {\n\temits: ['dataFetched'], // this component can emit the event dataFetched that it is catched by this component itself\n\tprops: {\n\t\trefresh: { // to refresh this component\n\t\t\ttype: Boolean\n\t\t},\n\t\tapiFunction: { // the function to call, must return a Promise\n\t\t\trequired: true,\n\t\t\ttype: Function\n\t\t},\n\t\tapiFunctionParameters: {} // parameters for the apiFunction, type mixed, optional\n\t},\n\twatch: {\n\t\t/**\n\t\t * If the refresh property is changed then call fetchData\n\t\t */\n\t\trefresh: function (newValue, oldValue) {\n\t\t\tthis.fetchData();\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tloading: false, // if in loading or not\n\t\t\terror: false, // if an error occurred while loading data\n\t\t\terrorMessage: null // the error message\n\t\t};\n\t},\n\tcreated: function() {\n\t\tthis.fetchData();\n\t},\n\tmethods: {\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchData: function() {\n\t\t\tthis.loading = true; // loader started\n\t\t\tthis.error = false;\n\t\t\tthis.errorMessage = null;\n\n\t\t\t// Checks if the apifunction is a callable function\n\t\t\tif (typeof this.apiFunction == \"function\")\n\t\t\t{\n\t\t\t\t// Call the function stored in apiFunction\n\t \t\tlet apiFunctionResult = this.apiFunction(this.apiFunctionParameters);\n\n\t\t\t\t// It is expected that the function returns a Promise\n\t\t\t\tif (apiFunctionResult instanceof Promise)\n\t\t\t\t{\n\t\t\t\t\tapiFunctionResult\n\t\t\t\t\t\t.then(this.successHandler) // on success\n\t\t\t\t\t\t.catch(this.errorHandler) // on error\n\t\t\t\t\t\t.finally(this.finallyHandler); // finally in any case\n\t\t\t\t}\n\t\t\t\telse // otherwise display an error\n\t\t\t\t{\n\t\t\t\t\tthis.setError(\"The called apiFunction does not return a Promise\");\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // otherwise display an error\n\t\t\t{\n\t\t\t\tthis.setError(\"Property apiFunction is not a function\");\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsetError: function(errorMessage) {\n\t\t\tthis.loading = false; // loading ended\n\t\t\tthis.error = true; // error occurred\n\t\t\tthis.errorMessage = errorMessage; // save the error message\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsuccessHandler: function(response) {\n\t\t\tthis.$emit('dataFetched', response ? response.data : undefined); // trigger the event dataFetched\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\terrorHandler: function(error) {\n\t\t\tif (error.response?.data?.retval)\n\t\t\t\tthis.setError(error.response.data.retval);\n\t\t\telse if (error.data?.message)\n\t\t\t\tthis.setError(error.data.message);\n\t\t\telse\n\t\t\t\tthis.setError(error.message);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfinallyHandler: function() {\n\t\t\tthis.loading = false; // loading ended\n\t\t}\n\t},\n\ttemplate: `\n\t\t\n\t\t\t
    Loading...
    \n\t\t
    \n\t\t\n\t\t\t
    {{ errorMessage }}
    \n\t\t
    \n\t\t\n\t`\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetHeader(navigation_page) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/navigation/header',\n\t\t\tparams: { navigation_page }\n\t\t};\n\t},\n\tgetMenu(navigation_page) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/navigation/menu',\n\t\t\tparams: { navigation_page }\n\t\t};\n\t}\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport {CoreFetchCmpt} from '../../components/Fetch.js';\nimport ApiNavigation from '../../api/factory/navigation.js';\n\n/**\n *\n */\nexport const CoreNavigationCmpt = {\n\tcomponents: {\n\t\tCoreFetchCmpt\n\t},\n\tprops: {\n\t\taddHeaderMenuEntries: Object, // property used to add new header menu entries from another app/component\n\t\taddSideMenuEntries: Object, // property used to add new side menu entries from another app/component\n\t\thideTopMenu: Boolean,\n\t\tleftNavCssClasses: {\n\t\t\ttype: String,\n\t\t\tdefault: 'navbar navbar-left-side'\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\theaderMenu: {}, // header menu entries\n\t\t\tsideMenu: {} // side menu entries\n\t\t};\n\t},\n\tcomputed: {\n\t\t/**\n\t\t *\n\t\t */\n\t\theaderMenuEntries() {\n\t\t\t//\n\t\t\tlet hm = this.headerMenu ? {...this.headerMenu} : {};\n\t\t\tif (this.headerMenu != null && this.addHeaderMenuEntries != null && Object.keys(this.addHeaderMenuEntries).length > 0)\n\t\t\t{\n\t\t\t\thm[this.addHeaderMenuEntries.description] = this.addHeaderMenuEntries;\n\t\t\t}\n\t\t\treturn hm;\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsideMenuEntries() {\n\t\t\t//\n\t\t\tlet sm = this.sideMenu ? {...this.sideMenu} : {};\n\t\t\tif (this.sideMenu != null && this.addSideMenuEntries != null && Object.keys(this.addSideMenuEntries).length > 0)\n\t\t\t{\n\t\t\t\tsm[this.addSideMenuEntries.description] = this.addSideMenuEntries;\n\t\t\t}\n\t\t\treturn sm;\n\t\t}\n\t},\n\tmethods: {\n\t\t/**\n\t\t *\n\t\t */\n\t\tgetNavigationPage() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.called_path + \"/\" + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchCmptApiFunctionHeader() {\n\t\t\treturn this.$api.call(ApiNavigation.getHeader(this.getNavigationPage()))\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchCmptApiFunctionSideMenu() {\n\t\t\treturn this.$api.call(ApiNavigation.getMenu(this.getNavigationPage()))\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchCmptDataFetchedHeader(data) {\n\t\t\tthis.headerMenu = data || {};\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchCmptDataFetchedMenu(data) {\n\t\t\tthis.sideMenu = data || {};\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tgetDataBsToggle(header) {\n\t\t\treturn !header.children ? null : 'dropdown';\n\t\t}\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t\t\n\t\t\n\n\t\t\n\t\t\n\n\t\t\n\t\t\n\t`\n};\n\n","//import Phrasen from '../../plugin/Phrasen.js';\n\nexport default {\n\tname: 'BootstrapModal',\n\tdata: () => ({\n\t\tmodal: null,\n\t\tfullscreen: false\n\t}),\n\tprops: {\n\t\tbackdrop: {\n\t\t\ttype: [Boolean,String],\n\t\t\tdefault: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['static', true, false].includes(value);\n\t\t\t}\n\t\t},\n\t\tfocus: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tkeyboard: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tnoCloseBtn: Boolean,\n\t\tdialogClass: [String,Array,Object],\n\t\theaderClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tbodyClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: 'px-4 py-5'\n\t\t},\n\t\tfooterClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tallowFullscreenExpand: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\temits: [\n\t\t\"hideBsModal\",\n\t\t\"hiddenBsModal\",\n\t\t\"hidePreventedBsModal\",\n\t\t\"showBsModal\",\n\t\t\"shownBsModal\"\n\t],\n\tmethods: {\n\t\tdispose() {\n\t\t\treturn this.modal.dispose();\n\t\t},\n\t\thandleUpdate() {\n\t\t\treturn this.modal.handleUpdate();\n\t\t},\n\t\thide() {\n\t\t\treturn this.modal.hide();\n\t\t},\n\t\tshow(relatedTarget) {\n\t\t\treturn this.modal.show(relatedTarget);\n\t\t},\n\t\ttoggle() {\n\t\t\treturn this.modal.toggle();\n\t\t},\n\t\ttoggleFullscreen() {\n\t\t\tthis.fullscreen = !this.fullscreen\n\t\t}\n\t},\n\tmounted() {\n\t\tif (this.$refs.modal)\n\t\t\tthis.modal = new bootstrap.Modal(this.$refs.modal, {\n\t\t\t\tbackdrop: this.backdrop,\n\t\t\t\tfocus: this.focus,\n\t\t\t\tkeyboard: this.keyboard\n\t\t\t});\n\t},\n\tpopup(body, options, title, footer) {\n\t\tconst BsModal = this,\n\t\t\tslots = {};\n\t\tif (body !== undefined)\n\t\t\tslots.default = () => body;\n\t\tif (title !== undefined)\n\t\t\tslots.title = () => title;\n\t\tif (footer !== undefined)\n\t\t\tslots.footer = () => footer;\n\n\t\t// little hack to check whether primevue is included in the app or not\n\t\tlet includedPrimevue = false;\n\t\tif(typeof primevue !== 'undefined'){\n\t\t\tincludedPrimevue = true;\n\t\t}\n\n\t\treturn new Promise((resolve,reject) => {\n\t\t\tconst instance = Vue.createApp({\n\t\t\t\tname: 'ModalTmpApp',\n\t\t\t\tsetup() {\n\t\t\t\t\treturn () => Vue.h(BsModal, {...{\n\t\t\t\t\t\tclass: 'fade'\n\t\t\t\t\t},...options, ...{\n\t\t\t\t\t\tref: 'modal',\n\t\t\t\t\t\t'onHidden.bs.modal': instance.unmount\n\t\t\t\t\t}}, slots);\n\t\t\t\t},\n\t\t\t\tmounted() {\n\t\t\t\t\tthis.$refs.modal.show();\n\t\t\t\t\t\n\t\t\t\t},\n\t\t\t\tbeforeUnmount() {\n\t\t\t\t\tif (this.$refs.modal)\n\t\t\t\t\t\tthis.$refs.modal.result !== false ? resolve(this.$refs.modal.result) : reject();\n\t\t\t\t},\n\t\t\t\tunmounted() {\n\t\t\t\t\twrapper.parentElement.removeChild(wrapper);\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst wrapper = document.createElement(\"div\");\n\t\t\t\n\t\t\t// if(primevue) --> won't work because primevue is not defined in this scope and promise would be rejected\n\t\t\tif (includedPrimevue){\n\t\t\t\tinstance.use(primevue.config.default, {zIndex: {overlay: 9999}})\n\t\t\t}\n\t\t\t\t \n\t\t\t//instance.use(Phrasen); // TODO(chris): find a more dynamic way\n\t\t\timport('../../plugins/Phrasen.js').then((Phrasen) => {\n\t\t\t\tinstance.use(Phrasen.default);\n\t\t\t\tinstance.mount(wrapper);\n\t\t\t\tdocument.body.appendChild(wrapper);\n\t\t\t});\n\t\t});\n\t},\n\ttemplate: `
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    `\n}\n","import BsModal from './Modal.js';\n\nexport default {\n\tname: 'BootstrapAlert',\n\tcomponents: {\n\t\tBsModal\n\t},\n\tmixins: [\n\t\tBsModal\n\t],\n\tprops: {\n\t\tdialogClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: 'modal-dialog-centered'\n\t\t},\n\t\t/*\n\t\t * NOTE(chris):\n\t\t * Hack to expose in \"emits\" declared events to $props which we use\n\t\t * in the v-bind directive to forward all events.\n\t\t * @see: https://github.com/vuejs/core/issues/3432\n\t\t*/\n\t\tonHideBsModal: Function,\n\t\tonHiddenBsModal: Function,\n\t\tonHidePreventedBsModal: Function,\n\t\tonShowBsModal: Function,\n\t\tonShownBsModal: Function\n\t},\n\tdata: () => ({\n\t\tresult: true\n\t}),\n\tmounted() {\n\t\tthis.modal = this.$refs.modalContainer.modal;\n\t},\n\tpopup(msg, options) {\n\t\treturn BsModal.popup.bind(this)(msg, options);\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t`\n}\n","import BsAlert from './Alert.js';\n\nexport default {\n\tname: 'BootstrapPrompt',\n\tmixins: [\n\t\tBsAlert\n\t],\n\tprops: {\n\t\tplaceholder: String,\n\t\tdefault: String\n\t},\n\tdata: () => ({\n\t\tvalue: '',\n\t\tresult: false\n\t}),\n\tcreated() {\n\t\tif (this.default)\n\t\t\tthis.value = this.default;\n\t},\n\tpopup(msg, options) {\n\t\tif (typeof options === 'string')\n\t\t\toptions = { default: options };\n\t\treturn BsAlert.popup.bind(this)(msg, options);\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t`\n}\n","import BsAlert from './Alert.js';\n\nexport default {\n\tname: 'BootstrapConfirm',\n\tmixins: [\n\t\tBsAlert\n\t],\n\tdata: () => ({\n\t\tresult: false\n\t}),\n\tpopup(msg, options) {\n\t\treturn BsAlert.popup.bind(this)(msg, options);\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t`\n}\n","import BsConfirm from '../../Bootstrap/Confirm.js';\n\nexport default {\n\temits: [\n\t\t\"change\",\n\t\t\"delete\"\n\t],\n\tprops: {\n\t\tdashboard_id: Number,\n\t\tdashboard_kurzbz: String,\n\t\tbeschreibung: String\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tkurzbz: this.dashboard_kurzbz,\n\t\t\tdesc: this.beschreibung\n\t\t}\n\t},\n\tmethods: {\n\t\tsendDelete() {\n\t\t\tBsConfirm.popup('Sure?').then(() => this.$emit('delete', this.dashboard_id)).catch();\n\t\t}\n\t},\n\ttemplate: `
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t
    `\n}\n","export default {\n\temits: [\n\t\t\"change\",\n\t\t\"assignWidgets\"\n\t],\n\tprops: {\n\t\tdashboard_id: Number,\n\t\twidgets: Array\n\t},\n\tcomputed: {\n\t\tapiurl() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/dashboard';\n\t\t}\n\t},\n\tmethods: {\n\t\tsendChange(widget_id) {\n\t\t\tlet allow = !this.widgets.find(el => el.widget_id == widget_id).allowed;\n\t\t\taxios.post(this.apiurl + '/Widget/setAllowed', {\n\t\t\t\tdashboard_id: this.dashboard_id,\n\t\t\t\twidget_id,\n\t\t\t\taction: allow ? 'add' : 'delete'\n\t\t\t}).catch(err => console.error('ERROR: ' + err));\n\t\t}\n\t},\n\tcreated() {\n\t\taxios.get(this.apiurl + '/Widget/getAll', {\n\t\t\tparams:{\n\t\t\t\tdashboard_id: this.dashboard_id\n\t\t\t}\n\t\t}).then(\n\t\t\tresult => {\n\t\t\t\tthis.$emit('assignWidgets', result.data.retval.map(el => ({\n\t\t\t\t\t...el,\n\t\t\t\t\t...{setup:JSON.parse(el.setup),arguments:JSON.parse(el.arguments),allowed:!!el.allowed}\n\t\t\t\t})));\n\t\t\t}\n\t\t).catch(err => console.error('ERROR:', err));\n\t},\n\ttemplate: `\n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t
    `\n}\n","export default {\n\tname:'GridItem',\n\tcomponents: {\n\t},\n\tinject: {\n\t},\n\tprops: {\n\t\titem: Object,\n\t\tactive: Boolean\n\t},\n\temits: [\n\t\t\"mouseDown\",\n\t\t\"mouseUp\",\n\t\t\"startMove\",\n\t\t\"startResize\",\n\t\t\"dragging\",\n\t\t\"endDrag\",\n\t\t\"dropDrag\",\n\t\t\"item\",\n\t\t\"touchStart\",\n\t\t\"touchEnd\",\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tdragAction: '',\n\t\t\tdragging: false\n\t\t}\n\t},\n\tcomputed: {\n\t},\n\tmethods: {\n\t\tregisterDragAction(evt) {\n\t\t\tthis.$emit('mouseDown', evt);\n\t\t\tif (evt.target.hasAttribute('drag-action')) {\n\t\t\t\tthis.dragAction = evt.target.getAttribute('drag-action');\n\t\t\t} else {\n\t\t\t\tlet parent = evt.target.closest('[drag-action]');\n\t\t\t\tif (parent) {\n\t\t\t\t\tthis.dragAction = parent.getAttribute('drag-action');\n\t\t\t\t} else {\n\t\t\t\t\tthis.dragAction = '';\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttryDragStart(evt, item) {\n\t\t\tlet dragAction = this.dragAction || evt.target.getAttribute('drag-action');\n\t\t\tif (dragAction) {\n\t\t\t\tthis.dragging = true;\n\t\t\t\tif (dragAction == 'move')\n\t\t\t\t\treturn this.$emit('startMove', evt, item);\n\t\t\t\telse if (dragAction == 'resize')\n\t\t\t\t\treturn this.$emit('startResize', evt, item);\n\t\t\t}\n\t\t\t//evt.preventDefault();\n\t\t},\n\t\ttouchDragEnd(evt) {\n\t\t\tif (!this.dragging)\n\t\t\t\treturn;\n\t\t\tthis.dragging = false;\n\t\t\tthis.$emit('touchEnd', evt);\n\t\t},\n\t\ttouchStart(event){\n\t\t\tthis.$emit('touchStart', event); \n\t\t\tthis.registerDragAction(event); \n\t\t\tthis.tryDragStart(event, this.item);\n\t\t},\n\t\ttouchMove(event){\n\t\t\tif(this.dragging){\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.$emit('dragging', event);\n\t\t\t}\n\t\t}\n\t\t\n\t},\n\ttemplate: `\n\t
    \n\t\t\n\t
    `\n}\n","// TODO(chris): Comments\n\nconst DIR_UP = 0;\nconst DIR_LEFT = 1;\nconst DIR_RIGHT = 2;\nconst DIR_DOWN = 3;\n\nclass GridLogic {\n\tconstructor(w) {\n\t\tif (w.w) {\n\t\t\tthis.w = w.w;\n\t\t\tthis.h = w.h;\n\t\t\tthis.data = [...w.data];\n\t\t\tthis.grid = [...w.grid];\n\t\t} else {\n\t\t\tthis.w = w;\n\t\t\tthis.h = 1;\n\t\t\tthis.data = [];\n\t\t\tthis.grid = [];\n\t\t}\n\t}\n\tisFreeSlot(x, y) {\n\t\tconst i = y*this.w + x;\n\t\treturn !this.grid[i] && this.grid[i] !== 0;\n\t}\n\tgetMaxY(){\n\t\treturn this.data.reduce((acc, item) => { \n\t\t\tif (item?.y > acc) {\n\t\t\t\t acc = item.y; \n\t\t\t} \n\t\t\treturn acc; \n\t\t}, 0);\n\t}\n\tgetFreeSlots() {\n\t\tconst freeSlots = [];\n\t\tlet biggestY = this.getMaxY();\n\t\tlet totalSpaces = this.w * (biggestY+1);\n\t\tfor(let i=0; i < totalSpaces; i++){\n\t\t\tif (!this.grid[i] && this.grid[i] !== 0){\n\t\t\t\tthis.grid[i] = undefined;\n\t\t\t}\n\t\t}\n\t\tfor(let i =0; i < this.grid.length; i++){\n\t\t\tif (!this.grid[i] && this.grid[i] !== 0){\n\t\t\t\tlet x = i % this.w;\n\t\t\t\tlet y = Math.floor(i / this.w);\n\t\t\t\tfreeSlots.push({x, y});\n\t\t\t}\n\t\t}\n\t\treturn freeSlots;\n\t}\n\tadd(item, prefer) {\n\t\tlet occupiers = this.getItemsInFrame(item.frame);\n\t\tif (!occupiers.length) {\n\t\t\titem.frame.forEach(f => this.grid[f] = item.index);\n\t\t\tthis.data[item.index] = item;\n\t\t\tthis.h = Math.max(this.h, item.y + item.h);\n\t\t\treturn [];\n\t\t} else {\n\t\t\tconst intermGrid = new GridLogic(this);\n\t\t\t\n\t\t\titem.frame.forEach(f => intermGrid.grid[f] = -1);\n\n\t\t\tconst possiblities = intermGrid.tryMoving(occupiers, prefer);\n\t\t\tif (possiblities.length) {\n\t\t\t\tconst bestOption = possiblities.sort((a,b) => {\n\t\t\t\t\tif (a.cost === undefined)\n\t\t\t\t\t\ta.cost = a.moves.reduce((a, v) => a * v.cost, 1);\n\t\t\t\t\tif (b.cost === undefined)\n\t\t\t\t\t\tb.cost = b.moves.reduce((a, v) => a * v.cost, 1);\n\t\t\t\t\treturn a.cost > b.cost;\n\t\t\t\t});\n\t\t\t\tconst result = [];\n\t\t\t\tbestOption[0].moves.forEach(move => {\n\t\t\t\t\tconst currItem = {...this.data[move.index]};\n\t\t\t\t\tcurrItem.x += move.x;\n\t\t\t\t\tcurrItem.y += move.y;\n\t\t\t\t\tcurrItem.frame = this.getItemFrame(currItem);\n\t\t\t\t\tthis.h = Math.max(this.h, currItem.y + currItem.h);\n\t\t\t\t\tthis.remove(currItem);\n\t\t\t\t\tcurrItem.frame.forEach(f => this.grid[f] = currItem.index);\n\t\t\t\t\tthis.data[move.index] = currItem;\n\t\t\t\t\tresult[move.index] = {\n\t\t\t\t\t\tindex: currItem.index,\n\t\t\t\t\t\tx: currItem.x,\n\t\t\t\t\t\ty: currItem.y\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\titem.frame.forEach(f => this.grid[f] = item.index);\n\t\t\t\tthis.data[item.index] = item;\n\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\tconsole.error('FATAL', \"can't arrange item on grid\");\n\t\t\t}\n\t\t}\n\t}\n\tmove(item, x, y) {\n\t\tif (item.data.place[this.w]?.pinned)\n\t\t\treturn [];\n\t\tif (item.x == x && item.y == y)\n\t\t\treturn [];\n\t\t\n\t\tthis.remove(item);\n\n\t\tlet prefer = undefined;\n\t\tif (item.x == x) {\n\t\t\tif (y-item.y > 0)\n\t\t\t\tprefer = DIR_UP;\n\t\t\telse\n\t\t\t\tprefer = DIR_DOWN;\n\t\t} else if (item.y == y) {\n\t\t\tif (x-item.x > 0)\n\t\t\t\tprefer = DIR_LEFT;\n\t\t\telse\n\t\t\t\tprefer = DIR_RIGHT;\n\t\t}\n\n\t\tconst originalFrame = Array.isArray(item.frame) ? [...item.frame] : [item.frame];\n\n\t\tconst currItem = {...item};\n\t\tcurrItem.x = x;\n\t\tcurrItem.y = y;\n\t\tcurrItem.frame = this.getItemFrame(currItem);\n\t\tlet occupiers = this.getItemsInFrame(currItem.frame);\n\t\t\n\t\t// does not update if the target conatins pinned widgets\n\t\tif (occupiers.some(frame => this.data[frame]?.data.place[this.w]?.pinned)) {\n\t\t\treturn [];\n\t\t}\n\t\t\n\t\t// checks if target contains widget with the same high and width\n\t\tlet occupiersData = occupiers.map(occupier => this.data[occupier]);\n\t\tlet occupiersFrame = occupiersData.map(occupier => occupier.frame).flat();\n\t\tif (!occupiersFrame.some(frame => !currItem.frame.includes(frame)) && !occupiersFrame.some(frame => originalFrame.includes(frame))){\n\t\t\tlet replaceUpdate = [];\n\t\t\tlet newOccupierFrames = [];\n\t\t\tfor(let f of originalFrame){\n\t\t\t\tif(newOccupierFrames.includes(f)){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tlet occ = occupiersData.shift();\n\t\t\t\tif(occ){\n\t\t\t\t\tnewOccupierFrames = [...newOccupierFrames, ...this.getItemFrame({ ...occ, ...this.getSingleFramePosition(f) })];\n\t\t\t\t\treplaceUpdate[occ.index] = { index: occ.index, ...this.getSingleFramePosition(f)}\n\t\t\t\t}\n\t\t\t}\n\t\t\treplaceUpdate[item.index] = { index: item.index, x, y };\n\t\t\t\n\t\t\treturn replaceUpdate;\n\t\t}\n\t\t\n\t\tconst updates = this.add(currItem, prefer);\n\t\tupdates[item.index] = {index: item.index, x, y};\n\t\treturn updates;\n\t}\n\tresize(item, w, h) {\n\t\tif (item.w == w && item.h == h)\n\t\t\treturn [];\n\t\tthis.remove(item);\n\n\t\tconst currItem = {...item};\n\t\tcurrItem.w = w;\n\t\tcurrItem.h = h;\n\t\tcurrItem.frame = this.getItemFrame(currItem);\n\t\t\n\t\tconst updates = this.add(currItem);\n\t\tif(updates)\n\t\t\tupdates[item.index] = {index: item.index, w, h, x:item.x, y:item.y, resize:true};\n\n\t\treturn updates;\n\t}\n\ttryMoving(index, prefer) {\n\t\tif (Array.isArray(index)) {\n\t\t\tindex.forEach(i => this.remove({index:i}));\n\t\t\tlet possiblities = [{grid: this, moves: []}];\n\t\t\tindex.forEach(i => {\n\t\t\t\tlet newPoss = [];\n\t\t\t\tpossiblities.forEach(possiblity => {\n\t\t\t\t\tpossiblity.grid.tryMoving(i, prefer).forEach(p => {\n\t\t\t\t\t\tpossiblity.moves\n\t\t\t\t\t\tp.moves = [...p.moves, ...possiblity.moves];\n\t\t\t\t\t\tnewPoss.push(p)\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tpossiblities = newPoss;\n\t\t\t});\n\t\t\treturn possiblities;\n\t\t}\n\t\tconst directions = [DIR_UP, DIR_DOWN, DIR_LEFT, DIR_RIGHT];\n\n\t\tthis.remove({index});\n\n\t\tconst weight = 1 + .2*(this.data[index].weight || 0);\n\n\t\treturn directions.reduce((result, dir) => {\n\t\t\tlet res = this.tryMovingInDirection(dir, index, 1, (prefer === dir ? .5 : 1 + dir*.1) * weight);\n\t\t\tif (!res)\n\t\t\t\treturn result;\n\t\t\treturn [...result, ...res];\n\t\t}, []).filter(p => p);\n\t}\n\ttryMovingInDirection(dir, index, amount, cost) {\n\t\tconst move = {index, x:0, y: 0, cost: cost};\n\t\tlet targetframe;\n\t\tswitch(dir) {\n\t\t\tcase DIR_UP:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned || this.data[index].y - amount < 0)\n\t\t\t\t\treturn false;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i-this.w*amount);\n\t\t\t\tmove.y = -amount;\n\t\t\t\tbreak;\n\t\t\tcase DIR_DOWN:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned)\n\t\t\t\t\treturn false;\n\t\t\t\tif (this.data[index].y + this.data[index].h + amount > this.h)\n\t\t\t\t\tcost += .4;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i+this.w*amount);\n\t\t\t\tmove.y = amount;\n\t\t\t\tbreak;\n\t\t\tcase DIR_LEFT:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned || this.data[index].x - amount < 0)\n\t\t\t\t\treturn false;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i-amount);\n\t\t\t\tmove.x = -amount;\n\t\t\t\tbreak;\n\t\t\tcase DIR_RIGHT:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned || this.data[index].x + this.data[index].w + amount > this.w)\n\t\t\t\t\treturn false;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i+amount);\n\t\t\t\tmove.x = amount;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tconst occupiers = this.getItemsInFrame(targetframe);\n\t\tif (occupiers.includes(-1)) {\n\t\t\treturn this.tryMovingInDirection(dir, index, amount+1, cost);\n\t\t}\n\t\t\n\t\tconst intermGrid = new GridLogic(this);\n\t\ttargetframe.forEach(f => intermGrid.grid[f] = -1);\n\t\t\n\t\tif (!occupiers.length) {\n\t\t\treturn [{grid: intermGrid, moves: [move]}];\n\t\t}\n\t\tconst possiblities = intermGrid.tryMoving(occupiers).map(possiblity => possiblity.moves.unshift(move) && possiblity);\n\t\treturn possiblities.length ? possiblities : false;\n\t}\n\tclearWeights() {\n\t\tthis.data.forEach(item => item.weight = undefined);\n\t}\n\tgetItemsInFrame(frame) {\n\t\treturn frame.map(i => this.grid[i]).filter((v,i,a) => (v || v === 0) && a.indexOf(v) === i);\n\t}\n\tremove(item) {\n\t\tthis.grid = this.grid.map(i => i != item.index ? i : undefined);\n\t}\n\tgetItemFrame(item) {\n\t\tconst frame = [];\n\t\tfor (let i = 0; i < item.w; i++)\n\t\t\tfor (let j = 0; j < item.h; j++)\n\t\t\t\tframe.push(i + item.x + (j + item.y) * this.w);\n\t\treturn frame;\n\t}\n\tgetSingleFramePosition(frame){\n\t\treturn { x: frame % this.w, y: Math.floor(frame / this.w)};\n\t}\n\tdebug() {\n\t\treturn this.grid;\n\t}\n}\n\nexport default GridLogic;","// TODO(chris): Comments\n\nimport GridItem from './Grid/Item.js';\nimport GridLogic from '../../composables/GridLogic.js';\n\nconst MODE_IDLE = 0;\nconst MODE_MOVE = 1;\nconst MODE_RESIZE = 2;\nconst MODE_MOUSE_DOWN = 3;\n\nexport default {\n\tname: 'Grid',\n\tcomponents: {\n\t\tGridItem,\n\t},\n\tprops: {\n\t\tcols: Number,\n\t\titems: Array,\n\t\titemsSetup: Object,\n\t\tresizeLimit: Function,\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tmarginForExtraRow: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0\n\t\t},\n\t\tadditionalRow:{\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t}\n\t},\n\temits: [\n\t\t\"rearrangeItems\",\n\t\t\"newItem\",\n\t\t\"gridHeight\",\n\t\t\"draggedItem\",\n\t\t\"update:additionalRow\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tx: -1,\n\t\t\ty: -1,\n\t\t\tclientX:0,\n\t\t\tclientY: 0,\n\t\t\tmode: MODE_IDLE,\n\t\t\tgrid: null,\n\t\t\tdragGrid: null,\n\t\t\tpermUpdates: [],\n\t\t\tpositionUpdates: null,\n\t\t\tfixedPositionUpdates: null,\n\t\t\tdraggedOffset: [0,0],\n\t\t\tdraggedItem: null,\n\t\t\tdraggedNode: null,\n\t\t\treorderedItems:[],\n\t\t\tclonedWidget:null,\n\t\t}\n\t},\n\tinject:{\n\t\tsectionName: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tcomputed: {\n\t\tadditionalRowComputed: {\n\t\t\tget() {\n\t\t\t\treturn this.additionalRow;\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tthis.$emit('update:additionalRow', value);\n\t\t\t}\n\t\t},\n\t\titems_hashmap() {\n\t\t\tlet items = {};\n\t\t\tthis.items.forEach(item => {\n\t\t\t\tif (this.reorderedItems.length > 0 && this.needsReordering(item)){\n\t\t\t\t\t\tlet rearrangedPosition = this.reorderedItems.filter(widget => widget.data.widgetid == item.widgetid)?.pop();\n\t\t\t\t\t\tif (rearrangedPosition) {\t\t\t\n\t\t\t\t\t\t\titem.x = rearrangedPosition.x;\n\t\t\t\t\t\t\titem.y = rearrangedPosition.y;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\titems[`x${item.x}y${item.y}`] = item;\n\t\t\t});\t\n\t\t\treturn items\n\t\t},\n\t\titems_placeholders(){\n\t\t\tlet placeholders = [];\n\t\t\tlet col_max = this.cols;\n\t\t\tlet rows_max = this.rows;\n\n\t\t\t// occupied hashmap to keep track of the occupied cells\n\t\t\tlet occupied = {};\n\n\t\t\tfor (let y = 0; y < rows_max; y++) {\n\t\t\t\tfor (let x = 0; x < col_max; x++) {\n\t\t\t\t\t// skip current position if it was registered as occupied\n\t\t\t\t\tif (Object.keys(occupied).length && occupied[`x${x}y${y}`]) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tlet current_item = this.items_hashmap[`x${x}y${y}`];\n\t\t\t\t\tif (current_item) {\n\t\t\t\t\t\t//calculate the occupied cells from the width and the height from the items \n\t\t\t\t\t\tlet width = current_item.w;\n\t\t\t\t\t\tlet height = current_item.h;\n\t\t\t\t\t\tlet max_x = x + width - 1;\n\t\t\t\t\t\tlet max_y = y + height - 1;\n\t\t\t\t\t\tif(x != max_x || y != max_y){\n\t\t\t\t\t\t\tfor (let occupied_y = y; occupied_y <= max_y; occupied_y++) {\n\t\t\t\t\t\t\t\tfor (let occupied_x = x; occupied_x <= max_x; occupied_x++) {\n\t\t\t\t\t\t\t\t\tif (occupied_x != x || occupied_y != y) {\n\t\t\t\t\t\t\t\t\t\toccupied[`x${occupied_x}y${occupied_y}`]=true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tplaceholders.push({ x: x, y: y, w: 1, h: 1, placeholder: true, \n\t\t\t\t\t\t\tdata: { id: 'placeholder_' + String(placeholders.length).padStart(4, \"0\") } });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn placeholders;\n\t\t},\n\t\tplacedItems_withPlaceholders() {\n\t\t\treturn [...this.placedItems, ...this.items_placeholders];\n\t\t},\n\t\trows() {\n\t\t\tif (this.additionalRowComputed) {\n\t\t\t\t\treturn this.grid ? (this.grid.h+1) : 1;\n\t\t\t}\n\t\t\treturn this.grid ? this.grid.h : 1;\n\t\t\t\n\t\t},\n\t\tgridStyle() {\n\t\t\tconst addH = this.active ? this.marginForExtraRow : 0;\n\t\t\treturn {\n\t\t\t\t'--fhc-dg-row-height': 100/(this.rows + addH) + '%',\n\t\t\t\t'--fhc-dg-col-width': 100/this.cols + '%',\n\t\t\t\t'--fhc-dg-item-padding-horizontal': '0.25%',\n\t\t\t\t'--fhc-dg-item-padding-top': '0.5%',\n\t\t\t\t'padding-bottom': 100 * (this.rows + addH)/this.cols + '%'\n\t\t\t}\n\t\t},\n\t\tindexedItems() {\n\t\t\treturn this.items.map(\n\t\t\t\t(item, index) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\tx: item.x,\n\t\t\t\t\t\ty: item.y,\n\t\t\t\t\t\tw: item.w,\n\t\t\t\t\t\th: item.h,\n\t\t\t\t\t\tweight: item.weight || 0,\n\t\t\t\t\t\tdata: item\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\tprePlacedItems() {\n\t\t\tif (!this.fixedPositionUpdates)\n\t\t\t\treturn this.indexedItems;\n\t\t\treturn this.indexedItems.map(item => {\n\t\t\t\tif (!this.fixedPositionUpdates[item.index])\n\t\t\t\t\treturn item;\n\t\t\t\treturn {\n\t\t\t\t\tindex: item.index,\n\t\t\t\t\tweight: item.weight,\n\t\t\t\t\tdata: item.data,\n\t\t\t\t\tx: this.fixedPositionUpdates[item.index].x === undefined ? item.x : this.fixedPositionUpdates[item.index].x,\n\t\t\t\t\ty: this.fixedPositionUpdates[item.index].y === undefined ? item.y : this.fixedPositionUpdates[item.index].y,\n\t\t\t\t\tw: this.fixedPositionUpdates[item.index].w === undefined ? item.w : this.fixedPositionUpdates[item.index].w,\n\t\t\t\t\th: this.fixedPositionUpdates[item.index].h === undefined ? item.h : this.fixedPositionUpdates[item.index].h\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\tplacedItems() {\n\t\t\tif (!this.positionUpdates)\n\t\t\t\treturn this.prePlacedItems;\n\t\t\tlet mappedPlacedItems= this.prePlacedItems.map(item => {\n\t\t\t\tif (!this.positionUpdates[item.index] )\n\t\t\t\t\treturn item;\n\t\t\t\tlet height_diff = this.positionUpdates[item.index]?.h - item.h;\n\t\t\t\tlet width_diff = this.positionUpdates[item.index]?.w - item.w;\n\t\t\t\treturn {\n\t\t\t\t\tresize: this.positionUpdates[item.index]?.resize,\n\t\t\t\t\tindex: item.index,\n\t\t\t\t\tweight: item.weight,\n\t\t\t\t\tdata: item.data,\n\t\t\t\t\tx: this.positionUpdates[item.index].x === undefined ? item.x : this.positionUpdates[item.index].x,\n\t\t\t\t\ty: this.positionUpdates[item.index].y === undefined ? item.y : this.positionUpdates[item.index].y,\n\t\t\t\t\tw: width_diff>0?item.w:this.positionUpdates[item.index].w === undefined ? item.w : this.positionUpdates[item.index].w,\n\t\t\t\t\th: height_diff > 0 ?item.h:this.positionUpdates[item.index].h === undefined ? item.h : this.positionUpdates[item.index].h\n\t\t\t\t\t\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tlet temporaryResizeItems = [];\n\t\t\tmappedPlacedItems.forEach(item=>{\n\t\t\t\tif(item.resize){\n\t\t\t\t\tlet newItem = {\n\t\t\t\t\t\t...item,\n\t\t\t\t\t\tw:this.positionUpdates[item.index].w === undefined ? item.w : this.positionUpdates[item.index].w,\n\t\t\t\t\t\th:this.positionUpdates[item.index].h === undefined ? item.h : this.positionUpdates[item.index].h,\n\t\t\t\t\t\tresizeOverlay:true,\n\t\t\t\t\t\tblank:true,\n\t\t\t\t\t};\n\t\t\t\t\ttemporaryResizeItems.push(newItem)\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn [...mappedPlacedItems, ...temporaryResizeItems];\n\t\t},\n\t\tshowEmptyTileHover() {\n\t\t\tif (!this.active || !this.grid || this.mode != MODE_IDLE || this.x < 0 || this.y < 0 || this.x >= this.cols || this.y >= this.rows)\n\t\t\t\treturn false;\n\t\t\treturn this.grid.isFreeSlot(this.x, this.y);\n\t\t},\n\t\twidgetSetup(){\n\t\t\tif (!this.widgetsSetup)\n\t\t\t\treturn;\n\t\t\treturn this.widgetsSetup.reduce((acc, ele) => { \n\t\t\t\tacc[ele.widget_id] =ele;\n\t\t\t\treturn acc;\n\t\t\t} ,{});\n\t\t},\n\t},\n\twatch: {\n\t\tactive(active) {\n\t\t\tif (!active)\n\t\t\t\tthis.dragCancel();\n\t\t},\n\t\tcols() {\n\t\t\tthis.dragCancel();\n\t\t},\n\t rows: {\n\t\t\thandler(value) {\n\t\t\t\tthis.$emit('gridHeight', value);\n\t\t\t},\n\t\t\timmediate: true\n\t\t},\n\t\tindexedItems: {\n\t\t\thandler(value) {\n\t\t\t\tthis.dragCancel();\n\n\t\t\t\tconst updated = this.createNewGrid(value);\n\n\t\t\t\tthis.fixedPositionUpdates = updated;\n\t\t\t\tif (updated.length)\n\t\t\t\t\tthis.$emit('rearrangeItems', updated.filter(v => v));\n\t\t\t},\n\t\t\timmediate: true,\n\t\t\tdeep: true\n\t\t}\n\t},\n\tmethods: {\n\t\tneedsReordering(item){\n\t\t\tif (!item?.data?.place[this.cols]){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\ttoggleDraggedItemOverlay(condition){\n\t\t\tif(!this.draggedNode)\n\t\t\t\treturn;\n\t\t\tif(condition){\n\t\t\t\tthis.draggedNode.firstElementChild.classList.add(\"dashboard-item-overlay\");\n\t\t\t}else{\n\t\t\t\tthis.draggedNode.firstElementChild.classList.remove(\"dashboard-item-overlay\");\n\t\t\t}\n\t\t},\n\t\tdragging(event){\n\t\t\tif(this.mode == MODE_MOVE){\n\t\t\t\tthis.toggleDraggedItemOverlay(true);\n\t\t\t\t\n\t\t\t\tconst containerRect = this.$refs.container.getBoundingClientRect();\n\t\t\t\tconst clonedWidgetRect = this.clonedWidget.getBoundingClientRect();\n\t\t\t\t\n\t\t\t\tlet desiredTop = this.clientY - 20;\n\t\t\t\tlet desiredLeft = this.clientX - 15;\n\t\t\t\t\n\t\t\t\tconst minTop = 0;\n\t\t\t\tconst maxTop = containerRect.height - clonedWidgetRect.height;\n\t\t\t\tconst minLeft = 0;\n\t\t\t\tconst maxLeft = containerRect.width - clonedWidgetRect.width;\n\t\t\t\t\n\t\t\t\tconst constrainedTop = Math.max(minTop, Math.min(maxTop, desiredTop));\n\t\t\t\tconst constrainedLeft = Math.max(minLeft, Math.min(maxLeft, desiredLeft));\n\t\t\t\t\n\t\t\t\tthis.clonedWidget.style.top = `${constrainedTop}px`;\n\t\t\t\tthis.clonedWidget.style.left = `${constrainedLeft}px`;\n\t\t\t}\n\t\t},\n\t\tcreateNewGrid(items) {\n\t\t\tthis.grid = new GridLogic(this.cols);\n\t\t\tconst result = [];\n\t\t\tlet sortedItems = [...items].sort((a, b) => {\n\t\t\t\tif(this.needsReordering(a) && this.needsReordering(b)){\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\telse if(this.needsReordering(a)){\n\t\t\t\t\treturn 999;\n\t\t\t\t}\n\t\t\t\telse if(this.needsReordering(b)){\n\t\t\t\t\treturn -999;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn a.weight > b.weight;\n\t\t\t}); \n\t\t\tlet reorderedItems = [];\n\t\t\tsortedItems.forEach(item => {\n\t\t\t\tlet freeSlots = this.grid.getFreeSlots();\n\t\t\t\t\n\t\t\t\tif(this.needsReordering(item)){\n\t\t\t\t\tlet firstFreeSlot = freeSlots.shift();\n\t\t\t\t\tif (!firstFreeSlot) {\n\t\t\t\t\t\titem.x = 0;\n\t\t\t\t\t\titem.y = this.grid.h;\n\t\t\t\t\t}else{\n\t\t\t\t\t\titem.x = firstFreeSlot.x;\n\t\t\t\t\t\titem.y = firstFreeSlot.y;\n\t\t\t\t\t}\n\t\t\t\t\treorderedItems.push(item);\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tif (item.x + item.w > this.cols) {\n\t\t\t\t\tlet targetW = this.cols-item.x,\n\t\t\t\t\t\ttargetX = undefined;\n\t\t\t\t\tif (this.resizeLimit) {\n\t\t\t\t\t\t[targetW] = this.resizeLimit(item.data, targetW, item.h);\n\t\t\t\t\t}\n\t\t\t\t\tif (targetW < 1)\n\t\t\t\t\t\ttargetW = 1;\n\t\t\t\t\tif (targetW > this.cols)\n\t\t\t\t\t\ttargetW = this.cols;\n\t\t\t\t\tif (item.x + targetW > this.cols) {\n\t\t\t\t\t\ttargetX = this.cols - targetW;\n\t\t\t\t\t}\n\t\t\t\t\tif (targetW == item.w)\n\t\t\t\t\t\ttargetW = undefined;\n\t\t\t\t\tresult[item.index] = {\n\t\t\t\t\t\titem: item.data,\n\t\t\t\t\t\tx: targetX,\n\t\t\t\t\t\tw: targetW\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\titem.frame = this.grid.getItemFrame(item);\n\t\t\t\tthis.convertGridResultToUpdate(this.grid.add(item), result, items);\n\t\t\t});\n\t\t\tthis.reorderedItems = reorderedItems;\n\t\t\tthis.grid.clearWeights();\n\t\t\treturn result;\n\t\t},\n\t\tconvertGridResultToUpdate(input, output, baseArray) {\n\t\t\t\n\t\t\tif (!input)\n\t\t\t\treturn;\n\t\t\tif (!baseArray)\n\t\t\t\tbaseArray = this.indexedItems;\n\t\t\tinput.forEach(item => {\n\t\t\t\tlet result = {\n\t\t\t\t\titem: baseArray[item.index].data\n\t\t\t\t};\n\t\t\t\tif (item.x !== undefined)\n\t\t\t\t\tresult.x = item.x;\n\t\t\t\tif (item.y !== undefined)\n\t\t\t\t\tresult.y = item.y;\n\t\t\t\tif (item.w !== undefined)\n\t\t\t\t\tresult.w = item.w;\n\t\t\t\tif (item.h !== undefined)\n\t\t\t\t\tresult.h = item.h;\n\t\t\t\toutput[item.index] = result;\n\t\t\t});\n\t\t},\n\t\tmouseLeave() {\n\t\t\t/* if (this.mode == MODE_IDLE) {\n\t\t\t\tthis.x = -1;\n\t\t\t\tthis.y = -1;\n\t\t\t\t\n\t\t\t} */\n\t\t},\n\t\tupdateCursor(evt) {\n\t\t\tif (!this.active) {\n\t\t\t\tthis.x = this.y = -1;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst addH = this.active ? this.marginForExtraRow : 0;\n\t\t\tconst rect = this.$refs.container.getBoundingClientRect();\n\t\t\t\n\t\t\tif (!evt.clientX && !evt.clientY && evt.touches){\n\t\t\t\tevt.clientX = evt.touches[0].clientX;\n\t\t\t\tevt.clientY = evt.touches[0].clientY;\n\t\t\t}\n\n\t\t\tthis.clientX = (evt.clientX - rect.left);\n\t\t\tthis.clientY = (evt.clientY - rect.top);\n\t\t\tconst gridX = Math.floor(this.cols * (evt.clientX - rect.left) / this.$refs.container.clientWidth);\n\t\t\tconst gridY = Math.floor((this.rows + addH) * (evt.clientY - rect.top) / this.$refs.container.clientHeight);\n\t\t\t\n\t\t\tif (this.x == gridX && this.y == gridY)\n\t\t\t\treturn false;\n\t\t\t\n\t\t\tthis.x = gridX;\n\t\t\tthis.y = gridY;\n\n\t\t\treturn true;\n\t\t},\n\t\t_dragStart(evt, item) {\n\t\t\tif (evt.dataTransfer) {\n\t\t\t\tevt.dataTransfer.setDragImage(evt.target, -99999, -99999);\n\t\t\t\tevt.dataTransfer.dropEffect = 'move';\n\t\t\t\tevt.dataTransfer.effectAllowed = 'move';\n\t\t\t}\n\t\t},\n\t\tstartMove(evt, item) {\n\t\t\t\n\t\t\tif (!this.active)\n\t\t\t\treturn;\n\t\t\t\n\t\t\tthis.mode = MODE_MOVE;\n\t\t\t\n\t\t\tthis.draggedItem = item;\n\t\t\t\n\t\t\tthis.$emit('draggedItem', item);\n\t\t\t// workaround for chrome fireing event dragend when styles are manipulated during dragging\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.draggedNode = evt.target.closest(\".drop-grid-item\");\n\t\t\t\t//clones the widget for the drag Image\n\t\t\t\t\n\t\t\t\tlet clone = evt.target.closest(\".drop-grid-item\")?.cloneNode(true);\n\n\t\t\t\tclone.style.zIndex = 5;\n\t\t\t\tclone.classList.add(\"widgetClone\");\n\t\t\t\tthis.$refs.container.appendChild(clone);\n\t\t\t\tconst hiddenWidget = clone.querySelector(\"[style='display: none;']\");\n\t\t\t\thiddenWidget.style.removeProperty(\"display\");\n\t\t\t\tthis.clonedWidget = clone;\n\t\t\t}, 0);\n\n\t\t\tthis.draggedOffset = [item.x - this.x, item.y - this.y];\n\t\t\tthis._dragStart(evt, item);\n\t\t},\n\t\tstartResize(evt, item) {\n\t\t\tif (!this.active)\n\t\t\t\treturn;\n\t\t\tthis.mode = MODE_RESIZE;\n\t\t\tthis.draggedItem = item;\n\t\t\tthis.$emit('draggedItem', item);\n\t\t\tthis._dragStart(evt);\n\t\t},\n\t\tdragOver(evt) {\n\t\t\tif ((this.y + 1) > this.rows && (this.mode == MODE_MOVE || this.mode == MODE_RESIZE)) {\n\t\t\t\tthis.dragCancel();\n\t\t\t\t\n\t\t\t}\n\t\t\tif (!this.active)\n\t\t\t\treturn this.dragCancel();\n\t\t\tthis.checkPinnedWidgetAnimation();\n\t\t\tif(this.mode == MODE_RESIZE){\n\t\t\t\tthis.checkWidgetSizeLimitAnimation();\n\t\t\t}\n\t\t\tif (this.updateCursor(evt)) {\n\t\t\t\tswitch(this.mode) {\n\t\t\t\t\tcase MODE_MOVE: {\n\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\tthis.dragGrid = new GridLogic(this.grid);\n\t\t\t\t\t\tlet x = this.x + this.draggedOffset[0];\n\t\t\t\t\t\tlet y = this.y + this.draggedOffset[1];\n\t\t\t\t\t\tif (x < 0) {\n\t\t\t\t\t\t\tthis.draggedOffset[0] += x;\n\t\t\t\t\t\t\tx = 0;\n\t\t\t\t\t\t} else if (x + this.draggedItem.w > this.cols) {\n\t\t\t\t\t\t\tthis.draggedOffset[0] += this.cols - this.draggedItem.w - x;\n\t\t\t\t\t\t\tx = this.cols - this.draggedItem.w;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (y < 0) {\n\t\t\t\t\t\t\tthis.draggedOffset[1] += y;\n\t\t\t\t\t\t\ty = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.positionUpdates= this.dragGrid.move(this.draggedItem, x, y);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase MODE_RESIZE: {\n\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\tthis.dragGrid = new GridLogic(this.grid);\n\t\t\t\t\t\tlet w = Math.min(this.cols - this.draggedItem.x, Math.max(1, this.x - this.draggedItem.x + 1));\n\t\t\t\t\t\tlet h = Math.max(1, this.y - this.draggedItem.y + 1);\n\t\t\t\t\t\tif (this.resizeLimit)\n\t\t\t\t\t\t\t[w, h] = this.resizeLimit(this.draggedItem.data, w, h);\n\t\t\t\t\t\tthis.positionUpdates = this.dragGrid.resize(this.draggedItem, w, h);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdragCancel() {\n\t\t\tthis.removeWidgetClones();\n\t\t\tthis.additionalRowComputed = false;\n\t\t\tthis.toggleDraggedItemOverlay(false);\n\t\t\tthis.mode = MODE_IDLE;\n\t\t\tthis.positionUpdates = null;\n\t\t\tthis.draggedOffset = [0,0],\n\t\t\tthis.draggedItem = null;\n\t\t\tthis.$emit('draggedItem',null);\n\t\t\tthis.draggedNode = null;\n\t\t\t\n\t\t},\n\t\tdragEnd() {\n\t\t\tthis.removeWidgetClones();\n\t\t\tthis.toggleDraggedItemOverlay(false);\n\t\t\t\n\t\t\tif (this.mode == MODE_IDLE){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// clean up unused classes\n\t\t\tlet draggedItemNode = document.getElementById(this.draggedItem.data.widgetid);\n\t\t\tdraggedItemNode.classList.remove(\"border-danger\");\n\t\t\tArray.from(document.getElementsByClassName(\"denied-dragging-animation\"))?.forEach(ele => {\n\t\t\t\tele.classList.remove(\"denied-dragging-animation\");\n\t\t\t})\n\t\t\t\n\t\t\t//if (!this.active || this.x < 0 || this.y < 0 || this.x >= this.cols)\n\t\t\t\t//return this.dragCancel();\n\n\t\t\tthis.mode = MODE_IDLE;\n\t\t\tlet updated = [];\n\t\t\tthis.convertGridResultToUpdate(this.positionUpdates, updated);\n\t\t\tupdated = this._updateFixedPositions(updated);\n\t\t\tif (updated.length)\n\t\t\t\tthis.$emit('rearrangeItems', updated.filter(v => v));\n\n\t\t\tthis.draggedItem = null;\n\t\t\tthis.draggedNode = null;\n\t\t\tthis.$emit('draggedItem', null);\n\t\t},\n\t\t_updateFixedPositions(updated) {\n\t\t\tupdated.forEach((item, index) => {\n\t\t\t\tif (!this.fixedPositionUpdates[index])\n\t\t\t\t\tthis.fixedPositionUpdates[index] = item;\n\t\t\t\telse\n\t\t\t\t\tthis.fixedPositionUpdates[index] = {...this.fixedPositionUpdates[index], ...item};\n\t\t\t});\n\t\t\tlet additionalUpdates = this.createNewGrid(this.prePlacedItems);\n\t\t\tif (additionalUpdates.length) {\n\t\t\t\t// NOTE(chris): this should never happen but it's here for safety\n\t\t\t\tadditionalUpdates.forEach((item, index) => updated[index] = item);\n\t\t\t\treturn this._updateFixedPositions(updated);\n\t\t\t}\n\t\t\treturn updated;\n\t\t},\n\t\temptyTileClicked() {\n\t\t\tthis.additionalRowComputed = false;\n\t\t\tthis.$emit('newItem', this.x, this.y);\n\t\t},\n\t\tupdateCursorOnMouseMove(evt){\n\t\t\tif(this.mode == MODE_IDLE){\n\t\t\t\tthis.updateCursor(evt);\n\t\t\t}\n\t\t},\n\t\tcheckPinnedWidgetAnimation(){\n\t\t\tlet itemAtPosition=[];\n\t\t\tswitch(this.mode){\n\t\t\t\tcase MODE_RESIZE:\n\t\t\t\t\tfor (let x = this.draggedItem.x; x <= this.x; x++) {\n\t\t\t\t\t\tfor (let y = this.draggedItem.y; y <= this.y; y++) {\n\t\t\t\t\t\t\tthis.items.forEach(item => {\n\t\t\t\t\t\t\t\tif (item.x == x && item.y == y) {\n\t\t\t\t\t\t\t\t\titemAtPosition.push(item);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase MODE_MOVE:\n\t\t\t\t\titemAtPosition = this.items.filter(item=>item.x == this.x && item.y == this.y);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tArray.from(document.getElementsByClassName(\"denied-dragging-animation\"))?.forEach(ele => {\n\t\t\t\tele.classList.remove(\"denied-dragging-animation\");\n\t\t\t})\n\n\t\t\titemAtPosition.forEach(item=>{\n\t\t\t\tif (item.place[this.cols] && item.place[this.cols].pinned) {\n\t\t\t\t\tlet pinnedWidget = document.getElementById(item.widgetid);\n\t\t\t\t\tlet pinNode = pinnedWidget.querySelector(\"[pinned='true']\");\n\t\t\t\t\tif (!pinNode.classList.contains(\"denied-dragging-animation\")) {\n\t\t\t\t\t\tpinNode.classList.add(\"denied-dragging-animation\");\n\t\t\t\t\t}\n\t\t\t\t}\t\n\t\t\t})\n\t\t},\n\t\tcheckWidgetSizeLimitAnimation() {\n\n\t\t\tlet draggedItemSetup = this.itemsSetup[this.draggedItem.data.widget];\n\t\t\tlet draggedItemMaxWidth = draggedItemSetup.width.max ?? draggedItemSetup.width;\n\t\t\tlet draggedItemMinWidth = draggedItemSetup.width.min ?? draggedItemSetup.width;\n\t\t\tlet draggedItemMaxHeight = draggedItemSetup.height.max ?? draggedItemSetup.height;\n\t\t\tlet draggedItemMinHeight = draggedItemSetup.height.min ?? draggedItemSetup.height;\n\t\t\tlet draggedItemNode = document.getElementById(this.draggedItem.data.widgetid);\n\n\t\t\tlet width_after_resize = this.x - this.draggedItem.x + 1; \n\t\t\tlet height_after_resize = this.y - this.draggedItem.y + 1; \n\t\t\tif( \n\t\t\t\t(width_after_resize > 0 && (width_after_resize > draggedItemMaxWidth\n\t\t\t\t|| width_after_resize < draggedItemMinWidth)\n\t\t\t\t)\n\t\t\t\t||\n\t\t\t\t(height_after_resize > 0 && (height_after_resize > draggedItemMaxHeight\n\t\t\t\t|| height_after_resize < draggedItemMinHeight)\n\t\t\t\t)\n\t\t\t){\n\t\t\t\tdraggedItemNode.classList.add(\"border-danger\");\n\t\t\t}else{\n\t\t\t\tdraggedItemNode.classList.remove(\"border-danger\");\n\t\t\t}\n\t\t},\n\t\tremoveWidgetClones(){\n\t\t\tlet widgetClones = Array.from(document.getElementsByClassName(\"widgetClone\"));\n\t\t\tfor (let i = 0; i < widgetClones.length; i++) {\n\t\t\t\tthis.$refs.container.removeChild(widgetClones[i]);\n\t\t\t}\n\t\t},\n\t\tmouseDown(){\n\t\t\tthis.mode = MODE_MOUSE_DOWN;\n\t\t},\n\t\tmouseUp() {\n\t\t\tthis.mode = MODE_IDLE;\n\t\t},\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t`\n}\n\n/*\nOLD VERSION - ON HOVER\n\n\t\n\n*/","let __widgets = {};\nlet __widgetsStarted = {};\nlet __path = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/dashboard/Widget';\n\nexport default {\n\tgetWidget(id) {\n\t\treturn __widgets[id];\n\t},\n\tloadWidget(id) {\n\t\tif (__widgets[id])\n\t\t\treturn Promise.resolve(__widgets[id]);\n\t\tif (__widgetsStarted[id])\n\t\t\treturn __widgetsStarted[id];\n\t\tif (!__path)\n\t\t\treturn Promise.reject('Widget could not be loaded because there is no path yet!');\n\n\t\t__widgetsStarted[id] = new Promise((resolve, reject) => {\n\t\t\taxios.get(__path, {params:{id}}).then(res => {\n\t\t\t\tres.data.retval.arguments = JSON.parse(res.data.retval.arguments);\n\t\t\t\tres.data.retval.setup = JSON.parse(res.data.retval.setup);\n\t\t\t\t__widgets[id] = res.data.retval;\n\t\t\t\t__widgetsStarted[id] = undefined;\n\t\t\t\tresolve(__widgets[id]);\n\t\t\t}).catch(error => reject(error.response.data.retval.error));\n\t\t});\n\t\treturn __widgetsStarted[id];\n\t},\n\tsetPath(path) {\n\t\t__path = path;\n\t}\n}","import BsModal from \"../Bootstrap/Modal.js\";\nimport CachedWidgetLoader from \"../../composables/Dashboard/CachedWidgetLoader.js\";\nimport HeightTransition from \"../Tranistion/HeightTransition.js\";\n\nexport default {\n\tname: 'Item',\n\tcomponents: {\n\t\tBsModal,\n\t\tHeightTransition\n\t},\n\tdata: () => ({\n\t\tcomponent: \"\",\n\t\targuments: null,\n\t\ttarget: false,\n\t\twidget: null,\n\t\ttmpConfig: {},\n\t\tisLoading: false,\n\t\thasConfig: false,\n\t\tsharedData: null,\n\t}),\n\temits: [\n\t\t\"change\",\n\t\t\"remove\",\n\t\t\"dragstart\",\n\t\t\"resizestart\",\n\t\t\"configOpened\",\n\t\t\"configClosed\",\n\t\t\"pinItem\",\n\t\t\"unPinItem\"\n\t],\n\tprops: [\n\t\t\"id\",\n\t\t\"widgetID\",\n\t\t\"config\",\n\t\t\"width\",\n\t\t\"height\",\n\t\t\"custom\",\n\t\t\"hidden\",\n\t\t\"editMode\",\n\t\t\"loading\",\n\t\t\"item_data\",\n\t\t\"place\",\n\t\t\"setup\",\n\t\t\"dragstate\",\n\t\t\"resizeOverlay\",\n\t\t\"additionalRow\"\n\t],\n\tcomputed: {\n\t\tmaxHeight(){\n\t\t\treturn this.setup?.height?.max;\n\t\t},\n\t\tmaxWidth(){\n\t\t\tif (Object.prototype.toString.call(this.setup?.width) == \"[object Number]\"){\n\t\t\t\treturn this.setup?.width;\n\t\t\t}\n\t\t\treturn this.setup?.width?.max;\n\t\t},\n\t\tminHeight() {\n\t\t\treturn this.setup?.height?.min;\n\t\t},\n\t\tminWidth() {\n\t\t\treturn this.setup?.width?.min;\n\t\t},\n\t\tisResizeable(){\n\t\t\treturn this.maxWidth >1 || this.maxHeight >1;\n\t\t},\n\t\tisPinned(){\n\t\t\treturn this.place?.pinned ? true : false;\n\t\t},\n\t\tready() {\n\t\t\treturn this.component && this.arguments !== null;\n\t\t},\n\t},\n\tmethods: {\n\t\tunpin(){\n\t\t\t// Unpinning is only possible in edit mode\n\t\t\tif(!this.editMode)\n\t\t\t\treturn;\n\t\t\tlet result = { item: this.item_data, x: this.item_data.x, y: this.item_data.y };\n\t\t\tthis.$emit('unPinItem', [result]);\n\t\t},\n\t\tpinItem(){\n\t\t\tlet result = { item: this.item_data, x: this.item_data.x, y: this.item_data.y};\n\t\t\tthis.$emit('pinItem',[result]);\n\t\t},\n\t\tgetWidgetC4Link(widget) {\n\t\t\treturn (FHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router + widget.setup.cis4link)\n\t\t},\n\t\thandleShowBsModal() {\n\t\t\tthis.$emit('configOpened')\n\t\t},\n\t\thandleHideBsModal() {\n\t\t\tthis.$emit('configClosed')\n\t\t},\n\t\tmouseDown(e) {\n\t\t\tthis.target = e.target;\n\t\t},\n\t\tstartDrag(e) {\n\t\t\tif (this.$refs.dragHandle.contains(this.target)) {\n\t\t\t\tthis.$emit(\"dragstart\", e);\n\t\t\t} else if (\n\t\t\t\tthis.isResizeable &&\n\t\t\t\tthis.$refs.resizeHandle.contains(this.target)\n\t\t\t) {\n\t\t\t\tif (this.isResizeable) this.$emit(\"resizestart\", e);\n\t\t\t\telse e.preventDefault();\n\t\t\t} else {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\topenConfig() {\n\t\t\tthis.tmpConfig = { ...this.arguments };\n\t\t\tthis.$refs.config.show();\n\t\t},\n\t\tsetConfig(hasConfig) {\n\t\t\tthis.hasConfig = hasConfig;\n\t\t},\n\t\tchangeConfig() {\n\t\t\tthis.isLoading = true;\n\t\t\tlet config = { ...this.tmpConfig };\n\t\t\tthis.sendChangeConfig(config);\n\t\t},\n\t\tchangeConfigManually() {\n\t\t\tlet config = { ...this.arguments };\n\t\t\tthis.sendChangeConfig(config);\n\t\t},\n\t\tsendChangeConfig(config) {\n\t\t\tfor (var k in config) {\n\t\t\t\tif (this.widget.arguments[k] == config[k]) {\n\t\t\t\tdelete config[k];\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$emit(\"change\", config);\n\t\t},\n\t},\n\twatch: {\n\t\tconfig() {\n\t\t\tthis.arguments = { ...this.widget?.arguments, ...this.config };\n\t\t\tthis.tmpConfig = { ...this.arguments };\n\t\t\tthis.$refs.config && this.$refs.config.hide();\n\t\t\tthis.isLoading = false;\n\t\t},\n\t},\n\tasync created() {\n\t\tthis.widget = await CachedWidgetLoader.loadWidget(this.id);\n\t\tlet component = (await import(FHC_JS_DATA_STORAGE_OBJECT.app_root + this.widget.setup.file + '?' + FHC_JS_DATA_STORAGE_OBJECT.fhcomplete_build_version)).default;\n\t\tthis.$options.components[\"widget\" + this.widget.widget_id] = component;\n\t\tthis.component = \"widget\" + this.widget.widget_id;\n\t\tthis.arguments = { ...this.widget.arguments, ...this.config };\n\t\tthis.tmpConfig = { ...this.arguments };\n\t},\n\ttemplate: /*html*/ `\n\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t
    \n\t
    \n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{{ widget.setup.name }}\n\t\t\t\n\t\t\t\n\t\t\t\n \t\t\n \t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t
    \n\t
    `,\n};\n","export default {\n\tdata(){\n\t\treturn {\n\n\t\t}\n\t},\n\tmethods:{\n\t\tonEnter(el,done){\n\t\t\tel.style.height = '0';\n\t\t\tel.style.height = el.scrollHeight + 'px';\n\t\t},\n\t\tonLeave(el,done){\n\t\t\tel.style.height = el.scrollHeight + 'px';\n\t\t\tel.style.height = '0';\n\t\t}\n\t},\n\ttemplate:\n\t/*html*/`\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t`,\n};","export default {\n\tdata(){\n\t\treturn {\n\n\t\t}\n\t},\n\tprops:{\n\t\twidget:{\n\t\t\ttype:Object,\n\t\t\trequired:true,\n\t\t}\n\t},\n\tmethods:{\n\t\tpath(src) {\n\t\t\tif (src[0] == '/')\n\t\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + src;\n\t\t\treturn src;\n\t\t}\n\t},\n\temits:[\"select\"],\n\ttemplate: /*html */`\n\t
    \n\t\t\n\t\t
    \n\t\t\t
    {{ widget.setup.name || widget.widget_kurzbz }}
    \n\t\t\t

    {{ widget.beschreibung }}

    \n\t\t
    \n\t
    `,\n}","import BsConfirm from \"../Bootstrap/Confirm.js\";\nimport DropGrid from '../Drop/Grid.js'\nimport DashboardItem from \"./Item.js\";\nimport CachedWidgetLoader from \"../../composables/Dashboard/CachedWidgetLoader.js\";\nimport WidgetIcon from \"./Widget/WidgetIcon.js\"\n\nexport default {\n\tname: 'Section',\n\tcomponents: {\n\t\tDropGrid,\n\t\tDashboardItem,\n\t\tWidgetIcon,\n\t},\n\tinject: {\n\t\twidgetsSetup:{\n\t\t\ttype: Array,\n\t\t\tdefault: [],\n\t\t},\n\t\tadminMode: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\teditMode: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\tprops: [\n\t\t\"name\",\n\t\t\"widgets\"\n\t],\n\temits: [\n\t\t\"widgetAdd\",\n\t\t\"widgetUpdate\",\n\t\t\"widgetRemove\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tconfigOpened: false,\n\t\t\tgridWidth: 1,\n\t\t\tgridHeight: null,\n\t\t\tdraggedItem:null,\n\t\t\tadditionalRow:false,\n\t\t}\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\teditModeIsActive: Vue.computed(() =>\n\t\t\t\tthis.editModeIsActive\n\t\t\t),\t\n\t\t\tsectionName: Vue.computed(() => this.name),\t\n\t\t}\n\t},\n\tcomputed: {\n\t\tcomputedWidgetsSetup(){\n\t\t\tif(!this.widgetsSetup) return {};\n\t\t\treturn this.widgetsSetup.reduce((acc, setup)=>{\n\t\t\t\tacc[setup.widget_id] = setup.setup;\n\t\t\t\treturn acc;\n\t\t\t},{})\n\t\t},\n\t\teditModeIsActive() {\n\t\t\treturn (this.editMode || this.adminMode) && !this.configOpened\t\n\t\t},\n\t\tgetSectionStyle() {\n\t\t\treturn 'margin-bottom: 8px;';\n\t\t},\n\t\titems() {\n\t\t\t// reuses the nearest placement of the widget from another viewport \n\t\t\t/* const computeNearestPlace = (item, gridWidth) =>{\n\t\t\t\tlet place;\n\t\t\t\tif (Object.keys(item.place).length > 0) {\n\t\t\t\t\tconst nearestIndex = Object.keys(item.place)\n\t\t\t\t\t\t\t\t\t\t\t .sort((a, b) => Math.abs(a - gridWidth) - Math.abs(b - gridWidth))\n\t\t\t\t\t\t\t\t\t\t\t .shift();\n\t\t\t\t\tplace = item.place[nearestIndex];\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tplace = { x: 0, y: 0, w: 1, h: 1 };\n\t\t\t\t}\n\t\t\t\treturn place;\n\t\t\t} */\n\t\t\t\n\t\t\tlet placedItems = this.widgets.map(item => {\n\t\t\t\tif(!item?.widgetid && item?.id){\n\t\t\t\t\titem.widgetid = item.id;\n\t\t\t\t}\n\t\t\t\treturn { ...item, reorder: false, ...(item.place[this.gridWidth] || { reorder: true, ...{ x: 0, y: 0, w: 1, h: 1 } })};\n\t\t\t});\n\t\t\treturn placedItems;\n\t\t\t\n\t\t},\n\t\t\n\t},\n\tmethods: {\n\t\tsectionNameTranslation(){\n\t\t\tswitch(this.name){\n\t\t\t\tcase \"general\": \n\t\t\t\t\treturn this.$p.t('dashboard',this.name); \n\t\t\t\t\tbreak;\n\t\t\t\tcase \"custom\":\n\t\t\t\t\treturn this.$p.t('dashboard',this.name);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn this.name;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tshowSectionInformation(){\n\t\t\tif (this.name == \"general\"){\n\t\t\t\treturn this.$p.t('dashboard', 'dashboardGeneralSectionDescription'); \n\t\t\t}\n\t\t\telse if(this.name == \"custom\"){\n\t\t\t\treturn this.$p.t('dashboard', 'dashboardCustomSectionDescription');\n\t\t\t}\n\t\t\telse{\n\t\t\t\treturn this.$p.t('dashboard', 'dashboardSectionDescription', [this.name]);\n\t\t\t}\n\t\t},\n\t\thandleConfigOpened() {\n\t\t\tthis.configOpened = true\n\t\t},\n\t\thandleConfigClosed() {\n\t\t\tthis.configOpened = false\n\t\t},\n\t\tcheckResizeLimit(item, w, h) {\n\t\t\t// NOTE(chris): widgets needs to be loaded for this to work\n\t\t\tlet widget = CachedWidgetLoader.getWidget(item.widget);\n\t\t\tif (widget) {\n\t\t\t\tlet minmaxW = widget.setup.width;\n\t\t\t\tif (minmaxW.max)\n\t\t\t\t\tminmaxW.min = minmaxW.min || 1;\n\t\t\t\telse\n\t\t\t\t\tminmaxW = {min:minmaxW,max:minmaxW};\n\t\t\t\tif (w < minmaxW.min)\n\t\t\t\t\tw = minmaxW.min; \n\t\t\t\tif (w > minmaxW.max)\n\t\t\t\t\tw = minmaxW.max;\n\n\t\t\t\tlet minmaxH = widget.setup.height;\n\t\t\t\tif (minmaxH.max)\n\t\t\t\t\tminmaxH.min = minmaxH.min || 1;\n\t\t\t\telse\n\t\t\t\t\tminmaxH = {min:minmaxH,max:minmaxH};\n\t\t\t\tif (h < minmaxH.min)\n\t\t\t\t\th = minmaxH.min;\n\t\t\t\tif (h > minmaxH.max)\n\t\t\t\t\th = minmaxH.max;\n\t\t\t}\n\t\t\treturn [w, h];\n\t\t},\n\t\tremoveWidget(item, revert) {\n\t\t\tif (item.custom) {\n\t\t\t\tBsConfirm.popup('Are you sure you want to delete this widget?').then(() => this.$emit('widgetRemove', this.name, item.id));\n\t\t\t} else {\n\t\t\t\tlet update = {};\n\t\t\t\tupdate[item.id] = { hidden: !revert };\n\t\t\t\tthis.updatePreset(update);\n\t\t\t}\n\t\t},\n\t\tsaveConfig(config, item) {\n\t\t\tlet payload = {};\n\t\t\tpayload[item.id] = { config };\n\t\t\tthis.updatePreset(payload);\n\t\t},\n\t\tupdatePositions(updated, pinned=false) {\n\t\t\tlet result = {};\n\t\t\tupdated.forEach(update => {\n\t\t\t\t\n\t\t\t\tlet item = {...update.item};\n\t\t\t\tif (!item.placeholder) {\n\t\t\t\tif (!item.place[this.gridWidth])\n\t\t\t\t\titem.place[this.gridWidth] = {x: 0, y: 0, w: 1, h: 1};\n\t\t\t\tdelete item.x;\n\t\t\t\tdelete item.y;\n\t\t\t\tdelete item.w;\n\t\t\t\tdelete item.h;\n\t\t\t\tdelete item.place[this.gridWidth].pinned;\n\t\t\t\tif (update.x !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].x = update.x;\n\t\t\t\tif (update.y !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].y = update.y;\n\t\t\t\tif (update.w !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].w = update.w;\n\t\t\t\tif (update.h !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].h = update.h;\n\t\t\t\tif (pinned){\n\t\t\t\t\titem.place[this.gridWidth].pinned = true;\n\t\t\t\t}\n\n\t\t\t\tresult[item.id] = item;\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.updatePreset(result);\n\t\t},\n\t\tupdatePreset(update) {\n\t\t\tlet payload = {};\n\t\t\tpayload[this.name] = update;\n\t\t\tthis.$emit('widgetUpdate', this.name, payload);\n\t\t}\n\t},\n\tmounted() {\n\t\tlet self = this;\n\t\tlet cont = self.$refs.container;\n\t\tself.gridWidth = parseInt(window.getComputedStyle(cont).getPropertyValue('--fhc-dashboard-grid-size'));\n\t\t\n\t\twindow.addEventListener('resize', () => {\n\t\t\tself.gridWidth = parseInt(window.getComputedStyle(cont).getPropertyValue('--fhc-dashboard-grid-size'));\n\t\t});\n\t},\n\ttemplate: `\n\t
    \n\t\t

    \n\t\t\t\n\t\t\t{{sectionNameTranslation()}}:\n\t\t

    \n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    `\n}\n\n/*\nOLD VERSION - ON HOVER\n\n*/","import BsModal from \"../../Bootstrap/Modal.js\";\nimport WidgetIcon from \"./WidgetIcon.js\";\n\nexport default {\n\tcomponents: {\n\t\tBsModal,\n\t\tWidgetIcon,\n\t},\n\tprops: [\n\t\t\"widgets\"\n\t],\n\tdata: () => ({\n\t\tcallbacks: {}\n\t}),\n\tmethods: {\n\t\tgetWidget() {\n\t\t\treturn new Promise((resolve,reject) => {\n\t\t\t\tthis.callbacks = {resolve,reject};\n\t\t\t\tthis.$refs.modal.show();\n\t\t\t});\n\t\t},\n\t\tclose() {\n\t\t\tif (this.callbacks.reject)\n\t\t\t\tthis.callbacks.reject();\n\t\t\tthis.callbacks = {};\n\t\t},\n\t\tpick(widget_id) {\n\t\t\tif (this.callbacks.resolve)\n\t\t\t\tthis.callbacks.resolve(widget_id);\n\t\t\tthis.callbacks = {};\n\t\t\tthis.$refs.modal.hide();\n\t\t},\n\t\t\n\t},\n\ttemplate: `
    \n\t\t 0}\" @hiddenBsModal=\"close\">\n\t\t\t\n\t\t\t\n\t\t\n\t
    `\n}\n","export default {\n\t/**\n\t* Performs a deep merge of objects and returns new object. Does not modify\n\t* objects (immutable) and merges arrays via concatenation.\n\t*\n\t* @param {...object} objects - Objects to merge\n\t* @returns {object} New object with merged key/values\n\t*/\n\tmergeDeep(...objects) {\n\t\tconst isObject = obj => obj && typeof obj === 'object';\n\t\t\n\t\treturn objects.reduce((prev, obj) => {\n\t\t\tObject.keys(obj).forEach(key => {\n\t\t\t\tconst pVal = prev[key];\n\t\t\t\tconst oVal = obj[key];\n\t\t\t\t\n\t\t\t\tif (Array.isArray(pVal) && Array.isArray(oVal)) {\n\t\t\t\t\tprev[key] = pVal.concat(...oVal);\n\t\t\t\t}\n\t\t\t\telse if (isObject(pVal) && isObject(oVal)) {\n\t\t\t\t\tprev[key] = this.mergeDeep(pVal, oVal);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tprev[key] = oVal;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\treturn prev;\n\t\t}, {});\n\t}\n}","import BsPrompt from \"../Bootstrap/Prompt.js\";\nimport DashboardAdminEdit from \"./Admin/Edit.js\";\nimport DashboardAdminWidgets from \"./Admin/Widgets.js\";\nimport DashboardAdminPresets from \"./Admin/Presets.js\";\n\nexport default {\n\tcomponents: {\n\t\tDashboardAdminEdit,\n\t\tDashboardAdminWidgets,\n\t\tDashboardAdminPresets\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tadminMode: true\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tdashboards: [],\n\t\t\tcurrent: -1,\n\t\t\twidgets: []\n\t\t};\n\t},\n\tcomputed: {\n\t\tapiurl() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/dashboard';\n\t\t},\n\t\tdashboard() {\n\t\t\treturn this.dashboards.find(el => el.dashboard_id == this.current);\n\t\t}\n\t},\n\tmethods: {\n\t\tdashboardAdd() {\n\t\t\tlet _name = '';\n\t\t\tBsPrompt.popup('New Dashboard name').then(\n\t\t\t\tname => {\n\t\t\t\t\t_name = name;\n\t\t\t\t\treturn axios.post(this.apiurl + '/Dashboard/create', {\n\t\t\t\t\t\tdashboard_kurzbz: name\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t).then(res => {\n\t\t\t\tlet newDashboard = {\n\t\t\t\t\tdashboard_id: res.data.retval,\n\t\t\t\t\tdashboard_kurzbz: _name,\n\t\t\t\t\tbeschreibung: ''\n\t\t\t\t};\n\t\t\t\tthis.dashboards.push(newDashboard);\n\t\t\t\tthis.current = newDashboard.dashboard_id;\n\t\t\t}).catch(err => err !== undefined ? console.error('ERROR:', err) : 0);\n\t\t},\n\t\tdashboardUpdate(dashboard) {\n\t\t\t// TODO(chris): Loading or message\n\t\t\taxios.post(this.apiurl + '/Dashboard/update', dashboard).then(() => {\n\t\t\t\tlet old = this.dashboards.find(el => el.dashboard_id == dashboard.dashboard_id);\n\t\t\t\told.dashboard_kurzbz = dashboard.dashboard_kurzbz;\n\t\t\t\told.beschreibung = dashboard.beschreibung;\n\t\t\t}).catch(err => console.error('ERROR:', err));\n\t\t},\n\t\tdashboardDelete(dashboard_id) {\n\t\t\taxios.post(this.apiurl + '/Dashboard/delete', {dashboard_id}).then(() => {\n\t\t\t\tthis.current = -1;\n\t\t\t\tthis.dashboards = this.dashboards.filter(el => el.dashboard_id != dashboard_id);\n\t\t\t}).catch(err => console.error('ERROR:', err));\n\t\t},\n\t\tassignWidgets(widgets) {\n\t\t\tthis.widgets = widgets;\n\t\t\t/*while (this.widgets.length)\n\t\t\t\tthis.widgets.pop();\n\t\t\tfor (var i in widgets)\n\t\t\t\tthis.widgets.push(widgets[i]);*/\n\t\t}\n\t},\n\tcreated() {\n\t\taxios.get(this.apiurl + '/Dashboard').then(res => {\n\t\t\tthis.dashboards = res.data.retval;\n\t\t}).catch(err => console.error('ERROR:', err));\n\t},\n\ttemplate: `
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t
      \n\t\t\t\t
    • \n\t\t\t\t\t\n\t\t\t\t
    • \n\t\t\t\t
    • \n\t\t\t\t\t\n\t\t\t\t
    • \n\t\t\t\t
    • \n\t\t\t\t\t\n\t\t\t\t
    • \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    `\n}\n","import DashboardSection from \"../Section.js\";\nimport DashboardWidgetPicker from \"../Widget/Picker.js\";\nimport ObjectUtils from \"../../../helpers/ObjectUtils.js\";\n\nexport default {\n\tcomponents: {\n\t\tDashboardSection,\n\t\tDashboardWidgetPicker\n\t},\n\tprops: {\n\t\tdashboard: String,\n\t\twidgets: Array\n\t},\n\tdata: () => ({\n\t\tfunktionen: {},\n\t\tsections: [],\n\t\ttmpLoading: ''\n\t}),\n\tcomputed: {\n\t\tapiurl() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/dashboard';\n\t\t},\n\t\tpickerWidgets() {\n\t\t\treturn this.widgets.filter(widget => widget.allowed);\n\t\t}\n\t},\n\tmethods: {\n\t\twidgetAdd(section_name, widget) {\n\t\t\tthis.$refs.widgetpicker.getWidget().then(widget_id => {\n\t\t\t\twidget.widget = widget_id;\n\t\t\t\tdelete widget.custom;\n\t\t\t\twidget.preset = 1;\n\t\t\t\tlet loading = {...widget};\n\t\t\t\tloading.loading = true;\n\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\tif (section.name == section_name)\n\t\t\t\t\t\tsection.widgets.push(loading);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\taxios.post(this.apiurl + '/Config/addWidgetsToPreset', {\n\t\t\t\t\tdb: this.dashboard,\n\t\t\t\t\tfunktion_kurzbz: section_name,\n\t\t\t\t\twidgets: [widget]\n\t\t\t\t}).then(result => {\n\t\t\t\t\tlet newId = Object.keys(result.data.retval.data[section_name].widgets).pop();\n\t\t\t\t\twidget.id = newId;\n\t\t\t\t\twidget.custom = 1;\n\t\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\t\tif (section.name == section_name) {\n\t\t\t\t\t\t\tsection.widgets.splice(section.widgets.indexOf(loading),1);\n\t\t\t\t\t\t\tsection.widgets.push(widget);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}).catch(error => {\n\t\t\t\t\tconsole.error('ERROR: ', error);\n\t\t\t\t\talert('ERROR: ' + error.response.data.retval);\n\t\t\t\t});\n\t\t\t}).catch(() => {});\n\t\t},\n\t\twidgetUpdate(section_name, payload) {\n\t\t\tpayload = payload[section_name];\n\t\t\tfor (var k in payload) {\n\t\t\t\tfor (var i in this.sections) {\n\t\t\t\t\tif (this.sections[i].name == section_name) {\n\t\t\t\t\t\tfor (var wid in this.sections[i].widgets) {\n\t\t\t\t\t\t\tif (this.sections[i].widgets[wid].id == k) {\n\t\t\t\t\t\t\t\tpayload[k] = ObjectUtils.mergeDeep(this.sections[i].widgets[wid], payload[k]);\n\t\t\t\t\t\t\t\t// NOTE(chris): remove internal props\n\t\t\t\t\t\t\t\tfor (var prop in {_x:1,_y:1,_w:1,_h:1,index:1,id:1})\n\t\t\t\t\t\t\t\t\tif (payload[k][prop])\n\t\t\t\t\t\t\t\t\t\tdelete payload[k][prop];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpayload[k].widgetid = k;\n\t\t\t\tdelete payload[k].custom;\n\t\t\t}\n\t\t\taxios.post(this.apiurl + '/Config/addWidgetsToPreset', {\n\t\t\t\tdb: this.dashboard,\n\t\t\t\tfunktion_kurzbz: section_name,\n\t\t\t\twidgets: payload\n\t\t\t}).then(() => {\n\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\tif (section.name == section_name) {\n\t\t\t\t\t\tsection.widgets.forEach((widget, i) => {\n\t\t\t\t\t\t\tif (payload[widget.id]) {\n\t\t\t\t\t\t\t\tpayload[widget.id].id = widget.id;\n\t\t\t\t\t\t\t\tpayload[widget.id].index = widget.index;\n\t\t\t\t\t\t\t\tsection.widgets[i] = payload[widget.id];\n\t\t\t\t\t\t\t\tsection.widgets[i].custom = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}).catch(error => {\n\t\t\t\t// TODO(chris): revert placement on failure\n\t\t\t\tconsole.error('ERROR: ', error);\n\t\t\t\talert('ERROR: ' + error.response.data.retval);\n\t\t\t});\n\t\t},\n\t\twidgetRemove(section_name, id) {\n\t\t\taxios.post(this.apiurl + '/Config/removeWidgetFromPreset', {\n\t\t\t\tdb: this.dashboard,\n\t\t\t\tfunktion_kurzbz: section_name,\n\t\t\t\twidgetid: id\n\t\t\t}).then(() => {\n\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\tif (section.name == section_name)\n\t\t\t\t\t\tsection.widgets = section.widgets.filter(widget => widget.id != id);\n\t\t\t\t});\n\t\t\t}).catch(error => {\n\t\t\t\tconsole.error('ERROR: ', error);\n\t\t\t\talert('ERROR: ' + error.response.data.retval);\n\t\t\t});\n\t\t},\n\t\tloadSections(evt) {\n\t\t\tlet funktionen = Array.from(evt.target.querySelectorAll(\"option:checked\"),e=>e.value);\n\t\t\tthis.sections = [];\n\t\t\tthis.tmpLoading = funktionen.join('###');\n\t\t\taxios.get(this.apiurl + '/Config/presetBatch', {params: {\n\t\t\t\tdb: this.dashboard,\n\t\t\t\tfunktionen\n\t\t\t}}).then(res => {\n\t\t\t\tif (this.tmpLoading !== funktionen.join('###'))\n\t\t\t\t\treturn; // NOTE(chris): prevent race condition\n\t\t\t\tfor (var section in res.data.retval) {\n\t\t\t\t\tlet widgets = [];\n\t\t\t\t\tfor (var wid in res.data.retval[section]) {\n\t\t\t\t\t\tres.data.retval[section][wid].id = wid;\n\t\t\t\t\t\tres.data.retval[section][wid].custom = 1;\n\t\t\t\t\t\twidgets.push(res.data.retval[section][wid]);\n\t\t\t\t\t}\n\t\t\t\t\tthis.sections.push({\n\t\t\t\t\t\tname: section,\n\t\t\t\t\t\twidgets\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}).catch(err => console.error('ERROR:', err));\n\t\t}\n\t},\n\tcreated() {\n\t\taxios.get(this.apiurl + '/Config/funktionen').then(res => {\n\t\t\tthis.funktionen = {general: 'GENERAL'};\n\t\t\tres.data.retval.forEach(funktion => {\n\t\t\t\tthis.funktionen[funktion.funktion_kurzbz] = funktion.beschreibung;\n\t\t\t});\n\t\t}).catch(err => console.error('ERROR:', err));\n\t},\n\twatch: {\n\t\tdashboard() {\n\t\t\t// TODO(chris): this should be done without a watcher\n\t\t\tthis.loadSections({target:this.$refs.funktionenList});\n\t\t}\n\t},\n\ttemplate: `
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t\n\t
    `\n}\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsearch(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/search';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchAdvanced(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/searchAdvanced';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchdummy(searchsettings) {\n\t\tconst url = 'public/js/apps/api/dummyapi.php/Search';\n\t\treturn this.$fhcApi.post(url, searchsettings);\n\t}\n};\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/loadModule/' + category);\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst payload = {categories, language}\n\t\treturn this.$fhcApi.post('/api/frontend/v1/phrasen/setLanguage', payload);\n\t},\n\tgetLanguage() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getLanguage', {});\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getAllLanguages', {});\n\t}\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetHeader(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/header',\n\t\t\t{ navigation_page }\n\t\t);\n\t},\n\tgetMenu: function(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/menu',\n\t\t\t{ navigation_page }\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/saveCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t);\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/applyFilterFields',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t);\n\t},\n\taddFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/addFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tgetFilter(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tabmeldung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/abmeldung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(stdsem, prestudent_id, grund) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/abmeldung/createAntrag', {\n\t\t\t\tstudiensemester: stdsem,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\tif (!Array.isArray(antrag_id))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t\t{ antrag_id }\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag_id.map(antrag => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t{ antrag_id: antrag.studierendenantrag_id },\n\t\t\t\t{ errorHeader: '#' + antrag.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t},\n\tunterbrechung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/unterbrechung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(studiensemester, prestudent_id, grund, datum_wiedereinstieg, attachment) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/createAntrag', {\n\t\t\t\tstudiensemester,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund,\n\t\t\t\tdatum_wiedereinstieg,\n\t\t\t\tattachment\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/cancelAntrag', {\n\t\t\t\tantrag_id\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t}\n\t},\n\twiederholung: {\n\t\tgetDetails(prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/' + prestudent_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tgetLvs(antrag_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getLvs/' + antrag_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tcreate(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/createAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/cancelAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tsaveLvs(forbiddenLvs, mandatoryLvs) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/saveLvs', {\n\t\t\t\tforbiddenLvs,\n\t\t\t\tmandatoryLvs\n\t\t\t});\n\t\t}\n\t},\n\tleitung: {\n\t\tgetStgs() {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getActiveStgs');\n\t\t},\n\t\tgetAntraege(url, config, params) {\n\t\t\treturn this.$fhcApi\n\t\t\t\t.get('/api/frontend/v1/studstatus/leitung/getAntraege/' + url)\n\t\t\t\t.then(res => res.data); // Return data for tabulator\n\t\t},\n\t\tgetHistory(antrag_id) {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getHistory/' + antrag_id)\n\t\t},\n\t\tgetPrestudents(query, signal) {\n\t\t\treturn this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/getPrestudents',\n\t\t\t\t{ query },\n\t\t\t\t{\n signal: signal,\n timeout: 30000\n }\n\t\t\t);\n\t\t},\n\t\tapprove(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treopen(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tunpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tobject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tapproveObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tdenyObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t}\n};","export default {\n\n getView: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getView/${uid}`,{}\n );\n },\n\n fotoSperre: function (value) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/fotoSperre/${value}`,\n {}\n );\n \n },\n\n isStudent: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isStudent`,\n {\n uid:uid,\n }\n );\n },\n\n isMitarbeiter: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isMitarbeiter/${uid}`,\n {}\n );\n },\n\n getZustellAdresse: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellAdresse`,{}\n );\n },\n\n getZustellKontakt: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellKontakt`,{}\n );\n },\n\n getGemeinden: function(nation,zip){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getGemeinden/${nation}/${zip}`,\n {}\n );\n \n },\n getAllNationen:function(){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Profil/getAllNationen\",{}\n );\n },\n}","export default {\n //! API calls for profil update requests\n \n getStatus: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getStatus`,{});\n },\n \n getTopic: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getTopic`,{});\n },\n \n acceptProfilRequest: function ({profil_update_id, uid, status_message, topic, requested_change}) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/acceptProfilRequest\",{profil_update_id, uid, status_message, topic, requested_change});\n },\n \n denyProfilRequest: function ({profil_update_id, uid, topic, status_message}) {\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/denyProfilRequest\",{profil_update_id,uid,topic,status_message});\n },\n \n insertFile: function (dms, replace = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n dms);\n\n },\n \n getProfilRequestFiles: function (requestID) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`,{});\n },\n \n selectProfilRequest: function (uid = null, id = null) {\n\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/selectProfilRequest`,\n {...(uid?{uid}:{}),\n ...(id?{id}:{})\n });\n },\n \n insertProfilRequest: function (topic, payload, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/insertProfilRequest\",\n {\n topic,\n payload,\n ...(fileID ? { fileID } : {}),\n });\n },\n \n updateProfilRequest: function (topic, payload, ID, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/updateProfilRequest`,\n {\n topic,\n payload,\n ID,\n ...(fileID ? { fileID: fileID } : {}),\n });\n },\n \n deleteProfilRequest: function (requestID) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/deleteProfilRequest`,\n {\n requestID,\n });\n },\n };\n ","\nexport default {\n\tgetRoomInfo(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getRoomplan',\n\t\t\t{ ort_kurzbz, start_date, end_date}\n\t\t);\n\t},\n\tgetStunden() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/Stunden',\n\t\t\t{}\n\t\t);\n\t},\n\tgetOrtReservierungen(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/LvPlan/getReservierungen/${ort_kurzbz}`,\n\t\t\t{ start_date, end_date}\n\t\t);\n\t},\n\tgetLvPlanReservierungen(start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getReservierungen',\n\t\t\t{ start_date, end_date }\n\t\t);\n\t},\n\tgetLehreinheitStudiensemester(lehreinheit_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${lehreinheit_id}`,\n\t\t\t{}\n\t\t);\n\t},\n\tstudiensemesterDateInterval(date) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${date}`,\n\t\t\t{}\n\t\t);\n\t},\n\tLvPlanEvents(start_date, end_date, lv_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/LvPlanEvents',\n\t\t\t{ start_date, end_date, lv_id }\n\t\t);\n\t},\n\t\n\t\n};","import verband from './stv/verband.js';\nimport students from './stv/students.js';\nimport filter from './stv/filter.js';\nimport konto from './stv/konto.js';\nimport group from './stv/group.js';\nimport kontakt from './stv/kontakt.js';\nimport prestudent from './stv/prestudent.js';\nimport status from './stv/status.js';\nimport details from './stv/details.js';\nimport exam from './stv/exam.js';\nimport abschlusspruefung from './stv/abschlusspruefung.js';\nimport grades from './stv/grades.js';\nimport mobility from './stv/mobility.js';\nimport archiv from './stv/archiv.js';\nimport documents from './stv/documents.js';\nimport exemptions from './stv/exemptions.js';\nimport jointstudies from \"./stv/jointstudies.js\";\nimport courselist from './stv/courselist.js';\n\nexport default {\n\tverband,\n\tstudents,\n\tfilter,\n\tkonto,\n\tgroup,\n\tkontakt,\n\tprestudent,\n\tstatus,\n\tdetails,\n\texam,\n\tabschlusspruefung,\n\tgrades,\n\tmobility,\n\tarchiv,\n\tdocuments,\n\texemptions,\n\tjointstudies,\n\tcourselist,\n\tconfigStudent() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/student');\n\t},\n\tconfigStudents() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/students');\n\t}\n};\n","export default {\n\tget() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/verband');\n\t},\n\tfavorites: {\n\t\tget() {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/stv/favorites');\n\t\t},\n\t\tset(favorites) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/stv/favorites/set', {\n\t\t\t\tfavorites\n\t\t\t});\n\t\t}\n\t}\n}","export default {\n\tuid(uid, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/uid/'\n\t\t\t+ encodeURIComponent(uid);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tprestudent(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/prestudent/'\n\t\t\t+ encodeURIComponent(prestudent_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tperson(person_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/person/'\n\t\t\t+ encodeURIComponent(person_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tverband(relative_path) {\n\t\treturn this.$fhcApi.getUri('api/frontend/v1/stv/students/' + relative_path);\n\t}\n}","export default {\n\tgetStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/filter/getStg');\n\t},\n\tsetStg(studiengang_kz) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/filter/setStg', {\n\t\t\tstudiengang_kz\n\t\t});\n\t}\n};","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/konto/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id),\n\t\t\t\tonly_open: self.filter,\n\t\t\t\tstudiengang_kz: self.studiengang_kz_intern ? self.stg_kz : ''\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tcheckDoubles(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/checkDoubles', data, {\n\t\t\tconfirmErrorHandler: error => true\n\t\t});\n\t},\n\tinsert(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/insert', data);\n\t},\n\tcounter(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/counter', data);\n\t},\n\tedit(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/update', data);\n\t},\n\tdelete(buchungsnr) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/delete', {buchungsnr});\n\t},\n\tgetBuchungstypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/konto/getBuchungstypen');\n\t}\n};","export default {\n\tgetGruppen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/Gruppen/getGruppen/' + params.id);\n\t},\n\tdeleteGroup(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/Gruppen/deleteGruppe/', params);\n\t}\n}","export default {\n\t//------------- address.js-----------\n\tgetAdressen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressen/' + params.id);\n\t},\n\taddNewAddress(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewAddress/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadAddress(address_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadAddress/', {address_id});\n\t},\n\tupdateAddress(form, address_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateAddress/' + address_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteAddress(address_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteAddress/', {address_id});\n\t},\n\tgetPlaces(plz) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getPlaces/' + plz);\n\t},\n\tgetFirmen(searchString) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getFirmen/' + searchString);\n\t},\n\tgetNations() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getNations/');\n\t},\n\tgetAdressentypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressentypen/');\n\t},\n\n\t//------------- bankverbindung.js-----------\n\tgetBankverbindung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getBankverbindung/' + params.id);\n\t},\n\taddNewBankverbindung(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewBankverbindung/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadBankverbindung(bankverbindung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadBankverbindung/', {bankverbindung_id});\n\t},\n\tupdateBankverbindung(form, bankverbindung_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateBankverbindung/' + bankverbindung_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteBankverbindung(bankverbindung_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteBankverbindung/', {bankverbindung_id});\n\t},\n\n\t//------------- contact.js-----------\n\tgetKontakte (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakte/' + params.id);\n\t},\n\taddNewContact(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewContact/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadContact(kontakt_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadContact/', {kontakt_id});\n\t},\n\tupdateContact(form, kontakt_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateContact/' + kontakt_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteContact(kontakt_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteContact/', {kontakt_id});\n\t},\n\tgetStandorteByFirma(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getStandorteByFirma/' + searchString);\n\t},\n\tgetKontakttypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakttypen/');\n\t}\n};","export default {\n\n//------------- Prestudent.js------------------------------------------------------\n\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\treturn \tthis.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/prestudent/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t);\n\t},\n\tupdatePrestudent(form, prestudent_id, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/prestudent/updatePrestudent/' + prestudent_id,\n\t\t\tdata\n\t\t);\n\t},\n\tgetBezeichnungZGV() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungZGV/');\n\t},\n\tgetBezeichnungMZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungMZgv/');\n\t},\n\tgetBezeichnungDZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungDZgv/');\n\t},\n\tgetStgs() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStgs/');\n\t},\n\tgetAusbildung() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAusbildung/');\n\t},\n\tgetAufmerksamdurch() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAufmerksamdurch/');\n\t},\n\tgetBerufstaetigkeit() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBerufstaetigkeit/');\n\t},\n\tgetTypenStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getTypenStg/');\n\t},\n\tgetBisstandort() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBisstandort/');\n\t},\n\n//------------- MultiStatus.js------------------------------------------------------\n\tgetHistoryPrestudent (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getHistoryPrestudent/' + params.id);\n\t},\n\tgetMaxSem(studiengang_kzs) {\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/status/getMaxSemester/', {studiengang_kzs});\n\t},\n\tadvanceStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/advanceStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tconfirmStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/confirmStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tisLastStatus(id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/isLastStatus/' + id);\n\t},\n\tdeleteStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/deleteStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tgetLastBismeldestichtag() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getLastBismeldestichtag/');\n\t},\n\n//------------- History.js------------------------------------------------------\n\tgetHistoryPrestudents (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getHistoryPrestudents/' + params.id);\n\t},\n\n}","export default {\n\n//------------- Modal.js------------------------------------------------------\n\n\tinsertStatus(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/status/insertStatus/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/status/loadStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tupdateStatus(form, {prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}, data) {\n\t\treturn this.$fhcApi.post(\n\t\t\tform,\n\t\t\t'api/frontend/v1/stv/status/updateStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester,\n\t\t\tdata\n\t\t);\n\t},\n\tgetStudienplaene(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudienplaene/' + prestudent_id);\n\t},\n\tgetStudiengang(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudiengang/' + prestudent_id);\n\t},\n\tgetStatusgruende() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusgruende/');\n\t},\n\tgetStati() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStati/');\n\t},\n\n//------------- Dropdown.js------------------------------------------------------\n\n\taddStudent(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/addStudent/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tchangeStatus(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/changeStatus/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tgetStatusarray() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusarray/');\n\t}\n}","export default {\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/student/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(url);\n\t},\n\tsave(form, prestudent_id, studiensemester_kurzbz, data) {\n\t\tlet url = 'api/frontend/v1/stv/student/save/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(form, url, data);\n\t},\n}\n","export default {\n\tgetPruefungen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getPruefungen/' + params.id);\n\t},\n\tloadPruefung(pruefung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/loadPruefung/' + pruefung_id);\n\t},\n\tgetTypenPruefungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getTypenPruefungen');\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/getAllLehreinheiten/', data)\n\t},\n\tgetLvsByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsByStudent/' + uid)\n\t},\n\tgetLvsandLesByStudent(uid, semester){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsandLesByStudent/' + uid + '/' + semester);\n\t},\n\tgetLvsAndMas(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsAndMas/' + uid)\n\t},\n\tgetMitarbeiterLv(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getMitarbeiterLv/' + id)\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getNoten');\n\t},\n\tcheckZeugnisnoteLv(data){\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/', data)\n\t},\n\taddPruefung(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/insertPruefung/', data);\n\t},\n\tupdatePruefung(form, id, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/updatePruefung/' + id, data);\n\t},\n\tdeletePruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/deletePruefung/' + id)\n\t}\n}","export default {\n\n\tgetAbschlusspruefung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/' + params.id);\n\t},\n\taddNewAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/', data\n\t\t);\n\t},\n\tloadAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/', {id});\n\t},\n\tupdateAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/', data\n\t\t);\n\t},\n\tdeleteAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/', {id});\n\t},\n\tgetTypenAbschlusspruefung(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/');\n\t},\n\tgetTypenAntritte(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/');\n\t},\n\tgetBeurteilungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/');\n\t},\n\tgetAkadGrade(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getAkadGrade/', {studiengang_kz});\n\t},\n\tgetTypStudiengang(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/', {studiengang_kz});\n\t},\n\tgetMitarbeiter(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/' + searchString);\n\t},\n\tgetPruefer(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getPruefer/' + searchString);\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getNoten/');\n\t},\n\tcheckForExistingExams(uids) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/', {uids}\n\t\t);\n\t}\n}","export default {\n\tlist() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/grades/list');\n\t},\n\tgetCertificate(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getCertificate/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetTeacherProposal(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getTeacherProposal/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetRepeaterGrades(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getRepeaterGrades/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tupdateCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, note, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/updateCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz,\n\t\t\t\tnote\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tdeleteCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/deleteCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyTeacherProposalToCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyTeacherProposalToCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id, lv_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate',\n\t\t\t{\n\t\t\t\tstudierendenantrag_lehrveranstaltung_id\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lv_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tgetGradeFromPoints(points, lehrveranstaltung_id, studiensemester_kurzbz, manualErrorHandling) {\n\t\tconst config = manualErrorHandling ? {errorHandling: false} : {};\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/grades/getGradeFromPoints',\n\t\t\t{\n\t\t\t\t\"points\": points,\n\t\t\t\t\"lehrveranstaltung_id\": lehrveranstaltung_id,\n\t\t\t\t\"studiensemester_kurzbz\": studiensemester_kurzbz\n\t\t\t},\n\t\t\tconfig\n\t\t\t);\n\t}\n}","export default {\n\tgetMobilitaeten (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getMobilitaeten/' + params.id);\n\t},\n\tgetProgramsMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getProgramsMobility/');\n\t},\n\taddNewMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/insertMobility/', data);\n\t},\n\tloadMobility(bisio_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/loadMobility/' + bisio_id);\n\t},\n\tupdateMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/updateMobility/', data);\n\t},\n\tdeleteMobility(bisio_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobility/' + bisio_id);\n\t},\n\tgetLVList(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLVList/' + studiengang_kz);\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/getAllLehreinheiten/', data)\n\t},\n\tgetLvsandLesByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLvsandLesByStudent/' + uid);\n\t},\n\tgetPurposes(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getPurposes/' + params.id);\n\t},\n\tgetSupports(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getSupports/' + params.id);\n\t},\n\tgetListPurposes() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListPurposes/');\n\t},\n\tgetListSupports() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListSupports/');\n\t},\n\tdeleteMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilityPurpose/' + params.bisio_id, params);\n\t},\n\taddMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilityPurpose/' + params.bisio_id, params);\n\t},\n\tdeleteMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilitySupport/' + params.bisio_id, params);\n\t},\n\taddMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilitySupport/' + params.bisio_id, params);\n\t},\n\n}","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/archiv/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id)\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tgetArchivVorlagen() {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/getArchivVorlagen');\n\t},\n\tarchive(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archive',\n\t\t\tdata\n\t\t);\n\t},\n\tarchiveSigned(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archiveSigned',\n\t\t\tdata\n\t\t);\n\t},\n\tupdate(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/update', data);\n\t},\n\tdelete({akte_id, studiengang_kz}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/delete', {akte_id, studiengang_kz});\n\t}\n};\n","export default {\n\tgetDocumentsUnaccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tgetDocumentsAccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsAccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tdeleteZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteZuordnung/' + params.prestudent_id + '/' + params.dokument_kurzbz);\n\t},\n\tcreateZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/createZuordnung/'\n\t\t\t+ params.prestudent_id + '/'\n\t\t\t+ params.dokument_kurzbz);\n\t},\n\tloadAkte(akte_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/loadAkte/' + akte_id);\n\t},\n\tgetDoktypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDoktypen/');\n\t},\n\tupdateFile(akte_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/updateAkte/' + akte_id,\n\t\t\tdata);\n\t},\n\tdeleteFile(akte_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteAkte/' + akte_id);\n\t},\n\tuploadFile(prestudent_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/uploadDokument/' + prestudent_id,\n\t\t\tdata);\n\t},\n}","export default {\n\tgetAnrechnungen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getAnrechnungen/' + params.id);\n\t},\n\tgetLehrveranstaltungen(prestudent_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/' + prestudent_id);\n\t},\n\tgetBegruendungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getBegruendungen/');\n\t},\n\tgetLvsKompatibel(lv_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLvsKompatibel/' + lv_id);\n\t},\n\tgetLektoren(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLektoren/' + studiengang_kz);\n\t},\n\taddNewAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/insertAnrechnung/', data);\n\t},\n\tloadAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/loadAnrechnung/' + anrechnung_id);\n\t},\n\teditAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/updateAnrechnung/', data);\n\t},\n\tdeleteAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/anrechnungen/deleteAnrechnung/' + anrechnung_id);\n\t},\n}","export default {\n\tgetStudies(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudien/' + params.id);\n\t},\n\tgetTypenMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/');\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/');\n\t},\n\tgetStudyprograms(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/');\n\t},\n\tgetListPartner(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/');\n\t},\n\tgetStatiPrestudent(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/');\n\t},\n\tloadStudy(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/loadStudie/' + id);\n\t},\n\tinsertStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/insertStudie/', data);\n\t},\n\tupdateStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/updateStudie/', data);\n\t},\n\tdeleteStudy(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/GemeinsameStudien/deleteStudie/' + id);\n\t},\n\n}","export default {\n\tgetCourselist(url, config, params) {\n\t\t//corresponding logic controller Stundenplan.php\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStundenplan/'\n\t\t\t+ params.student_uid + '/'\n\t\t\t+ params.start_date + '/'\n\t\t\t+ params.end_date + '/'\n\t\t\t+ params.group_consecutiveHours + '/'\n\t\t\t+ params.dbStundenplanTable\n\t\t);\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStudiensemester/');\n\t},\n}","import person from \"./notiz/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetNotizen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getUid/');\n\t},\n\taddNewNotiz(form, id, formData) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(form, notiz_id, formData){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getMitarbeiter/' + event);\n\t},\n\tisBerechtigt(id, type_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/isBerechtigt/');\n\t}\n}","import person from \"./betriebsmittel/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetAllBetriebsmittel(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/' + params.type + '/' + params.id);\n\t},\n\taddNewBetriebsmittel(form, person_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/' +\n\t\t\tperson_id, formData\n\t\t);\n\t},\n\tloadBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/' + betriebsmittelperson_id);\n\t},\n\tupdateBetriebsmittel(form, betriebsmittelperson_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/' + betriebsmittelperson_id,\n\t\t\tformData);\n\t},\n\tdeleteBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/' +\tbetriebsmittelperson_id);\n\t},\n\tgetTypenBetriebsmittel(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/');\n\t},\n\tloadInventarliste(query){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/' +\tquery);\n\t}\n}","export default {\n\tupdatePersonUnrulyStatus(person_id, unrulyParam) {\n\n\t\ttry {\n\t\t\tconst payload = {person_id, unruly: unrulyParam}\n\t\t\tconst url = '/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus';\n\t\t\treturn this.$fhcApi.post(url, payload, null);\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t},\n\tfilterPerson(payload, base = ''){\n\n\t\ttry {\n\t\t\tconst url = base + '/api/frontend/v1/checkperson/CheckPerson/filterPerson';\n\t\t\treturn axios.post(url, payload)\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t}\n}","export default {\n getContentID(ort_kurbz) {\n\t\treturn this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Ort/ContentID\",\n\t\t\t{ ort_kurzbz: ort_kurbz }\n\t\t);\n\t},\n\tgetRooms(datum, von, bis, typ, personenanzahl = 0) {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getRooms\",\n\t\t\t{ datum, von, bis, typ, personenanzahl }\n\t\t);\n\t},\n\tgetRoomTypes() {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getTypes\"\n\t\t);\n\t}\n}","export default {\n content(content_id, version=null, sprache=null, sichtbar=null) {\n return this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/content\",\n\t\t\t{ \n\t\t\t\tcontent_id: content_id,\n\t\t\t\t...(version?{version}:{}),\n\t\t\t\t...(sprache?{sprache}:{}),\n\t\t\t\t...(sichtbar?{sichtbar}:{}),\n }\n );\n },\n\t//api function used for the news View that renders the html\n\tgetNews(page = 1, page_size = 10, sprache) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNews\",\n\t\t\t{\n\t\t\t\tpage,\n\t\t\t\tpage_size,\n\t\t\t\tsprache,\n\t\t\t},\n\t\t);\n\t},\n\t//api function used for the widget component\n\tnews(limit) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/news\",\n\t\t\t{\n\t\t\t\tlimit: limit\n\t\t\t}\n\t\t);\n\t},\n\tgetNewsRowCount: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNewsRowCount\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetNewsExtra: function(){\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getStudiengangInfoForNews\",\n\t\t\t{}\n\t\t);\n\t}\n }","export default {\n getStudentenMail(lehreinheit_id) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Lehre/lvStudentenMail\",\n { lehreinheit_id: lehreinheit_id }\n );\n },\n\tgetLvInfo(studiensemester_kurzbz, lehrveranstaltung_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/LV/${studiensemester_kurzbz}/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentPruefungen(lehrveranstaltung_id){\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentProjektarbeiten(uid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getStudentProjektarbeiten/${uid}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentProjektabgaben(detail) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getStudentProjektabgaben`\n\t\t\t, {\n\t\t\t\tprojektarbeit_id: detail.projektarbeit_id,\n\t\t\t\tstudent_uid: detail.student_uid\n\t\t\t}\n\t\t);\n\t},\n\tpostStudentProjektarbeitEndupload(formData) {\n\t\tconst url = '/api/frontend/v1/Lehre/postStudentProjektarbeitEndupload';\n\t\tconst headers = {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\treturn this.$fhcApi.post(url, formData, headers)\n\t},\n\tpostStudentProjektarbeitZwischenabgabe(formData) {\n\t\tconst url = '/api/frontend/v1/Lehre/postStudentProjektarbeitZwischenabgabe';\n\t\tconst headers = {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\treturn this.$fhcApi.post(url, formData, headers)\n\t},\n\tgetStudentProjektarbeitAbgabeFile(paabgabe_id, student_uid) {\n\t\tconst url = `/Cis/Abgabetool/getStudentProjektarbeitAbgabeFile?paabgabe_id=${paabgabe_id}&student_uid=${student_uid}`;\n\n\t\twindow.location = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + url\n\t},\n\tgetMitarbeiterProjektarbeiten(uid, all) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getMitarbeiterProjektarbeiten?showall=${all}`\n\t\t\t, {}\n\t\t);\n\t},\n\tpostProjektarbeitAbgabe(termin) {\n\t\tconst payload = {\n\t\t\tpaabgabe_id: termin.paabgabe_id,\n\t\t\tpaabgabetyp_kurzbz: termin.bezeichnung.paabgabetyp_kurzbz,\n\t\t\tdatum: termin.datum,\n\t\t\tfixtermin: termin.fixtermin,\n\t\t\tinsertvon: termin.insertvon,\n\t\t\tkurzbz: termin.kurzbz,\n\t\t\tprojektarbeit_id: termin.projektarbeit_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/postProjektarbeitAbgabe';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t\t\n\t},\n\tdeleteProjektarbeitAbgabe(paabgabe_id) {\n\t\tconst payload = {\n\t\t\tpaabgabe_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/deleteProjektarbeitAbgabe';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t},\n\tpostSerientermin(datum, paabgabetyp_kurzbz, bezeichnung, kurzbz, projektarbeit_ids) {\n\t\tconst payload = {\n\t\t\tdatum, paabgabetyp_kurzbz, bezeichnung, kurzbz, projektarbeit_ids\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/postSerientermin';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t},\n\tfetchDeadlines(person_id) {\n\t\tconst payload = {\n\t\t\tperson_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/fetchDeadlines';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t}\n }","export default {\n getLvMenu(lvid, studiensemester_kurzbz) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/LvMenu/getLvMenu/${lvid}/${studiensemester_kurzbz}`,\n {}\n );\n },\n\n \n }","import person from \"./messages/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\t\tgetMessages(url, config, params) {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessages/' + params.id + '/' + params.type + '/' + params.size + '/' + params.page);\n\t\t},\n\t\tgetVorlagen(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagen/');\n\t\t},\n\t\tgetMsgVarsLoggedInUser(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/');\n\t\t},\n\t\tgetMessageVarsPerson(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessageVarsPerson/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetMsgVarsPrestudent(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsPrestudent/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPersonId(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getPersonId/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetUid(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getUid/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetVorlagentext(vorlage_kurzbz){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagentext/' + vorlage_kurzbz);\n\t\t},\n\t\tgetNameOfDefaultRecipient(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getNameOfDefaultRecipient/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPreviewText(params, data){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/getPreviewText/' + params.id + '/' + params.type_id,\n\t\t\t\tdata);\n\t\t},\n\t\tgetReplyData(messageId){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getReplyData/' + messageId);\n\t\t},\n\t\tsendMessageFromModalContext(form, id, data) {\n\t\t\treturn this.$fhcApi.post(form,'api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tsendMessage(id, data) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tdeleteMessage(messageId){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/deleteMessage/' + messageId);\n\t\t}\n}","export default {\n\tgetVorlagen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagen/');\n\t},\n\tgetVorlagenByLoggedInUser() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/');\n\t}\n}","export default {\n\n\tgetStudiensemester: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/components/Cis/Mylv/Studiensemester',\n\t\t\t{}\n\t\t);\n\t},\n\n\tgetAllStudienSemester: function (studiensemester=undefined, studiengang=undefined, semester=undefined, studienplan=undefined) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/Studium/getStudienAllSemester',\n\t\t\t{studiensemester, studiengang, semester, studienplan}\n\t\t);\n\t},\n\n\tgetStudiengaengeForStudienSemester: function (studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${studiensemester}`,\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudienplaeneBySemester: function (studiengang, studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudienplaeneBySemester`,\n\t\t\t{\n\t\t\t\tstudiengang,\n\t\t\t\tstudiensemester,\n\t\t\t}\n\t\t);\n\t},\n\tgetLvPlanForStudiensemester: function (studiensemester, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${studiensemester}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\tgetLvEvaluierungInfo: function (studiensemester_kurzbz, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getLvEvaluierungInfo/${studiensemester_kurzbz}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\t\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport search from \"./search.js\";\nimport phrasen from \"./phrasen.js\";\nimport navigation from \"./navigation.js\";\nimport filter from \"./filter.js\";\nimport studstatus from \"./studstatus.js\";\nimport profil from \"./profil.js\";\nimport profilUpdate from \"./profilUpdate.js\";\nimport lvPlan from \"./lvPlan.js\";\nimport bookmark from \"./bookmark.js\";\nimport stv from \"./stv.js\";\nimport notiz from \"./notiz.js\";\nimport betriebsmittel from \"./betriebsmittel.js\";\nimport checkperson from \"./checkperson.js\";\nimport ampeln from \"./ampeln.js\";\nimport ort from \"./ort.js\";\nimport cms from \"./cms.js\";\nimport lehre from \"./lehre.js\";\nimport addons from \"./addons.js\";\nimport messages from \"./messages.js\";\nimport vorlagen from \"./vorlagen.js\";\nimport studiengang from \"./studiengang.js\";\nimport menu from \"./menu.js\";\nimport dashboard from \"./dashboard.js\";\nimport authinfo from \"./authinfo.js\";\nimport studium from \"./studium.js\";\nimport language from \"./language.js\";\n\nexport default {\n search,\n phrasen,\n navigation,\n dashboard,\n filter,\n studstatus,\n profil,\n profilUpdate,\n lvPlan,\n bookmark,\n stv,\n notiz,\n betriebsmittel,\n checkperson,\n ampeln,\n ort,\n cms,\n lehre,\n addons,\n messages,\n vorlagen,\n addons,\n\tstudiengang,\n\tmenu,\n\tauthinfo,\n\tstudium,\n language\n};\n","export default {\n\tasync getViewData() {\n\t\tconst url = `/api/frontend/v1/Cis4FhcApi/getViewData`;\n\t\treturn this.$fhcApi.get(url, null, null)\n\t},\n}","export default {\n\n getBookmarks: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/getBookmarks`\n ,{}\n );\n },\n \n delete: function (bookmark_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/delete/${bookmark_id}`\n ,{}\n ); \n },\n\n\tupdate: function ({ bookmark_id, url, title, tag=null}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/Bookmark/update/${bookmark_id}`\n\t\t\t, {\n\t\t\t\turl: url,\n\t\t\t\ttitle: title\n\t\t\t}\n\t\t);\n\t},\n\n insert: function ({url, title, tag}) {\n return this.$fhcApi.post(\n `/api/frontend/v1/Bookmark/insert`\n ,{\n url: url,\n title: title,\n tag: tag\n }\n ); \n },\n}","export default {\n \n open: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/open`,{});\n },\n\n all: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/all`,{});\n },\n\n confirm: function (ampel_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/confirm/${ampel_id}`,{});\n },\n\n}","export default {\n\tstudiengangInformation: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Studgang/getStudiengangInfo\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudiengangByKz: function (studiengang_kz) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz\",\n\t\t\t{\n\t\t\t\t\"studiengang_kz\": studiengang_kz\n\t\t\t}\n\t\t);\n\t}\n}","export default {\n\tgetMenu: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/CisMenu/getMenu\",\n\t\t\t{}\n\t\t);\n\t}\n\n}","\nexport default {\n\tgetAuthUID() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthUID',\n\t\t\t{ }\n\t\t);\n\t},\n\tgetAuthInfo() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthInfo',\n\t\t\t{}\n\t\t);\n\t},\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAll() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/language/get');\n\t}\n};","/** TODO(chris):\n * when deleting this file be sure to\n * remove line 1 & 90 from ../plugins/Phrasen.js\n */\nimport FhcApiFactory from '../api/fhcapifactory.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$fhcApi) {\n\t\t\t/* Deprecated Code start */\n\t\t\tif (options?.factory) {\n\t\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\t\tapp.config.globalProperties.$fhcApi.factory.addEndpoints(options.factory);\n\t\t\t}\n\t\t\t/* Deprecated Code end */\n\t\t\treturn;\n\t\t}\n\n\t\tfunction _get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\n\t\tfunction _clean_return_value(response) {\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = {response};\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tconst baseURL = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\";\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(response => {\n\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\treturn _clean_return_value(response);\n\n\t\t\t// NOTE(chris): loop through errors\n\t\t\tif (response.data.errors)\n\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t);\n\n\t\t\treturn _clean_return_value(response);\n\t\t}, error => {\n\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\n\t\t\tif (error.config?.errorHandling == 'off'\n\t\t\t\t|| error.config?.errorHandling === false\n\t\t\t\t|| error.config?.errorHandling == 'success')\n\t\t\t\treturn Promise.reject(error);\n\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL, true);\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t\t}\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\terror.response.data.errors = error.response.data.errors.filter(\n\t\t\t\t\terr => (error.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, error.config)\n\t\t\t\t);\n\t\t\t\tif (!error.response.data.errors.length)\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else if (error.request) {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertError(error.message);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t}\n\n\t\t\treturn Promise.reject(error);\n\t\t});\n\n\t\tapp.config.globalProperties.$fhcApi = {\n\t\t\tgetUri(url) {\n\t\t\t\tconsole.warn('$fhcApi.getUri is DEPRECATED! Use $api.getUri instead.');\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\tconsole.warn('$fhcApi.get is DEPRECATED! Use $api.get instead.');\n\t\t\t\t[uri, params, config] = _get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\tconsole.warn('$fhcApi.post is DEPRECATED! Use $api.post instead.');\n\t\t\t\t[uri, data, config] = _get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\t_defaultErrorHandlers: {\n\t\t\t\tvalidation(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form) {\n\t\t\t\t\t\tconfig.form.clearValidation();\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.messages);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(error.messages)) {\n\t\t\t\t\t\terror.messages.forEach($fhcAlert.alertError);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (typeof error.messages == 'object') {\n\t\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t\tObject.values(error.messages).forEach(\n\t\t\t\t\t\t\t\tvalue => $fhcAlert.alertDefault(\n\t\t\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tObject.entries(error.messages).forEach(\n\t\t\t\t\t\t\t\t([key, value]) => $fhcAlert.alertDefault('error', key, value, true)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tgeneral(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form)\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.message);\n\t\t\t\t\telse if (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertError(error.message);\n\t\t\t\t},\n\t\t\t\tphp(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('warn', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('info', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\texception(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tdb(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tauth(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertDefault('error', error.message, message);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/* Deprecated Code start */\n\t\tclass FhcApiFactoryWrapper {\n\t\t\tconstructor(factorypart, root) {\n\t\t\t\tif (root === undefined) {\n\t\t\t\t\tthis.$fhcApi = {\n\t\t\t\t\t\tgetUri(url) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.getUri(url);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget(form, uri, params, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.get(form, uri, params, config);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpost(form, uri, data, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.post(form, uri, data, config);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tObject.defineProperty(this.$fhcApi, 'factory', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.factory;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tapp.config.globalProperties.$fhcApi.factory = this;\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty(this, '$fhcApi', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\treturn (root || this).$fhcApi;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.addEndpoints(factorypart, true)\n\t\t\t}\n\n\t\t\taddEndpoints(factorypart, noWarn) {\n\t\t\t\tObject.keys(factorypart).forEach(key => {\n\t\t\t\t\tObject.defineProperty(this, key, {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tif (typeof factorypart[key] == 'function')\n\t\t\t\t\t\t\t\treturn factorypart[key].bind(this);\n\t\t\t\t\t\t\treturn new FhcApiFactoryWrapper(factorypart[key], this.$fhcApi.factory);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tif (!noWarn) console.warn('$fhcApi.factory.addEndpoints() is DEPRECATED!');\n\t\t\t}\n\t\t}\n\n\t\tconst factory = new FhcApiFactoryWrapper(FhcApiFactory);\n\t\tif (options?.factory) {\n\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\tfactory.addEndpoints(options.factory);\n\t\t}\n\n\t\tapp.config.globalProperties.$fhcApi.factory = factory;\n\t\t/* Deprecated Code end */\n\t\t\n\t\tapp.provide('$fhcApi', app.config.globalProperties.$fhcApi);\n\t}\n};","import FhcAlert from './FhcAlert.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$api) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!app.config.globalProperties.$fhcAlert)\n\t\t\tapp.use(FhcAlert);\n\n\t\tfunction _send_array_or_object(errors, func) {\n\t\t\tif (Array.isArray(errors))\n\t\t\t\terrors.forEach(func);\n\t\t\telse\n\t\t\t\tObject.entries(errors).forEach(\n\t\t\t\t\t([title, errs]) => errs.forEach(\n\t\t\t\t\t\terror => func(error, title)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t}\n\t\tlet DEFAULT_ERROR_CONFIG = {\n\t\t\tsuccess: true,\n\t\t\tfail: true,\n\t\t\tcombine: {\n\t\t\t\tform: ['validation', 'general'],\n\t\t\t\ttoast: ['validation', 'general', 'not_found', 'site_failed']\n\t\t\t},\n\t\t\thandler: {\n\t\t\t\tform(form, errors) {\n\t\t\t\t\tform.clearValidation();\n\t\t\t\t\terrors.forEach(err => form.setFeedback(\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\terr.messages || err.message\n\t\t\t\t\t));\n\t\t\t\t},\n\t\t\t\tasync toast(errors) {\n\t\t\t\t\tconst $p = app.config.globalProperties.$p;\n\t\t\t\t\tif (!$p)\n\t\t\t\t\t\treturn Promise.reject('Phrasen plugin not loaded!');\n\t\t\t\t\n\t\t\t\t\tasync function _format_toast(errors) {\n\t\t\t\t\t\terrors = errors.reduce((result, err) => {\n\t\t\t\t\t\t\tswitch (err.type) {\n\t\t\t\t\t\t\tcase 'not_found':\n\t\t\t\t\t\t\tcase 'site_failed':\n\t\t\t\t\t\t\t\tif (err.message)\n\t\t\t\t\t\t\t\t\tresult[err.message] = [err.url];\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tresult._default = [err.url];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'general':\n\t\t\t\t\t\t\t\tif (!result._default)\n\t\t\t\t\t\t\t\t\tresult._default = [];\n\t\t\t\t\t\t\t\tresult._default.push(err.message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'validation':\n\t\t\t\t\t\t\t\tObject.entries(err.messages)\n\t\t\t\t\t\t\t\t\t.forEach(([field, msg]) => {\n\t\t\t\t\t\t\t\t\t\tif (!result[field])\n\t\t\t\t\t\t\t\t\t\t\tresult[field] = [];\n\t\t\t\t\t\t\t\t\t\tif (Array.isArray(msg))\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(...msg);\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(msg);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}, {});\n\t\t\t\t\t\tlet counter = 0;\n\t\t\t\t\t\tconst msgs = await Promise.all(Object.entries(errors)\n\t\t\t\t\t\t\t.sort((a, b) => ['_default'].indexOf(b[0]) - ['_default'].indexOf(a[0])) // sort _default first\n\t\t\t\t\t\t\t.map(async ([field, msgs]) => {\n\t\t\t\t\t\t\t\tif (field == '_default') {\n\t\t\t\t\t\t\t\t\tawait $p.loadCategory('dashboard');\n\t\t\t\t\t\t\t\t\tconst general = $p.t('dashboard/general');\n\t\t\t\t\t\t\t\t\tfield = '
    ' + general + '
    ';\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfield = '
    ' + field + '
    ';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcounter += msgs.length;\n\t\t\t\t\t\t\t\treturn field\n\t\t\t\t\t\t\t\t\t+ '
    '\n\t\t\t\t\t\t\t\t\t+ msgs.join('
    ')\n\t\t\t\t\t\t\t\t\t+ '
    ';\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcounter,\n\t\t\t\t\t\t\tmsgs\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet counter, msgs;\n\t\t\t\t\tif (Array.isArray(errors)) {\n\t\t\t\t\t\t({ counter, msgs } = await _format_toast(errors));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t({ counter, msgs } = await Object.entries(errors)\n\t\t\t\t\t\t\t.reduce(async (res, [title, errs]) => {\n\t\t\t\t\t\t\t\tconst result = await res;\n\t\t\t\t\t\t\t\tconst { counter, msgs } = await _format_toast(errs);\n\t\t\t\t\t\t\t\tresult.counter += counter;\n\t\t\t\t\t\t\t\tresult.msgs.push('
    '\n\t\t\t\t\t\t\t\t\t+ title\n\t\t\t\t\t\t\t\t\t+ '
    '\n\t\t\t\t\t\t\t\t\t+ msgs.join('')\n\t\t\t\t\t\t\t\t\t+ '
    ');\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}, Promise.resolve({ counter: 0, msgs: []})));\n\t\t\t\t\t}\n\n\t\t\t\t\tawait $p.loadCategory('ui');\n\t\t\t\t\tconst n_errors = $p.t('ui/n_errors', { n: counter });\n\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\tn_errors,\n\t\t\t\t\t\t'
    ' + msgs.join('') + '
    ',\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tphp(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('warn', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('info', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\tmessage = title + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\texception(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tdb(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tauth(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\ttitle += ': ' + error.message;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ttitle = error.message;\n\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (options?.errorHandling !== undefined)\n\t\t\tDEFAULT_ERROR_CONFIG = _merge_error_config(options.errorHandling);\n\t\t\n\t\tfunction get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\t\tfunction clean_return_value(response) {\n\t\t\tif (typeof response.data === 'string' || response.data instanceof String)\n\t\t\t\treturn clean_return_value({ data: response });\n\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result)\n\t\t\t\treturn {meta: {response}, data: null};\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = { response };\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tfunction _merge_error_config(config) {\n\t\t\tif (config === false || config === 'off')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false, fail: false };\n\t\t\t\n\t\t\tif (!config || config === true)\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tif (config === 'success')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, fail: false };\n\t\t\t\n\t\t\tif (config === 'fail')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false };\n\t\t\t\n\t\t\tconst { success, fail, handler, combine } = config;\n\t\t\t\n\t\t\tconfig = { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tObject.entries({ fail, success }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = value;\n\t\t\t});\n\t\t\tObject.entries({ handler, combine }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = { ...config[key], ...value };\n\t\t\t});\n\n\t\t\treturn config;\n\t\t}\n\t\tfunction get_error_handler(config) {\n\t\t\tconst result = _merge_error_config(config?.errorHandling);\n\n\t\t\tif (!config?.form) {\n\t\t\t\tresult.combine = { ...result.combine, form: [] };\n\t\t\t} else {\n\t\t\t\tconst formHandler = result.handler.form;\n\t\t\t\tresult.handler = { ...result.handler, form: errors => formHandler(config.form, errors) };\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t\tfunction get_error_list(error) {\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\treturn [{\n\t\t\t\t\t\ttype: 'not_found',\n\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t\t}];\n\t\t\t\t} else {\n\t\t\t\t\tif (error.response.data.errors == undefined) return [];\n\t\t\t\t\treturn error.response.data.errors;\n\t\t\t\t}\n\t\t\t} else if (error.request) {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'site_failed',\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t}];\n\t\t\t} else {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'script',\n\t\t\t\t\tmessage: error.message\n\t\t\t\t}];\n\t\t\t}\n\t\t}\n\t\tfunction popHandleableErrors(errorHandling, errors) {\n\t\t\tconst result = {};\n\t\t\tconst copy = [];\n\n\t\t\tif (errors == undefined) return {};\n\n\t\t\twhile (errors.length)\n\t\t\t\tcopy.push(errors.pop());\n\t\t\tfor (var error of copy) {\n\t\t\t\tlet type = error.type;\n\t\t\t\tlet newType = null;\n\t\t\t\tfor (var t in errorHandling.combine) {\n\t\t\t\t\tlet newTypeCombinesType = errorHandling\n\t\t\t\t\t\t.combine[t]\n\t\t\t\t\t\t.includes(type);\n\t\t\t\t\tlet newTypeHasHandler = errorHandling.handler[t];\n\t\t\t\t\tif (newTypeCombinesType && newTypeHasHandler) {\n\t\t\t\t\t\tnewType = t;\n\t\t\t\t\t\tif (newType == 'form')\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (newType)\n\t\t\t\t\ttype = newType;\n\t\t\t\tconst handler = errorHandling.handler[type];\n\t\t\t\tif (handler) {\n\t\t\t\t\tif (!result[type])\n\t\t\t\t\t\tresult[type] = [];\n\t\t\t\t\tif (Array.isArray(error))\n\t\t\t\t\t\tresult[type].push(...error);\n\t\t\t\t\telse\n\t\t\t\t\t\tresult[type].push(error);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\terrors.push(error);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t+ FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(\n\t\t\tresponse => {\n\t\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\t\treturn clean_return_value(response);\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\tif (response.data.errors)\n\t\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$api._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t\t);\n\n\t\t\t\treturn clean_return_value(response);\n\t\t\t},\n\t\t\terror => {\n\t\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\n\t\t\t\tconst errorConfig = get_error_handler(error.config);\n\n\t\t\t\tif (!errorConfig.fail)\n\t\t\t\t\treturn Promise.reject(error);\n\n\t\t\t\tconst remaining = get_error_list(error);\n\n\t\t\t\tconst errors = popHandleableErrors(errorConfig, remaining);\n\n\t\t\t\tfor (var type in errors) {\n\t\t\t\t\terrorConfig.handler[type](errors[type]);\n\t\t\t\t}\n\n\t\t\t\tif (remaining.length)\n\t\t\t\t\treturn Promise.reject(error);\n\t\t\t\t\n\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\t\t\t}\n\t\t);\n\n\t\tapp.config.globalProperties.$api = {\n\t\t\tgetUri(url) {\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\t[uri, params, config] = get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\t[uri, data, config] = get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\tcall(factory, configoverwrite, form) {\n\t\t\t\tif (Array.isArray(factory)) {\n\t\t\t\t\tconst $api = app.config.globalProperties.$api;\n\n\t\t\t\t\treturn Promise\n\t\t\t\t\t\t.allSettled(factory.map((config, index) => {\n\t\t\t\t\t\t\tif (!Array.isArray(config))\n\t\t\t\t\t\t\t\tconfig = ['#' + index, config];\n\t\t\t\t\t\t\treturn $api.call(config[1], {\n\t\t\t\t\t\t\t\terrorHeader: config[0],\n\t\t\t\t\t\t\t\terrorHandling: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}))\n\t\t\t\t\t\t.then(result => {\n\t\t\t\t\t\t\tconst [ , , config ] = get_config(form, undefined, undefined, configoverwrite || {});\n\t\t\t\t\t\t\tconst errorConfig = get_error_handler(config);\n\n\t\t\t\t\t\t\tif (!errorConfig.success && !errorConfig.fail) {\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst typedErrors = {};\n\t\t\t\t\t\t\tfor (var res of result) {\n\t\t\t\t\t\t\t\tconst [ allowed, item ] = res.status === 'fulfilled'\n\t\t\t\t\t\t\t\t\t? [ errorConfig.success, res.value ]\n\t\t\t\t\t\t\t\t\t: [ errorConfig.fail, res.reason ];\n\t\t\t\t\t\t\t\tif (!allowed)\n\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\tconst errors = popHandleableErrors(errorConfig, get_error_list(item));\n\n\t\t\t\t\t\t\t\tfor (var type in errors) {\n\t\t\t\t\t\t\t\t\tif (!typedErrors[type])\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type] = {\n\t\t\t\t\t\t\t\t\t\t\t[item.config.errorHeader]: errors[type]\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type][item.config.errorHeader] = errors[type];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfor (var errType in typedErrors) {\n\t\t\t\t\t\t\t\terrorConfig.handler[errType](typedErrors[errType]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tlet { method, url, params, config } = factory;\n\t\t\t\tif (configoverwrite !== undefined) {\n\t\t\t\t\tconfig = configoverwrite;\n\t\t\t\t}\n\t\t\t\tif (!method) {\n\t\t\t\t\tmethod = 'get';\n\t\t\t\t}\n\t\t\t\tif (method.toLowerCase)\n\t\t\t\t\tmethod = method.toLowerCase();\n\t\t\t\tif (method == 'get') {\n\t\t\t\t\treturn this.get(form, url, params, config);\n\t\t\t\t} else if (method == 'post') {\n\t\t\t\t\treturn this.post(form, url, params, config);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"FhcApi: method not allowed:\", method);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tapp.provide('$api', app.config.globalProperties.$api);\n\t}\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/loadModule/' + category\n\t\t};\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst params = {categories, language}\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/phrasen/setLanguage',\n\t\t\tparams\n\t\t};\n\t},\n\tgetLanguage() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getLanguage'\n\t\t};\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getAllLanguages'\n\t\t};\n\t}\n};","import OldFhcApi from '../plugin/OldFhcApi.js'; // TODO(chris): remove at some point\nimport PluginsApi from './Api.js';\nimport ApiPhrasen from '../api/factory/phrasen.js';\n\nconst categories = Vue.reactive({});\nconst loadingModules = {};\nlet user_language = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language);\nexport let user_locale = Vue.computed(()=>{\n\tif(!user_language.value) return null;\n\treturn FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(language => language.sprache == user_language.value).LC_Time;\n});\n\nfunction extractCategory(obj, category) {\n\treturn obj.filter(e => e.category == category).reduce((res, elem) => {\n\t\tif (!res[elem.phrase])\n\t\t\tres[elem.phrase] = elem.text;\n\t\treturn res;\n\t}, {});\n}\nfunction getValueForLoadedPhrase(category, phrase, params) {\n\tlet result = categories[category][phrase];\n\tif (!result)\n\t\treturn '<< PHRASE ' + phrase + '>>';\n\tif (params)\n\t\tresult = result.replace(/\\{([^}]*)\\}/g, (match, p1) => params[p1] === undefined ? match : params[p1]);\n\treturn result;\n}\n\nconst phrasen = {\n\tuser_language,\n\tuser_locale,\n\tsetLanguage(language) {\n\t\tconst catArray = Object.keys(categories)\n\t\treturn this.config.globalProperties.$api\n\t\t\t.call(ApiPhrasen.setLanguage(catArray, language))\n\t\t\t.then(res => {\n\t\t\t\tres.data.forEach(row => {\n\t\t\t\t\tcategories[row.category][row.phrase] = row.text\n\t\t\t\t})\n\n\t\t\t\t// update the reactive data that holds the current active user_language\n\t\t\t\tuser_language.value = language;\n\n\t\t\t\treturn res\n\t\t\t})\n\t},\n\tloadCategory(category) {\n\t\tif (Array.isArray(category))\n\t\t\treturn Promise.all(category.map(this.config.globalProperties\n\t\t\t\t.$p.loadCategory));\n\n\t\tif (!loadingModules[category])\n\t\t\tloadingModules[category] = this.config.globalProperties.$api\n\t\t\t\t.call(ApiPhrasen.loadCategory(category))\n\t\t\t\t.then(res => res?.data ? extractCategory(res.data, category) : {})\n\t\t\t\t.then(res => {\n\t\t\t\t\tcategories[category] = res;\n\t\t\t\t});\n\t\treturn loadingModules[category];\n\t},\n\tt_ref(category, phrase, params) {\n\t\tconsole.warn('deprecated');\n\t\treturn Vue.computed(() => this.t(category, phrase, params));\n\t},\n\tt(category, phrase, params) {\n\t\tif (params === undefined && (\n\t\t\t(Array.isArray(category) && category.length == 2) ||\n\t\t\t(category.split && category.split('/').length == 2))\n\t\t\t) {\n\t\t\tparams = phrase;\n\t\t\t[category, phrase] = category.split ? category.split('/') : category;\n\t\t}\n\t\tif (phrase === undefined) {\n\t\t\tconsole.error('invalid input', category, phrase, params);\n\t\t\treturn '';\n\t\t}\n\t\tlet val = Vue.computed(() => {\n\t\t\tif (!categories[category])\n\t\t\t\treturn '';\n\t\t\treturn getValueForLoadedPhrase(category, phrase, params);\n\t\t});\n\t\tif (!categories[category])\n\t\t\tthis.loadCategory(category);\n\t\treturn val.value;\n\t}\n};\n\nexport default {\n\tinstall(app, options) {\n\t\tif (!app.config.globalProperties.$fhcApi)\n\t\t\tapp.use(OldFhcApi); // TODO(chris): remove at some point\n\t\tif (!app.config.globalProperties.$api)\n\t\t\tapp.use(PluginsApi);\n\t\tapp.config.globalProperties.$p = {\n\t\t\tt: phrasen.t,\n\t\t\tloadCategory: cat => phrasen.loadCategory.call(app, cat),\n\t\t\tsetLanguage: lang => phrasen.setLanguage.call(app, lang),\n\t\t\tuser_language: user_language,\n\t\t\tuser_locale,\n\t\t\tt_ref: phrasen.t_ref\n\t\t};\n\t\tapp.provide('$p', app.config.globalProperties.$p);\n\t}\n}","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n//--------------------------------------------------------------------------------------------------------------------\n// Configs\n\n// To see debug messages into the browser console set this parameter as true\nconst CORE_REST_CLIENT_DEBUG = false;\n\n// Default timeout (milliseconds)\nconst CORE_REST_CLIENT_TIMEOUT = 5000;\n\n//--------------------------------------------------------------------------------------------------------------------\n// Constants\n\n// Success\nconst CORE_REST_CLIENT_SUCCESS = 0;\n\n// Properties present in a response\nconst CORE_REST_CLIENT_ERROR = \"error\";\nconst CORE_REST_CLIENT_RETVAL = \"retval\";\n\n// HTTP method parameters\nconst CRC_HTTP_GET_METHOD = \"get\";\nconst CRC_HTTP_POST_METHOD = \"post\";\n\n/**\n * Definition and initialization of the object CoreRESTClient\n */\nexport const CoreRESTClient = {\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Public methods\n\n\t/**\n\t * Performs a call using the HTTP GET method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tget: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_GET_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Performs a call using the HTTP POST method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tpost: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_POST_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Checks if the response is a success\n\t */\n\tisSuccess: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR)\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL) && response.error == CORE_REST_CLIENT_SUCCESS)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Checks if the response is an error\n\t */\n\tisError: function(response) {\n\t\treturn !CoreRESTClient.isSuccess(response);\n\t},\n\n\t/**\n\t * Checks if the response has data\n\t */\n\thasData: function(response) {\n\n\t\tif (CoreRESTClient.isSuccess(response))\n\t\t{\n\t\t\tif ((typeof response[CORE_REST_CLIENT_RETVAL] === \"object\" && Object.keys(response[CORE_REST_CLIENT_RETVAL]).length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"array\" && response[CORE_REST_CLIENT_RETVAL].length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"string\" && response[CORE_REST_CLIENT_RETVAL].trim() != \"\")\n\t\t\t\t|| typeof response[CORE_REST_CLIENT_RETVAL] === \"number\")\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Retrives data from response object\n\t */\n\tgetData: function(response) {\n\n\t\tif (CoreRESTClient.hasData(response))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Retrives error message from response object\n\t */\n\tgetError: function(response) {\n\n\t\tif (typeof response === \"object\"\n\t\t\t&& Object.keys(response).length > 0\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn \"Generic error\";\n\t},\n\n\t/**\n\t * Retrives code from response object\n\t */\n\tgetErrorCode: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_ERROR];\n\t\t}\n\n\t\treturn 1; // Generic error\n\t},\n\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Private methods\n\n\t/**\n\t * Generate the router URI using the connection parameters\n\t */\n\t_generateRouterURI: function(wsURL) {\n\t\tvar uri = null;\n\n\t\t// Checks if global JS object FHC_JS_DATA_STORAGE_OBJECT exists\n\t\tif (typeof FHC_JS_DATA_STORAGE_OBJECT !== \"undefined\")\n\t\t{\n\t\t\turi = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\" + wsURL;\n\t\t}\n\n\t\treturn uri;\n\t},\n\n\t/**\n\t * Method to print debug info after a controller has been called\n\t */\n\t_printDebug: function(parameters, response, errorThrown) {\n\n\t\tif (CORE_REST_CLIENT_DEBUG === true) // If global const CORE_REST_CLIENT_DEBUG is true, but really true!\n\t\t{\n\t\t\t// Print info about called controller\n\t\t\tconsole.log(\"Called controller: \" + parameters.remoteController);\n\t\t\tconsole.log(\"Call parameters:\"); // parameters given to this call\n\t\t\tconsole.log(parameters);\n\n\t\t\tif (response != null) // if there is a response...\n\t\t\t{\n\t\t\t\tconsole.log(\"Controller Response:\");\n\t\t\t\tconsole.log(response); // ...print it\n\t\t\t}\n\t\t\tif (errorThrown != null) // if there is a jQuery error...\n\t\t\t{\n\t\t\t\tconsole.log(\"jQuery error:\");\n\t\t\t\tconsole.log(errorThrown); // ...print it\n\t\t\t}\n\t\t\tconsole.log(\"--------------------------------------------------------------------------------------------\");\n\t\t}\n\t},\n\n\t/**\n\t * Performs a call to the server were the CI PHP layer is running\n\t * - wsURL: alias of the core controller to call\n\t * - wsParameters: parameters to give to the called controller\n\t * - type: POST or GET HTTP method\n\t * - axiosParameters: an object to configure the axios call\n\t */\n\t_axiosCall: function(wsURL, wsParameters, type, axiosParameters) {\n\n\t\t// Axios config object\n\t\tlet axiosCallObj = {\n\t\t\tmethod: type,\n\t\t\turl: CoreRESTClient._generateRouterURI(wsURL),\n\t\t\ttimeout: CORE_REST_CLIENT_TIMEOUT // default time out\n\t\t};\n\n\t\t// The ajax call is HTTP GET\n\t\tif (type == CRC_HTTP_GET_METHOD)\n\t\t{\n\t\t\taxiosCallObj.params = wsParameters;\n\t\t}\n\t\t// The ajax call is HTTP POST\n\t\telse\n\t\t{\n\t\t\taxiosCallObj.data = wsParameters;\n\t\t}\n\n\t\t// Check if axiosParameters is an object\n\t\tif (typeof axiosParameters === \"object\")\n\t\t{\n\t\t\t// And then copies the its properties into axiosCallObj\n\t\t\tfor (var prop in axiosParameters) axiosCallObj[prop] = axiosParameters[prop];\n\t\t}\n\n\t\t// Perform the ajax call via axios\n\t\treturn axios(axiosCallObj);\n\t}\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n * \n * @usage:\n * Preperations:\n * Be sure to have PrimeVue loaded with the toast and confirmdialog\n * components as primevue variable\n * Install:\n * Import this Plugin and install it with the app.use() function.\n * Use:\n * In your component you can call now the global property $fhcAlert\n * which has the following functions:\n * \n * alertSuccess\n * ------------\n * Displays a success message\n * @param string\tmessage\n * @return void\n * \n * alertInfo\n * ---------\n * Displays an info message\n * @param string\tmessage\n * @return void\n * \n * alertWarning\n * ------------\n * Displays a warning\n * @param string\tmessage\n * @return void\n * \n * alertError\n * ----------\n * Displays an error\n * @param string\tmessage\n * @return void\n * \n * alertSystemError\n * ----------------\n * Displays an alert with the error details and a button to mail\n * the error to the Support Team\n * @param string\tmessage\n * @return void\n * \n * confirmDelete\n * -------------\n * Displays a confirmation dialog and returns a Promise which resolves\n * with true or false depending und the pressed button.\n * @return Promise\n * \n * alertDefault\n * ------------\n * Displays an alert\n * @param string\tseverity\t\tcan be 'success', 'info', 'warning', 'error'\n * @param string\ttitle\n * @param string\tmessage\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * alertMultiple\n * -------------\n * Displays multiple alerts\n * @param array\t\tmessageArray\n * @param string\tseverity\t\t(optional) defaults to 'info'\n * @param string\ttitle\t\t\t(optional) defaults to 'Info'\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * handleSystemError\n * -----------------\n * Automatiticly determine how to display an system error and display it.\n * This would be used in a catch block of an ajax call.\n * @param mixed\t\terror\n * @return void\n * \n * handleSystemMessage\n * -------------------\n * Automatiticly determine how to display a message and display it.\n * @param mixed\t\tmessage\n * @return void\n */\nimport PvConfig from \"../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js\";\nimport PvToast from \"../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js\";\nimport PvConfirm from \"../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js\";\nimport PvConfirmationService from \"../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js\";\nimport FhcPhrasen from \"./Phrasen.js\";\n\nimport {CoreRESTClient} from '../RESTClient.js';\n\nconst helperAppContainer = document.createElement('div');\n\nconst helperApp = Vue.createApp({\n\tname: \"FhcAlertApp\",\n\tcomponents: {\n\t\tPvToast,\n\t\tPvConfirm\n\t},\n\tmethods: {\n\t\tmailToUrl(slotProps) {\n\t\t\tlet mailTo = FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto;\n\t\t\tlet subject = 'Meldung%20Systemfehler';\n\t\t\tlet body = `\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: ` + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method + `%0D%0A\n\t\t\t\tFehler Meldung: ` + slotProps.message.detail + `%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!`\n\n\t\t\treturn \"mailto:\" + mailTo + \"?subject=\" + subject + \"&body=\" + body;\n\t\t},\n\t\topenMessagecard(e) {\n\t\t\tbootstrap.Collapse.getOrCreateInstance(e.target.getAttribute('href')).toggle();\n\t\t}\n\t},\n\tunmounted() {\n\t\thelperAppContainer.parentElement.removeChild(helperAppContainer);\n\t},\n\tcomputed: {\n\t\tshowmaillink: function() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto !== '';\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t`\n});\n\nhelperApp.use(PvConfig);\nhelperApp.use(PvConfirmationService);\n//helperApp.use(FhcPhrasen);\n\nconst helperAppInstance = helperApp.mount(helperAppContainer);\n\ndocument.body.appendChild(helperAppContainer);\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (!app.config.globalProperties.$p)\n\t\t\tapp.use(FhcPhrasen);\n\n\t\tconst $fhcAlert = {\n\t\t\talertSuccess(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSuccess);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'success', summary: 'Info', detail: message, life: 1000});\n\t\t\t},\n\t\t\talertInfo(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertInfo);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'info', summary: 'Info', detail: message, life: 3000 });\n\t\t\t},\n\t\t\talertWarning(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertWarning);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'warn', summary: 'Achtung', detail: message});\n\t\t\t},\n\t\t\talertError(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertError);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'error', summary: 'Achtung', detail: message });\n\t\t\t},\n\t\t\talertSystemError(message) {\n\t\t\t\t//TODO(Manu) for translation of content of template: restructure in data\n\t\t\t\t//and update definitions with translations\n\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSystemError);\n\t\t\t\thelperAppInstance.$refs.alert.add({\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t\tsummary: Vue.computed(() => app.config.globalProperties.$p.t('alert/systemerror')),\n\t\t\t\t\tdetail: message});\n\t\t\t},\n\t\t\tconfirmDelete() {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: 'fhcAlertConfirm',\n\t\t\t\t\t\theader: Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: Vue.computed(() => app.config.globalProperties.$p.t('alert/confirm_delete')),\n\t\t\t\t\t\tacceptLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/loeschen')),\n\t\t\t\t\t\tacceptClass: 'p-button-danger',\n\t\t\t\t\t\trejectLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: 'p-button-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tconfirm(options) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: options?.group ?? 'fhcAlertConfirm',\n\t\t\t\t\t\theader: options?.header ?? Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: options?.message ?? '',\n\t\t\t\t\t\tacceptLabel: options?.acceptLabel ?? 'Ok',\n\t\t\t\t\t\tacceptClass: options?.acceptClass ?? 'btn btn-primary',\n\t\t\t\t\t\trejectLabel: options?.rejectLabel ?? Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: options?.rejectClass ?? 'btn btn-outline-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\talertDefault(severity, title, message, sticky = false, html = false) {\n\t\t\t\tlet options = { severity: severity, summary: title, detail: message, html };\n\t\t\t\t\n\t\t\t\tif (!sticky)\n\t\t\t\t\toptions.life = 3000;\n\n\t\t\t\thelperAppInstance.$refs.toast.add(options);\n\t\t\t},\n\t\t\talertMultiple(messageArray, severity = 'info', title = 'Info', sticky = false, html = false){\n\t\t\t\t// Check, if array has only string values\n\t\t\t\tif (messageArray.every(message => typeof message === 'string')) {\n\t\t\t\t\tmessageArray.forEach(message => this.alertDefault(severity, title, message, sticky, html));\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\thandleSystemError(error) {\n\t\t\t\t// don't show an error message to the user if the error was an aborted request\n\t\t\t\tif(error.hasOwnProperty('name') && error.name.toLowerCase() === \"AbortError\".toLowerCase())\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is string\n\t\t\t\tif (typeof error === 'string')\n\t\t\t\t\treturn $fhcAlert.alertSystemError(error);\n\n\t\t\t\t// Error is array of strings\n\t\t\t\tif (Array.isArray(error) && error.every(err => typeof err === 'string'))\n\t\t\t\t\treturn error.every($fhcAlert.alertSystemError);\n\n\t\t\t\t// Error has been handled already\n\t\t\t\tif (error.hasOwnProperty('handled') && error.handled)\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is object\n\t\t\t\tif (typeof error === 'object' && error !== null) {\n\t\t\t\t\tlet errMsg = '';\n\n\n\t\t\t\t\tif (error.hasOwnProperty('response') && error.response?.data?.retval)\n\t\t\t\t\t\terrMsg += 'Error Message: ' + (error.response.data.retval.message || error.response.data.retval) + '\\r\\n';\n\t\t\t\t\telse if (error.hasOwnProperty('message'))\n\t\t\t\t\t\terrMsg += 'Error Message: ' + error.message.toUpperCase() + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('config') && error.config.hasOwnProperty('url'))\n\t\t\t\t\t\terrMsg += 'Error ConfigURL: ' + error.config.url + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('stack'))\n\t\t\t\t\t\terrMsg += 'Error Stack: ' + error.stack + '\\r\\n';\n\t\t\t\t\t\n\t\t\t\t\t// Fallback object error message\n\t\t\t\t\tif (errMsg == '')\n\t\t\t\t\t\terrMsg = 'Error Message: ' + JSON.stringify(error) + '\\r\\n';\n\n\t\t\t\t\terrMsg += 'Error Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\n\t\t\t\t\treturn $fhcAlert.alertSystemError(errMsg);\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\thandleSystemMessage(message) {\n\t\t\t\t// Message is string\n\t\t\t\tif (typeof message === 'string')\n\t\t\t\t\treturn $fhcAlert.alertWarning(message);\n\n\t\t\t\t// Message is array of strings\n\t\t\t\tif (Array.isArray(message)) {\n\t\t\t\t\t// If Array has only Strings\n\t\t\t\t\tif (message.every(msg => typeof msg === 'string'))\n\t\t\t\t\t\treturn message.every($fhcAlert.alertWarning);\n\n\t\t\t\t\t// If Array has only Objects\n\t\t\t\t\tif (message.every(msg => typeof msg === 'object') && msg !== null) {\n\t\t\t\t\t\treturn message.every(msg => {\n\t\t\t\t\t\t\tif (msg.hasOwnProperty('data') && msg.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(msg.data.retval));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(msg));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Message is Object with data property\n\t\t\t\tif (typeof message === 'object' && message !== null){\n\t\t\t\t\tif (message.hasOwnProperty('data') && message.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t// NOTE(chris): changed: alertSystemError => alertWarning\n\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(message.data.retval));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(message));\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\tresetFormValidation(form) {\n\t\t\t\tconst event = new Event('fhc-form-reset');\n\t\t\t\tform.querySelectorAll(['[data-fhc-form-validate],[data-fhc-form-error]']).forEach(el => el.dispatchEvent(event));\n\t\t\t\t/*const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\tif (alert) {\n\t\t\t\t\talert.innerHTML = '';\n\t\t\t\t\talert.classList.add('d-none');\n\t\t\t\t}\n\t\t\t\tform.querySelectorAll('.invalid-feedback').forEach(n => n.remove());\n\t\t\t\tform.querySelectorAll('.is-invalid').forEach(n => n.classList.remove('is-invalid'));\n\t\t\t\tform.querySelectorAll('.is-valid').forEach(n => n.classList.remove('is-valid'));*/\n\t\t\t},\n\t\t\thandleFormValidation(error, form) {\n\t\t\t\tif (form === undefined) {\n\t\t\t\t\tif (error && error.nodeType === Node.ELEMENT_NODE)\n\t\t\t\t\t\treturn err => $fhcAlert.handleFormValidation(err, error);\n\t\t\t\t} else {\n\t\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t\tif (typeof errors !== \"object\")\n\t\t\t\t\t\t\terrors = error.response.data;\n\n\t\t\t\t\t\t// NOTE(chris): reset form validation\n\t\t\t\t\t\t$fhcAlert.resetFormValidation(form);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// NOTE(chris): set form input validation\n\t\t\t\t\t\tconst notFound = Object.entries(errors).filter(([key, detail]) => {\n\t\t\t\t\t\t\tconst input = form.querySelector('[data-fhc-form-validate=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\tinput.dispatchEvent(new CustomEvent('fhc-form-invalidate', {detail}));\n\n\t\t\t\t\t\t\t/*const input = form.querySelector('[name=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\tinput.classList.add('is-invalid');\n\t\t\t\t\t\t\tconst feedback = document.createElement('div');\n\t\t\t\t\t\t\tfeedback.classList.add('invalid-feedback');\n\t\t\t\t\t\t\tfeedback.innerHTML = detail;\n\t\t\t\t\t\t\tinput.after(feedback);*/\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}).map(arr => arr[1]);\n\n\n\t\t\t\t\t\t//const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\t\t\tconst alert = form.querySelector('[data-fhc-form-error]');\n\t\t\t\t\t\tif (alert && notFound.length) {\n\t\t\t\t\t\t\talert.dispatchEvent(new CustomEvent('fhc-form-error', {detail: notFound}));\n\t\t\t\t\t\t\t/*notFound.forEach(txt => {\n\t\t\t\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\t\t\t\tp.innerHTML = txt;\n\t\t\t\t\t\t\t\talert.append(p);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (notFound.length) {\n\t\t\t\t\t\t\t\talert.lastChild.classList.add('mb-0');\n\t\t\t\t\t\t\t\talert.classList.remove('d-none');\n\t\t\t\t\t\t\t}*/\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnotFound.forEach($fhcAlert.alertError);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t$fhcAlert.alertError((typeof errors === 'object') ? Object.values(errors) : errors);\n\t\t\t\t} else {\n\t\t\t\t\t$fhcAlert.handleSystemError(error);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tapp.config.globalProperties.$fhcAlert = $fhcAlert;\n\t\tapp.provide('$fhcAlert', app.config.globalProperties.$fhcAlert);\n\t}\n}","console.warn('plugin/FhcApi.js is DEPRECATED! Use plugins/Api.js instead.');\nimport FhcAlert from '../plugins/FhcAlert.js';\nimport PluginsApi from '../plugins/Api.js';\nimport FhcApiFactory from '../api/fhcapifactory.js';\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$fhcApi) {\n\t\t\t/* Deprecated Code start */\n\t\t\tif (options?.factory) {\n\t\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\t\tapp.config.globalProperties.$fhcApi.factory.addEndpoints(options.factory);\n\t\t\t}\n\t\t\t/* Deprecated Code end */\n\t\t\treturn;\n\t\t}\n\t\tapp.use(FhcAlert);\n\t\tapp.use(PluginsApi);\n\n\t\tfunction _get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\n\t\tfunction _clean_return_value(response) {\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result)\n\t\t\t\treturn {meta: {response}, data: null};\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = {response};\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tconst baseURL = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\";\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(response => {\n\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\treturn _clean_return_value(response);\n\n\t\t\t// NOTE(chris): loop through errors\n\t\t\tif (response.data.errors)\n\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t);\n\n\t\t\treturn _clean_return_value(response);\n\t\t}, error => {\n\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\n\t\t\tif (error.config?.errorHandling == 'off'\n\t\t\t\t|| error.config?.errorHandling === false\n\t\t\t\t|| error.config?.errorHandling == 'success')\n\t\t\t\treturn Promise.reject(error);\n\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL, true);\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t\t}\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\terror.response.data.errors = error.response.data.errors.filter(\n\t\t\t\t\terr => (error.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, error.config)\n\t\t\t\t);\n\t\t\t\tif (!error.response.data.errors.length)\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else if (error.request) {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertError(error.message);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t}\n\n\t\t\treturn Promise.reject(error);\n\t\t});\n\n\t\tapp.config.globalProperties.$fhcApi = {\n\t\t\tgetUri(url) {\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\t[uri, params, config] = _get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\t[uri, data, config] = _get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\t_defaultErrorHandlers: {\n\t\t\t\tvalidation(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form) {\n\t\t\t\t\t\tconfig.form.clearValidation();\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.messages);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(error.messages)) {\n\t\t\t\t\t\terror.messages.forEach($fhcAlert.alertError);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (typeof error.messages == 'object') {\n\t\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t\tObject.values(error.messages).forEach(\n\t\t\t\t\t\t\t\tvalue => $fhcAlert.alertDefault(\n\t\t\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tObject.entries(error.messages).forEach(\n\t\t\t\t\t\t\t\t([key, value]) => $fhcAlert.alertDefault('error', key, value, true)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tgeneral(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form)\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.message);\n\t\t\t\t\telse if (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertError(error.message);\n\t\t\t\t},\n\t\t\t\tphp(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('warn', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('info', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\texception(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tdb(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tauth(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertDefault('error', error.message, message);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/* Deprecated Code start */\n\t\tclass FhcApiFactoryWrapper {\n\t\t\tconstructor(factorypart, root) {\n\t\t\t\tif (root === undefined) {\n\t\t\t\t\tthis.$fhcApi = {\n\t\t\t\t\t\tgetUri(url) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.getUri(url);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget(form, uri, params, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.get(form, uri, params, config);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpost(form, uri, data, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.post(form, uri, data, config);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tObject.defineProperty(this.$fhcApi, 'factory', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.factory;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tapp.config.globalProperties.$fhcApi.factory = this;\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty(this, '$fhcApi', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\treturn (root || this).$fhcApi;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.addEndpoints(factorypart)\n\t\t\t}\n\n\t\t\taddEndpoints(factorypart) {\n\t\t\t\tObject.keys(factorypart).forEach(key => {\n\t\t\t\t\tObject.defineProperty(this, key, {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tif (typeof factorypart[key] == 'function')\n\t\t\t\t\t\t\t\treturn factorypart[key].bind(this);\n\t\t\t\t\t\t\treturn new FhcApiFactoryWrapper(factorypart[key], this.$fhcApi.factory);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tconsole.warn('$fhcApi.factory.addEndpoints() is DEPRECATED!');\n\t\t\t}\n\t\t}\n\n\t\tconst factory = new FhcApiFactoryWrapper(FhcApiFactory);\n\t\tif (options?.factory) {\n\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\tfactory.addEndpoints(options.factory);\n\t\t}\n\n\t\tapp.config.globalProperties.$fhcApi.factory = factory;\n\t\t/* Deprecated Code end */\n\t\t\n\t\tapp.provide('$fhcApi', app.config.globalProperties.$fhcApi);\n\t}\n};","console.warn('plugin/Phrasen.js is DEPRECATED! Use plugins/Phrasen.js instead.');\nimport FhcApi from './FhcApi.js';\nimport ApiPhrasen from '../api/factory/phrasen.js';\n\nconst categories = Vue.reactive({});\nconst loadingModules = {};\nlet user_language = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language);\nexport let user_locale = Vue.computed(()=>{\n\tif(!user_language.value) return null;\n\treturn FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(language => language.sprache == user_language.value).LC_Time;\n});\n\nfunction extractCategory(obj, category) {\n\treturn obj.filter(e => e.category == category).reduce((res, elem) => {\n\t\tif (!res[elem.phrase])\n\t\t\tres[elem.phrase] = elem.text;\n\t\treturn res;\n\t}, {});\n}\nfunction getValueForLoadedPhrase(category, phrase, params) {\n\tlet result = categories[category][phrase];\n\tif (!result)\n\t\treturn '<< PHRASE ' + phrase + '>>';\n\tif (params)\n\t\tresult = result.replace(/\\{([^}]*)\\}/g, (match, p1) => params[p1] === undefined ? match : params[p1]);\n\treturn result;\n}\n\nconst phrasen = {\n\tuser_language,\n\tuser_locale,\n\tsetLanguage(language) {\n\t\tconst catArray = Object.keys(categories)\n\t\treturn this.config.globalProperties.$api\n\t\t\t.call(ApiPhrasen.setLanguage(catArray, language))\n\t\t\t.then(res => {\n\t\t\t\tres.data.forEach(row => {\n\t\t\t\t\tcategories[row.category][row.phrase] = row.text\n\t\t\t\t})\n\n\t\t\t\t// update the reactive data that holds the current active user_language\n\t\t\t\tuser_language.value = language;\n\n\t\t\t\treturn res\n\t\t\t})\n\t},\n\tloadCategory(category) {\n\t\tif (Array.isArray(category))\n\t\t\treturn Promise.all(category.map(this.config.globalProperties\n\t\t\t\t.$p.loadCategory));\n\t\tconst $fhcApi = this.config.globalProperties.$fhcApi;\n\t\tconst $fhcApiFactory = this.config.globalProperties.$fhcApiFactory;\n\t\tif (!loadingModules[category])\n\t\t\tloadingModules[category] = this.config.globalProperties.$api\n\t\t\t\t.call(\n\t\t\t\t\tApiPhrasen.loadCategory(category)\n\t\t\t\t)\n\t\t\t\t.then(res => res?.data ? extractCategory(res.data, category) : {})\n\t\t\t\t.then(res => {\n\t\t\t\t\tcategories[category] = res;\n\t\t\t\t});\n\t\treturn loadingModules[category];\n\t},\n\tt_ref(category, phrase, params) {\n\t\tconsole.warn('deprecated');\n\t\treturn Vue.computed(() => this.t(category, phrase, params));\n\t},\n\tt(category, phrase, params) {\n\t\tif (params === undefined && (\n\t\t\t(Array.isArray(category) && category.length == 2) ||\n\t\t\t(category.split && category.split('/').length == 2))\n\t\t\t) {\n\t\t\tparams = phrase;\n\t\t\t[category, phrase] = category.split ? category.split('/') : category;\n\t\t}\n\t\tif (phrase === undefined) {\n\t\t\tconsole.error('invalid input', category, phrase, params);\n\t\t\treturn '';\n\t\t}\n\t\tlet val = Vue.computed(() => {\n\t\t\tif (!categories[category])\n\t\t\t\treturn '';\n\t\t\treturn getValueForLoadedPhrase(category, phrase, params);\n\t\t});\n\t\tif (!categories[category])\n\t\t\tthis.loadCategory(category);\n\t\treturn val.value;\n\t}\n};\n\nexport default {\n\tinstall(app, options) {\n\t\tapp.use(FhcApi, options?.fhcApi || undefined);\n\t\tapp.config.globalProperties.$p = {\n\t\t\tt: phrasen.t,\n\t\t\tloadCategory: cat => phrasen.loadCategory.call(app, cat),\n\t\t\tsetLanguage: lang => phrasen.setLanguage.call(app, lang),\n\t\t\tuser_language: user_language,\n\t\t\tuser_locale,\n\t\t\tt_ref: phrasen.t_ref\n\t\t};\n\t\tapp.provide('$p', app.config.globalProperties.$p);\n\t}\n}","import {CoreNavigationCmpt} from '../components/navigation/Navigation.js';\nimport DashboardAdmin from '../components/Dashboard/Admin.js';\nimport Phrases from \"../plugin/Phrasen.js\"\n\nVue.createApp({\n name: 'DashboardAdminApp',\n data: () => ({\n appSideMenuEntries: {}\n }),\n components: {\n CoreNavigationCmpt,\n DashboardAdmin\n },\n mounted() {\n }\n}).use(Phrases).mount('#main');"],"names":["CoreFetchCmpt","emits","props","refresh","type","Boolean","apiFunction","required","Function","apiFunctionParameters","watch","newValue","oldValue","this","fetchData","data","loading","error","errorMessage","created","methods","apiFunctionResult","Promise","then","successHandler","catch","errorHandler","finally","finallyHandler","setError","response","$emit","undefined","retval","message","template","ApiNavigation","getHeader","navigation_page","method","url","params","getMenu","CoreNavigationCmpt","components","addHeaderMenuEntries","Object","addSideMenuEntries","hideTopMenu","leftNavCssClasses","String","default","headerMenu","sideMenu","computed","headerMenuEntries","hm","keys","length","description","sideMenuEntries","sm","getNavigationPage","FHC_JS_DATA_STORAGE_OBJECT","called_path","called_method","fetchCmptApiFunctionHeader","$api","call","fetchCmptApiFunctionSideMenu","fetchCmptDataFetchedHeader","fetchCmptDataFetchedMenu","getDataBsToggle","header","children","BsModal","name","modal","fullscreen","backdrop","validator","value","includes","focus","keyboard","noCloseBtn","dialogClass","Array","headerClass","bodyClass","footerClass","allowFullscreenExpand","dispose","handleUpdate","hide","show","relatedTarget","toggle","toggleFullscreen","mounted","$refs","bootstrap","Modal","popup","body","options","title","footer","slots","includedPrimevue","primevue","resolve","reject","instance","Vue","createApp","setup","h","class","ref","unmount","beforeUnmount","result","unmounted","wrapper","parentElement","removeChild","document","createElement","use","config","zIndex","overlay","Phrasen","mount","appendChild","BsAlert","mixins","onHideBsModal","onHiddenBsModal","onHidePreventedBsModal","onShowBsModal","onShownBsModal","modalContainer","msg","bind","BsPrompt","placeholder","BsConfirm","DashboardAdminEdit","dashboard_id","Number","dashboard_kurzbz","beschreibung","kurzbz","desc","sendDelete","DashboardAdminWidgets","widgets","apiurl","app_root","ci_router","sendChange","widget_id","allow","find","el","allowed","axios","post","action","err","console","get","map","JSON","parse","arguments","GridItem","inject","item","active","dragAction","dragging","registerDragAction","evt","target","hasAttribute","getAttribute","parent","closest","tryDragStart","touchDragEnd","touchStart","event","touchMove","preventDefault","GridLogic","constructor","w","grid","isFreeSlot","x","y","i","getMaxY","reduce","acc","getFreeSlots","freeSlots","biggestY","totalSpaces","Math","floor","push","add","prefer","occupiers","getItemsInFrame","frame","forEach","f","index","max","intermGrid","possiblities","tryMoving","bestOption","sort","a","b","cost","moves","v","move","currItem","getItemFrame","remove","place","pinned","originalFrame","isArray","some","occupiersData","occupier","occupiersFrame","flat","replaceUpdate","newOccupierFrames","occ","shift","getSingleFramePosition","updates","resize","newPoss","possiblity","p","directions","weight","dir","res","tryMovingInDirection","filter","amount","targetframe","unshift","clearWeights","indexOf","j","debug","DropGrid","cols","items","itemsSetup","resizeLimit","marginForExtraRow","additionalRow","clientX","clientY","mode","dragGrid","permUpdates","positionUpdates","fixedPositionUpdates","draggedOffset","draggedItem","draggedNode","reorderedItems","clonedWidget","sectionName","additionalRowComputed","set","items_hashmap","needsReordering","rearrangedPosition","widget","widgetid","pop","items_placeholders","placeholders","col_max","rows_max","rows","occupied","current_item","max_x","max_y","occupied_y","occupied_x","id","padStart","placedItems_withPlaceholders","placedItems","gridStyle","addH","indexedItems","prePlacedItems","mappedPlacedItems","height_diff","width_diff","temporaryResizeItems","newItem","resizeOverlay","blank","showEmptyTileHover","widgetSetup","widgetsSetup","ele","dragCancel","handler","immediate","updated","createNewGrid","deep","toggleDraggedItemOverlay","condition","firstElementChild","classList","containerRect","container","getBoundingClientRect","clonedWidgetRect","desiredTop","desiredLeft","minTop","maxTop","height","minLeft","maxLeft","width","constrainedTop","min","constrainedLeft","style","top","left","sortedItems","firstFreeSlot","targetX","targetW","convertGridResultToUpdate","input","output","baseArray","mouseLeave","updateCursor","rect","touches","gridX","clientWidth","gridY","clientHeight","_dragStart","dataTransfer","setDragImage","dropEffect","effectAllowed","startMove","setTimeout","clone","cloneNode","querySelector","removeProperty","startResize","dragOver","checkPinnedWidgetAnimation","checkWidgetSizeLimitAnimation","removeWidgetClones","dragEnd","getElementById","from","getElementsByClassName","_updateFixedPositions","additionalUpdates","emptyTileClicked","updateCursorOnMouseMove","itemAtPosition","pinNode","contains","draggedItemSetup","draggedItemMaxWidth","draggedItemMinWidth","draggedItemMaxHeight","draggedItemMinHeight","draggedItemNode","width_after_resize","height_after_resize","widgetClones","mouseDown","mouseUp","__widgets","__widgetsStarted","__path","CachedWidgetLoader","getWidget","loadWidget","setPath","path","DashboardItem","HeightTransition","onEnter","done","scrollHeight","onLeave","component","tmpConfig","isLoading","hasConfig","sharedData","maxHeight","maxWidth","prototype","toString","minHeight","minWidth","isResizeable","isPinned","ready","unpin","editMode","item_data","pinItem","getWidgetC4Link","cis4link","handleShowBsModal","handleHideBsModal","e","startDrag","dragHandle","resizeHandle","openConfig","setConfig","changeConfig","sendChangeConfig","changeConfigManually","k","import","file","fhcomplete_build_version","$options","WidgetIcon","src","DashboardSection","adminMode","configOpened","gridWidth","gridHeight","provide","editModeIsActive","computedWidgetsSetup","getSectionStyle","reorder","sectionNameTranslation","$p","t","showSectionInformation","handleConfigOpened","handleConfigClosed","checkResizeLimit","minmaxW","minmaxH","removeWidget","revert","custom","update","hidden","updatePreset","saveConfig","payload","updatePositions","self","cont","parseInt","window","getComputedStyle","getPropertyValue","addEventListener","DashboardWidgetPicker","callbacks","close","pick","ObjectUtils","mergeDeep","objects","isObject","obj","prev","key","pVal","oVal","concat","DashboardAdmin","DashboardAdminPresets","dashboard","funktionen","sections","tmpLoading","pickerWidgets","widgetAdd","section_name","widgetpicker","preset","section","db","funktion_kurzbz","newId","splice","alert","widgetUpdate","wid","prop","_x","_y","_w","_h","widgetRemove","loadSections","querySelectorAll","join","general","funktion","funktionenList","dashboards","current","dashboardAdd","_name","newDashboard","dashboardUpdate","old","dashboardDelete","assignWidgets","search","searchsettings","$fhcApi","searchAdvanced","searchdummy","phrasen$2","loadCategory","category","setLanguage","categories","language","getLanguage","getActiveDbLanguages","navigation","filter$1","saveCustomFilter","wsParams","filterUniqueId","filterType","customFilterName","removeCustomFilter","filterId","applyFilterFields","filterFields","addFilterField","filterField","removeFilterField","getFilterById","getFilter","studstatus","abmeldung","getDetails","antrag_id","prestudent_id","create","stdsem","grund","studiensemester","errorHandling","cancel","allSettled","antrag","studierendenantrag_id","errorHeader","unterbrechung","datum_wiedereinstieg","attachment","wiederholung","getLvs","saveLvs","forbiddenLvs","mandatoryLvs","leitung","getStgs","getAntraege","getHistory","getPrestudents","query","signal","timeout","approve","reopen","pause","unpause","object","approveObjection","denyObjection","profil","getView","uid","fotoSperre","isStudent","isMitarbeiter","getZustellAdresse","getZustellKontakt","getGemeinden","nation","zip","getAllNationen","profilUpdate","getStatus","getTopic","acceptProfilRequest","profil_update_id","status_message","topic","requested_change","denyProfilRequest","insertFile","dms","replace","getProfilRequestFiles","requestID","selectProfilRequest","insertProfilRequest","fileID","updateProfilRequest","ID","deleteProfilRequest","lvPlan","getRoomInfo","ort_kurzbz","start_date","end_date","getStunden","getOrtReservierungen","getLvPlanReservierungen","getLehreinheitStudiensemester","lehreinheit_id","studiensemesterDateInterval","date","LvPlanEvents","lv_id","stv","verband","favorites","students","studiensemester_kurzbz","encodeURIComponent","getUri","prestudent","person","person_id","relative_path","getStg","setStg","studiengang_kz","konto","tabulatorConfig","ajaxURL","ajaxParams","modelValue","only_open","studiengang_kz_intern","stg_kz","ajaxRequestFunc","ajaxResponse","checkDoubles","form","confirmErrorHandler","insert","counter","edit","delete","buchungsnr","getBuchungstypen","group","getGruppen","deleteGroup","kontakt","getAdressen","addNewAddress","loadAddress","address_id","updateAddress","deleteAddress","getPlaces","plz","getFirmen","searchString","getNations","getAdressentypen","getBankverbindung","addNewBankverbindung","loadBankverbindung","bankverbindung_id","updateBankverbindung","deleteBankverbindung","getKontakte","addNewContact","loadContact","kontakt_id","updateContact","deleteContact","getStandorteByFirma","getKontakttypen","updatePrestudent","getBezeichnungZGV","getBezeichnungMZgv","getBezeichnungDZgv","getAusbildung","getAufmerksamdurch","getBerufstaetigkeit","getTypenStg","getBisstandort","getHistoryPrestudent","getMaxSem","studiengang_kzs","advanceStatus","status_kurzbz","ausbildungssemester","confirmStatus","isLastStatus","deleteStatus","getLastBismeldestichtag","getHistoryPrestudents","status","insertStatus","loadStatus","updateStatus","getStudienplaene","getStudiengang","getStatusgruende","getStati","addStudent","changeStatus","getStatusarray","details","save","exam","getPruefungen","loadPruefung","pruefung_id","getTypenPruefungen","getAllLehreinheiten","getLvsByStudent","getLvsandLesByStudent","semester","getLvsAndMas","getMitarbeiterLv","getNoten","checkZeugnisnoteLv","addPruefung","updatePruefung","deletePruefung","abschlusspruefung","getAbschlusspruefung","addNewAbschlusspruefung","loadAbschlusspruefung","updateAbschlusspruefung","deleteAbschlusspruefung","getTypenAbschlusspruefung","getTypenAntritte","getBeurteilungen","getAkadGrade","getTypStudiengang","getMitarbeiter","getPruefer","checkForExistingExams","uids","grades","list","getCertificate","getTeacherProposal","getRepeaterGrades","updateCertificate","lehrveranstaltung_id","student_uid","note","lehrveranstaltung_bezeichnung","deleteCertificate","copyTeacherProposalToCertificate","copyRepeaterGradeToCertificate","studierendenantrag_lehrveranstaltung_id","lv_bezeichnung","getGradeFromPoints","points","manualErrorHandling","mobility","getMobilitaeten","getProgramsMobility","addNewMobility","loadMobility","bisio_id","updateMobility","deleteMobility","getLVList","getPurposes","getSupports","getListPurposes","getListSupports","deleteMobilityPurpose","addMobilityPurpose","deleteMobilitySupport","addMobilitySupport","archiv","getArchivVorlagen","archive","archiveSigned","akte_id","documents","getDocumentsUnaccepted","getDocumentsAccepted","deleteZuordnung","dokument_kurzbz","createZuordnung","loadAkte","getDoktypen","updateFile","deleteFile","uploadFile","exemptions","getAnrechnungen","getLehrveranstaltungen","getBegruendungen","getLvsKompatibel","getLektoren","addNewAnrechnung","loadAnrechnung","anrechnung_id","editAnrechnung","deleteAnrechnung","jointstudies","getStudies","getTypenMobility","getStudiensemester","getStudyprograms","getListPartner","getStatiPrestudent","loadStudy","insertStudy","updateStudy","deleteStudy","courselist","getCourselist","group_consecutiveHours","dbStundenplanTable","configStudent","configStudents","notiz","getNotizen","getUid","addNewNotiz","formData","loadNotiz","notiz_id","loadDokumente","deleteNotiz","type_id","updateNotiz","isBerechtigt","betriebsmittel","getAllBetriebsmittel","addNewBetriebsmittel","loadBetriebsmittel","betriebsmittelperson_id","updateBetriebsmittel","deleteBetriebsmittel","getTypenBetriebsmittel","loadInventarliste","checkperson","updatePersonUnrulyStatus","unrulyParam","unruly","filterPerson","base","ort","getContentID","ort_kurbz","getRooms","datum","von","bis","typ","personenanzahl","getRoomTypes","cms","content","content_id","version","sprache","sichtbar","getNews","page","page_size","news","limit","getNewsRowCount","getNewsExtra","lehre","getStudentenMail","getLvInfo","getStudentPruefungen","getStudentProjektarbeiten","getStudentProjektabgaben","detail","projektarbeit_id","postStudentProjektarbeitEndupload","Headers","postStudentProjektarbeitZwischenabgabe","getStudentProjektarbeitAbgabeFile","paabgabe_id","location","getMitarbeiterProjektarbeiten","all","postProjektarbeitAbgabe","termin","paabgabetyp_kurzbz","bezeichnung","fixtermin","insertvon","deleteProjektarbeitAbgabe","postSerientermin","projektarbeit_ids","fetchDeadlines","addons","getLvMenu","lvid","messages","getMessages","size","getVorlagen","getMsgVarsLoggedInUser","getMessageVarsPerson","getMsgVarsPrestudent","getPersonId","getVorlagentext","vorlage_kurzbz","getNameOfDefaultRecipient","getPreviewText","getReplyData","messageId","sendMessageFromModalContext","sendMessage","deleteMessage","vorlagen","getVorlagenByLoggedInUser","studium","getAllStudienSemester","studiengang","studienplan","getStudiengaengeForStudienSemester","getStudienplaeneBySemester","getLvPlanForStudiensemester","getLvEvaluierungInfo","FhcApiFactory","phrasen","getViewData","bookmark","getBookmarks","bookmark_id","tag","ampeln","open","confirm","ampel_id","studiengangInformation","getStudiengangByKz","menu","authinfo","getAuthUID","getAuthInfo","getAll","OldFhcApi","install","app","globalProperties","factory","warn","addEndpoints","_get_config","uri","TypeError","clearValidation","setFeedback","_clean_return_value","meta","fhcApiAxios","baseURL","interceptors","request","FormData","values","every","FileList","File","newData","entries","nd","append","jsondata","stringify","errors","_defaultErrorHandlers","code","handled","$fhcAlert","alertDefault","responseURL","alertError","validation","apply","php","filename","line","backtrace","function","severity","alertSystemError","exception","heading","sql","auth","controller","required_permissions","FhcApiFactoryWrapper","factorypart","root","defineProperty","noWarn","PluginsApi","_send_array_or_object","func","errs","FhcAlert","DEFAULT_ERROR_CONFIG","success","fail","combine","toast","async","_format_toast","_default","field","msgs","n_errors","n","get_config","clean_return_value","_merge_error_config","get_error_handler","formHandler","get_error_list","popHandleableErrors","copy","newType","newTypeCombinesType","newTypeHasHandler","errorConfig","remaining","configoverwrite","typedErrors","reason","errType","toLowerCase","ApiPhrasen","reactive","loadingModules","user_language","user_locale","server_languages","LC_Time","catArray","row","phrase","text","elem","extractCategory","t_ref","split","val","match","p1","getValueForLoadedPhrase","FhcPhrasen","cat","lang","CORE_REST_CLIENT_ERROR","CORE_REST_CLIENT_RETVAL","CoreRESTClient","wsURL","wsParameters","axiosParameters","_axiosCall","isSuccess","hasOwnProperty","isError","hasData","trim","getData","getError","getErrorCode","_generateRouterURI","_printDebug","parameters","errorThrown","axiosCallObj","helperAppContainer","helperApp","PvToast","PvConfirm","mailToUrl","slotProps","systemerror_mailto","openMessagecard","Collapse","getOrCreateInstance","showmaillink","PvConfig","PvConfirmationService","helperAppInstance","alertSuccess","summary","life","alertInfo","alertWarning","confirmDelete","$confirm","require","acceptLabel","acceptClass","rejectLabel","rejectClass","accept","sticky","html","alertMultiple","messageArray","handleSystemError","errMsg","toUpperCase","stack","handleSystemMessage","resetFormValidation","Event","dispatchEvent","handleFormValidation","nodeType","Node","ELEMENT_NODE","notFound","CustomEvent","arr","FhcApi","$fhcApiFactory","Phrases","fhcApi","appSideMenuEntries"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"DashboardAdmin.js","sources":["../../../js/components/Fetch.js","../../../js/api/factory/navigation.js","../../../js/components/navigation/Navigation.js","../../../js/components/Bootstrap/Modal.js","../../../js/components/Bootstrap/Alert.js","../../../js/components/Bootstrap/Prompt.js","../../../js/components/Bootstrap/Confirm.js","../../../js/components/Dashboard/Admin/Edit.js","../../../js/components/Dashboard/Admin/Widgets.js","../../../js/components/Drop/Grid/Item.js","../../../js/composables/GridLogic.js","../../../js/components/Drop/Grid.js","../../../js/composables/Dashboard/CachedWidgetLoader.js","../../../js/components/Dashboard/Item.js","../../../js/components/Tranistion/HeightTransition.js","../../../js/components/Dashboard/Widget/WidgetIcon.js","../../../js/components/Dashboard/Section.js","../../../js/components/Dashboard/Widget/Picker.js","../../../js/helpers/ObjectUtils.js","../../../js/components/Dashboard/Admin.js","../../../js/components/Dashboard/Admin/Presets.js","../../../js/api/search.js","../../../js/api/phrasen.js","../../../js/api/navigation.js","../../../js/api/filter.js","../../../js/api/studstatus.js","../../../js/api/profil.js","../../../js/api/profilUpdate.js","../../../js/api/lvPlan.js","../../../js/api/stv.js","../../../js/api/stv/verband.js","../../../js/api/stv/students.js","../../../js/api/stv/filter.js","../../../js/api/stv/konto.js","../../../js/api/stv/group.js","../../../js/api/stv/kontakt.js","../../../js/api/stv/prestudent.js","../../../js/api/stv/status.js","../../../js/api/stv/details.js","../../../js/api/stv/exam.js","../../../js/api/stv/abschlusspruefung.js","../../../js/api/stv/grades.js","../../../js/api/stv/mobility.js","../../../js/api/stv/archiv.js","../../../js/api/stv/documents.js","../../../js/api/stv/exemptions.js","../../../js/api/stv/jointstudies.js","../../../js/api/stv/courselist.js","../../../js/api/notiz.js","../../../js/api/notiz/person.js","../../../js/api/betriebsmittel.js","../../../js/api/betriebsmittel/person.js","../../../js/api/checkperson.js","../../../js/api/ort.js","../../../js/api/cms.js","../../../js/api/lehre.js","../../../js/api/addons.js","../../../js/api/messages.js","../../../js/api/messages/person.js","../../../js/api/vorlagen.js","../../../js/api/studium.js","../../../js/api/fhcapifactory.js","../../../js/api/dashboard.js","../../../js/api/bookmark.js","../../../js/api/ampeln.js","../../../js/api/studiengang.js","../../../js/api/menu.js","../../../js/api/authinfo.js","../../../js/api/language.js","../../../js/plugin/OldFhcApi.js","../../../js/plugins/Api.js","../../../js/api/factory/phrasen.js","../../../js/plugins/Phrasen.js","../../../js/RESTClient.js","../../../js/plugins/FhcAlert.js","../../../js/plugin/FhcApi.js","../../../js/plugin/Phrasen.js","../../../js/apps/DashboardAdmin.js"],"sourcesContent":["/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport const CoreFetchCmpt = {\n\temits: ['dataFetched'], // this component can emit the event dataFetched that it is catched by this component itself\n\tprops: {\n\t\trefresh: { // to refresh this component\n\t\t\ttype: Boolean\n\t\t},\n\t\tapiFunction: { // the function to call, must return a Promise\n\t\t\trequired: true,\n\t\t\ttype: Function\n\t\t},\n\t\tapiFunctionParameters: {} // parameters for the apiFunction, type mixed, optional\n\t},\n\twatch: {\n\t\t/**\n\t\t * If the refresh property is changed then call fetchData\n\t\t */\n\t\trefresh: function (newValue, oldValue) {\n\t\t\tthis.fetchData();\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tloading: false, // if in loading or not\n\t\t\terror: false, // if an error occurred while loading data\n\t\t\terrorMessage: null // the error message\n\t\t};\n\t},\n\tcreated: function() {\n\t\tthis.fetchData();\n\t},\n\tmethods: {\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchData: function() {\n\t\t\tthis.loading = true; // loader started\n\t\t\tthis.error = false;\n\t\t\tthis.errorMessage = null;\n\n\t\t\t// Checks if the apifunction is a callable function\n\t\t\tif (typeof this.apiFunction == \"function\")\n\t\t\t{\n\t\t\t\t// Call the function stored in apiFunction\n\t \t\tlet apiFunctionResult = this.apiFunction(this.apiFunctionParameters);\n\n\t\t\t\t// It is expected that the function returns a Promise\n\t\t\t\tif (apiFunctionResult instanceof Promise)\n\t\t\t\t{\n\t\t\t\t\tapiFunctionResult\n\t\t\t\t\t\t.then(this.successHandler) // on success\n\t\t\t\t\t\t.catch(this.errorHandler) // on error\n\t\t\t\t\t\t.finally(this.finallyHandler); // finally in any case\n\t\t\t\t}\n\t\t\t\telse // otherwise display an error\n\t\t\t\t{\n\t\t\t\t\tthis.setError(\"The called apiFunction does not return a Promise\");\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // otherwise display an error\n\t\t\t{\n\t\t\t\tthis.setError(\"Property apiFunction is not a function\");\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsetError: function(errorMessage) {\n\t\t\tthis.loading = false; // loading ended\n\t\t\tthis.error = true; // error occurred\n\t\t\tthis.errorMessage = errorMessage; // save the error message\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsuccessHandler: function(response) {\n\t\t\tthis.$emit('dataFetched', response ? response.data : undefined); // trigger the event dataFetched\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\terrorHandler: function(error) {\n\t\t\tif (error.response?.data?.retval)\n\t\t\t\tthis.setError(error.response.data.retval);\n\t\t\telse if (error.data?.message)\n\t\t\t\tthis.setError(error.data.message);\n\t\t\telse\n\t\t\t\tthis.setError(error.message);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfinallyHandler: function() {\n\t\t\tthis.loading = false; // loading ended\n\t\t}\n\t},\n\ttemplate: `\n\t\t\n\t\t\t
    Loading...
    \n\t\t
    \n\t\t\n\t\t\t
    {{ errorMessage }}
    \n\t\t
    \n\t\t\n\t`\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetHeader(navigation_page) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/navigation/header',\n\t\t\tparams: { navigation_page }\n\t\t};\n\t},\n\tgetMenu(navigation_page) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/navigation/menu',\n\t\t\tparams: { navigation_page }\n\t\t};\n\t}\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport {CoreFetchCmpt} from '../../components/Fetch.js';\nimport ApiNavigation from '../../api/factory/navigation.js';\n\n/**\n *\n */\nexport const CoreNavigationCmpt = {\n\tcomponents: {\n\t\tCoreFetchCmpt\n\t},\n\tprops: {\n\t\taddHeaderMenuEntries: Object, // property used to add new header menu entries from another app/component\n\t\taddSideMenuEntries: Object, // property used to add new side menu entries from another app/component\n\t\thideTopMenu: Boolean,\n\t\tleftNavCssClasses: {\n\t\t\ttype: String,\n\t\t\tdefault: 'navbar navbar-left-side'\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\theaderMenu: {}, // header menu entries\n\t\t\tsideMenu: {} // side menu entries\n\t\t};\n\t},\n\tcomputed: {\n\t\t/**\n\t\t *\n\t\t */\n\t\theaderMenuEntries() {\n\t\t\t//\n\t\t\tlet hm = this.headerMenu ? {...this.headerMenu} : {};\n\t\t\tif (this.headerMenu != null && this.addHeaderMenuEntries != null && Object.keys(this.addHeaderMenuEntries).length > 0)\n\t\t\t{\n\t\t\t\thm[this.addHeaderMenuEntries.description] = this.addHeaderMenuEntries;\n\t\t\t}\n\t\t\treturn hm;\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsideMenuEntries() {\n\t\t\t//\n\t\t\tlet sm = this.sideMenu ? {...this.sideMenu} : {};\n\t\t\tif (this.sideMenu != null && this.addSideMenuEntries != null && Object.keys(this.addSideMenuEntries).length > 0)\n\t\t\t{\n\t\t\t\tsm[this.addSideMenuEntries.description] = this.addSideMenuEntries;\n\t\t\t}\n\t\t\treturn sm;\n\t\t}\n\t},\n\tmethods: {\n\t\t/**\n\t\t *\n\t\t */\n\t\tgetNavigationPage() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.called_path + \"/\" + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchCmptApiFunctionHeader() {\n\t\t\treturn this.$api.call(ApiNavigation.getHeader(this.getNavigationPage()))\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchCmptApiFunctionSideMenu() {\n\t\t\treturn this.$api.call(ApiNavigation.getMenu(this.getNavigationPage()))\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchCmptDataFetchedHeader(data) {\n\t\t\tthis.headerMenu = data || {};\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchCmptDataFetchedMenu(data) {\n\t\t\tthis.sideMenu = data || {};\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tgetDataBsToggle(header) {\n\t\t\treturn !header.children ? null : 'dropdown';\n\t\t}\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t\t\n\t\t\n\n\t\t\n\t\t\n\n\t\t\n\t\t\n\t`\n};\n\n","//import Phrasen from '../../plugin/Phrasen.js';\n\nexport default {\n\tname: 'BootstrapModal',\n\tdata: () => ({\n\t\tmodal: null,\n\t\tfullscreen: false\n\t}),\n\tprops: {\n\t\tbackdrop: {\n\t\t\ttype: [Boolean,String],\n\t\t\tdefault: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['static', true, false].includes(value);\n\t\t\t}\n\t\t},\n\t\tfocus: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tkeyboard: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tnoCloseBtn: Boolean,\n\t\tdialogClass: [String,Array,Object],\n\t\theaderClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tbodyClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: 'px-4 py-5'\n\t\t},\n\t\tfooterClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tallowFullscreenExpand: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\temits: [\n\t\t\"hideBsModal\",\n\t\t\"hiddenBsModal\",\n\t\t\"hidePreventedBsModal\",\n\t\t\"showBsModal\",\n\t\t\"shownBsModal\"\n\t],\n\tmethods: {\n\t\tdispose() {\n\t\t\treturn this.modal.dispose();\n\t\t},\n\t\thandleUpdate() {\n\t\t\treturn this.modal.handleUpdate();\n\t\t},\n\t\thide() {\n\t\t\treturn this.modal.hide();\n\t\t},\n\t\tshow(relatedTarget) {\n\t\t\treturn this.modal.show(relatedTarget);\n\t\t},\n\t\ttoggle() {\n\t\t\treturn this.modal.toggle();\n\t\t},\n\t\ttoggleFullscreen() {\n\t\t\tthis.fullscreen = !this.fullscreen\n\t\t}\n\t},\n\tmounted() {\n\t\tif (this.$refs.modal)\n\t\t\tthis.modal = new bootstrap.Modal(this.$refs.modal, {\n\t\t\t\tbackdrop: this.backdrop,\n\t\t\t\tfocus: this.focus,\n\t\t\t\tkeyboard: this.keyboard\n\t\t\t});\n\t},\n\tpopup(body, options, title, footer) {\n\t\tconst BsModal = this,\n\t\t\tslots = {};\n\t\tif (body !== undefined)\n\t\t\tslots.default = () => body;\n\t\tif (title !== undefined)\n\t\t\tslots.title = () => title;\n\t\tif (footer !== undefined)\n\t\t\tslots.footer = () => footer;\n\n\t\t// little hack to check whether primevue is included in the app or not\n\t\tlet includedPrimevue = false;\n\t\tif(typeof primevue !== 'undefined'){\n\t\t\tincludedPrimevue = true;\n\t\t}\n\n\t\treturn new Promise((resolve,reject) => {\n\t\t\tconst instance = Vue.createApp({\n\t\t\t\tname: 'ModalTmpApp',\n\t\t\t\tsetup() {\n\t\t\t\t\treturn () => Vue.h(BsModal, {...{\n\t\t\t\t\t\tclass: 'fade'\n\t\t\t\t\t},...options, ...{\n\t\t\t\t\t\tref: 'modal',\n\t\t\t\t\t\t'onHidden.bs.modal': instance.unmount\n\t\t\t\t\t}}, slots);\n\t\t\t\t},\n\t\t\t\tmounted() {\n\t\t\t\t\tthis.$refs.modal.show();\n\t\t\t\t\t\n\t\t\t\t},\n\t\t\t\tbeforeUnmount() {\n\t\t\t\t\tif (this.$refs.modal)\n\t\t\t\t\t\tthis.$refs.modal.result !== false ? resolve(this.$refs.modal.result) : reject();\n\t\t\t\t},\n\t\t\t\tunmounted() {\n\t\t\t\t\twrapper.parentElement.removeChild(wrapper);\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst wrapper = document.createElement(\"div\");\n\t\t\t\n\t\t\t// if(primevue) --> won't work because primevue is not defined in this scope and promise would be rejected\n\t\t\tif (includedPrimevue){\n\t\t\t\tinstance.use(primevue.config.default, {zIndex: {overlay: 9999}})\n\t\t\t}\n\t\t\t\t \n\t\t\t//instance.use(Phrasen); // TODO(chris): find a more dynamic way\n\t\t\timport('../../plugins/Phrasen.js').then((Phrasen) => {\n\t\t\t\tinstance.use(Phrasen.default);\n\t\t\t\tinstance.mount(wrapper);\n\t\t\t\tdocument.body.appendChild(wrapper);\n\t\t\t});\n\t\t});\n\t},\n\ttemplate: `
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    `\n}\n","import BsModal from './Modal.js';\n\nexport default {\n\tname: 'BootstrapAlert',\n\tcomponents: {\n\t\tBsModal\n\t},\n\tmixins: [\n\t\tBsModal\n\t],\n\tprops: {\n\t\tdialogClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: 'modal-dialog-centered'\n\t\t},\n\t\t/*\n\t\t * NOTE(chris):\n\t\t * Hack to expose in \"emits\" declared events to $props which we use\n\t\t * in the v-bind directive to forward all events.\n\t\t * @see: https://github.com/vuejs/core/issues/3432\n\t\t*/\n\t\tonHideBsModal: Function,\n\t\tonHiddenBsModal: Function,\n\t\tonHidePreventedBsModal: Function,\n\t\tonShowBsModal: Function,\n\t\tonShownBsModal: Function\n\t},\n\tdata: () => ({\n\t\tresult: true\n\t}),\n\tmounted() {\n\t\tthis.modal = this.$refs.modalContainer.modal;\n\t},\n\tpopup(msg, options) {\n\t\treturn BsModal.popup.bind(this)(msg, options);\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t`\n}\n","import BsAlert from './Alert.js';\n\nexport default {\n\tname: 'BootstrapPrompt',\n\tmixins: [\n\t\tBsAlert\n\t],\n\tprops: {\n\t\tplaceholder: String,\n\t\tdefault: String\n\t},\n\tdata: () => ({\n\t\tvalue: '',\n\t\tresult: false\n\t}),\n\tcreated() {\n\t\tif (this.default)\n\t\t\tthis.value = this.default;\n\t},\n\tpopup(msg, options) {\n\t\tif (typeof options === 'string')\n\t\t\toptions = { default: options };\n\t\treturn BsAlert.popup.bind(this)(msg, options);\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t`\n}\n","import BsAlert from './Alert.js';\n\nexport default {\n\tname: 'BootstrapConfirm',\n\tmixins: [\n\t\tBsAlert\n\t],\n\tdata: () => ({\n\t\tresult: false\n\t}),\n\tpopup(msg, options) {\n\t\treturn BsAlert.popup.bind(this)(msg, options);\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t`\n}\n","import BsConfirm from '../../Bootstrap/Confirm.js';\n\nexport default {\n\temits: [\n\t\t\"change\",\n\t\t\"delete\"\n\t],\n\tprops: {\n\t\tdashboard_id: Number,\n\t\tdashboard_kurzbz: String,\n\t\tbeschreibung: String\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tkurzbz: this.dashboard_kurzbz,\n\t\t\tdesc: this.beschreibung\n\t\t}\n\t},\n\tmethods: {\n\t\tsendDelete() {\n\t\t\tBsConfirm.popup('Sure?').then(() => this.$emit('delete', this.dashboard_id)).catch();\n\t\t}\n\t},\n\ttemplate: `
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t
    `\n}\n","export default {\n\temits: [\n\t\t\"change\",\n\t\t\"assignWidgets\"\n\t],\n\tprops: {\n\t\tdashboard_id: Number,\n\t\twidgets: Array\n\t},\n\tcomputed: {\n\t\tapiurl() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/dashboard';\n\t\t}\n\t},\n\tmethods: {\n\t\tsendChange(widget_id) {\n\t\t\tlet allow = !this.widgets.find(el => el.widget_id == widget_id).allowed;\n\t\t\taxios.post(this.apiurl + '/Widget/setAllowed', {\n\t\t\t\tdashboard_id: this.dashboard_id,\n\t\t\t\twidget_id,\n\t\t\t\taction: allow ? 'add' : 'delete'\n\t\t\t}).catch(err => console.error('ERROR: ' + err));\n\t\t}\n\t},\n\tcreated() {\n\t\taxios.get(this.apiurl + '/Widget/getAll', {\n\t\t\tparams:{\n\t\t\t\tdashboard_id: this.dashboard_id\n\t\t\t}\n\t\t}).then(\n\t\t\tresult => {\n\t\t\t\tthis.$emit('assignWidgets', result.data.retval.map(el => ({\n\t\t\t\t\t...el,\n\t\t\t\t\t...{setup:JSON.parse(el.setup),arguments:JSON.parse(el.arguments),allowed:!!el.allowed}\n\t\t\t\t})));\n\t\t\t}\n\t\t).catch(err => console.error('ERROR:', err));\n\t},\n\ttemplate: `\n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t
    `\n}\n","export default {\n\tname:'GridItem',\n\tcomponents: {\n\t},\n\tinject: {\n\t},\n\tprops: {\n\t\titem: Object,\n\t\tactive: Boolean\n\t},\n\temits: [\n\t\t\"mouseDown\",\n\t\t\"mouseUp\",\n\t\t\"startMove\",\n\t\t\"startResize\",\n\t\t\"dragging\",\n\t\t\"endDrag\",\n\t\t\"dropDrag\",\n\t\t\"item\",\n\t\t\"touchStart\",\n\t\t\"touchEnd\",\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tdragAction: '',\n\t\t\tdragging: false\n\t\t}\n\t},\n\tcomputed: {\n\t},\n\tmethods: {\n\t\tregisterDragAction(evt) {\n\t\t\tthis.$emit('mouseDown', evt);\n\t\t\tif (evt.target.hasAttribute('drag-action')) {\n\t\t\t\tthis.dragAction = evt.target.getAttribute('drag-action');\n\t\t\t} else {\n\t\t\t\tlet parent = evt.target.closest('[drag-action]');\n\t\t\t\tif (parent) {\n\t\t\t\t\tthis.dragAction = parent.getAttribute('drag-action');\n\t\t\t\t} else {\n\t\t\t\t\tthis.dragAction = '';\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttryDragStart(evt, item) {\n\t\t\tlet dragAction = this.dragAction || evt.target.getAttribute('drag-action');\n\t\t\tif (dragAction) {\n\t\t\t\tthis.dragging = true;\n\t\t\t\tif (dragAction == 'move')\n\t\t\t\t\treturn this.$emit('startMove', evt, item);\n\t\t\t\telse if (dragAction == 'resize')\n\t\t\t\t\treturn this.$emit('startResize', evt, item);\n\t\t\t}\n\t\t\t//evt.preventDefault();\n\t\t},\n\t\ttouchDragEnd(evt) {\n\t\t\tif (!this.dragging)\n\t\t\t\treturn;\n\t\t\tthis.dragging = false;\n\t\t\tthis.$emit('touchEnd', evt);\n\t\t},\n\t\ttouchStart(event){\n\t\t\tthis.$emit('touchStart', event); \n\t\t\tthis.registerDragAction(event); \n\t\t\tthis.tryDragStart(event, this.item);\n\t\t},\n\t\ttouchMove(event){\n\t\t\tif(this.dragging){\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.$emit('dragging', event);\n\t\t\t}\n\t\t}\n\t\t\n\t},\n\ttemplate: `\n\t
    \n\t\t\n\t
    `\n}\n","// TODO(chris): Comments\n\nconst DIR_UP = 0;\nconst DIR_LEFT = 1;\nconst DIR_RIGHT = 2;\nconst DIR_DOWN = 3;\n\nclass GridLogic {\n\tconstructor(w) {\n\t\tif (w.w) {\n\t\t\tthis.w = w.w;\n\t\t\tthis.h = w.h;\n\t\t\tthis.data = [...w.data];\n\t\t\tthis.grid = [...w.grid];\n\t\t} else {\n\t\t\tthis.w = w;\n\t\t\tthis.h = 1;\n\t\t\tthis.data = [];\n\t\t\tthis.grid = [];\n\t\t}\n\t}\n\tisFreeSlot(x, y) {\n\t\tconst i = y*this.w + x;\n\t\treturn !this.grid[i] && this.grid[i] !== 0;\n\t}\n\tgetMaxY(){\n\t\treturn this.data.reduce((acc, item) => { \n\t\t\tif (item?.y > acc) {\n\t\t\t\t acc = item.y; \n\t\t\t} \n\t\t\treturn acc; \n\t\t}, 0);\n\t}\n\tgetFreeSlots() {\n\t\tconst freeSlots = [];\n\t\tlet biggestY = this.getMaxY();\n\t\tlet totalSpaces = this.w * (biggestY+1);\n\t\tfor(let i=0; i < totalSpaces; i++){\n\t\t\tif (!this.grid[i] && this.grid[i] !== 0){\n\t\t\t\tthis.grid[i] = undefined;\n\t\t\t}\n\t\t}\n\t\tfor(let i =0; i < this.grid.length; i++){\n\t\t\tif (!this.grid[i] && this.grid[i] !== 0){\n\t\t\t\tlet x = i % this.w;\n\t\t\t\tlet y = Math.floor(i / this.w);\n\t\t\t\tfreeSlots.push({x, y});\n\t\t\t}\n\t\t}\n\t\treturn freeSlots;\n\t}\n\tadd(item, prefer) {\n\t\tlet occupiers = this.getItemsInFrame(item.frame);\n\t\tif (!occupiers.length) {\n\t\t\titem.frame.forEach(f => this.grid[f] = item.index);\n\t\t\tthis.data[item.index] = item;\n\t\t\tthis.h = Math.max(this.h, item.y + item.h);\n\t\t\treturn [];\n\t\t} else {\n\t\t\tconst intermGrid = new GridLogic(this);\n\t\t\t\n\t\t\titem.frame.forEach(f => intermGrid.grid[f] = -1);\n\n\t\t\tconst possiblities = intermGrid.tryMoving(occupiers, prefer);\n\t\t\tif (possiblities.length) {\n\t\t\t\tconst bestOption = possiblities.sort((a,b) => {\n\t\t\t\t\tif (a.cost === undefined)\n\t\t\t\t\t\ta.cost = a.moves.reduce((a, v) => a * v.cost, 1);\n\t\t\t\t\tif (b.cost === undefined)\n\t\t\t\t\t\tb.cost = b.moves.reduce((a, v) => a * v.cost, 1);\n\t\t\t\t\treturn a.cost > b.cost;\n\t\t\t\t});\n\t\t\t\tconst result = [];\n\t\t\t\tbestOption[0].moves.forEach(move => {\n\t\t\t\t\tconst currItem = {...this.data[move.index]};\n\t\t\t\t\tcurrItem.x += move.x;\n\t\t\t\t\tcurrItem.y += move.y;\n\t\t\t\t\tcurrItem.frame = this.getItemFrame(currItem);\n\t\t\t\t\tthis.h = Math.max(this.h, currItem.y + currItem.h);\n\t\t\t\t\tthis.remove(currItem);\n\t\t\t\t\tcurrItem.frame.forEach(f => this.grid[f] = currItem.index);\n\t\t\t\t\tthis.data[move.index] = currItem;\n\t\t\t\t\tresult[move.index] = {\n\t\t\t\t\t\tindex: currItem.index,\n\t\t\t\t\t\tx: currItem.x,\n\t\t\t\t\t\ty: currItem.y\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\titem.frame.forEach(f => this.grid[f] = item.index);\n\t\t\t\tthis.data[item.index] = item;\n\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\tconsole.error('FATAL', \"can't arrange item on grid\");\n\t\t\t}\n\t\t}\n\t}\n\tmove(item, x, y) {\n\t\tif (item.data.place[this.w]?.pinned)\n\t\t\treturn [];\n\t\tif (item.x == x && item.y == y)\n\t\t\treturn [];\n\t\t\n\t\tthis.remove(item);\n\n\t\tlet prefer = undefined;\n\t\tif (item.x == x) {\n\t\t\tif (y-item.y > 0)\n\t\t\t\tprefer = DIR_UP;\n\t\t\telse\n\t\t\t\tprefer = DIR_DOWN;\n\t\t} else if (item.y == y) {\n\t\t\tif (x-item.x > 0)\n\t\t\t\tprefer = DIR_LEFT;\n\t\t\telse\n\t\t\t\tprefer = DIR_RIGHT;\n\t\t}\n\n\t\tconst originalFrame = Array.isArray(item.frame) ? [...item.frame] : [item.frame];\n\n\t\tconst currItem = {...item};\n\t\tcurrItem.x = x;\n\t\tcurrItem.y = y;\n\t\tcurrItem.frame = this.getItemFrame(currItem);\n\t\tlet occupiers = this.getItemsInFrame(currItem.frame);\n\t\t\n\t\t// does not update if the target conatins pinned widgets\n\t\tif (occupiers.some(frame => this.data[frame]?.data.place[this.w]?.pinned)) {\n\t\t\treturn [];\n\t\t}\n\t\t\n\t\t// checks if target contains widget with the same high and width\n\t\tlet occupiersData = occupiers.map(occupier => this.data[occupier]);\n\t\tlet occupiersFrame = occupiersData.map(occupier => occupier.frame).flat();\n\t\tif (!occupiersFrame.some(frame => !currItem.frame.includes(frame)) && !occupiersFrame.some(frame => originalFrame.includes(frame))){\n\t\t\tlet replaceUpdate = [];\n\t\t\tlet newOccupierFrames = [];\n\t\t\tfor(let f of originalFrame){\n\t\t\t\tif(newOccupierFrames.includes(f)){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tlet occ = occupiersData.shift();\n\t\t\t\tif(occ){\n\t\t\t\t\tnewOccupierFrames = [...newOccupierFrames, ...this.getItemFrame({ ...occ, ...this.getSingleFramePosition(f) })];\n\t\t\t\t\treplaceUpdate[occ.index] = { index: occ.index, ...this.getSingleFramePosition(f)}\n\t\t\t\t}\n\t\t\t}\n\t\t\treplaceUpdate[item.index] = { index: item.index, x, y };\n\t\t\t\n\t\t\treturn replaceUpdate;\n\t\t}\n\t\t\n\t\tconst updates = this.add(currItem, prefer);\n\t\tupdates[item.index] = {index: item.index, x, y};\n\t\treturn updates;\n\t}\n\tresize(item, w, h) {\n\t\tif (item.w == w && item.h == h)\n\t\t\treturn [];\n\t\tthis.remove(item);\n\n\t\tconst currItem = {...item};\n\t\tcurrItem.w = w;\n\t\tcurrItem.h = h;\n\t\tcurrItem.frame = this.getItemFrame(currItem);\n\t\t\n\t\tconst updates = this.add(currItem);\n\t\tif(updates)\n\t\t\tupdates[item.index] = {index: item.index, w, h, x:item.x, y:item.y, resize:true};\n\n\t\treturn updates;\n\t}\n\ttryMoving(index, prefer) {\n\t\tif (Array.isArray(index)) {\n\t\t\tindex.forEach(i => this.remove({index:i}));\n\t\t\tlet possiblities = [{grid: this, moves: []}];\n\t\t\tindex.forEach(i => {\n\t\t\t\tlet newPoss = [];\n\t\t\t\tpossiblities.forEach(possiblity => {\n\t\t\t\t\tpossiblity.grid.tryMoving(i, prefer).forEach(p => {\n\t\t\t\t\t\tpossiblity.moves\n\t\t\t\t\t\tp.moves = [...p.moves, ...possiblity.moves];\n\t\t\t\t\t\tnewPoss.push(p)\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tpossiblities = newPoss;\n\t\t\t});\n\t\t\treturn possiblities;\n\t\t}\n\t\tconst directions = [DIR_UP, DIR_DOWN, DIR_LEFT, DIR_RIGHT];\n\n\t\tthis.remove({index});\n\n\t\tconst weight = 1 + .2*(this.data[index].weight || 0);\n\n\t\treturn directions.reduce((result, dir) => {\n\t\t\tlet res = this.tryMovingInDirection(dir, index, 1, (prefer === dir ? .5 : 1 + dir*.1) * weight);\n\t\t\tif (!res)\n\t\t\t\treturn result;\n\t\t\treturn [...result, ...res];\n\t\t}, []).filter(p => p);\n\t}\n\ttryMovingInDirection(dir, index, amount, cost) {\n\t\tconst move = {index, x:0, y: 0, cost: cost};\n\t\tlet targetframe;\n\t\tswitch(dir) {\n\t\t\tcase DIR_UP:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned || this.data[index].y - amount < 0)\n\t\t\t\t\treturn false;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i-this.w*amount);\n\t\t\t\tmove.y = -amount;\n\t\t\t\tbreak;\n\t\t\tcase DIR_DOWN:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned)\n\t\t\t\t\treturn false;\n\t\t\t\tif (this.data[index].y + this.data[index].h + amount > this.h)\n\t\t\t\t\tcost += .4;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i+this.w*amount);\n\t\t\t\tmove.y = amount;\n\t\t\t\tbreak;\n\t\t\tcase DIR_LEFT:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned || this.data[index].x - amount < 0)\n\t\t\t\t\treturn false;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i-amount);\n\t\t\t\tmove.x = -amount;\n\t\t\t\tbreak;\n\t\t\tcase DIR_RIGHT:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned || this.data[index].x + this.data[index].w + amount > this.w)\n\t\t\t\t\treturn false;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i+amount);\n\t\t\t\tmove.x = amount;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tconst occupiers = this.getItemsInFrame(targetframe);\n\t\tif (occupiers.includes(-1)) {\n\t\t\treturn this.tryMovingInDirection(dir, index, amount+1, cost);\n\t\t}\n\t\t\n\t\tconst intermGrid = new GridLogic(this);\n\t\ttargetframe.forEach(f => intermGrid.grid[f] = -1);\n\t\t\n\t\tif (!occupiers.length) {\n\t\t\treturn [{grid: intermGrid, moves: [move]}];\n\t\t}\n\t\tconst possiblities = intermGrid.tryMoving(occupiers).map(possiblity => possiblity.moves.unshift(move) && possiblity);\n\t\treturn possiblities.length ? possiblities : false;\n\t}\n\tclearWeights() {\n\t\tthis.data.forEach(item => item.weight = undefined);\n\t}\n\tgetItemsInFrame(frame) {\n\t\treturn frame.map(i => this.grid[i]).filter((v,i,a) => (v || v === 0) && a.indexOf(v) === i);\n\t}\n\tremove(item) {\n\t\tthis.grid = this.grid.map(i => i != item.index ? i : undefined);\n\t}\n\tgetItemFrame(item) {\n\t\tconst frame = [];\n\t\tfor (let i = 0; i < item.w; i++)\n\t\t\tfor (let j = 0; j < item.h; j++)\n\t\t\t\tframe.push(i + item.x + (j + item.y) * this.w);\n\t\treturn frame;\n\t}\n\tgetSingleFramePosition(frame){\n\t\treturn { x: frame % this.w, y: Math.floor(frame / this.w)};\n\t}\n\tdebug() {\n\t\treturn this.grid;\n\t}\n}\n\nexport default GridLogic;","// TODO(chris): Comments\n\nimport GridItem from './Grid/Item.js';\nimport GridLogic from '../../composables/GridLogic.js';\n\nconst MODE_IDLE = 0;\nconst MODE_MOVE = 1;\nconst MODE_RESIZE = 2;\nconst MODE_MOUSE_DOWN = 3;\n\nexport default {\n\tname: 'Grid',\n\tcomponents: {\n\t\tGridItem,\n\t},\n\tprops: {\n\t\tcols: Number,\n\t\titems: Array,\n\t\titemsSetup: Object,\n\t\tresizeLimit: Function,\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tmarginForExtraRow: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0\n\t\t},\n\t\tadditionalRow:{\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t}\n\t},\n\temits: [\n\t\t\"rearrangeItems\",\n\t\t\"newItem\",\n\t\t\"gridHeight\",\n\t\t\"draggedItem\",\n\t\t\"update:additionalRow\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tx: -1,\n\t\t\ty: -1,\n\t\t\tclientX:0,\n\t\t\tclientY: 0,\n\t\t\tmode: MODE_IDLE,\n\t\t\tgrid: null,\n\t\t\tdragGrid: null,\n\t\t\tpermUpdates: [],\n\t\t\tpositionUpdates: null,\n\t\t\tfixedPositionUpdates: null,\n\t\t\tdraggedOffset: [0,0],\n\t\t\tdraggedItem: null,\n\t\t\tdraggedNode: null,\n\t\t\treorderedItems:[],\n\t\t\tclonedWidget:null,\n\t\t}\n\t},\n\tinject:{\n\t\tsectionName: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tcomputed: {\n\t\tadditionalRowComputed: {\n\t\t\tget() {\n\t\t\t\treturn this.additionalRow;\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tthis.$emit('update:additionalRow', value);\n\t\t\t}\n\t\t},\n\t\titems_hashmap() {\n\t\t\tlet items = {};\n\t\t\tthis.items.forEach(item => {\n\t\t\t\tif (this.reorderedItems.length > 0 && this.needsReordering(item)){\n\t\t\t\t\t\tlet rearrangedPosition = this.reorderedItems.filter(widget => widget.data.widgetid == item.widgetid)?.pop();\n\t\t\t\t\t\tif (rearrangedPosition) {\t\t\t\n\t\t\t\t\t\t\titem.x = rearrangedPosition.x;\n\t\t\t\t\t\t\titem.y = rearrangedPosition.y;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\titems[`x${item.x}y${item.y}`] = item;\n\t\t\t});\t\n\t\t\treturn items\n\t\t},\n\t\titems_placeholders(){\n\t\t\tlet placeholders = [];\n\t\t\tlet col_max = this.cols;\n\t\t\tlet rows_max = this.rows;\n\n\t\t\t// occupied hashmap to keep track of the occupied cells\n\t\t\tlet occupied = {};\n\n\t\t\tfor (let y = 0; y < rows_max; y++) {\n\t\t\t\tfor (let x = 0; x < col_max; x++) {\n\t\t\t\t\t// skip current position if it was registered as occupied\n\t\t\t\t\tif (Object.keys(occupied).length && occupied[`x${x}y${y}`]) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tlet current_item = this.items_hashmap[`x${x}y${y}`];\n\t\t\t\t\tif (current_item) {\n\t\t\t\t\t\t//calculate the occupied cells from the width and the height from the items \n\t\t\t\t\t\tlet width = current_item.w;\n\t\t\t\t\t\tlet height = current_item.h;\n\t\t\t\t\t\tlet max_x = x + width - 1;\n\t\t\t\t\t\tlet max_y = y + height - 1;\n\t\t\t\t\t\tif(x != max_x || y != max_y){\n\t\t\t\t\t\t\tfor (let occupied_y = y; occupied_y <= max_y; occupied_y++) {\n\t\t\t\t\t\t\t\tfor (let occupied_x = x; occupied_x <= max_x; occupied_x++) {\n\t\t\t\t\t\t\t\t\tif (occupied_x != x || occupied_y != y) {\n\t\t\t\t\t\t\t\t\t\toccupied[`x${occupied_x}y${occupied_y}`]=true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tplaceholders.push({ x: x, y: y, w: 1, h: 1, placeholder: true, \n\t\t\t\t\t\t\tdata: { id: 'placeholder_' + String(placeholders.length).padStart(4, \"0\") } });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn placeholders;\n\t\t},\n\t\tplacedItems_withPlaceholders() {\n\t\t\treturn [...this.placedItems, ...this.items_placeholders];\n\t\t},\n\t\trows() {\n\t\t\tif (this.additionalRowComputed) {\n\t\t\t\t\treturn this.grid ? (this.grid.h+1) : 1;\n\t\t\t}\n\t\t\treturn this.grid ? this.grid.h : 1;\n\t\t\t\n\t\t},\n\t\tgridStyle() {\n\t\t\tconst addH = this.active ? this.marginForExtraRow : 0;\n\t\t\treturn {\n\t\t\t\t'--fhc-dg-row-height': 100/(this.rows + addH) + '%',\n\t\t\t\t'--fhc-dg-col-width': 100/this.cols + '%',\n\t\t\t\t'--fhc-dg-item-padding-horizontal': '0.25%',\n\t\t\t\t'--fhc-dg-item-padding-top': '0.5%',\n\t\t\t\t'padding-bottom': 100 * (this.rows + addH)/this.cols + '%'\n\t\t\t}\n\t\t},\n\t\tindexedItems() {\n\t\t\treturn this.items.map(\n\t\t\t\t(item, index) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\tx: item.x,\n\t\t\t\t\t\ty: item.y,\n\t\t\t\t\t\tw: item.w,\n\t\t\t\t\t\th: item.h,\n\t\t\t\t\t\tweight: item.weight || 0,\n\t\t\t\t\t\tdata: item\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\tprePlacedItems() {\n\t\t\tif (!this.fixedPositionUpdates)\n\t\t\t\treturn this.indexedItems;\n\t\t\treturn this.indexedItems.map(item => {\n\t\t\t\tif (!this.fixedPositionUpdates[item.index])\n\t\t\t\t\treturn item;\n\t\t\t\treturn {\n\t\t\t\t\tindex: item.index,\n\t\t\t\t\tweight: item.weight,\n\t\t\t\t\tdata: item.data,\n\t\t\t\t\tx: this.fixedPositionUpdates[item.index].x === undefined ? item.x : this.fixedPositionUpdates[item.index].x,\n\t\t\t\t\ty: this.fixedPositionUpdates[item.index].y === undefined ? item.y : this.fixedPositionUpdates[item.index].y,\n\t\t\t\t\tw: this.fixedPositionUpdates[item.index].w === undefined ? item.w : this.fixedPositionUpdates[item.index].w,\n\t\t\t\t\th: this.fixedPositionUpdates[item.index].h === undefined ? item.h : this.fixedPositionUpdates[item.index].h\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\tplacedItems() {\n\t\t\tif (!this.positionUpdates)\n\t\t\t\treturn this.prePlacedItems;\n\t\t\tlet mappedPlacedItems= this.prePlacedItems.map(item => {\n\t\t\t\tif (!this.positionUpdates[item.index] )\n\t\t\t\t\treturn item;\n\t\t\t\tlet height_diff = this.positionUpdates[item.index]?.h - item.h;\n\t\t\t\tlet width_diff = this.positionUpdates[item.index]?.w - item.w;\n\t\t\t\treturn {\n\t\t\t\t\tresize: this.positionUpdates[item.index]?.resize,\n\t\t\t\t\tindex: item.index,\n\t\t\t\t\tweight: item.weight,\n\t\t\t\t\tdata: item.data,\n\t\t\t\t\tx: this.positionUpdates[item.index].x === undefined ? item.x : this.positionUpdates[item.index].x,\n\t\t\t\t\ty: this.positionUpdates[item.index].y === undefined ? item.y : this.positionUpdates[item.index].y,\n\t\t\t\t\tw: width_diff>0?item.w:this.positionUpdates[item.index].w === undefined ? item.w : this.positionUpdates[item.index].w,\n\t\t\t\t\th: height_diff > 0 ?item.h:this.positionUpdates[item.index].h === undefined ? item.h : this.positionUpdates[item.index].h\n\t\t\t\t\t\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tlet temporaryResizeItems = [];\n\t\t\tmappedPlacedItems.forEach(item=>{\n\t\t\t\tif(item.resize){\n\t\t\t\t\tlet newItem = {\n\t\t\t\t\t\t...item,\n\t\t\t\t\t\tw:this.positionUpdates[item.index].w === undefined ? item.w : this.positionUpdates[item.index].w,\n\t\t\t\t\t\th:this.positionUpdates[item.index].h === undefined ? item.h : this.positionUpdates[item.index].h,\n\t\t\t\t\t\tresizeOverlay:true,\n\t\t\t\t\t\tblank:true,\n\t\t\t\t\t};\n\t\t\t\t\ttemporaryResizeItems.push(newItem)\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn [...mappedPlacedItems, ...temporaryResizeItems];\n\t\t},\n\t\tshowEmptyTileHover() {\n\t\t\tif (!this.active || !this.grid || this.mode != MODE_IDLE || this.x < 0 || this.y < 0 || this.x >= this.cols || this.y >= this.rows)\n\t\t\t\treturn false;\n\t\t\treturn this.grid.isFreeSlot(this.x, this.y);\n\t\t},\n\t\twidgetSetup(){\n\t\t\tif (!this.widgetsSetup)\n\t\t\t\treturn;\n\t\t\treturn this.widgetsSetup.reduce((acc, ele) => { \n\t\t\t\tacc[ele.widget_id] =ele;\n\t\t\t\treturn acc;\n\t\t\t} ,{});\n\t\t},\n\t},\n\twatch: {\n\t\tactive(active) {\n\t\t\tif (!active)\n\t\t\t\tthis.dragCancel();\n\t\t},\n\t\tcols() {\n\t\t\tthis.dragCancel();\n\t\t},\n\t rows: {\n\t\t\thandler(value) {\n\t\t\t\tthis.$emit('gridHeight', value);\n\t\t\t},\n\t\t\timmediate: true\n\t\t},\n\t\tindexedItems: {\n\t\t\thandler(value) {\n\t\t\t\tthis.dragCancel();\n\n\t\t\t\tconst updated = this.createNewGrid(value);\n\n\t\t\t\tthis.fixedPositionUpdates = updated;\n\t\t\t\tif (updated.length)\n\t\t\t\t\tthis.$emit('rearrangeItems', updated.filter(v => v));\n\t\t\t},\n\t\t\timmediate: true,\n\t\t\tdeep: true\n\t\t}\n\t},\n\tmethods: {\n\t\tneedsReordering(item){\n\t\t\tif (!item?.data?.place[this.cols]){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\ttoggleDraggedItemOverlay(condition){\n\t\t\tif(!this.draggedNode)\n\t\t\t\treturn;\n\t\t\tif(condition){\n\t\t\t\tthis.draggedNode.firstElementChild.classList.add(\"dashboard-item-overlay\");\n\t\t\t}else{\n\t\t\t\tthis.draggedNode.firstElementChild.classList.remove(\"dashboard-item-overlay\");\n\t\t\t}\n\t\t},\n\t\tdragging(event){\n\t\t\tif(this.mode == MODE_MOVE){\n\t\t\t\tthis.toggleDraggedItemOverlay(true);\n\t\t\t\t\n\t\t\t\tconst containerRect = this.$refs.container.getBoundingClientRect();\n\t\t\t\tconst clonedWidgetRect = this.clonedWidget.getBoundingClientRect();\n\t\t\t\t\n\t\t\t\tlet desiredTop = this.clientY - 20;\n\t\t\t\tlet desiredLeft = this.clientX - 15;\n\t\t\t\t\n\t\t\t\tconst minTop = 0;\n\t\t\t\tconst maxTop = containerRect.height - clonedWidgetRect.height;\n\t\t\t\tconst minLeft = 0;\n\t\t\t\tconst maxLeft = containerRect.width - clonedWidgetRect.width;\n\t\t\t\t\n\t\t\t\tconst constrainedTop = Math.max(minTop, Math.min(maxTop, desiredTop));\n\t\t\t\tconst constrainedLeft = Math.max(minLeft, Math.min(maxLeft, desiredLeft));\n\t\t\t\t\n\t\t\t\tthis.clonedWidget.style.top = `${constrainedTop}px`;\n\t\t\t\tthis.clonedWidget.style.left = `${constrainedLeft}px`;\n\t\t\t}\n\t\t},\n\t\tcreateNewGrid(items) {\n\t\t\tthis.grid = new GridLogic(this.cols);\n\t\t\tconst result = [];\n\t\t\tlet sortedItems = [...items].sort((a, b) => {\n\t\t\t\tif(this.needsReordering(a) && this.needsReordering(b)){\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\telse if(this.needsReordering(a)){\n\t\t\t\t\treturn 999;\n\t\t\t\t}\n\t\t\t\telse if(this.needsReordering(b)){\n\t\t\t\t\treturn -999;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn a.weight > b.weight;\n\t\t\t}); \n\t\t\tlet reorderedItems = [];\n\t\t\tsortedItems.forEach(item => {\n\t\t\t\tlet freeSlots = this.grid.getFreeSlots();\n\t\t\t\t\n\t\t\t\tif(this.needsReordering(item)){\n\t\t\t\t\tlet firstFreeSlot = freeSlots.shift();\n\t\t\t\t\tif (!firstFreeSlot) {\n\t\t\t\t\t\titem.x = 0;\n\t\t\t\t\t\titem.y = this.grid.h;\n\t\t\t\t\t}else{\n\t\t\t\t\t\titem.x = firstFreeSlot.x;\n\t\t\t\t\t\titem.y = firstFreeSlot.y;\n\t\t\t\t\t}\n\t\t\t\t\treorderedItems.push(item);\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tif (item.x + item.w > this.cols) {\n\t\t\t\t\tlet targetW = this.cols-item.x,\n\t\t\t\t\t\ttargetX = undefined;\n\t\t\t\t\tif (this.resizeLimit) {\n\t\t\t\t\t\t[targetW] = this.resizeLimit(item.data, targetW, item.h);\n\t\t\t\t\t}\n\t\t\t\t\tif (targetW < 1)\n\t\t\t\t\t\ttargetW = 1;\n\t\t\t\t\tif (targetW > this.cols)\n\t\t\t\t\t\ttargetW = this.cols;\n\t\t\t\t\tif (item.x + targetW > this.cols) {\n\t\t\t\t\t\ttargetX = this.cols - targetW;\n\t\t\t\t\t}\n\t\t\t\t\tif (targetW == item.w)\n\t\t\t\t\t\ttargetW = undefined;\n\t\t\t\t\tresult[item.index] = {\n\t\t\t\t\t\titem: item.data,\n\t\t\t\t\t\tx: targetX,\n\t\t\t\t\t\tw: targetW\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\titem.frame = this.grid.getItemFrame(item);\n\t\t\t\tthis.convertGridResultToUpdate(this.grid.add(item), result, items);\n\t\t\t});\n\t\t\tthis.reorderedItems = reorderedItems;\n\t\t\tthis.grid.clearWeights();\n\t\t\treturn result;\n\t\t},\n\t\tconvertGridResultToUpdate(input, output, baseArray) {\n\t\t\t\n\t\t\tif (!input)\n\t\t\t\treturn;\n\t\t\tif (!baseArray)\n\t\t\t\tbaseArray = this.indexedItems;\n\t\t\tinput.forEach(item => {\n\t\t\t\tlet result = {\n\t\t\t\t\titem: baseArray[item.index].data\n\t\t\t\t};\n\t\t\t\tif (item.x !== undefined)\n\t\t\t\t\tresult.x = item.x;\n\t\t\t\tif (item.y !== undefined)\n\t\t\t\t\tresult.y = item.y;\n\t\t\t\tif (item.w !== undefined)\n\t\t\t\t\tresult.w = item.w;\n\t\t\t\tif (item.h !== undefined)\n\t\t\t\t\tresult.h = item.h;\n\t\t\t\toutput[item.index] = result;\n\t\t\t});\n\t\t},\n\t\tmouseLeave() {\n\t\t\t/* if (this.mode == MODE_IDLE) {\n\t\t\t\tthis.x = -1;\n\t\t\t\tthis.y = -1;\n\t\t\t\t\n\t\t\t} */\n\t\t},\n\t\tupdateCursor(evt) {\n\t\t\tif (!this.active) {\n\t\t\t\tthis.x = this.y = -1;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst addH = this.active ? this.marginForExtraRow : 0;\n\t\t\tconst rect = this.$refs.container.getBoundingClientRect();\n\t\t\t\n\t\t\tif (!evt.clientX && !evt.clientY && evt.touches){\n\t\t\t\tevt.clientX = evt.touches[0].clientX;\n\t\t\t\tevt.clientY = evt.touches[0].clientY;\n\t\t\t}\n\n\t\t\tthis.clientX = (evt.clientX - rect.left);\n\t\t\tthis.clientY = (evt.clientY - rect.top);\n\t\t\tconst gridX = Math.floor(this.cols * (evt.clientX - rect.left) / this.$refs.container.clientWidth);\n\t\t\tconst gridY = Math.floor((this.rows + addH) * (evt.clientY - rect.top) / this.$refs.container.clientHeight);\n\t\t\t\n\t\t\tif (this.x == gridX && this.y == gridY)\n\t\t\t\treturn false;\n\t\t\t\n\t\t\tthis.x = gridX;\n\t\t\tthis.y = gridY;\n\n\t\t\treturn true;\n\t\t},\n\t\t_dragStart(evt, item) {\n\t\t\tif (evt.dataTransfer) {\n\t\t\t\tevt.dataTransfer.setDragImage(evt.target, -99999, -99999);\n\t\t\t\tevt.dataTransfer.dropEffect = 'move';\n\t\t\t\tevt.dataTransfer.effectAllowed = 'move';\n\t\t\t}\n\t\t},\n\t\tstartMove(evt, item) {\n\t\t\t\n\t\t\tif (!this.active)\n\t\t\t\treturn;\n\t\t\t\n\t\t\tthis.mode = MODE_MOVE;\n\t\t\t\n\t\t\tthis.draggedItem = item;\n\t\t\t\n\t\t\tthis.$emit('draggedItem', item);\n\t\t\t// workaround for chrome fireing event dragend when styles are manipulated during dragging\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.draggedNode = evt.target.closest(\".drop-grid-item\");\n\t\t\t\t//clones the widget for the drag Image\n\t\t\t\t\n\t\t\t\tlet clone = evt.target.closest(\".drop-grid-item\")?.cloneNode(true);\n\n\t\t\t\tclone.style.zIndex = 5;\n\t\t\t\tclone.classList.add(\"widgetClone\");\n\t\t\t\tthis.$refs.container.appendChild(clone);\n\t\t\t\tconst hiddenWidget = clone.querySelector(\"[style='display: none;']\");\n\t\t\t\thiddenWidget.style.removeProperty(\"display\");\n\t\t\t\tthis.clonedWidget = clone;\n\t\t\t}, 0);\n\n\t\t\tthis.draggedOffset = [item.x - this.x, item.y - this.y];\n\t\t\tthis._dragStart(evt, item);\n\t\t},\n\t\tstartResize(evt, item) {\n\t\t\tif (!this.active)\n\t\t\t\treturn;\n\t\t\tthis.mode = MODE_RESIZE;\n\t\t\tthis.draggedItem = item;\n\t\t\tthis.$emit('draggedItem', item);\n\t\t\tthis._dragStart(evt);\n\t\t},\n\t\tdragOver(evt) {\n\t\t\tif ((this.y + 1) > this.rows && (this.mode == MODE_MOVE || this.mode == MODE_RESIZE)) {\n\t\t\t\tthis.dragCancel();\n\t\t\t\t\n\t\t\t}\n\t\t\tif (!this.active)\n\t\t\t\treturn this.dragCancel();\n\t\t\tthis.checkPinnedWidgetAnimation();\n\t\t\tif(this.mode == MODE_RESIZE){\n\t\t\t\tthis.checkWidgetSizeLimitAnimation();\n\t\t\t}\n\t\t\tif (this.updateCursor(evt)) {\n\t\t\t\tswitch(this.mode) {\n\t\t\t\t\tcase MODE_MOVE: {\n\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\tthis.dragGrid = new GridLogic(this.grid);\n\t\t\t\t\t\tlet x = this.x + this.draggedOffset[0];\n\t\t\t\t\t\tlet y = this.y + this.draggedOffset[1];\n\t\t\t\t\t\tif (x < 0) {\n\t\t\t\t\t\t\tthis.draggedOffset[0] += x;\n\t\t\t\t\t\t\tx = 0;\n\t\t\t\t\t\t} else if (x + this.draggedItem.w > this.cols) {\n\t\t\t\t\t\t\tthis.draggedOffset[0] += this.cols - this.draggedItem.w - x;\n\t\t\t\t\t\t\tx = this.cols - this.draggedItem.w;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (y < 0) {\n\t\t\t\t\t\t\tthis.draggedOffset[1] += y;\n\t\t\t\t\t\t\ty = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.positionUpdates= this.dragGrid.move(this.draggedItem, x, y);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase MODE_RESIZE: {\n\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\tthis.dragGrid = new GridLogic(this.grid);\n\t\t\t\t\t\tlet w = Math.min(this.cols - this.draggedItem.x, Math.max(1, this.x - this.draggedItem.x + 1));\n\t\t\t\t\t\tlet h = Math.max(1, this.y - this.draggedItem.y + 1);\n\t\t\t\t\t\tif (this.resizeLimit)\n\t\t\t\t\t\t\t[w, h] = this.resizeLimit(this.draggedItem.data, w, h);\n\t\t\t\t\t\tthis.positionUpdates = this.dragGrid.resize(this.draggedItem, w, h);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdragCancel() {\n\t\t\tthis.removeWidgetClones();\n\t\t\tthis.additionalRowComputed = false;\n\t\t\tthis.toggleDraggedItemOverlay(false);\n\t\t\tthis.mode = MODE_IDLE;\n\t\t\tthis.positionUpdates = null;\n\t\t\tthis.draggedOffset = [0,0],\n\t\t\tthis.draggedItem = null;\n\t\t\tthis.$emit('draggedItem',null);\n\t\t\tthis.draggedNode = null;\n\t\t\t\n\t\t},\n\t\tdragEnd() {\n\t\t\tthis.removeWidgetClones();\n\t\t\tthis.toggleDraggedItemOverlay(false);\n\t\t\t\n\t\t\tif (this.mode == MODE_IDLE){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// clean up unused classes\n\t\t\tlet draggedItemNode = document.getElementById(this.draggedItem.data.widgetid);\n\t\t\tdraggedItemNode.classList.remove(\"border-danger\");\n\t\t\tArray.from(document.getElementsByClassName(\"denied-dragging-animation\"))?.forEach(ele => {\n\t\t\t\tele.classList.remove(\"denied-dragging-animation\");\n\t\t\t})\n\t\t\t\n\t\t\t//if (!this.active || this.x < 0 || this.y < 0 || this.x >= this.cols)\n\t\t\t\t//return this.dragCancel();\n\n\t\t\tthis.mode = MODE_IDLE;\n\t\t\tlet updated = [];\n\t\t\tthis.convertGridResultToUpdate(this.positionUpdates, updated);\n\t\t\tupdated = this._updateFixedPositions(updated);\n\t\t\tif (updated.length)\n\t\t\t\tthis.$emit('rearrangeItems', updated.filter(v => v));\n\n\t\t\tthis.draggedItem = null;\n\t\t\tthis.draggedNode = null;\n\t\t\tthis.$emit('draggedItem', null);\n\t\t},\n\t\t_updateFixedPositions(updated) {\n\t\t\tupdated.forEach((item, index) => {\n\t\t\t\tif (!this.fixedPositionUpdates[index])\n\t\t\t\t\tthis.fixedPositionUpdates[index] = item;\n\t\t\t\telse\n\t\t\t\t\tthis.fixedPositionUpdates[index] = {...this.fixedPositionUpdates[index], ...item};\n\t\t\t});\n\t\t\tlet additionalUpdates = this.createNewGrid(this.prePlacedItems);\n\t\t\tif (additionalUpdates.length) {\n\t\t\t\t// NOTE(chris): this should never happen but it's here for safety\n\t\t\t\tadditionalUpdates.forEach((item, index) => updated[index] = item);\n\t\t\t\treturn this._updateFixedPositions(updated);\n\t\t\t}\n\t\t\treturn updated;\n\t\t},\n\t\temptyTileClicked() {\n\t\t\tthis.additionalRowComputed = false;\n\t\t\tthis.$emit('newItem', this.x, this.y);\n\t\t},\n\t\tupdateCursorOnMouseMove(evt){\n\t\t\tif(this.mode == MODE_IDLE){\n\t\t\t\tthis.updateCursor(evt);\n\t\t\t}\n\t\t},\n\t\tcheckPinnedWidgetAnimation(){\n\t\t\tlet itemAtPosition=[];\n\t\t\tswitch(this.mode){\n\t\t\t\tcase MODE_RESIZE:\n\t\t\t\t\tfor (let x = this.draggedItem.x; x <= this.x; x++) {\n\t\t\t\t\t\tfor (let y = this.draggedItem.y; y <= this.y; y++) {\n\t\t\t\t\t\t\tthis.items.forEach(item => {\n\t\t\t\t\t\t\t\tif (item.x == x && item.y == y) {\n\t\t\t\t\t\t\t\t\titemAtPosition.push(item);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase MODE_MOVE:\n\t\t\t\t\titemAtPosition = this.items.filter(item=>item.x == this.x && item.y == this.y);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tArray.from(document.getElementsByClassName(\"denied-dragging-animation\"))?.forEach(ele => {\n\t\t\t\tele.classList.remove(\"denied-dragging-animation\");\n\t\t\t})\n\n\t\t\titemAtPosition.forEach(item=>{\n\t\t\t\tif (item.place[this.cols] && item.place[this.cols].pinned) {\n\t\t\t\t\tlet pinnedWidget = document.getElementById(item.widgetid);\n\t\t\t\t\tlet pinNode = pinnedWidget.querySelector(\"[pinned='true']\");\n\t\t\t\t\tif (!pinNode.classList.contains(\"denied-dragging-animation\")) {\n\t\t\t\t\t\tpinNode.classList.add(\"denied-dragging-animation\");\n\t\t\t\t\t}\n\t\t\t\t}\t\n\t\t\t})\n\t\t},\n\t\tcheckWidgetSizeLimitAnimation() {\n\n\t\t\tlet draggedItemSetup = this.itemsSetup[this.draggedItem.data.widget];\n\t\t\tlet draggedItemMaxWidth = draggedItemSetup.width.max ?? draggedItemSetup.width;\n\t\t\tlet draggedItemMinWidth = draggedItemSetup.width.min ?? draggedItemSetup.width;\n\t\t\tlet draggedItemMaxHeight = draggedItemSetup.height.max ?? draggedItemSetup.height;\n\t\t\tlet draggedItemMinHeight = draggedItemSetup.height.min ?? draggedItemSetup.height;\n\t\t\tlet draggedItemNode = document.getElementById(this.draggedItem.data.widgetid);\n\n\t\t\tlet width_after_resize = this.x - this.draggedItem.x + 1; \n\t\t\tlet height_after_resize = this.y - this.draggedItem.y + 1; \n\t\t\tif( \n\t\t\t\t(width_after_resize > 0 && (width_after_resize > draggedItemMaxWidth\n\t\t\t\t|| width_after_resize < draggedItemMinWidth)\n\t\t\t\t)\n\t\t\t\t||\n\t\t\t\t(height_after_resize > 0 && (height_after_resize > draggedItemMaxHeight\n\t\t\t\t|| height_after_resize < draggedItemMinHeight)\n\t\t\t\t)\n\t\t\t){\n\t\t\t\tdraggedItemNode.classList.add(\"border-danger\");\n\t\t\t}else{\n\t\t\t\tdraggedItemNode.classList.remove(\"border-danger\");\n\t\t\t}\n\t\t},\n\t\tremoveWidgetClones(){\n\t\t\tlet widgetClones = Array.from(document.getElementsByClassName(\"widgetClone\"));\n\t\t\tfor (let i = 0; i < widgetClones.length; i++) {\n\t\t\t\tthis.$refs.container.removeChild(widgetClones[i]);\n\t\t\t}\n\t\t},\n\t\tmouseDown(){\n\t\t\tthis.mode = MODE_MOUSE_DOWN;\n\t\t},\n\t\tmouseUp() {\n\t\t\tthis.mode = MODE_IDLE;\n\t\t},\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t`\n}\n\n/*\nOLD VERSION - ON HOVER\n\n\t\n\n*/","let __widgets = {};\nlet __widgetsStarted = {};\nlet __path = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/dashboard/Widget';\n\nexport default {\n\tgetWidget(id) {\n\t\treturn __widgets[id];\n\t},\n\tloadWidget(id) {\n\t\tif (__widgets[id])\n\t\t\treturn Promise.resolve(__widgets[id]);\n\t\tif (__widgetsStarted[id])\n\t\t\treturn __widgetsStarted[id];\n\t\tif (!__path)\n\t\t\treturn Promise.reject('Widget could not be loaded because there is no path yet!');\n\n\t\t__widgetsStarted[id] = new Promise((resolve, reject) => {\n\t\t\taxios.get(__path, {params:{id}}).then(res => {\n\t\t\t\tres.data.retval.arguments = JSON.parse(res.data.retval.arguments);\n\t\t\t\tres.data.retval.setup = JSON.parse(res.data.retval.setup);\n\t\t\t\t__widgets[id] = res.data.retval;\n\t\t\t\t__widgetsStarted[id] = undefined;\n\t\t\t\tresolve(__widgets[id]);\n\t\t\t}).catch(error => reject(error.response.data.retval.error));\n\t\t});\n\t\treturn __widgetsStarted[id];\n\t},\n\tsetPath(path) {\n\t\t__path = path;\n\t}\n}","import BsModal from \"../Bootstrap/Modal.js\";\nimport CachedWidgetLoader from \"../../composables/Dashboard/CachedWidgetLoader.js\";\nimport HeightTransition from \"../Tranistion/HeightTransition.js\";\n\nexport default {\n\tname: 'Item',\n\tcomponents: {\n\t\tBsModal,\n\t\tHeightTransition\n\t},\n\tdata: () => ({\n\t\tcomponent: \"\",\n\t\targuments: null,\n\t\ttarget: false,\n\t\twidget: null,\n\t\ttmpConfig: {},\n\t\tisLoading: false,\n\t\thasConfig: false,\n\t\tsharedData: null,\n\t}),\n\temits: [\n\t\t\"change\",\n\t\t\"remove\",\n\t\t\"dragstart\",\n\t\t\"resizestart\",\n\t\t\"configOpened\",\n\t\t\"configClosed\",\n\t\t\"pinItem\",\n\t\t\"unPinItem\"\n\t],\n\tprops: [\n\t\t\"id\",\n\t\t\"widgetID\",\n\t\t\"config\",\n\t\t\"width\",\n\t\t\"height\",\n\t\t\"custom\",\n\t\t\"hidden\",\n\t\t\"editMode\",\n\t\t\"loading\",\n\t\t\"item_data\",\n\t\t\"place\",\n\t\t\"setup\",\n\t\t\"dragstate\",\n\t\t\"resizeOverlay\",\n\t\t\"additionalRow\"\n\t],\n\tcomputed: {\n\t\tmaxHeight(){\n\t\t\treturn this.setup?.height?.max;\n\t\t},\n\t\tmaxWidth(){\n\t\t\tif (Object.prototype.toString.call(this.setup?.width) == \"[object Number]\"){\n\t\t\t\treturn this.setup?.width;\n\t\t\t}\n\t\t\treturn this.setup?.width?.max;\n\t\t},\n\t\tminHeight() {\n\t\t\treturn this.setup?.height?.min;\n\t\t},\n\t\tminWidth() {\n\t\t\treturn this.setup?.width?.min;\n\t\t},\n\t\tisResizeable(){\n\t\t\treturn this.maxWidth >1 || this.maxHeight >1;\n\t\t},\n\t\tisPinned(){\n\t\t\treturn this.place?.pinned ? true : false;\n\t\t},\n\t\tready() {\n\t\t\treturn this.component && this.arguments !== null;\n\t\t},\n\t},\n\tmethods: {\n\t\tunpin(){\n\t\t\t// Unpinning is only possible in edit mode\n\t\t\tif(!this.editMode)\n\t\t\t\treturn;\n\t\t\tlet result = { item: this.item_data, x: this.item_data.x, y: this.item_data.y };\n\t\t\tthis.$emit('unPinItem', [result]);\n\t\t},\n\t\tpinItem(){\n\t\t\tlet result = { item: this.item_data, x: this.item_data.x, y: this.item_data.y};\n\t\t\tthis.$emit('pinItem',[result]);\n\t\t},\n\t\tgetWidgetC4Link(widget) {\n\t\t\treturn (FHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router + widget.setup.cis4link)\n\t\t},\n\t\thandleShowBsModal() {\n\t\t\tthis.$emit('configOpened')\n\t\t},\n\t\thandleHideBsModal() {\n\t\t\tthis.$emit('configClosed')\n\t\t},\n\t\tmouseDown(e) {\n\t\t\tthis.target = e.target;\n\t\t},\n\t\tstartDrag(e) {\n\t\t\tif (this.$refs.dragHandle.contains(this.target)) {\n\t\t\t\tthis.$emit(\"dragstart\", e);\n\t\t\t} else if (\n\t\t\t\tthis.isResizeable &&\n\t\t\t\tthis.$refs.resizeHandle.contains(this.target)\n\t\t\t) {\n\t\t\t\tif (this.isResizeable) this.$emit(\"resizestart\", e);\n\t\t\t\telse e.preventDefault();\n\t\t\t} else {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\topenConfig() {\n\t\t\tthis.tmpConfig = { ...this.arguments };\n\t\t\tthis.$refs.config.show();\n\t\t},\n\t\tsetConfig(hasConfig) {\n\t\t\tthis.hasConfig = hasConfig;\n\t\t},\n\t\tchangeConfig() {\n\t\t\tthis.isLoading = true;\n\t\t\tlet config = { ...this.tmpConfig };\n\t\t\tthis.sendChangeConfig(config);\n\t\t},\n\t\tchangeConfigManually() {\n\t\t\tlet config = { ...this.arguments };\n\t\t\tthis.sendChangeConfig(config);\n\t\t},\n\t\tsendChangeConfig(config) {\n\t\t\tfor (var k in config) {\n\t\t\t\tif (this.widget.arguments[k] == config[k]) {\n\t\t\t\tdelete config[k];\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$emit(\"change\", config);\n\t\t},\n\t},\n\twatch: {\n\t\tconfig() {\n\t\t\tthis.arguments = { ...this.widget?.arguments, ...this.config };\n\t\t\tthis.tmpConfig = { ...this.arguments };\n\t\t\tthis.$refs.config && this.$refs.config.hide();\n\t\t\tthis.isLoading = false;\n\t\t},\n\t},\n\tasync created() {\n\t\tthis.widget = await CachedWidgetLoader.loadWidget(this.id);\n\t\tlet component = (await import(FHC_JS_DATA_STORAGE_OBJECT.app_root + this.widget.setup.file + '?' + FHC_JS_DATA_STORAGE_OBJECT.fhcomplete_build_version)).default;\n\t\tthis.$options.components[\"widget\" + this.widget.widget_id] = component;\n\t\tthis.component = \"widget\" + this.widget.widget_id;\n\t\tthis.arguments = { ...this.widget.arguments, ...this.config };\n\t\tthis.tmpConfig = { ...this.arguments };\n\t},\n\ttemplate: /*html*/ `\n\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t
    \n\t
    \n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{{ widget.setup.name }}\n\t\t\t\n\t\t\t\n\t\t\t\n \t\t\n \t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t
    \n\t
    `,\n};\n","export default {\n\tdata(){\n\t\treturn {\n\n\t\t}\n\t},\n\tmethods:{\n\t\tonEnter(el,done){\n\t\t\tel.style.height = '0';\n\t\t\tel.style.height = el.scrollHeight + 'px';\n\t\t},\n\t\tonLeave(el,done){\n\t\t\tel.style.height = el.scrollHeight + 'px';\n\t\t\tel.style.height = '0';\n\t\t}\n\t},\n\ttemplate:\n\t/*html*/`\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t`,\n};","export default {\n\tdata(){\n\t\treturn {\n\n\t\t}\n\t},\n\tprops:{\n\t\twidget:{\n\t\t\ttype:Object,\n\t\t\trequired:true,\n\t\t}\n\t},\n\tmethods:{\n\t\tpath(src) {\n\t\t\tif (src[0] == '/')\n\t\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + src;\n\t\t\treturn src;\n\t\t}\n\t},\n\temits:[\"select\"],\n\ttemplate: /*html */`\n\t
    \n\t\t\n\t\t
    \n\t\t\t
    {{ widget.setup.name || widget.widget_kurzbz }}
    \n\t\t\t

    {{ widget.beschreibung }}

    \n\t\t
    \n\t
    `,\n}","import BsConfirm from \"../Bootstrap/Confirm.js\";\nimport DropGrid from '../Drop/Grid.js'\nimport DashboardItem from \"./Item.js\";\nimport CachedWidgetLoader from \"../../composables/Dashboard/CachedWidgetLoader.js\";\nimport WidgetIcon from \"./Widget/WidgetIcon.js\"\n\nexport default {\n\tname: 'Section',\n\tcomponents: {\n\t\tDropGrid,\n\t\tDashboardItem,\n\t\tWidgetIcon,\n\t},\n\tinject: {\n\t\twidgetsSetup:{\n\t\t\ttype: Array,\n\t\t\tdefault: [],\n\t\t},\n\t\tadminMode: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\teditMode: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\tprops: [\n\t\t\"name\",\n\t\t\"widgets\"\n\t],\n\temits: [\n\t\t\"widgetAdd\",\n\t\t\"widgetUpdate\",\n\t\t\"widgetRemove\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tconfigOpened: false,\n\t\t\tgridWidth: 1,\n\t\t\tgridHeight: null,\n\t\t\tdraggedItem:null,\n\t\t\tadditionalRow:false,\n\t\t}\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\teditModeIsActive: Vue.computed(() =>\n\t\t\t\tthis.editModeIsActive\n\t\t\t),\t\n\t\t\tsectionName: Vue.computed(() => this.name),\t\n\t\t}\n\t},\n\tcomputed: {\n\t\tcomputedWidgetsSetup(){\n\t\t\tif(!this.widgetsSetup) return {};\n\t\t\treturn this.widgetsSetup.reduce((acc, setup)=>{\n\t\t\t\tacc[setup.widget_id] = setup.setup;\n\t\t\t\treturn acc;\n\t\t\t},{})\n\t\t},\n\t\teditModeIsActive() {\n\t\t\treturn (this.editMode || this.adminMode) && !this.configOpened\t\n\t\t},\n\t\tgetSectionStyle() {\n\t\t\treturn 'margin-bottom: 8px;';\n\t\t},\n\t\titems() {\n\t\t\t// reuses the nearest placement of the widget from another viewport \n\t\t\t/* const computeNearestPlace = (item, gridWidth) =>{\n\t\t\t\tlet place;\n\t\t\t\tif (Object.keys(item.place).length > 0) {\n\t\t\t\t\tconst nearestIndex = Object.keys(item.place)\n\t\t\t\t\t\t\t\t\t\t\t .sort((a, b) => Math.abs(a - gridWidth) - Math.abs(b - gridWidth))\n\t\t\t\t\t\t\t\t\t\t\t .shift();\n\t\t\t\t\tplace = item.place[nearestIndex];\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tplace = { x: 0, y: 0, w: 1, h: 1 };\n\t\t\t\t}\n\t\t\t\treturn place;\n\t\t\t} */\n\t\t\t\n\t\t\tlet placedItems = this.widgets.map(item => {\n\t\t\t\tif(!item?.widgetid && item?.id){\n\t\t\t\t\titem.widgetid = item.id;\n\t\t\t\t}\n\t\t\t\treturn { ...item, reorder: false, ...(item.place[this.gridWidth] || { reorder: true, ...{ x: 0, y: 0, w: 1, h: 1 } })};\n\t\t\t});\n\t\t\treturn placedItems;\n\t\t\t\n\t\t},\n\t\t\n\t},\n\tmethods: {\n\t\tsectionNameTranslation(){\n\t\t\tswitch(this.name){\n\t\t\t\tcase \"general\": \n\t\t\t\t\treturn this.$p.t('dashboard',this.name); \n\t\t\t\t\tbreak;\n\t\t\t\tcase \"custom\":\n\t\t\t\t\treturn this.$p.t('dashboard',this.name);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn this.name;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tshowSectionInformation(){\n\t\t\tif (this.name == \"general\"){\n\t\t\t\treturn this.$p.t('dashboard', 'dashboardGeneralSectionDescription'); \n\t\t\t}\n\t\t\telse if(this.name == \"custom\"){\n\t\t\t\treturn this.$p.t('dashboard', 'dashboardCustomSectionDescription');\n\t\t\t}\n\t\t\telse{\n\t\t\t\treturn this.$p.t('dashboard', 'dashboardSectionDescription', [this.name]);\n\t\t\t}\n\t\t},\n\t\thandleConfigOpened() {\n\t\t\tthis.configOpened = true\n\t\t},\n\t\thandleConfigClosed() {\n\t\t\tthis.configOpened = false\n\t\t},\n\t\tcheckResizeLimit(item, w, h) {\n\t\t\t// NOTE(chris): widgets needs to be loaded for this to work\n\t\t\tlet widget = CachedWidgetLoader.getWidget(item.widget);\n\t\t\tif (widget) {\n\t\t\t\tlet minmaxW = widget.setup.width;\n\t\t\t\tif (minmaxW.max)\n\t\t\t\t\tminmaxW.min = minmaxW.min || 1;\n\t\t\t\telse\n\t\t\t\t\tminmaxW = {min:minmaxW,max:minmaxW};\n\t\t\t\tif (w < minmaxW.min)\n\t\t\t\t\tw = minmaxW.min; \n\t\t\t\tif (w > minmaxW.max)\n\t\t\t\t\tw = minmaxW.max;\n\n\t\t\t\tlet minmaxH = widget.setup.height;\n\t\t\t\tif (minmaxH.max)\n\t\t\t\t\tminmaxH.min = minmaxH.min || 1;\n\t\t\t\telse\n\t\t\t\t\tminmaxH = {min:minmaxH,max:minmaxH};\n\t\t\t\tif (h < minmaxH.min)\n\t\t\t\t\th = minmaxH.min;\n\t\t\t\tif (h > minmaxH.max)\n\t\t\t\t\th = minmaxH.max;\n\t\t\t}\n\t\t\treturn [w, h];\n\t\t},\n\t\tremoveWidget(item, revert) {\n\t\t\tif (item.custom) {\n\t\t\t\tBsConfirm.popup('Are you sure you want to delete this widget?').then(() => this.$emit('widgetRemove', this.name, item.id));\n\t\t\t} else {\n\t\t\t\tlet update = {};\n\t\t\t\tupdate[item.id] = { hidden: !revert };\n\t\t\t\tthis.updatePreset(update);\n\t\t\t}\n\t\t},\n\t\tsaveConfig(config, item) {\n\t\t\tlet payload = {};\n\t\t\tpayload[item.id] = { config };\n\t\t\tthis.updatePreset(payload);\n\t\t},\n\t\tupdatePositions(updated, pinned=false) {\n\t\t\tlet result = {};\n\t\t\tupdated.forEach(update => {\n\t\t\t\t\n\t\t\t\tlet item = {...update.item};\n\t\t\t\tif (!item.placeholder) {\n\t\t\t\tif (!item.place[this.gridWidth])\n\t\t\t\t\titem.place[this.gridWidth] = {x: 0, y: 0, w: 1, h: 1};\n\t\t\t\tdelete item.x;\n\t\t\t\tdelete item.y;\n\t\t\t\tdelete item.w;\n\t\t\t\tdelete item.h;\n\t\t\t\tdelete item.place[this.gridWidth].pinned;\n\t\t\t\tif (update.x !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].x = update.x;\n\t\t\t\tif (update.y !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].y = update.y;\n\t\t\t\tif (update.w !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].w = update.w;\n\t\t\t\tif (update.h !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].h = update.h;\n\t\t\t\tif (pinned){\n\t\t\t\t\titem.place[this.gridWidth].pinned = true;\n\t\t\t\t}\n\n\t\t\t\tresult[item.id] = item;\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.updatePreset(result);\n\t\t},\n\t\tupdatePreset(update) {\n\t\t\tlet payload = {};\n\t\t\tpayload[this.name] = update;\n\t\t\tthis.$emit('widgetUpdate', this.name, payload);\n\t\t}\n\t},\n\tmounted() {\n\t\tlet self = this;\n\t\tlet cont = self.$refs.container;\n\t\tself.gridWidth = parseInt(window.getComputedStyle(cont).getPropertyValue('--fhc-dashboard-grid-size'));\n\t\t\n\t\twindow.addEventListener('resize', () => {\n\t\t\tself.gridWidth = parseInt(window.getComputedStyle(cont).getPropertyValue('--fhc-dashboard-grid-size'));\n\t\t});\n\t},\n\ttemplate: `\n\t
    \n\t\t

    \n\t\t\t\n\t\t\t{{sectionNameTranslation()}}:\n\t\t

    \n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    `\n}\n\n/*\nOLD VERSION - ON HOVER\n\n*/","import BsModal from \"../../Bootstrap/Modal.js\";\nimport WidgetIcon from \"./WidgetIcon.js\";\n\nexport default {\n\tcomponents: {\n\t\tBsModal,\n\t\tWidgetIcon,\n\t},\n\tprops: [\n\t\t\"widgets\"\n\t],\n\tdata: () => ({\n\t\tcallbacks: {}\n\t}),\n\tmethods: {\n\t\tgetWidget() {\n\t\t\treturn new Promise((resolve,reject) => {\n\t\t\t\tthis.callbacks = {resolve,reject};\n\t\t\t\tthis.$refs.modal.show();\n\t\t\t});\n\t\t},\n\t\tclose() {\n\t\t\tif (this.callbacks.reject)\n\t\t\t\tthis.callbacks.reject();\n\t\t\tthis.callbacks = {};\n\t\t},\n\t\tpick(widget_id) {\n\t\t\tif (this.callbacks.resolve)\n\t\t\t\tthis.callbacks.resolve(widget_id);\n\t\t\tthis.callbacks = {};\n\t\t\tthis.$refs.modal.hide();\n\t\t},\n\t\t\n\t},\n\ttemplate: `
    \n\t\t 0}\" @hiddenBsModal=\"close\">\n\t\t\t\n\t\t\t\n\t\t\n\t
    `\n}\n","export default {\n\t/**\n\t* Performs a deep merge of objects and returns new object. Does not modify\n\t* objects (immutable) and merges arrays via concatenation.\n\t*\n\t* @param {...object} objects - Objects to merge\n\t* @returns {object} New object with merged key/values\n\t*/\n\tmergeDeep(...objects) {\n\t\tconst isObject = obj => obj && typeof obj === 'object';\n\t\t\n\t\treturn objects.reduce((prev, obj) => {\n\t\t\tObject.keys(obj).forEach(key => {\n\t\t\t\tconst pVal = prev[key];\n\t\t\t\tconst oVal = obj[key];\n\t\t\t\t\n\t\t\t\tif (Array.isArray(pVal) && Array.isArray(oVal)) {\n\t\t\t\t\tprev[key] = pVal.concat(...oVal);\n\t\t\t\t}\n\t\t\t\telse if (isObject(pVal) && isObject(oVal)) {\n\t\t\t\t\tprev[key] = this.mergeDeep(pVal, oVal);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tprev[key] = oVal;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\treturn prev;\n\t\t}, {});\n\t}\n}","import BsPrompt from \"../Bootstrap/Prompt.js\";\nimport DashboardAdminEdit from \"./Admin/Edit.js\";\nimport DashboardAdminWidgets from \"./Admin/Widgets.js\";\nimport DashboardAdminPresets from \"./Admin/Presets.js\";\n\nexport default {\n\tcomponents: {\n\t\tDashboardAdminEdit,\n\t\tDashboardAdminWidgets,\n\t\tDashboardAdminPresets\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tadminMode: true\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tdashboards: [],\n\t\t\tcurrent: -1,\n\t\t\twidgets: []\n\t\t};\n\t},\n\tcomputed: {\n\t\tapiurl() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/dashboard';\n\t\t},\n\t\tdashboard() {\n\t\t\treturn this.dashboards.find(el => el.dashboard_id == this.current);\n\t\t}\n\t},\n\tmethods: {\n\t\tdashboardAdd() {\n\t\t\tlet _name = '';\n\t\t\tBsPrompt.popup('New Dashboard name').then(\n\t\t\t\tname => {\n\t\t\t\t\t_name = name;\n\t\t\t\t\treturn axios.post(this.apiurl + '/Dashboard/create', {\n\t\t\t\t\t\tdashboard_kurzbz: name\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t).then(res => {\n\t\t\t\tlet newDashboard = {\n\t\t\t\t\tdashboard_id: res.data.retval,\n\t\t\t\t\tdashboard_kurzbz: _name,\n\t\t\t\t\tbeschreibung: ''\n\t\t\t\t};\n\t\t\t\tthis.dashboards.push(newDashboard);\n\t\t\t\tthis.current = newDashboard.dashboard_id;\n\t\t\t}).catch(err => err !== undefined ? console.error('ERROR:', err) : 0);\n\t\t},\n\t\tdashboardUpdate(dashboard) {\n\t\t\t// TODO(chris): Loading or message\n\t\t\taxios.post(this.apiurl + '/Dashboard/update', dashboard).then(() => {\n\t\t\t\tlet old = this.dashboards.find(el => el.dashboard_id == dashboard.dashboard_id);\n\t\t\t\told.dashboard_kurzbz = dashboard.dashboard_kurzbz;\n\t\t\t\told.beschreibung = dashboard.beschreibung;\n\t\t\t}).catch(err => console.error('ERROR:', err));\n\t\t},\n\t\tdashboardDelete(dashboard_id) {\n\t\t\taxios.post(this.apiurl + '/Dashboard/delete', {dashboard_id}).then(() => {\n\t\t\t\tthis.current = -1;\n\t\t\t\tthis.dashboards = this.dashboards.filter(el => el.dashboard_id != dashboard_id);\n\t\t\t}).catch(err => console.error('ERROR:', err));\n\t\t},\n\t\tassignWidgets(widgets) {\n\t\t\tthis.widgets = widgets;\n\t\t\t/*while (this.widgets.length)\n\t\t\t\tthis.widgets.pop();\n\t\t\tfor (var i in widgets)\n\t\t\t\tthis.widgets.push(widgets[i]);*/\n\t\t}\n\t},\n\tcreated() {\n\t\taxios.get(this.apiurl + '/Dashboard').then(res => {\n\t\t\tthis.dashboards = res.data.retval;\n\t\t}).catch(err => console.error('ERROR:', err));\n\t},\n\ttemplate: `
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t
      \n\t\t\t\t
    • \n\t\t\t\t\t\n\t\t\t\t
    • \n\t\t\t\t
    • \n\t\t\t\t\t\n\t\t\t\t
    • \n\t\t\t\t
    • \n\t\t\t\t\t\n\t\t\t\t
    • \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    `\n}\n","import DashboardSection from \"../Section.js\";\nimport DashboardWidgetPicker from \"../Widget/Picker.js\";\nimport ObjectUtils from \"../../../helpers/ObjectUtils.js\";\n\nexport default {\n\tcomponents: {\n\t\tDashboardSection,\n\t\tDashboardWidgetPicker\n\t},\n\tprops: {\n\t\tdashboard: String,\n\t\twidgets: Array\n\t},\n\tdata: () => ({\n\t\tfunktionen: {},\n\t\tsections: [],\n\t\ttmpLoading: ''\n\t}),\n\tcomputed: {\n\t\tapiurl() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/dashboard';\n\t\t},\n\t\tpickerWidgets() {\n\t\t\treturn this.widgets.filter(widget => widget.allowed);\n\t\t}\n\t},\n\tmethods: {\n\t\twidgetAdd(section_name, widget) {\n\t\t\tthis.$refs.widgetpicker.getWidget().then(widget_id => {\n\t\t\t\twidget.widget = widget_id;\n\t\t\t\tdelete widget.custom;\n\t\t\t\twidget.preset = 1;\n\t\t\t\tlet loading = {...widget};\n\t\t\t\tloading.loading = true;\n\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\tif (section.name == section_name)\n\t\t\t\t\t\tsection.widgets.push(loading);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\taxios.post(this.apiurl + '/Config/addWidgetsToPreset', {\n\t\t\t\t\tdb: this.dashboard,\n\t\t\t\t\tfunktion_kurzbz: section_name,\n\t\t\t\t\twidgets: [widget]\n\t\t\t\t}).then(result => {\n\t\t\t\t\tlet newId = Object.keys(result.data.retval.data[section_name].widgets).pop();\n\t\t\t\t\twidget.id = newId;\n\t\t\t\t\twidget.custom = 1;\n\t\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\t\tif (section.name == section_name) {\n\t\t\t\t\t\t\tsection.widgets.splice(section.widgets.indexOf(loading),1);\n\t\t\t\t\t\t\tsection.widgets.push(widget);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}).catch(error => {\n\t\t\t\t\tconsole.error('ERROR: ', error);\n\t\t\t\t\talert('ERROR: ' + error.response.data.retval);\n\t\t\t\t});\n\t\t\t}).catch(() => {});\n\t\t},\n\t\twidgetUpdate(section_name, payload) {\n\t\t\tpayload = payload[section_name];\n\t\t\tfor (var k in payload) {\n\t\t\t\tfor (var i in this.sections) {\n\t\t\t\t\tif (this.sections[i].name == section_name) {\n\t\t\t\t\t\tfor (var wid in this.sections[i].widgets) {\n\t\t\t\t\t\t\tif (this.sections[i].widgets[wid].id == k) {\n\t\t\t\t\t\t\t\tpayload[k] = ObjectUtils.mergeDeep(this.sections[i].widgets[wid], payload[k]);\n\t\t\t\t\t\t\t\t// NOTE(chris): remove internal props\n\t\t\t\t\t\t\t\tfor (var prop in {_x:1,_y:1,_w:1,_h:1,index:1,id:1})\n\t\t\t\t\t\t\t\t\tif (payload[k][prop])\n\t\t\t\t\t\t\t\t\t\tdelete payload[k][prop];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpayload[k].widgetid = k;\n\t\t\t\tdelete payload[k].custom;\n\t\t\t}\n\t\t\taxios.post(this.apiurl + '/Config/addWidgetsToPreset', {\n\t\t\t\tdb: this.dashboard,\n\t\t\t\tfunktion_kurzbz: section_name,\n\t\t\t\twidgets: payload\n\t\t\t}).then(() => {\n\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\tif (section.name == section_name) {\n\t\t\t\t\t\tsection.widgets.forEach((widget, i) => {\n\t\t\t\t\t\t\tif (payload[widget.id]) {\n\t\t\t\t\t\t\t\tpayload[widget.id].id = widget.id;\n\t\t\t\t\t\t\t\tpayload[widget.id].index = widget.index;\n\t\t\t\t\t\t\t\tsection.widgets[i] = payload[widget.id];\n\t\t\t\t\t\t\t\tsection.widgets[i].custom = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}).catch(error => {\n\t\t\t\t// TODO(chris): revert placement on failure\n\t\t\t\tconsole.error('ERROR: ', error);\n\t\t\t\talert('ERROR: ' + error.response.data.retval);\n\t\t\t});\n\t\t},\n\t\twidgetRemove(section_name, id) {\n\t\t\taxios.post(this.apiurl + '/Config/removeWidgetFromPreset', {\n\t\t\t\tdb: this.dashboard,\n\t\t\t\tfunktion_kurzbz: section_name,\n\t\t\t\twidgetid: id\n\t\t\t}).then(() => {\n\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\tif (section.name == section_name)\n\t\t\t\t\t\tsection.widgets = section.widgets.filter(widget => widget.id != id);\n\t\t\t\t});\n\t\t\t}).catch(error => {\n\t\t\t\tconsole.error('ERROR: ', error);\n\t\t\t\talert('ERROR: ' + error.response.data.retval);\n\t\t\t});\n\t\t},\n\t\tloadSections(evt) {\n\t\t\tlet funktionen = Array.from(evt.target.querySelectorAll(\"option:checked\"),e=>e.value);\n\t\t\tthis.sections = [];\n\t\t\tthis.tmpLoading = funktionen.join('###');\n\t\t\taxios.get(this.apiurl + '/Config/presetBatch', {params: {\n\t\t\t\tdb: this.dashboard,\n\t\t\t\tfunktionen\n\t\t\t}}).then(res => {\n\t\t\t\tif (this.tmpLoading !== funktionen.join('###'))\n\t\t\t\t\treturn; // NOTE(chris): prevent race condition\n\t\t\t\tfor (var section in res.data.retval) {\n\t\t\t\t\tlet widgets = [];\n\t\t\t\t\tfor (var wid in res.data.retval[section]) {\n\t\t\t\t\t\tres.data.retval[section][wid].id = wid;\n\t\t\t\t\t\tres.data.retval[section][wid].custom = 1;\n\t\t\t\t\t\twidgets.push(res.data.retval[section][wid]);\n\t\t\t\t\t}\n\t\t\t\t\tthis.sections.push({\n\t\t\t\t\t\tname: section,\n\t\t\t\t\t\twidgets\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}).catch(err => console.error('ERROR:', err));\n\t\t}\n\t},\n\tcreated() {\n\t\taxios.get(this.apiurl + '/Config/funktionen').then(res => {\n\t\t\tthis.funktionen = {general: 'GENERAL'};\n\t\t\tres.data.retval.forEach(funktion => {\n\t\t\t\tthis.funktionen[funktion.funktion_kurzbz] = funktion.beschreibung;\n\t\t\t});\n\t\t}).catch(err => console.error('ERROR:', err));\n\t},\n\twatch: {\n\t\tdashboard() {\n\t\t\t// TODO(chris): this should be done without a watcher\n\t\t\tthis.loadSections({target:this.$refs.funktionenList});\n\t\t}\n\t},\n\ttemplate: `
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t\n\t
    `\n}\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsearch(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/search';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchAdvanced(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/searchAdvanced';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchdummy(searchsettings) {\n\t\tconst url = 'public/js/apps/api/dummyapi.php/Search';\n\t\treturn this.$fhcApi.post(url, searchsettings);\n\t}\n};\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/loadModule/' + category);\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst payload = {categories, language}\n\t\treturn this.$fhcApi.post('/api/frontend/v1/phrasen/setLanguage', payload);\n\t},\n\tgetLanguage() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getLanguage', {});\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getAllLanguages', {});\n\t}\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetHeader(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/header',\n\t\t\t{ navigation_page }\n\t\t);\n\t},\n\tgetMenu: function(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/menu',\n\t\t\t{ navigation_page }\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/saveCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t);\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/applyFilterFields',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t);\n\t},\n\taddFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/addFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tgetFilter(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tabmeldung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/abmeldung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(stdsem, prestudent_id, grund) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/abmeldung/createAntrag', {\n\t\t\t\tstudiensemester: stdsem,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\tif (!Array.isArray(antrag_id))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t\t{ antrag_id }\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag_id.map(antrag => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t{ antrag_id: antrag.studierendenantrag_id },\n\t\t\t\t{ errorHeader: '#' + antrag.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t},\n\tunterbrechung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/unterbrechung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(studiensemester, prestudent_id, grund, datum_wiedereinstieg, attachment) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/createAntrag', {\n\t\t\t\tstudiensemester,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund,\n\t\t\t\tdatum_wiedereinstieg,\n\t\t\t\tattachment\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/cancelAntrag', {\n\t\t\t\tantrag_id\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t}\n\t},\n\twiederholung: {\n\t\tgetDetails(prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/' + prestudent_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tgetLvs(antrag_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getLvs/' + antrag_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tcreate(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/createAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/cancelAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tsaveLvs(forbiddenLvs, mandatoryLvs) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/saveLvs', {\n\t\t\t\tforbiddenLvs,\n\t\t\t\tmandatoryLvs\n\t\t\t});\n\t\t}\n\t},\n\tleitung: {\n\t\tgetStgs() {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getActiveStgs');\n\t\t},\n\t\tgetAntraege(url, config, params) {\n\t\t\treturn this.$fhcApi\n\t\t\t\t.get('/api/frontend/v1/studstatus/leitung/getAntraege/' + url)\n\t\t\t\t.then(res => res.data); // Return data for tabulator\n\t\t},\n\t\tgetHistory(antrag_id) {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getHistory/' + antrag_id)\n\t\t},\n\t\tgetPrestudents(query, signal) {\n\t\t\treturn this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/getPrestudents',\n\t\t\t\t{ query },\n\t\t\t\t{\n signal: signal,\n timeout: 30000\n }\n\t\t\t);\n\t\t},\n\t\tapprove(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treopen(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tunpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tobject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tapproveObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tdenyObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t}\n};","export default {\n\n getView: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getView/${uid}`,{}\n );\n },\n\n fotoSperre: function (value) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/fotoSperre/${value}`,\n {}\n );\n \n },\n\n isStudent: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isStudent`,\n {\n uid:uid,\n }\n );\n },\n\n isMitarbeiter: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isMitarbeiter/${uid}`,\n {}\n );\n },\n\n getZustellAdresse: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellAdresse`,{}\n );\n },\n\n getZustellKontakt: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellKontakt`,{}\n );\n },\n\n getGemeinden: function(nation,zip){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getGemeinden/${nation}/${zip}`,\n {}\n );\n \n },\n getAllNationen:function(){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Profil/getAllNationen\",{}\n );\n },\n}","export default {\n //! API calls for profil update requests\n \n getStatus: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getStatus`,{});\n },\n \n getTopic: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getTopic`,{});\n },\n \n acceptProfilRequest: function ({profil_update_id, uid, status_message, topic, requested_change}) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/acceptProfilRequest\",{profil_update_id, uid, status_message, topic, requested_change});\n },\n \n denyProfilRequest: function ({profil_update_id, uid, topic, status_message}) {\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/denyProfilRequest\",{profil_update_id,uid,topic,status_message});\n },\n \n insertFile: function (dms, replace = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n dms);\n\n },\n \n getProfilRequestFiles: function (requestID) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`,{});\n },\n \n selectProfilRequest: function (uid = null, id = null) {\n\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/selectProfilRequest`,\n {...(uid?{uid}:{}),\n ...(id?{id}:{})\n });\n },\n \n insertProfilRequest: function (topic, payload, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/insertProfilRequest\",\n {\n topic,\n payload,\n ...(fileID ? { fileID } : {}),\n });\n },\n \n updateProfilRequest: function (topic, payload, ID, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/updateProfilRequest`,\n {\n topic,\n payload,\n ID,\n ...(fileID ? { fileID: fileID } : {}),\n });\n },\n \n deleteProfilRequest: function (requestID) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/deleteProfilRequest`,\n {\n requestID,\n });\n },\n };\n ","\nexport default {\n\tgetRoomInfo(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getRoomplan',\n\t\t\t{ ort_kurzbz, start_date, end_date}\n\t\t);\n\t},\n\tgetStunden() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/Stunden',\n\t\t\t{}\n\t\t);\n\t},\n\tgetOrtReservierungen(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/LvPlan/getReservierungen/${ort_kurzbz}`,\n\t\t\t{ start_date, end_date}\n\t\t);\n\t},\n\tgetLvPlanReservierungen(start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getReservierungen',\n\t\t\t{ start_date, end_date }\n\t\t);\n\t},\n\tgetLehreinheitStudiensemester(lehreinheit_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${lehreinheit_id}`,\n\t\t\t{}\n\t\t);\n\t},\n\tstudiensemesterDateInterval(date) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${date}`,\n\t\t\t{}\n\t\t);\n\t},\n\tLvPlanEvents(start_date, end_date, lv_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/LvPlanEvents',\n\t\t\t{ start_date, end_date, lv_id }\n\t\t);\n\t},\n\t\n\t\n};","import verband from './stv/verband.js';\nimport students from './stv/students.js';\nimport filter from './stv/filter.js';\nimport konto from './stv/konto.js';\nimport group from './stv/group.js';\nimport kontakt from './stv/kontakt.js';\nimport prestudent from './stv/prestudent.js';\nimport status from './stv/status.js';\nimport details from './stv/details.js';\nimport exam from './stv/exam.js';\nimport abschlusspruefung from './stv/abschlusspruefung.js';\nimport grades from './stv/grades.js';\nimport mobility from './stv/mobility.js';\nimport archiv from './stv/archiv.js';\nimport documents from './stv/documents.js';\nimport exemptions from './stv/exemptions.js';\nimport jointstudies from \"./stv/jointstudies.js\";\nimport courselist from './stv/courselist.js';\n\nexport default {\n\tverband,\n\tstudents,\n\tfilter,\n\tkonto,\n\tgroup,\n\tkontakt,\n\tprestudent,\n\tstatus,\n\tdetails,\n\texam,\n\tabschlusspruefung,\n\tgrades,\n\tmobility,\n\tarchiv,\n\tdocuments,\n\texemptions,\n\tjointstudies,\n\tcourselist,\n\tconfigStudent() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/student');\n\t},\n\tconfigStudents() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/students');\n\t}\n};\n","export default {\n\tget() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/verband');\n\t},\n\tfavorites: {\n\t\tget() {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/stv/favorites');\n\t\t},\n\t\tset(favorites) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/stv/favorites/set', {\n\t\t\t\tfavorites\n\t\t\t});\n\t\t}\n\t}\n}","export default {\n\tuid(uid, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/uid/'\n\t\t\t+ encodeURIComponent(uid);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tprestudent(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/prestudent/'\n\t\t\t+ encodeURIComponent(prestudent_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tperson(person_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/person/'\n\t\t\t+ encodeURIComponent(person_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tverband(relative_path) {\n\t\treturn this.$fhcApi.getUri('api/frontend/v1/stv/students/' + relative_path);\n\t}\n}","export default {\n\tgetStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/filter/getStg');\n\t},\n\tsetStg(studiengang_kz) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/filter/setStg', {\n\t\t\tstudiengang_kz\n\t\t});\n\t}\n};","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/konto/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id),\n\t\t\t\tonly_open: self.filter,\n\t\t\t\tstudiengang_kz: self.studiengang_kz_intern ? self.stg_kz : ''\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tcheckDoubles(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/checkDoubles', data, {\n\t\t\tconfirmErrorHandler: error => true\n\t\t});\n\t},\n\tinsert(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/insert', data);\n\t},\n\tcounter(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/counter', data);\n\t},\n\tedit(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/update', data);\n\t},\n\tdelete(buchungsnr) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/delete', {buchungsnr});\n\t},\n\tgetBuchungstypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/konto/getBuchungstypen');\n\t}\n};","export default {\n\tgetGruppen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/Gruppen/getGruppen/' + params.id);\n\t},\n\tdeleteGroup(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/Gruppen/deleteGruppe/', params);\n\t}\n}","export default {\n\t//------------- address.js-----------\n\tgetAdressen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressen/' + params.id);\n\t},\n\taddNewAddress(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewAddress/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadAddress(address_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadAddress/', {address_id});\n\t},\n\tupdateAddress(form, address_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateAddress/' + address_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteAddress(address_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteAddress/', {address_id});\n\t},\n\tgetPlaces(plz) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getPlaces/' + plz);\n\t},\n\tgetFirmen(searchString) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getFirmen/' + searchString);\n\t},\n\tgetNations() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getNations/');\n\t},\n\tgetAdressentypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressentypen/');\n\t},\n\n\t//------------- bankverbindung.js-----------\n\tgetBankverbindung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getBankverbindung/' + params.id);\n\t},\n\taddNewBankverbindung(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewBankverbindung/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadBankverbindung(bankverbindung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadBankverbindung/', {bankverbindung_id});\n\t},\n\tupdateBankverbindung(form, bankverbindung_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateBankverbindung/' + bankverbindung_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteBankverbindung(bankverbindung_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteBankverbindung/', {bankverbindung_id});\n\t},\n\n\t//------------- contact.js-----------\n\tgetKontakte (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakte/' + params.id);\n\t},\n\taddNewContact(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewContact/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadContact(kontakt_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadContact/', {kontakt_id});\n\t},\n\tupdateContact(form, kontakt_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateContact/' + kontakt_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteContact(kontakt_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteContact/', {kontakt_id});\n\t},\n\tgetStandorteByFirma(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getStandorteByFirma/' + searchString);\n\t},\n\tgetKontakttypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakttypen/');\n\t}\n};","export default {\n\n//------------- Prestudent.js------------------------------------------------------\n\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\treturn \tthis.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/prestudent/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t);\n\t},\n\tupdatePrestudent(form, prestudent_id, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/prestudent/updatePrestudent/' + prestudent_id,\n\t\t\tdata\n\t\t);\n\t},\n\tgetBezeichnungZGV() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungZGV/');\n\t},\n\tgetBezeichnungMZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungMZgv/');\n\t},\n\tgetBezeichnungDZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungDZgv/');\n\t},\n\tgetStgs() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStgs/');\n\t},\n\tgetAusbildung() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAusbildung/');\n\t},\n\tgetAufmerksamdurch() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAufmerksamdurch/');\n\t},\n\tgetBerufstaetigkeit() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBerufstaetigkeit/');\n\t},\n\tgetTypenStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getTypenStg/');\n\t},\n\tgetBisstandort() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBisstandort/');\n\t},\n\n//------------- MultiStatus.js------------------------------------------------------\n\tgetHistoryPrestudent (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getHistoryPrestudent/' + params.id);\n\t},\n\tgetMaxSem(studiengang_kzs) {\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/status/getMaxSemester/', {studiengang_kzs});\n\t},\n\tadvanceStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/advanceStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tconfirmStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/confirmStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tisLastStatus(id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/isLastStatus/' + id);\n\t},\n\tdeleteStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/deleteStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tgetLastBismeldestichtag() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getLastBismeldestichtag/');\n\t},\n\n//------------- History.js------------------------------------------------------\n\tgetHistoryPrestudents (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getHistoryPrestudents/' + params.id);\n\t},\n\n}","export default {\n\n//------------- Modal.js------------------------------------------------------\n\n\tinsertStatus(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/status/insertStatus/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/status/loadStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tupdateStatus(form, {prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}, data) {\n\t\treturn this.$fhcApi.post(\n\t\t\tform,\n\t\t\t'api/frontend/v1/stv/status/updateStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester,\n\t\t\tdata\n\t\t);\n\t},\n\tgetStudienplaene(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudienplaene/' + prestudent_id);\n\t},\n\tgetStudiengang(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudiengang/' + prestudent_id);\n\t},\n\tgetStatusgruende() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusgruende/');\n\t},\n\tgetStati() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStati/');\n\t},\n\n//------------- Dropdown.js------------------------------------------------------\n\n\taddStudent(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/addStudent/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tchangeStatus(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/changeStatus/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tgetStatusarray() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusarray/');\n\t}\n}","export default {\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/student/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(url);\n\t},\n\tsave(form, prestudent_id, studiensemester_kurzbz, data) {\n\t\tlet url = 'api/frontend/v1/stv/student/save/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(form, url, data);\n\t},\n}\n","export default {\n\tgetPruefungen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getPruefungen/' + params.id);\n\t},\n\tloadPruefung(pruefung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/loadPruefung/' + pruefung_id);\n\t},\n\tgetTypenPruefungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getTypenPruefungen');\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/getAllLehreinheiten/', data)\n\t},\n\tgetLvsByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsByStudent/' + uid)\n\t},\n\tgetLvsandLesByStudent(uid, semester){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsandLesByStudent/' + uid + '/' + semester);\n\t},\n\tgetLvsAndMas(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsAndMas/' + uid)\n\t},\n\tgetMitarbeiterLv(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getMitarbeiterLv/' + id)\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getNoten');\n\t},\n\tcheckZeugnisnoteLv(data){\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/', data)\n\t},\n\taddPruefung(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/insertPruefung/', data);\n\t},\n\tupdatePruefung(form, id, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/updatePruefung/' + id, data);\n\t},\n\tdeletePruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/deletePruefung/' + id)\n\t}\n}","export default {\n\n\tgetAbschlusspruefung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/' + params.id);\n\t},\n\taddNewAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/', data\n\t\t);\n\t},\n\tloadAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/', {id});\n\t},\n\tupdateAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/', data\n\t\t);\n\t},\n\tdeleteAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/', {id});\n\t},\n\tgetTypenAbschlusspruefung(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/');\n\t},\n\tgetTypenAntritte(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/');\n\t},\n\tgetBeurteilungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/');\n\t},\n\tgetAkadGrade(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getAkadGrade/', {studiengang_kz});\n\t},\n\tgetTypStudiengang(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/', {studiengang_kz});\n\t},\n\tgetMitarbeiter(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/' + searchString);\n\t},\n\tgetPruefer(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getPruefer/' + searchString);\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getNoten/');\n\t},\n\tcheckForExistingExams(uids) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/', {uids}\n\t\t);\n\t}\n}","export default {\n\tlist() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/grades/list');\n\t},\n\tgetCertificate(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getCertificate/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetTeacherProposal(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getTeacherProposal/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetRepeaterGrades(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getRepeaterGrades/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tupdateCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, note, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/updateCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz,\n\t\t\t\tnote\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tdeleteCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/deleteCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyTeacherProposalToCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyTeacherProposalToCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id, lv_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate',\n\t\t\t{\n\t\t\t\tstudierendenantrag_lehrveranstaltung_id\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lv_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tgetGradeFromPoints(points, lehrveranstaltung_id, studiensemester_kurzbz, manualErrorHandling) {\n\t\tconst config = manualErrorHandling ? {errorHandling: false} : {};\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/grades/getGradeFromPoints',\n\t\t\t{\n\t\t\t\t\"points\": points,\n\t\t\t\t\"lehrveranstaltung_id\": lehrveranstaltung_id,\n\t\t\t\t\"studiensemester_kurzbz\": studiensemester_kurzbz\n\t\t\t},\n\t\t\tconfig\n\t\t\t);\n\t}\n}","export default {\n\tgetMobilitaeten (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getMobilitaeten/' + params.id);\n\t},\n\tgetProgramsMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getProgramsMobility/');\n\t},\n\taddNewMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/insertMobility/', data);\n\t},\n\tloadMobility(bisio_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/loadMobility/' + bisio_id);\n\t},\n\tupdateMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/updateMobility/', data);\n\t},\n\tdeleteMobility(bisio_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobility/' + bisio_id);\n\t},\n\tgetLVList(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLVList/' + studiengang_kz);\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/getAllLehreinheiten/', data)\n\t},\n\tgetLvsandLesByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLvsandLesByStudent/' + uid);\n\t},\n\tgetPurposes(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getPurposes/' + params.id);\n\t},\n\tgetSupports(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getSupports/' + params.id);\n\t},\n\tgetListPurposes() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListPurposes/');\n\t},\n\tgetListSupports() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListSupports/');\n\t},\n\tdeleteMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilityPurpose/' + params.bisio_id, params);\n\t},\n\taddMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilityPurpose/' + params.bisio_id, params);\n\t},\n\tdeleteMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilitySupport/' + params.bisio_id, params);\n\t},\n\taddMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilitySupport/' + params.bisio_id, params);\n\t},\n\n}","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/archiv/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id)\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tgetArchivVorlagen() {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/getArchivVorlagen');\n\t},\n\tarchive(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archive',\n\t\t\tdata\n\t\t);\n\t},\n\tarchiveSigned(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archiveSigned',\n\t\t\tdata\n\t\t);\n\t},\n\tupdate(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/update', data);\n\t},\n\tdelete({akte_id, studiengang_kz}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/delete', {akte_id, studiengang_kz});\n\t}\n};\n","export default {\n\tgetDocumentsUnaccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tgetDocumentsAccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsAccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tdeleteZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteZuordnung/' + params.prestudent_id + '/' + params.dokument_kurzbz);\n\t},\n\tcreateZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/createZuordnung/'\n\t\t\t+ params.prestudent_id + '/'\n\t\t\t+ params.dokument_kurzbz);\n\t},\n\tloadAkte(akte_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/loadAkte/' + akte_id);\n\t},\n\tgetDoktypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDoktypen/');\n\t},\n\tupdateFile(akte_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/updateAkte/' + akte_id,\n\t\t\tdata);\n\t},\n\tdeleteFile(akte_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteAkte/' + akte_id);\n\t},\n\tuploadFile(prestudent_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/uploadDokument/' + prestudent_id,\n\t\t\tdata);\n\t},\n}","export default {\n\tgetAnrechnungen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getAnrechnungen/' + params.id);\n\t},\n\tgetLehrveranstaltungen(prestudent_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/' + prestudent_id);\n\t},\n\tgetBegruendungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getBegruendungen/');\n\t},\n\tgetLvsKompatibel(lv_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLvsKompatibel/' + lv_id);\n\t},\n\tgetLektoren(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLektoren/' + studiengang_kz);\n\t},\n\taddNewAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/insertAnrechnung/', data);\n\t},\n\tloadAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/loadAnrechnung/' + anrechnung_id);\n\t},\n\teditAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/updateAnrechnung/', data);\n\t},\n\tdeleteAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/anrechnungen/deleteAnrechnung/' + anrechnung_id);\n\t},\n}","export default {\n\tgetStudies(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudien/' + params.id);\n\t},\n\tgetTypenMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/');\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/');\n\t},\n\tgetStudyprograms(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/');\n\t},\n\tgetListPartner(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/');\n\t},\n\tgetStatiPrestudent(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/');\n\t},\n\tloadStudy(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/loadStudie/' + id);\n\t},\n\tinsertStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/insertStudie/', data);\n\t},\n\tupdateStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/updateStudie/', data);\n\t},\n\tdeleteStudy(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/GemeinsameStudien/deleteStudie/' + id);\n\t},\n\n}","export default {\n\tgetCourselist(url, config, params) {\n\t\t//corresponding logic controller Stundenplan.php\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStundenplan/'\n\t\t\t+ params.student_uid + '/'\n\t\t\t+ params.start_date + '/'\n\t\t\t+ params.end_date + '/'\n\t\t\t+ params.group_consecutiveHours + '/'\n\t\t\t+ params.dbStundenplanTable\n\t\t);\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStudiensemester/');\n\t},\n}","import person from \"./notiz/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetNotizen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getUid/');\n\t},\n\taddNewNotiz(form, id, formData) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(form, notiz_id, formData){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getMitarbeiter/' + event);\n\t},\n\tisBerechtigt(id, type_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/isBerechtigt/');\n\t}\n}","import person from \"./betriebsmittel/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetAllBetriebsmittel(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/' + params.type + '/' + params.id);\n\t},\n\taddNewBetriebsmittel(form, person_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/' +\n\t\t\tperson_id, formData\n\t\t);\n\t},\n\tloadBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/' + betriebsmittelperson_id);\n\t},\n\tupdateBetriebsmittel(form, betriebsmittelperson_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/' + betriebsmittelperson_id,\n\t\t\tformData);\n\t},\n\tdeleteBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/' +\tbetriebsmittelperson_id);\n\t},\n\tgetTypenBetriebsmittel(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/');\n\t},\n\tloadInventarliste(query){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/' +\tquery);\n\t}\n}","export default {\n\tupdatePersonUnrulyStatus(person_id, unrulyParam) {\n\n\t\ttry {\n\t\t\tconst payload = {person_id, unruly: unrulyParam}\n\t\t\tconst url = '/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus';\n\t\t\treturn this.$fhcApi.post(url, payload, null);\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t},\n\tfilterPerson(payload, base = ''){\n\n\t\ttry {\n\t\t\tconst url = base + '/api/frontend/v1/checkperson/CheckPerson/filterPerson';\n\t\t\treturn axios.post(url, payload)\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t}\n}","export default {\n getContentID(ort_kurbz) {\n\t\treturn this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Ort/ContentID\",\n\t\t\t{ ort_kurzbz: ort_kurbz }\n\t\t);\n\t},\n\tgetRooms(datum, von, bis, typ, personenanzahl = 0) {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getRooms\",\n\t\t\t{ datum, von, bis, typ, personenanzahl }\n\t\t);\n\t},\n\tgetRoomTypes() {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getTypes\"\n\t\t);\n\t}\n}","export default {\n content(content_id, version=null, sprache=null, sichtbar=null) {\n return this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/content\",\n\t\t\t{ \n\t\t\t\tcontent_id: content_id,\n\t\t\t\t...(version?{version}:{}),\n\t\t\t\t...(sprache?{sprache}:{}),\n\t\t\t\t...(sichtbar?{sichtbar}:{}),\n }\n );\n },\n\t//api function used for the news View that renders the html\n\tgetNews(page = 1, page_size = 10, sprache) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNews\",\n\t\t\t{\n\t\t\t\tpage,\n\t\t\t\tpage_size,\n\t\t\t\tsprache,\n\t\t\t},\n\t\t);\n\t},\n\t//api function used for the widget component\n\tnews(limit) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/news\",\n\t\t\t{\n\t\t\t\tlimit: limit\n\t\t\t}\n\t\t);\n\t},\n\tgetNewsRowCount: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNewsRowCount\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetNewsExtra: function(){\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getStudiengangInfoForNews\",\n\t\t\t{}\n\t\t);\n\t}\n }","export default {\n getStudentenMail(lehreinheit_id) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Lehre/lvStudentenMail\",\n { lehreinheit_id: lehreinheit_id }\n );\n },\n\tgetLvInfo(studiensemester_kurzbz, lehrveranstaltung_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/LV/${studiensemester_kurzbz}/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentPruefungen(lehrveranstaltung_id){\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentProjektarbeiten(uid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getStudentProjektarbeiten/${uid}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentProjektabgaben(detail) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getStudentProjektabgaben`\n\t\t\t, {\n\t\t\t\tprojektarbeit_id: detail.projektarbeit_id,\n\t\t\t\tstudent_uid: detail.student_uid\n\t\t\t}\n\t\t);\n\t},\n\tpostStudentProjektarbeitEndupload(formData) {\n\t\tconst url = '/api/frontend/v1/Lehre/postStudentProjektarbeitEndupload';\n\t\tconst headers = {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\treturn this.$fhcApi.post(url, formData, headers)\n\t},\n\tpostStudentProjektarbeitZwischenabgabe(formData) {\n\t\tconst url = '/api/frontend/v1/Lehre/postStudentProjektarbeitZwischenabgabe';\n\t\tconst headers = {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\treturn this.$fhcApi.post(url, formData, headers)\n\t},\n\tgetStudentProjektarbeitAbgabeFile(paabgabe_id, student_uid) {\n\t\tconst url = `/Cis/Abgabetool/getStudentProjektarbeitAbgabeFile?paabgabe_id=${paabgabe_id}&student_uid=${student_uid}`;\n\n\t\twindow.location = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + url\n\t},\n\tgetMitarbeiterProjektarbeiten(uid, all) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/getMitarbeiterProjektarbeiten?showall=${all}`\n\t\t\t, {}\n\t\t);\n\t},\n\tpostProjektarbeitAbgabe(termin) {\n\t\tconst payload = {\n\t\t\tpaabgabe_id: termin.paabgabe_id,\n\t\t\tpaabgabetyp_kurzbz: termin.bezeichnung.paabgabetyp_kurzbz,\n\t\t\tdatum: termin.datum,\n\t\t\tfixtermin: termin.fixtermin,\n\t\t\tinsertvon: termin.insertvon,\n\t\t\tkurzbz: termin.kurzbz,\n\t\t\tprojektarbeit_id: termin.projektarbeit_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/postProjektarbeitAbgabe';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t\t\n\t},\n\tdeleteProjektarbeitAbgabe(paabgabe_id) {\n\t\tconst payload = {\n\t\t\tpaabgabe_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/deleteProjektarbeitAbgabe';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t},\n\tpostSerientermin(datum, paabgabetyp_kurzbz, bezeichnung, kurzbz, projektarbeit_ids) {\n\t\tconst payload = {\n\t\t\tdatum, paabgabetyp_kurzbz, bezeichnung, kurzbz, projektarbeit_ids\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/postSerientermin';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t},\n\tfetchDeadlines(person_id) {\n\t\tconst payload = {\n\t\t\tperson_id\n\t\t}\n\t\tconst url = '/api/frontend/v1/Lehre/fetchDeadlines';\n\n\t\treturn this.$fhcApi.post(url, payload, null)\n\t}\n }","export default {\n getLvMenu(lvid, studiensemester_kurzbz) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/LvMenu/getLvMenu/${lvid}/${studiensemester_kurzbz}`,\n {}\n );\n },\n\n \n }","import person from \"./messages/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\t\tgetMessages(url, config, params) {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessages/' + params.id + '/' + params.type + '/' + params.size + '/' + params.page);\n\t\t},\n\t\tgetVorlagen(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagen/');\n\t\t},\n\t\tgetMsgVarsLoggedInUser(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/');\n\t\t},\n\t\tgetMessageVarsPerson(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessageVarsPerson/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetMsgVarsPrestudent(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsPrestudent/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPersonId(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getPersonId/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetUid(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getUid/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetDataVorlage(vorlage_kurzbz){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getDataVorlage/' + vorlage_kurzbz);\n\t\t},\n\t\tgetNameOfDefaultRecipient(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getNameOfDefaultRecipient/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPreviewText(params, data){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/getPreviewText/' + params.id + '/' + params.type_id,\n\t\t\t\tdata);\n\t\t},\n\t\tgetReplyData(messageId){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getReplyData/' + messageId);\n\t\t},\n\t\tsendMessageFromModalContext(form, id, data) {\n\t\t\treturn this.$fhcApi.post(form,'api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tsendMessage(id, data) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tdeleteMessage(messageId){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/deleteMessage/' + messageId);\n\t\t}\n}","export default {\n\tgetVorlagen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagen/');\n\t},\n\tgetVorlagenByLoggedInUser() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/');\n\t}\n}","export default {\n\n\tgetStudiensemester: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/components/Cis/Mylv/Studiensemester',\n\t\t\t{}\n\t\t);\n\t},\n\n\tgetAllStudienSemester: function (studiensemester=undefined, studiengang=undefined, semester=undefined, studienplan=undefined) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/Studium/getStudienAllSemester',\n\t\t\t{studiensemester, studiengang, semester, studienplan}\n\t\t);\n\t},\n\n\tgetStudiengaengeForStudienSemester: function (studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${studiensemester}`,\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudienplaeneBySemester: function (studiengang, studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudienplaeneBySemester`,\n\t\t\t{\n\t\t\t\tstudiengang,\n\t\t\t\tstudiensemester,\n\t\t\t}\n\t\t);\n\t},\n\tgetLvPlanForStudiensemester: function (studiensemester, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${studiensemester}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\tgetLvEvaluierungInfo: function (studiensemester_kurzbz, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getLvEvaluierungInfo/${studiensemester_kurzbz}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\t\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport search from \"./search.js\";\nimport phrasen from \"./phrasen.js\";\nimport navigation from \"./navigation.js\";\nimport filter from \"./filter.js\";\nimport studstatus from \"./studstatus.js\";\nimport profil from \"./profil.js\";\nimport profilUpdate from \"./profilUpdate.js\";\nimport lvPlan from \"./lvPlan.js\";\nimport bookmark from \"./bookmark.js\";\nimport stv from \"./stv.js\";\nimport notiz from \"./notiz.js\";\nimport betriebsmittel from \"./betriebsmittel.js\";\nimport checkperson from \"./checkperson.js\";\nimport ampeln from \"./ampeln.js\";\nimport ort from \"./ort.js\";\nimport cms from \"./cms.js\";\nimport lehre from \"./lehre.js\";\nimport addons from \"./addons.js\";\nimport messages from \"./messages.js\";\nimport vorlagen from \"./vorlagen.js\";\nimport studiengang from \"./studiengang.js\";\nimport menu from \"./menu.js\";\nimport dashboard from \"./dashboard.js\";\nimport authinfo from \"./authinfo.js\";\nimport studium from \"./studium.js\";\nimport language from \"./language.js\";\n\nexport default {\n search,\n phrasen,\n navigation,\n dashboard,\n filter,\n studstatus,\n profil,\n profilUpdate,\n lvPlan,\n bookmark,\n stv,\n notiz,\n betriebsmittel,\n checkperson,\n ampeln,\n ort,\n cms,\n lehre,\n addons,\n messages,\n vorlagen,\n addons,\n\tstudiengang,\n\tmenu,\n\tauthinfo,\n\tstudium,\n language\n};\n","export default {\n\tasync getViewData() {\n\t\tconst url = `/api/frontend/v1/Cis4FhcApi/getViewData`;\n\t\treturn this.$fhcApi.get(url, null, null)\n\t},\n}","export default {\n\n getBookmarks: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/getBookmarks`\n ,{}\n );\n },\n \n delete: function (bookmark_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/delete/${bookmark_id}`\n ,{}\n ); \n },\n\n\tupdate: function ({ bookmark_id, url, title, tag=null}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/Bookmark/update/${bookmark_id}`\n\t\t\t, {\n\t\t\t\turl: url,\n\t\t\t\ttitle: title\n\t\t\t}\n\t\t);\n\t},\n\n insert: function ({url, title, tag}) {\n return this.$fhcApi.post(\n `/api/frontend/v1/Bookmark/insert`\n ,{\n url: url,\n title: title,\n tag: tag\n }\n ); \n },\n}","export default {\n \n open: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/open`,{});\n },\n\n all: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/all`,{});\n },\n\n confirm: function (ampel_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/confirm/${ampel_id}`,{});\n },\n\n}","export default {\n\tstudiengangInformation: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Studgang/getStudiengangInfo\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudiengangByKz: function (studiengang_kz) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz\",\n\t\t\t{\n\t\t\t\t\"studiengang_kz\": studiengang_kz\n\t\t\t}\n\t\t);\n\t}\n}","export default {\n\tgetMenu: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/CisMenu/getMenu\",\n\t\t\t{}\n\t\t);\n\t}\n\n}","\nexport default {\n\tgetAuthUID() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthUID',\n\t\t\t{ }\n\t\t);\n\t},\n\tgetAuthInfo() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthInfo',\n\t\t\t{}\n\t\t);\n\t},\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAll() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/language/get');\n\t}\n};","/** TODO(chris):\n * when deleting this file be sure to\n * remove line 1 & 90 from ../plugins/Phrasen.js\n */\nimport FhcApiFactory from '../api/fhcapifactory.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$fhcApi) {\n\t\t\t/* Deprecated Code start */\n\t\t\tif (options?.factory) {\n\t\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\t\tapp.config.globalProperties.$fhcApi.factory.addEndpoints(options.factory);\n\t\t\t}\n\t\t\t/* Deprecated Code end */\n\t\t\treturn;\n\t\t}\n\n\t\tfunction _get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\n\t\tfunction _clean_return_value(response) {\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = {response};\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tconst baseURL = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\";\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(response => {\n\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\treturn _clean_return_value(response);\n\n\t\t\t// NOTE(chris): loop through errors\n\t\t\tif (response.data.errors)\n\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t);\n\n\t\t\treturn _clean_return_value(response);\n\t\t}, error => {\n\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\n\t\t\tif (error.config?.errorHandling == 'off'\n\t\t\t\t|| error.config?.errorHandling === false\n\t\t\t\t|| error.config?.errorHandling == 'success')\n\t\t\t\treturn Promise.reject(error);\n\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL, true);\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t\t}\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\terror.response.data.errors = error.response.data.errors.filter(\n\t\t\t\t\terr => (error.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, error.config)\n\t\t\t\t);\n\t\t\t\tif (!error.response.data.errors.length)\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else if (error.request) {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertError(error.message);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t}\n\n\t\t\treturn Promise.reject(error);\n\t\t});\n\n\t\tapp.config.globalProperties.$fhcApi = {\n\t\t\tgetUri(url) {\n\t\t\t\tconsole.warn('$fhcApi.getUri is DEPRECATED! Use $api.getUri instead.');\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\tconsole.warn('$fhcApi.get is DEPRECATED! Use $api.get instead.');\n\t\t\t\t[uri, params, config] = _get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\tconsole.warn('$fhcApi.post is DEPRECATED! Use $api.post instead.');\n\t\t\t\t[uri, data, config] = _get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\t_defaultErrorHandlers: {\n\t\t\t\tvalidation(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form) {\n\t\t\t\t\t\tconfig.form.clearValidation();\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.messages);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(error.messages)) {\n\t\t\t\t\t\terror.messages.forEach($fhcAlert.alertError);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (typeof error.messages == 'object') {\n\t\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t\tObject.values(error.messages).forEach(\n\t\t\t\t\t\t\t\tvalue => $fhcAlert.alertDefault(\n\t\t\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tObject.entries(error.messages).forEach(\n\t\t\t\t\t\t\t\t([key, value]) => $fhcAlert.alertDefault('error', key, value, true)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tgeneral(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form)\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.message);\n\t\t\t\t\telse if (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertError(error.message);\n\t\t\t\t},\n\t\t\t\tphp(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('warn', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('info', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\texception(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tdb(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tauth(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertDefault('error', error.message, message);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/* Deprecated Code start */\n\t\tclass FhcApiFactoryWrapper {\n\t\t\tconstructor(factorypart, root) {\n\t\t\t\tif (root === undefined) {\n\t\t\t\t\tthis.$fhcApi = {\n\t\t\t\t\t\tgetUri(url) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.getUri(url);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget(form, uri, params, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.get(form, uri, params, config);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpost(form, uri, data, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.post(form, uri, data, config);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tObject.defineProperty(this.$fhcApi, 'factory', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.factory;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tapp.config.globalProperties.$fhcApi.factory = this;\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty(this, '$fhcApi', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\treturn (root || this).$fhcApi;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.addEndpoints(factorypart, true)\n\t\t\t}\n\n\t\t\taddEndpoints(factorypart, noWarn) {\n\t\t\t\tObject.keys(factorypart).forEach(key => {\n\t\t\t\t\tObject.defineProperty(this, key, {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tif (typeof factorypart[key] == 'function')\n\t\t\t\t\t\t\t\treturn factorypart[key].bind(this);\n\t\t\t\t\t\t\treturn new FhcApiFactoryWrapper(factorypart[key], this.$fhcApi.factory);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tif (!noWarn) console.warn('$fhcApi.factory.addEndpoints() is DEPRECATED!');\n\t\t\t}\n\t\t}\n\n\t\tconst factory = new FhcApiFactoryWrapper(FhcApiFactory);\n\t\tif (options?.factory) {\n\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\tfactory.addEndpoints(options.factory);\n\t\t}\n\n\t\tapp.config.globalProperties.$fhcApi.factory = factory;\n\t\t/* Deprecated Code end */\n\t\t\n\t\tapp.provide('$fhcApi', app.config.globalProperties.$fhcApi);\n\t}\n};","import FhcAlert from './FhcAlert.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$api) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!app.config.globalProperties.$fhcAlert)\n\t\t\tapp.use(FhcAlert);\n\n\t\tfunction _send_array_or_object(errors, func) {\n\t\t\tif (Array.isArray(errors))\n\t\t\t\terrors.forEach(func);\n\t\t\telse\n\t\t\t\tObject.entries(errors).forEach(\n\t\t\t\t\t([title, errs]) => errs.forEach(\n\t\t\t\t\t\terror => func(error, title)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t}\n\t\tlet DEFAULT_ERROR_CONFIG = {\n\t\t\tsuccess: true,\n\t\t\tfail: true,\n\t\t\tcombine: {\n\t\t\t\tform: ['validation', 'general'],\n\t\t\t\ttoast: ['validation', 'general', 'not_found', 'site_failed']\n\t\t\t},\n\t\t\thandler: {\n\t\t\t\tform(form, errors) {\n\t\t\t\t\tform.clearValidation();\n\t\t\t\t\terrors.forEach(err => form.setFeedback(\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\terr.messages || err.message\n\t\t\t\t\t));\n\t\t\t\t},\n\t\t\t\tasync toast(errors) {\n\t\t\t\t\tconst $p = app.config.globalProperties.$p;\n\t\t\t\t\tif (!$p)\n\t\t\t\t\t\treturn Promise.reject('Phrasen plugin not loaded!');\n\t\t\t\t\n\t\t\t\t\tasync function _format_toast(errors) {\n\t\t\t\t\t\terrors = errors.reduce((result, err) => {\n\t\t\t\t\t\t\tswitch (err.type) {\n\t\t\t\t\t\t\tcase 'not_found':\n\t\t\t\t\t\t\tcase 'site_failed':\n\t\t\t\t\t\t\t\tif (err.message)\n\t\t\t\t\t\t\t\t\tresult[err.message] = [err.url];\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tresult._default = [err.url];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'general':\n\t\t\t\t\t\t\t\tif (!result._default)\n\t\t\t\t\t\t\t\t\tresult._default = [];\n\t\t\t\t\t\t\t\tresult._default.push(err.message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'validation':\n\t\t\t\t\t\t\t\tObject.entries(err.messages)\n\t\t\t\t\t\t\t\t\t.forEach(([field, msg]) => {\n\t\t\t\t\t\t\t\t\t\tif (!result[field])\n\t\t\t\t\t\t\t\t\t\t\tresult[field] = [];\n\t\t\t\t\t\t\t\t\t\tif (Array.isArray(msg))\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(...msg);\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(msg);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}, {});\n\t\t\t\t\t\tlet counter = 0;\n\t\t\t\t\t\tconst msgs = await Promise.all(Object.entries(errors)\n\t\t\t\t\t\t\t.sort((a, b) => ['_default'].indexOf(b[0]) - ['_default'].indexOf(a[0])) // sort _default first\n\t\t\t\t\t\t\t.map(async ([field, msgs]) => {\n\t\t\t\t\t\t\t\tif (field == '_default') {\n\t\t\t\t\t\t\t\t\tawait $p.loadCategory('dashboard');\n\t\t\t\t\t\t\t\t\tconst general = $p.t('dashboard/general');\n\t\t\t\t\t\t\t\t\tfield = '
    ' + general + '
    ';\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfield = '
    ' + field + '
    ';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcounter += msgs.length;\n\t\t\t\t\t\t\t\treturn field\n\t\t\t\t\t\t\t\t\t+ '
    '\n\t\t\t\t\t\t\t\t\t+ msgs.join('
    ')\n\t\t\t\t\t\t\t\t\t+ '
    ';\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcounter,\n\t\t\t\t\t\t\tmsgs\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet counter, msgs;\n\t\t\t\t\tif (Array.isArray(errors)) {\n\t\t\t\t\t\t({ counter, msgs } = await _format_toast(errors));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t({ counter, msgs } = await Object.entries(errors)\n\t\t\t\t\t\t\t.reduce(async (res, [title, errs]) => {\n\t\t\t\t\t\t\t\tconst result = await res;\n\t\t\t\t\t\t\t\tconst { counter, msgs } = await _format_toast(errs);\n\t\t\t\t\t\t\t\tresult.counter += counter;\n\t\t\t\t\t\t\t\tresult.msgs.push('
    '\n\t\t\t\t\t\t\t\t\t+ title\n\t\t\t\t\t\t\t\t\t+ '
    '\n\t\t\t\t\t\t\t\t\t+ msgs.join('')\n\t\t\t\t\t\t\t\t\t+ '
    ');\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}, Promise.resolve({ counter: 0, msgs: []})));\n\t\t\t\t\t}\n\n\t\t\t\t\tawait $p.loadCategory('ui');\n\t\t\t\t\tconst n_errors = $p.t('ui/n_errors', { n: counter });\n\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\tn_errors,\n\t\t\t\t\t\t'
    ' + msgs.join('') + '
    ',\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tphp(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('warn', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('info', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\tmessage = title + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\texception(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tdb(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tauth(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\ttitle += ': ' + error.message;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ttitle = error.message;\n\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (options?.errorHandling !== undefined)\n\t\t\tDEFAULT_ERROR_CONFIG = _merge_error_config(options.errorHandling);\n\t\t\n\t\tfunction get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\t\tfunction clean_return_value(response) {\n\t\t\tif (typeof response.data === 'string' || response.data instanceof String)\n\t\t\t\treturn clean_return_value({ data: response });\n\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result)\n\t\t\t\treturn {meta: {response}, data: null};\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = { response };\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tfunction _merge_error_config(config) {\n\t\t\tif (config === false || config === 'off')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false, fail: false };\n\t\t\t\n\t\t\tif (!config || config === true)\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tif (config === 'success')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, fail: false };\n\t\t\t\n\t\t\tif (config === 'fail')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false };\n\t\t\t\n\t\t\tconst { success, fail, handler, combine } = config;\n\t\t\t\n\t\t\tconfig = { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tObject.entries({ fail, success }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = value;\n\t\t\t});\n\t\t\tObject.entries({ handler, combine }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = { ...config[key], ...value };\n\t\t\t});\n\n\t\t\treturn config;\n\t\t}\n\t\tfunction get_error_handler(config) {\n\t\t\tconst result = _merge_error_config(config?.errorHandling);\n\n\t\t\tif (!config?.form) {\n\t\t\t\tresult.combine = { ...result.combine, form: [] };\n\t\t\t} else {\n\t\t\t\tconst formHandler = result.handler.form;\n\t\t\t\tresult.handler = { ...result.handler, form: errors => formHandler(config.form, errors) };\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t\tfunction get_error_list(error) {\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\treturn [{\n\t\t\t\t\t\ttype: 'not_found',\n\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t\t}];\n\t\t\t\t} else {\n\t\t\t\t\tif (error.response.data.errors == undefined) return [];\n\t\t\t\t\treturn error.response.data.errors;\n\t\t\t\t}\n\t\t\t} else if (error.request) {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'site_failed',\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t}];\n\t\t\t} else {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'script',\n\t\t\t\t\tmessage: error.message\n\t\t\t\t}];\n\t\t\t}\n\t\t}\n\t\tfunction popHandleableErrors(errorHandling, errors) {\n\t\t\tconst result = {};\n\t\t\tconst copy = [];\n\n\t\t\tif (errors == undefined) return {};\n\n\t\t\twhile (errors.length)\n\t\t\t\tcopy.push(errors.pop());\n\t\t\tfor (var error of copy) {\n\t\t\t\tlet type = error.type;\n\t\t\t\tlet newType = null;\n\t\t\t\tfor (var t in errorHandling.combine) {\n\t\t\t\t\tlet newTypeCombinesType = errorHandling\n\t\t\t\t\t\t.combine[t]\n\t\t\t\t\t\t.includes(type);\n\t\t\t\t\tlet newTypeHasHandler = errorHandling.handler[t];\n\t\t\t\t\tif (newTypeCombinesType && newTypeHasHandler) {\n\t\t\t\t\t\tnewType = t;\n\t\t\t\t\t\tif (newType == 'form')\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (newType)\n\t\t\t\t\ttype = newType;\n\t\t\t\tconst handler = errorHandling.handler[type];\n\t\t\t\tif (handler) {\n\t\t\t\t\tif (!result[type])\n\t\t\t\t\t\tresult[type] = [];\n\t\t\t\t\tif (Array.isArray(error))\n\t\t\t\t\t\tresult[type].push(...error);\n\t\t\t\t\telse\n\t\t\t\t\t\tresult[type].push(error);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\terrors.push(error);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t+ FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(\n\t\t\tresponse => {\n\t\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\t\treturn clean_return_value(response);\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\tif (response.data.errors)\n\t\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$api._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t\t);\n\n\t\t\t\treturn clean_return_value(response);\n\t\t\t},\n\t\t\terror => {\n\t\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\n\t\t\t\tconst errorConfig = get_error_handler(error.config);\n\n\t\t\t\tif (!errorConfig.fail)\n\t\t\t\t\treturn Promise.reject(error);\n\n\t\t\t\tconst remaining = get_error_list(error);\n\n\t\t\t\tconst errors = popHandleableErrors(errorConfig, remaining);\n\n\t\t\t\tfor (var type in errors) {\n\t\t\t\t\terrorConfig.handler[type](errors[type]);\n\t\t\t\t}\n\n\t\t\t\tif (remaining.length)\n\t\t\t\t\treturn Promise.reject(error);\n\t\t\t\t\n\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\t\t\t}\n\t\t);\n\n\t\tapp.config.globalProperties.$api = {\n\t\t\tgetUri(url) {\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\t[uri, params, config] = get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\t[uri, data, config] = get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\tcall(factory, configoverwrite, form) {\n\t\t\t\tif (Array.isArray(factory)) {\n\t\t\t\t\tconst $api = app.config.globalProperties.$api;\n\n\t\t\t\t\treturn Promise\n\t\t\t\t\t\t.allSettled(factory.map((config, index) => {\n\t\t\t\t\t\t\tif (!Array.isArray(config))\n\t\t\t\t\t\t\t\tconfig = ['#' + index, config];\n\t\t\t\t\t\t\treturn $api.call(config[1], {\n\t\t\t\t\t\t\t\terrorHeader: config[0],\n\t\t\t\t\t\t\t\terrorHandling: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}))\n\t\t\t\t\t\t.then(result => {\n\t\t\t\t\t\t\tconst [ , , config ] = get_config(form, undefined, undefined, configoverwrite || {});\n\t\t\t\t\t\t\tconst errorConfig = get_error_handler(config);\n\n\t\t\t\t\t\t\tif (!errorConfig.success && !errorConfig.fail) {\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst typedErrors = {};\n\t\t\t\t\t\t\tfor (var res of result) {\n\t\t\t\t\t\t\t\tconst [ allowed, item ] = res.status === 'fulfilled'\n\t\t\t\t\t\t\t\t\t? [ errorConfig.success, res.value ]\n\t\t\t\t\t\t\t\t\t: [ errorConfig.fail, res.reason ];\n\t\t\t\t\t\t\t\tif (!allowed)\n\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\tconst errors = popHandleableErrors(errorConfig, get_error_list(item));\n\n\t\t\t\t\t\t\t\tfor (var type in errors) {\n\t\t\t\t\t\t\t\t\tif (!typedErrors[type])\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type] = {\n\t\t\t\t\t\t\t\t\t\t\t[item.config.errorHeader]: errors[type]\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type][item.config.errorHeader] = errors[type];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfor (var errType in typedErrors) {\n\t\t\t\t\t\t\t\terrorConfig.handler[errType](typedErrors[errType]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tlet { method, url, params, config } = factory;\n\t\t\t\tif (configoverwrite !== undefined) {\n\t\t\t\t\tconfig = configoverwrite;\n\t\t\t\t}\n\t\t\t\tif (!method) {\n\t\t\t\t\tmethod = 'get';\n\t\t\t\t}\n\t\t\t\tif (method.toLowerCase)\n\t\t\t\t\tmethod = method.toLowerCase();\n\t\t\t\tif (method == 'get') {\n\t\t\t\t\treturn this.get(form, url, params, config);\n\t\t\t\t} else if (method == 'post') {\n\t\t\t\t\treturn this.post(form, url, params, config);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"FhcApi: method not allowed:\", method);\n\t\t\t\t}\n\t\t\t},\n\t\t\tgetErrorHandler(config) {\n\t\t\t\treturn get_error_handler(config);\n\t\t\t}\n\t\t};\n\n\t\tapp.provide('$api', app.config.globalProperties.$api);\n\t}\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/loadModule/' + category\n\t\t};\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst params = {categories, language}\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/phrasen/setLanguage',\n\t\t\tparams\n\t\t};\n\t},\n\tgetLanguage() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getLanguage'\n\t\t};\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getAllLanguages'\n\t\t};\n\t}\n};","import OldFhcApi from '../plugin/OldFhcApi.js'; // TODO(chris): remove at some point\nimport PluginsApi from './Api.js';\nimport ApiPhrasen from '../api/factory/phrasen.js';\n\nconst categories = Vue.reactive({});\nconst loadingModules = {};\nlet user_language = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language);\nexport let user_locale = Vue.computed(()=>{\n\tif(!user_language.value) return null;\n\treturn FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(language => language.sprache == user_language.value).LC_Time;\n});\n\nfunction extractCategory(obj, category) {\n\treturn obj.filter(e => e.category == category).reduce((res, elem) => {\n\t\tif (!res[elem.phrase])\n\t\t\tres[elem.phrase] = elem.text;\n\t\treturn res;\n\t}, {});\n}\nfunction getValueForLoadedPhrase(category, phrase, params) {\n\tlet result = categories[category][phrase];\n\tif (!result)\n\t\treturn '<< PHRASE ' + phrase + '>>';\n\tif (params)\n\t\tresult = result.replace(/\\{([^}]*)\\}/g, (match, p1) => params[p1] === undefined ? match : params[p1]);\n\treturn result;\n}\n\nconst phrasen = {\n\tuser_language,\n\tuser_locale,\n\tsetLanguage(language) {\n\t\tconst catArray = Object.keys(categories)\n\t\treturn this.config.globalProperties.$api\n\t\t\t.call(ApiPhrasen.setLanguage(catArray, language))\n\t\t\t.then(res => {\n\t\t\t\tres.data.forEach(row => {\n\t\t\t\t\tcategories[row.category][row.phrase] = row.text\n\t\t\t\t})\n\n\t\t\t\t// update the reactive data that holds the current active user_language\n\t\t\t\tuser_language.value = language;\n\n\t\t\t\treturn res\n\t\t\t})\n\t},\n\tloadCategory(category) {\n\t\tif (Array.isArray(category))\n\t\t\treturn Promise.all(category.map(this.config.globalProperties\n\t\t\t\t.$p.loadCategory));\n\n\t\tif (!loadingModules[category])\n\t\t\tloadingModules[category] = this.config.globalProperties.$api\n\t\t\t\t.call(ApiPhrasen.loadCategory(category))\n\t\t\t\t.then(res => res?.data ? extractCategory(res.data, category) : {})\n\t\t\t\t.then(res => {\n\t\t\t\t\tcategories[category] = res;\n\t\t\t\t});\n\t\treturn loadingModules[category];\n\t},\n\tt_ref(category, phrase, params) {\n\t\tconsole.warn('deprecated');\n\t\treturn Vue.computed(() => this.t(category, phrase, params));\n\t},\n\tt(category, phrase, params) {\n\t\tif (params === undefined && (\n\t\t\t(Array.isArray(category) && category.length == 2) ||\n\t\t\t(category.split && category.split('/').length == 2))\n\t\t\t) {\n\t\t\tparams = phrase;\n\t\t\t[category, phrase] = category.split ? category.split('/') : category;\n\t\t}\n\t\tif (phrase === undefined) {\n\t\t\tconsole.error('invalid input', category, phrase, params);\n\t\t\treturn '';\n\t\t}\n\t\tlet val = Vue.computed(() => {\n\t\t\tif (!categories[category])\n\t\t\t\treturn '';\n\t\t\treturn getValueForLoadedPhrase(category, phrase, params);\n\t\t});\n\t\tif (!categories[category])\n\t\t\tthis.loadCategory(category);\n\t\treturn val.value;\n\t}\n};\n\nexport default {\n\tinstall(app, options) {\n\t\tif (!app.config.globalProperties.$fhcApi)\n\t\t\tapp.use(OldFhcApi); // TODO(chris): remove at some point\n\t\tif (!app.config.globalProperties.$api)\n\t\t\tapp.use(PluginsApi);\n\t\tapp.config.globalProperties.$p = {\n\t\t\tt: phrasen.t,\n\t\t\tloadCategory: cat => phrasen.loadCategory.call(app, cat),\n\t\t\tsetLanguage: lang => phrasen.setLanguage.call(app, lang),\n\t\t\tuser_language: user_language,\n\t\t\tuser_locale,\n\t\t\tt_ref: phrasen.t_ref\n\t\t};\n\t\tapp.provide('$p', app.config.globalProperties.$p);\n\t}\n}","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n//--------------------------------------------------------------------------------------------------------------------\n// Configs\n\n// To see debug messages into the browser console set this parameter as true\nconst CORE_REST_CLIENT_DEBUG = false;\n\n// Default timeout (milliseconds)\nconst CORE_REST_CLIENT_TIMEOUT = 5000;\n\n//--------------------------------------------------------------------------------------------------------------------\n// Constants\n\n// Success\nconst CORE_REST_CLIENT_SUCCESS = 0;\n\n// Properties present in a response\nconst CORE_REST_CLIENT_ERROR = \"error\";\nconst CORE_REST_CLIENT_RETVAL = \"retval\";\n\n// HTTP method parameters\nconst CRC_HTTP_GET_METHOD = \"get\";\nconst CRC_HTTP_POST_METHOD = \"post\";\n\n/**\n * Definition and initialization of the object CoreRESTClient\n */\nexport const CoreRESTClient = {\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Public methods\n\n\t/**\n\t * Performs a call using the HTTP GET method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tget: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_GET_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Performs a call using the HTTP POST method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tpost: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_POST_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Checks if the response is a success\n\t */\n\tisSuccess: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR)\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL) && response.error == CORE_REST_CLIENT_SUCCESS)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Checks if the response is an error\n\t */\n\tisError: function(response) {\n\t\treturn !CoreRESTClient.isSuccess(response);\n\t},\n\n\t/**\n\t * Checks if the response has data\n\t */\n\thasData: function(response) {\n\n\t\tif (CoreRESTClient.isSuccess(response))\n\t\t{\n\t\t\tif ((typeof response[CORE_REST_CLIENT_RETVAL] === \"object\" && Object.keys(response[CORE_REST_CLIENT_RETVAL]).length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"array\" && response[CORE_REST_CLIENT_RETVAL].length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"string\" && response[CORE_REST_CLIENT_RETVAL].trim() != \"\")\n\t\t\t\t|| typeof response[CORE_REST_CLIENT_RETVAL] === \"number\")\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Retrives data from response object\n\t */\n\tgetData: function(response) {\n\n\t\tif (CoreRESTClient.hasData(response))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Retrives error message from response object\n\t */\n\tgetError: function(response) {\n\n\t\tif (typeof response === \"object\"\n\t\t\t&& Object.keys(response).length > 0\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn \"Generic error\";\n\t},\n\n\t/**\n\t * Retrives code from response object\n\t */\n\tgetErrorCode: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_ERROR];\n\t\t}\n\n\t\treturn 1; // Generic error\n\t},\n\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Private methods\n\n\t/**\n\t * Generate the router URI using the connection parameters\n\t */\n\t_generateRouterURI: function(wsURL) {\n\t\tvar uri = null;\n\n\t\t// Checks if global JS object FHC_JS_DATA_STORAGE_OBJECT exists\n\t\tif (typeof FHC_JS_DATA_STORAGE_OBJECT !== \"undefined\")\n\t\t{\n\t\t\turi = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\" + wsURL;\n\t\t}\n\n\t\treturn uri;\n\t},\n\n\t/**\n\t * Method to print debug info after a controller has been called\n\t */\n\t_printDebug: function(parameters, response, errorThrown) {\n\n\t\tif (CORE_REST_CLIENT_DEBUG === true) // If global const CORE_REST_CLIENT_DEBUG is true, but really true!\n\t\t{\n\t\t\t// Print info about called controller\n\t\t\tconsole.log(\"Called controller: \" + parameters.remoteController);\n\t\t\tconsole.log(\"Call parameters:\"); // parameters given to this call\n\t\t\tconsole.log(parameters);\n\n\t\t\tif (response != null) // if there is a response...\n\t\t\t{\n\t\t\t\tconsole.log(\"Controller Response:\");\n\t\t\t\tconsole.log(response); // ...print it\n\t\t\t}\n\t\t\tif (errorThrown != null) // if there is a jQuery error...\n\t\t\t{\n\t\t\t\tconsole.log(\"jQuery error:\");\n\t\t\t\tconsole.log(errorThrown); // ...print it\n\t\t\t}\n\t\t\tconsole.log(\"--------------------------------------------------------------------------------------------\");\n\t\t}\n\t},\n\n\t/**\n\t * Performs a call to the server were the CI PHP layer is running\n\t * - wsURL: alias of the core controller to call\n\t * - wsParameters: parameters to give to the called controller\n\t * - type: POST or GET HTTP method\n\t * - axiosParameters: an object to configure the axios call\n\t */\n\t_axiosCall: function(wsURL, wsParameters, type, axiosParameters) {\n\n\t\t// Axios config object\n\t\tlet axiosCallObj = {\n\t\t\tmethod: type,\n\t\t\turl: CoreRESTClient._generateRouterURI(wsURL),\n\t\t\ttimeout: CORE_REST_CLIENT_TIMEOUT // default time out\n\t\t};\n\n\t\t// The ajax call is HTTP GET\n\t\tif (type == CRC_HTTP_GET_METHOD)\n\t\t{\n\t\t\taxiosCallObj.params = wsParameters;\n\t\t}\n\t\t// The ajax call is HTTP POST\n\t\telse\n\t\t{\n\t\t\taxiosCallObj.data = wsParameters;\n\t\t}\n\n\t\t// Check if axiosParameters is an object\n\t\tif (typeof axiosParameters === \"object\")\n\t\t{\n\t\t\t// And then copies the its properties into axiosCallObj\n\t\t\tfor (var prop in axiosParameters) axiosCallObj[prop] = axiosParameters[prop];\n\t\t}\n\n\t\t// Perform the ajax call via axios\n\t\treturn axios(axiosCallObj);\n\t}\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n * \n * @usage:\n * Preperations:\n * Be sure to have PrimeVue loaded with the toast and confirmdialog\n * components as primevue variable\n * Install:\n * Import this Plugin and install it with the app.use() function.\n * Use:\n * In your component you can call now the global property $fhcAlert\n * which has the following functions:\n * \n * alertSuccess\n * ------------\n * Displays a success message\n * @param string\tmessage\n * @return void\n * \n * alertInfo\n * ---------\n * Displays an info message\n * @param string\tmessage\n * @return void\n * \n * alertWarning\n * ------------\n * Displays a warning\n * @param string\tmessage\n * @return void\n * \n * alertError\n * ----------\n * Displays an error\n * @param string\tmessage\n * @return void\n * \n * alertSystemError\n * ----------------\n * Displays an alert with the error details and a button to mail\n * the error to the Support Team\n * @param string\tmessage\n * @return void\n * \n * confirmDelete\n * -------------\n * Displays a confirmation dialog and returns a Promise which resolves\n * with true or false depending und the pressed button.\n * @return Promise\n * \n * alertDefault\n * ------------\n * Displays an alert\n * @param string\tseverity\t\tcan be 'success', 'info', 'warning', 'error'\n * @param string\ttitle\n * @param string\tmessage\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * alertMultiple\n * -------------\n * Displays multiple alerts\n * @param array\t\tmessageArray\n * @param string\tseverity\t\t(optional) defaults to 'info'\n * @param string\ttitle\t\t\t(optional) defaults to 'Info'\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * handleSystemError\n * -----------------\n * Automatiticly determine how to display an system error and display it.\n * This would be used in a catch block of an ajax call.\n * @param mixed\t\terror\n * @return void\n * \n * handleSystemMessage\n * -------------------\n * Automatiticly determine how to display a message and display it.\n * @param mixed\t\tmessage\n * @return void\n */\nimport PvConfig from \"../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js\";\nimport PvToast from \"../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js\";\nimport PvConfirm from \"../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js\";\nimport PvConfirmationService from \"../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js\";\nimport FhcPhrasen from \"./Phrasen.js\";\n\nimport {CoreRESTClient} from '../RESTClient.js';\n\nconst helperAppContainer = document.createElement('div');\n\nconst helperApp = Vue.createApp({\n\tname: \"FhcAlertApp\",\n\tcomponents: {\n\t\tPvToast,\n\t\tPvConfirm\n\t},\n\tmethods: {\n\t\tmailToUrl(slotProps) {\n\t\t\tlet mailTo = FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto;\n\t\t\tlet subject = 'Meldung%20Systemfehler';\n\t\t\tlet body = `\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: ` + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method + `%0D%0A\n\t\t\t\tFehler Meldung: ` + slotProps.message.detail + `%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!`\n\n\t\t\treturn \"mailto:\" + mailTo + \"?subject=\" + subject + \"&body=\" + body;\n\t\t},\n\t\topenMessagecard(e) {\n\t\t\tbootstrap.Collapse.getOrCreateInstance(e.target.getAttribute('href')).toggle();\n\t\t}\n\t},\n\tunmounted() {\n\t\thelperAppContainer.parentElement.removeChild(helperAppContainer);\n\t},\n\tcomputed: {\n\t\tshowmaillink: function() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto !== '';\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t`\n});\n\nhelperApp.use(PvConfig);\nhelperApp.use(PvConfirmationService);\n//helperApp.use(FhcPhrasen);\n\nconst helperAppInstance = helperApp.mount(helperAppContainer);\n\ndocument.body.appendChild(helperAppContainer);\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (!app.config.globalProperties.$p)\n\t\t\tapp.use(FhcPhrasen);\n\n\t\tconst $fhcAlert = {\n\t\t\talertSuccess(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSuccess);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'success', summary: 'Info', detail: message, life: 1000});\n\t\t\t},\n\t\t\talertInfo(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertInfo);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'info', summary: 'Info', detail: message, life: 3000 });\n\t\t\t},\n\t\t\talertWarning(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertWarning);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'warn', summary: 'Achtung', detail: message});\n\t\t\t},\n\t\t\talertError(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertError);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'error', summary: 'Achtung', detail: message });\n\t\t\t},\n\t\t\talertSystemError(message) {\n\t\t\t\t//TODO(Manu) for translation of content of template: restructure in data\n\t\t\t\t//and update definitions with translations\n\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSystemError);\n\t\t\t\thelperAppInstance.$refs.alert.add({\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t\tsummary: Vue.computed(() => app.config.globalProperties.$p.t('alert/systemerror')),\n\t\t\t\t\tdetail: message});\n\t\t\t},\n\t\t\tconfirmDelete() {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: 'fhcAlertConfirm',\n\t\t\t\t\t\theader: Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: Vue.computed(() => app.config.globalProperties.$p.t('alert/confirm_delete')),\n\t\t\t\t\t\tacceptLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/loeschen')),\n\t\t\t\t\t\tacceptClass: 'p-button-danger',\n\t\t\t\t\t\trejectLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: 'p-button-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tconfirm(options) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: options?.group ?? 'fhcAlertConfirm',\n\t\t\t\t\t\theader: options?.header ?? Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: options?.message ?? '',\n\t\t\t\t\t\tacceptLabel: options?.acceptLabel ?? 'Ok',\n\t\t\t\t\t\tacceptClass: options?.acceptClass ?? 'btn btn-primary',\n\t\t\t\t\t\trejectLabel: options?.rejectLabel ?? Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: options?.rejectClass ?? 'btn btn-outline-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\talertDefault(severity, title, message, sticky = false, html = false) {\n\t\t\t\tlet options = { severity: severity, summary: title, detail: message, html };\n\t\t\t\t\n\t\t\t\tif (!sticky)\n\t\t\t\t\toptions.life = 3000;\n\n\t\t\t\thelperAppInstance.$refs.toast.add(options);\n\t\t\t},\n\t\t\talertMultiple(messageArray, severity = 'info', title = 'Info', sticky = false, html = false){\n\t\t\t\t// Check, if array has only string values\n\t\t\t\tif (messageArray.every(message => typeof message === 'string')) {\n\t\t\t\t\tmessageArray.forEach(message => this.alertDefault(severity, title, message, sticky, html));\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\thandleSystemError(error) {\n\t\t\t\t// don't show an error message to the user if the error was an aborted request\n\t\t\t\tif(error.hasOwnProperty('name') && error.name.toLowerCase() === \"AbortError\".toLowerCase())\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is string\n\t\t\t\tif (typeof error === 'string')\n\t\t\t\t\treturn $fhcAlert.alertSystemError(error);\n\n\t\t\t\t// Error is array of strings\n\t\t\t\tif (Array.isArray(error) && error.every(err => typeof err === 'string'))\n\t\t\t\t\treturn error.every($fhcAlert.alertSystemError);\n\n\t\t\t\t// Error has been handled already\n\t\t\t\tif (error.hasOwnProperty('handled') && error.handled)\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is object\n\t\t\t\tif (typeof error === 'object' && error !== null) {\n\t\t\t\t\tlet errMsg = '';\n\n\n\t\t\t\t\tif (error.hasOwnProperty('response') && error.response?.data?.retval)\n\t\t\t\t\t\terrMsg += 'Error Message: ' + (error.response.data.retval.message || error.response.data.retval) + '\\r\\n';\n\t\t\t\t\telse if (error.hasOwnProperty('message'))\n\t\t\t\t\t\terrMsg += 'Error Message: ' + error.message.toUpperCase() + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('config') && error.config.hasOwnProperty('url'))\n\t\t\t\t\t\terrMsg += 'Error ConfigURL: ' + error.config.url + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('stack'))\n\t\t\t\t\t\terrMsg += 'Error Stack: ' + error.stack + '\\r\\n';\n\t\t\t\t\t\n\t\t\t\t\t// Fallback object error message\n\t\t\t\t\tif (errMsg == '')\n\t\t\t\t\t\terrMsg = 'Error Message: ' + JSON.stringify(error) + '\\r\\n';\n\n\t\t\t\t\terrMsg += 'Error Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\n\t\t\t\t\treturn $fhcAlert.alertSystemError(errMsg);\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\thandleSystemMessage(message) {\n\t\t\t\t// Message is string\n\t\t\t\tif (typeof message === 'string')\n\t\t\t\t\treturn $fhcAlert.alertWarning(message);\n\n\t\t\t\t// Message is array of strings\n\t\t\t\tif (Array.isArray(message)) {\n\t\t\t\t\t// If Array has only Strings\n\t\t\t\t\tif (message.every(msg => typeof msg === 'string'))\n\t\t\t\t\t\treturn message.every($fhcAlert.alertWarning);\n\n\t\t\t\t\t// If Array has only Objects\n\t\t\t\t\tif (message.every(msg => typeof msg === 'object') && msg !== null) {\n\t\t\t\t\t\treturn message.every(msg => {\n\t\t\t\t\t\t\tif (msg.hasOwnProperty('data') && msg.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(msg.data.retval));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(msg));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Message is Object with data property\n\t\t\t\tif (typeof message === 'object' && message !== null){\n\t\t\t\t\tif (message.hasOwnProperty('data') && message.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t// NOTE(chris): changed: alertSystemError => alertWarning\n\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(message.data.retval));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(message));\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\tresetFormValidation(form) {\n\t\t\t\tconst event = new Event('fhc-form-reset');\n\t\t\t\tform.querySelectorAll(['[data-fhc-form-validate],[data-fhc-form-error]']).forEach(el => el.dispatchEvent(event));\n\t\t\t\t/*const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\tif (alert) {\n\t\t\t\t\talert.innerHTML = '';\n\t\t\t\t\talert.classList.add('d-none');\n\t\t\t\t}\n\t\t\t\tform.querySelectorAll('.invalid-feedback').forEach(n => n.remove());\n\t\t\t\tform.querySelectorAll('.is-invalid').forEach(n => n.classList.remove('is-invalid'));\n\t\t\t\tform.querySelectorAll('.is-valid').forEach(n => n.classList.remove('is-valid'));*/\n\t\t\t},\n\t\t\thandleFormValidation(error, form) {\n\t\t\t\tif (form === undefined) {\n\t\t\t\t\tif (error && error.nodeType === Node.ELEMENT_NODE)\n\t\t\t\t\t\treturn err => $fhcAlert.handleFormValidation(err, error);\n\t\t\t\t} else {\n\t\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t\tif (typeof errors !== \"object\")\n\t\t\t\t\t\t\terrors = error.response.data;\n\n\t\t\t\t\t\t// NOTE(chris): reset form validation\n\t\t\t\t\t\t$fhcAlert.resetFormValidation(form);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// NOTE(chris): set form input validation\n\t\t\t\t\t\tconst notFound = Object.entries(errors).filter(([key, detail]) => {\n\t\t\t\t\t\t\tconst input = form.querySelector('[data-fhc-form-validate=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\tinput.dispatchEvent(new CustomEvent('fhc-form-invalidate', {detail}));\n\n\t\t\t\t\t\t\t/*const input = form.querySelector('[name=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\tinput.classList.add('is-invalid');\n\t\t\t\t\t\t\tconst feedback = document.createElement('div');\n\t\t\t\t\t\t\tfeedback.classList.add('invalid-feedback');\n\t\t\t\t\t\t\tfeedback.innerHTML = detail;\n\t\t\t\t\t\t\tinput.after(feedback);*/\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}).map(arr => arr[1]);\n\n\n\t\t\t\t\t\t//const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\t\t\tconst alert = form.querySelector('[data-fhc-form-error]');\n\t\t\t\t\t\tif (alert && notFound.length) {\n\t\t\t\t\t\t\talert.dispatchEvent(new CustomEvent('fhc-form-error', {detail: notFound}));\n\t\t\t\t\t\t\t/*notFound.forEach(txt => {\n\t\t\t\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\t\t\t\tp.innerHTML = txt;\n\t\t\t\t\t\t\t\talert.append(p);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (notFound.length) {\n\t\t\t\t\t\t\t\talert.lastChild.classList.add('mb-0');\n\t\t\t\t\t\t\t\talert.classList.remove('d-none');\n\t\t\t\t\t\t\t}*/\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnotFound.forEach($fhcAlert.alertError);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t$fhcAlert.alertError((typeof errors === 'object') ? Object.values(errors) : errors);\n\t\t\t\t} else {\n\t\t\t\t\t$fhcAlert.handleSystemError(error);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tapp.config.globalProperties.$fhcAlert = $fhcAlert;\n\t\tapp.provide('$fhcAlert', app.config.globalProperties.$fhcAlert);\n\t}\n}","console.warn('plugin/FhcApi.js is DEPRECATED! Use plugins/Api.js instead.');\nimport FhcAlert from '../plugins/FhcAlert.js';\nimport PluginsApi from '../plugins/Api.js';\nimport FhcApiFactory from '../api/fhcapifactory.js';\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$fhcApi) {\n\t\t\t/* Deprecated Code start */\n\t\t\tif (options?.factory) {\n\t\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\t\tapp.config.globalProperties.$fhcApi.factory.addEndpoints(options.factory);\n\t\t\t}\n\t\t\t/* Deprecated Code end */\n\t\t\treturn;\n\t\t}\n\t\tapp.use(FhcAlert);\n\t\tapp.use(PluginsApi);\n\n\t\tfunction _get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\n\t\tfunction _clean_return_value(response) {\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result)\n\t\t\t\treturn {meta: {response}, data: null};\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = {response};\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tconst baseURL = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\";\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(response => {\n\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\treturn _clean_return_value(response);\n\n\t\t\t// NOTE(chris): loop through errors\n\t\t\tif (response.data.errors)\n\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t);\n\n\t\t\treturn _clean_return_value(response);\n\t\t}, error => {\n\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\n\t\t\tif (error.config?.errorHandling == 'off'\n\t\t\t\t|| error.config?.errorHandling === false\n\t\t\t\t|| error.config?.errorHandling == 'success')\n\t\t\t\treturn Promise.reject(error);\n\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL, true);\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t\t}\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\terror.response.data.errors = error.response.data.errors.filter(\n\t\t\t\t\terr => (error.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, error.config)\n\t\t\t\t);\n\t\t\t\tif (!error.response.data.errors.length)\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else if (error.request) {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertError(error.message);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t}\n\n\t\t\treturn Promise.reject(error);\n\t\t});\n\n\t\tapp.config.globalProperties.$fhcApi = {\n\t\t\tgetUri(url) {\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\t[uri, params, config] = _get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\t[uri, data, config] = _get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\t_defaultErrorHandlers: {\n\t\t\t\tvalidation(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form) {\n\t\t\t\t\t\tconfig.form.clearValidation();\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.messages);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(error.messages)) {\n\t\t\t\t\t\terror.messages.forEach($fhcAlert.alertError);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (typeof error.messages == 'object') {\n\t\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t\tObject.values(error.messages).forEach(\n\t\t\t\t\t\t\t\tvalue => $fhcAlert.alertDefault(\n\t\t\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tObject.entries(error.messages).forEach(\n\t\t\t\t\t\t\t\t([key, value]) => $fhcAlert.alertDefault('error', key, value, true)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tgeneral(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form)\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.message);\n\t\t\t\t\telse if (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertError(error.message);\n\t\t\t\t},\n\t\t\t\tphp(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('warn', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('info', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\texception(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tdb(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tauth(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertDefault('error', error.message, message);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/* Deprecated Code start */\n\t\tclass FhcApiFactoryWrapper {\n\t\t\tconstructor(factorypart, root) {\n\t\t\t\tif (root === undefined) {\n\t\t\t\t\tthis.$fhcApi = {\n\t\t\t\t\t\tgetUri(url) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.getUri(url);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget(form, uri, params, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.get(form, uri, params, config);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpost(form, uri, data, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.post(form, uri, data, config);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tObject.defineProperty(this.$fhcApi, 'factory', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.factory;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tapp.config.globalProperties.$fhcApi.factory = this;\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty(this, '$fhcApi', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\treturn (root || this).$fhcApi;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.addEndpoints(factorypart)\n\t\t\t}\n\n\t\t\taddEndpoints(factorypart) {\n\t\t\t\tObject.keys(factorypart).forEach(key => {\n\t\t\t\t\tObject.defineProperty(this, key, {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tif (typeof factorypart[key] == 'function')\n\t\t\t\t\t\t\t\treturn factorypart[key].bind(this);\n\t\t\t\t\t\t\treturn new FhcApiFactoryWrapper(factorypart[key], this.$fhcApi.factory);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tconsole.warn('$fhcApi.factory.addEndpoints() is DEPRECATED!');\n\t\t\t}\n\t\t}\n\n\t\tconst factory = new FhcApiFactoryWrapper(FhcApiFactory);\n\t\tif (options?.factory) {\n\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\tfactory.addEndpoints(options.factory);\n\t\t}\n\n\t\tapp.config.globalProperties.$fhcApi.factory = factory;\n\t\t/* Deprecated Code end */\n\t\t\n\t\tapp.provide('$fhcApi', app.config.globalProperties.$fhcApi);\n\t}\n};","console.warn('plugin/Phrasen.js is DEPRECATED! Use plugins/Phrasen.js instead.');\nimport FhcApi from './FhcApi.js';\nimport ApiPhrasen from '../api/factory/phrasen.js';\n\nconst categories = Vue.reactive({});\nconst loadingModules = {};\nlet user_language = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language);\nexport let user_locale = Vue.computed(()=>{\n\tif(!user_language.value) return null;\n\treturn FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(language => language.sprache == user_language.value).LC_Time;\n});\n\nfunction extractCategory(obj, category) {\n\treturn obj.filter(e => e.category == category).reduce((res, elem) => {\n\t\tif (!res[elem.phrase])\n\t\t\tres[elem.phrase] = elem.text;\n\t\treturn res;\n\t}, {});\n}\nfunction getValueForLoadedPhrase(category, phrase, params) {\n\tlet result = categories[category][phrase];\n\tif (!result)\n\t\treturn '<< PHRASE ' + phrase + '>>';\n\tif (params)\n\t\tresult = result.replace(/\\{([^}]*)\\}/g, (match, p1) => params[p1] === undefined ? match : params[p1]);\n\treturn result;\n}\n\nconst phrasen = {\n\tuser_language,\n\tuser_locale,\n\tsetLanguage(language) {\n\t\tconst catArray = Object.keys(categories)\n\t\treturn this.config.globalProperties.$api\n\t\t\t.call(ApiPhrasen.setLanguage(catArray, language))\n\t\t\t.then(res => {\n\t\t\t\tres.data.forEach(row => {\n\t\t\t\t\tcategories[row.category][row.phrase] = row.text\n\t\t\t\t})\n\n\t\t\t\t// update the reactive data that holds the current active user_language\n\t\t\t\tuser_language.value = language;\n\n\t\t\t\treturn res\n\t\t\t})\n\t},\n\tloadCategory(category) {\n\t\tif (Array.isArray(category))\n\t\t\treturn Promise.all(category.map(this.config.globalProperties\n\t\t\t\t.$p.loadCategory));\n\t\tconst $fhcApi = this.config.globalProperties.$fhcApi;\n\t\tconst $fhcApiFactory = this.config.globalProperties.$fhcApiFactory;\n\t\tif (!loadingModules[category])\n\t\t\tloadingModules[category] = this.config.globalProperties.$api\n\t\t\t\t.call(\n\t\t\t\t\tApiPhrasen.loadCategory(category)\n\t\t\t\t)\n\t\t\t\t.then(res => res?.data ? extractCategory(res.data, category) : {})\n\t\t\t\t.then(res => {\n\t\t\t\t\tcategories[category] = res;\n\t\t\t\t});\n\t\treturn loadingModules[category];\n\t},\n\tt_ref(category, phrase, params) {\n\t\tconsole.warn('deprecated');\n\t\treturn Vue.computed(() => this.t(category, phrase, params));\n\t},\n\tt(category, phrase, params) {\n\t\tif (params === undefined && (\n\t\t\t(Array.isArray(category) && category.length == 2) ||\n\t\t\t(category.split && category.split('/').length == 2))\n\t\t\t) {\n\t\t\tparams = phrase;\n\t\t\t[category, phrase] = category.split ? category.split('/') : category;\n\t\t}\n\t\tif (phrase === undefined) {\n\t\t\tconsole.error('invalid input', category, phrase, params);\n\t\t\treturn '';\n\t\t}\n\t\tlet val = Vue.computed(() => {\n\t\t\tif (!categories[category])\n\t\t\t\treturn '';\n\t\t\treturn getValueForLoadedPhrase(category, phrase, params);\n\t\t});\n\t\tif (!categories[category])\n\t\t\tthis.loadCategory(category);\n\t\treturn val.value;\n\t}\n};\n\nexport default {\n\tinstall(app, options) {\n\t\tapp.use(FhcApi, options?.fhcApi || undefined);\n\t\tapp.config.globalProperties.$p = {\n\t\t\tt: phrasen.t,\n\t\t\tloadCategory: cat => phrasen.loadCategory.call(app, cat),\n\t\t\tsetLanguage: lang => phrasen.setLanguage.call(app, lang),\n\t\t\tuser_language: user_language,\n\t\t\tuser_locale,\n\t\t\tt_ref: phrasen.t_ref\n\t\t};\n\t\tapp.provide('$p', app.config.globalProperties.$p);\n\t}\n}","import {CoreNavigationCmpt} from '../components/navigation/Navigation.js';\nimport DashboardAdmin from '../components/Dashboard/Admin.js';\nimport Phrases from \"../plugin/Phrasen.js\"\n\nVue.createApp({\n name: 'DashboardAdminApp',\n data: () => ({\n appSideMenuEntries: {}\n }),\n components: {\n CoreNavigationCmpt,\n DashboardAdmin\n },\n mounted() {\n }\n}).use(Phrases).mount('#main');"],"names":["CoreFetchCmpt","emits","props","refresh","type","Boolean","apiFunction","required","Function","apiFunctionParameters","watch","newValue","oldValue","this","fetchData","data","loading","error","errorMessage","created","methods","apiFunctionResult","Promise","then","successHandler","catch","errorHandler","finally","finallyHandler","setError","response","$emit","undefined","retval","message","template","ApiNavigation","getHeader","navigation_page","method","url","params","getMenu","CoreNavigationCmpt","components","addHeaderMenuEntries","Object","addSideMenuEntries","hideTopMenu","leftNavCssClasses","String","default","headerMenu","sideMenu","computed","headerMenuEntries","hm","keys","length","description","sideMenuEntries","sm","getNavigationPage","FHC_JS_DATA_STORAGE_OBJECT","called_path","called_method","fetchCmptApiFunctionHeader","$api","call","fetchCmptApiFunctionSideMenu","fetchCmptDataFetchedHeader","fetchCmptDataFetchedMenu","getDataBsToggle","header","children","BsModal","name","modal","fullscreen","backdrop","validator","value","includes","focus","keyboard","noCloseBtn","dialogClass","Array","headerClass","bodyClass","footerClass","allowFullscreenExpand","dispose","handleUpdate","hide","show","relatedTarget","toggle","toggleFullscreen","mounted","$refs","bootstrap","Modal","popup","body","options","title","footer","slots","includedPrimevue","primevue","resolve","reject","instance","Vue","createApp","setup","h","class","ref","unmount","beforeUnmount","result","unmounted","wrapper","parentElement","removeChild","document","createElement","use","config","zIndex","overlay","Phrasen","mount","appendChild","BsAlert","mixins","onHideBsModal","onHiddenBsModal","onHidePreventedBsModal","onShowBsModal","onShownBsModal","modalContainer","msg","bind","BsPrompt","placeholder","BsConfirm","DashboardAdminEdit","dashboard_id","Number","dashboard_kurzbz","beschreibung","kurzbz","desc","sendDelete","DashboardAdminWidgets","widgets","apiurl","app_root","ci_router","sendChange","widget_id","allow","find","el","allowed","axios","post","action","err","console","get","map","JSON","parse","arguments","GridItem","inject","item","active","dragAction","dragging","registerDragAction","evt","target","hasAttribute","getAttribute","parent","closest","tryDragStart","touchDragEnd","touchStart","event","touchMove","preventDefault","GridLogic","constructor","w","grid","isFreeSlot","x","y","i","getMaxY","reduce","acc","getFreeSlots","freeSlots","biggestY","totalSpaces","Math","floor","push","add","prefer","occupiers","getItemsInFrame","frame","forEach","f","index","max","intermGrid","possiblities","tryMoving","bestOption","sort","a","b","cost","moves","v","move","currItem","getItemFrame","remove","place","pinned","originalFrame","isArray","some","occupiersData","occupier","occupiersFrame","flat","replaceUpdate","newOccupierFrames","occ","shift","getSingleFramePosition","updates","resize","newPoss","possiblity","p","directions","weight","dir","res","tryMovingInDirection","filter","amount","targetframe","unshift","clearWeights","indexOf","j","debug","DropGrid","cols","items","itemsSetup","resizeLimit","marginForExtraRow","additionalRow","clientX","clientY","mode","dragGrid","permUpdates","positionUpdates","fixedPositionUpdates","draggedOffset","draggedItem","draggedNode","reorderedItems","clonedWidget","sectionName","additionalRowComputed","set","items_hashmap","needsReordering","rearrangedPosition","widget","widgetid","pop","items_placeholders","placeholders","col_max","rows_max","rows","occupied","current_item","max_x","max_y","occupied_y","occupied_x","id","padStart","placedItems_withPlaceholders","placedItems","gridStyle","addH","indexedItems","prePlacedItems","mappedPlacedItems","height_diff","width_diff","temporaryResizeItems","newItem","resizeOverlay","blank","showEmptyTileHover","widgetSetup","widgetsSetup","ele","dragCancel","handler","immediate","updated","createNewGrid","deep","toggleDraggedItemOverlay","condition","firstElementChild","classList","containerRect","container","getBoundingClientRect","clonedWidgetRect","desiredTop","desiredLeft","minTop","maxTop","height","minLeft","maxLeft","width","constrainedTop","min","constrainedLeft","style","top","left","sortedItems","firstFreeSlot","targetX","targetW","convertGridResultToUpdate","input","output","baseArray","mouseLeave","updateCursor","rect","touches","gridX","clientWidth","gridY","clientHeight","_dragStart","dataTransfer","setDragImage","dropEffect","effectAllowed","startMove","setTimeout","clone","cloneNode","querySelector","removeProperty","startResize","dragOver","checkPinnedWidgetAnimation","checkWidgetSizeLimitAnimation","removeWidgetClones","dragEnd","getElementById","from","getElementsByClassName","_updateFixedPositions","additionalUpdates","emptyTileClicked","updateCursorOnMouseMove","itemAtPosition","pinNode","contains","draggedItemSetup","draggedItemMaxWidth","draggedItemMinWidth","draggedItemMaxHeight","draggedItemMinHeight","draggedItemNode","width_after_resize","height_after_resize","widgetClones","mouseDown","mouseUp","__widgets","__widgetsStarted","__path","CachedWidgetLoader","getWidget","loadWidget","setPath","path","DashboardItem","HeightTransition","onEnter","done","scrollHeight","onLeave","component","tmpConfig","isLoading","hasConfig","sharedData","maxHeight","maxWidth","prototype","toString","minHeight","minWidth","isResizeable","isPinned","ready","unpin","editMode","item_data","pinItem","getWidgetC4Link","cis4link","handleShowBsModal","handleHideBsModal","e","startDrag","dragHandle","resizeHandle","openConfig","setConfig","changeConfig","sendChangeConfig","changeConfigManually","k","import","file","fhcomplete_build_version","$options","WidgetIcon","src","DashboardSection","adminMode","configOpened","gridWidth","gridHeight","provide","editModeIsActive","computedWidgetsSetup","getSectionStyle","reorder","sectionNameTranslation","$p","t","showSectionInformation","handleConfigOpened","handleConfigClosed","checkResizeLimit","minmaxW","minmaxH","removeWidget","revert","custom","update","hidden","updatePreset","saveConfig","payload","updatePositions","self","cont","parseInt","window","getComputedStyle","getPropertyValue","addEventListener","DashboardWidgetPicker","callbacks","close","pick","ObjectUtils","mergeDeep","objects","isObject","obj","prev","key","pVal","oVal","concat","DashboardAdmin","DashboardAdminPresets","dashboard","funktionen","sections","tmpLoading","pickerWidgets","widgetAdd","section_name","widgetpicker","preset","section","db","funktion_kurzbz","newId","splice","alert","widgetUpdate","wid","prop","_x","_y","_w","_h","widgetRemove","loadSections","querySelectorAll","join","general","funktion","funktionenList","dashboards","current","dashboardAdd","_name","newDashboard","dashboardUpdate","old","dashboardDelete","assignWidgets","search","searchsettings","$fhcApi","searchAdvanced","searchdummy","phrasen$2","loadCategory","category","setLanguage","categories","language","getLanguage","getActiveDbLanguages","navigation","filter$1","saveCustomFilter","wsParams","filterUniqueId","filterType","customFilterName","removeCustomFilter","filterId","applyFilterFields","filterFields","addFilterField","filterField","removeFilterField","getFilterById","getFilter","studstatus","abmeldung","getDetails","antrag_id","prestudent_id","create","stdsem","grund","studiensemester","errorHandling","cancel","allSettled","antrag","studierendenantrag_id","errorHeader","unterbrechung","datum_wiedereinstieg","attachment","wiederholung","getLvs","saveLvs","forbiddenLvs","mandatoryLvs","leitung","getStgs","getAntraege","getHistory","getPrestudents","query","signal","timeout","approve","reopen","pause","unpause","object","approveObjection","denyObjection","profil","getView","uid","fotoSperre","isStudent","isMitarbeiter","getZustellAdresse","getZustellKontakt","getGemeinden","nation","zip","getAllNationen","profilUpdate","getStatus","getTopic","acceptProfilRequest","profil_update_id","status_message","topic","requested_change","denyProfilRequest","insertFile","dms","replace","getProfilRequestFiles","requestID","selectProfilRequest","insertProfilRequest","fileID","updateProfilRequest","ID","deleteProfilRequest","lvPlan","getRoomInfo","ort_kurzbz","start_date","end_date","getStunden","getOrtReservierungen","getLvPlanReservierungen","getLehreinheitStudiensemester","lehreinheit_id","studiensemesterDateInterval","date","LvPlanEvents","lv_id","stv","verband","favorites","students","studiensemester_kurzbz","encodeURIComponent","getUri","prestudent","person","person_id","relative_path","getStg","setStg","studiengang_kz","konto","tabulatorConfig","ajaxURL","ajaxParams","modelValue","only_open","studiengang_kz_intern","stg_kz","ajaxRequestFunc","ajaxResponse","checkDoubles","form","confirmErrorHandler","insert","counter","edit","delete","buchungsnr","getBuchungstypen","group","getGruppen","deleteGroup","kontakt","getAdressen","addNewAddress","loadAddress","address_id","updateAddress","deleteAddress","getPlaces","plz","getFirmen","searchString","getNations","getAdressentypen","getBankverbindung","addNewBankverbindung","loadBankverbindung","bankverbindung_id","updateBankverbindung","deleteBankverbindung","getKontakte","addNewContact","loadContact","kontakt_id","updateContact","deleteContact","getStandorteByFirma","getKontakttypen","updatePrestudent","getBezeichnungZGV","getBezeichnungMZgv","getBezeichnungDZgv","getAusbildung","getAufmerksamdurch","getBerufstaetigkeit","getTypenStg","getBisstandort","getHistoryPrestudent","getMaxSem","studiengang_kzs","advanceStatus","status_kurzbz","ausbildungssemester","confirmStatus","isLastStatus","deleteStatus","getLastBismeldestichtag","getHistoryPrestudents","status","insertStatus","loadStatus","updateStatus","getStudienplaene","getStudiengang","getStatusgruende","getStati","addStudent","changeStatus","getStatusarray","details","save","exam","getPruefungen","loadPruefung","pruefung_id","getTypenPruefungen","getAllLehreinheiten","getLvsByStudent","getLvsandLesByStudent","semester","getLvsAndMas","getMitarbeiterLv","getNoten","checkZeugnisnoteLv","addPruefung","updatePruefung","deletePruefung","abschlusspruefung","getAbschlusspruefung","addNewAbschlusspruefung","loadAbschlusspruefung","updateAbschlusspruefung","deleteAbschlusspruefung","getTypenAbschlusspruefung","getTypenAntritte","getBeurteilungen","getAkadGrade","getTypStudiengang","getMitarbeiter","getPruefer","checkForExistingExams","uids","grades","list","getCertificate","getTeacherProposal","getRepeaterGrades","updateCertificate","lehrveranstaltung_id","student_uid","note","lehrveranstaltung_bezeichnung","deleteCertificate","copyTeacherProposalToCertificate","copyRepeaterGradeToCertificate","studierendenantrag_lehrveranstaltung_id","lv_bezeichnung","getGradeFromPoints","points","manualErrorHandling","mobility","getMobilitaeten","getProgramsMobility","addNewMobility","loadMobility","bisio_id","updateMobility","deleteMobility","getLVList","getPurposes","getSupports","getListPurposes","getListSupports","deleteMobilityPurpose","addMobilityPurpose","deleteMobilitySupport","addMobilitySupport","archiv","getArchivVorlagen","archive","archiveSigned","akte_id","documents","getDocumentsUnaccepted","getDocumentsAccepted","deleteZuordnung","dokument_kurzbz","createZuordnung","loadAkte","getDoktypen","updateFile","deleteFile","uploadFile","exemptions","getAnrechnungen","getLehrveranstaltungen","getBegruendungen","getLvsKompatibel","getLektoren","addNewAnrechnung","loadAnrechnung","anrechnung_id","editAnrechnung","deleteAnrechnung","jointstudies","getStudies","getTypenMobility","getStudiensemester","getStudyprograms","getListPartner","getStatiPrestudent","loadStudy","insertStudy","updateStudy","deleteStudy","courselist","getCourselist","group_consecutiveHours","dbStundenplanTable","configStudent","configStudents","notiz","getNotizen","getUid","addNewNotiz","formData","loadNotiz","notiz_id","loadDokumente","deleteNotiz","type_id","updateNotiz","isBerechtigt","betriebsmittel","getAllBetriebsmittel","addNewBetriebsmittel","loadBetriebsmittel","betriebsmittelperson_id","updateBetriebsmittel","deleteBetriebsmittel","getTypenBetriebsmittel","loadInventarliste","checkperson","updatePersonUnrulyStatus","unrulyParam","unruly","filterPerson","base","ort","getContentID","ort_kurbz","getRooms","datum","von","bis","typ","personenanzahl","getRoomTypes","cms","content","content_id","version","sprache","sichtbar","getNews","page","page_size","news","limit","getNewsRowCount","getNewsExtra","lehre","getStudentenMail","getLvInfo","getStudentPruefungen","getStudentProjektarbeiten","getStudentProjektabgaben","detail","projektarbeit_id","postStudentProjektarbeitEndupload","Headers","postStudentProjektarbeitZwischenabgabe","getStudentProjektarbeitAbgabeFile","paabgabe_id","location","getMitarbeiterProjektarbeiten","all","postProjektarbeitAbgabe","termin","paabgabetyp_kurzbz","bezeichnung","fixtermin","insertvon","deleteProjektarbeitAbgabe","postSerientermin","projektarbeit_ids","fetchDeadlines","addons","getLvMenu","lvid","messages","getMessages","size","getVorlagen","getMsgVarsLoggedInUser","getMessageVarsPerson","getMsgVarsPrestudent","getPersonId","getDataVorlage","vorlage_kurzbz","getNameOfDefaultRecipient","getPreviewText","getReplyData","messageId","sendMessageFromModalContext","sendMessage","deleteMessage","vorlagen","getVorlagenByLoggedInUser","studium","getAllStudienSemester","studiengang","studienplan","getStudiengaengeForStudienSemester","getStudienplaeneBySemester","getLvPlanForStudiensemester","getLvEvaluierungInfo","FhcApiFactory","phrasen","getViewData","bookmark","getBookmarks","bookmark_id","tag","ampeln","open","confirm","ampel_id","studiengangInformation","getStudiengangByKz","menu","authinfo","getAuthUID","getAuthInfo","getAll","OldFhcApi","install","app","globalProperties","factory","warn","addEndpoints","_get_config","uri","TypeError","clearValidation","setFeedback","_clean_return_value","meta","fhcApiAxios","baseURL","interceptors","request","FormData","values","every","FileList","File","newData","entries","nd","append","jsondata","stringify","errors","_defaultErrorHandlers","code","handled","$fhcAlert","alertDefault","responseURL","alertError","validation","apply","php","filename","line","backtrace","function","severity","alertSystemError","exception","heading","sql","auth","controller","required_permissions","FhcApiFactoryWrapper","factorypart","root","defineProperty","noWarn","PluginsApi","_send_array_or_object","func","errs","FhcAlert","DEFAULT_ERROR_CONFIG","success","fail","combine","toast","async","_format_toast","_default","field","msgs","n_errors","n","get_config","clean_return_value","_merge_error_config","get_error_handler","formHandler","get_error_list","popHandleableErrors","copy","newType","newTypeCombinesType","newTypeHasHandler","errorConfig","remaining","configoverwrite","typedErrors","reason","errType","toLowerCase","getErrorHandler","ApiPhrasen","reactive","loadingModules","user_language","user_locale","server_languages","LC_Time","catArray","row","phrase","text","elem","extractCategory","t_ref","split","val","match","p1","getValueForLoadedPhrase","FhcPhrasen","cat","lang","CORE_REST_CLIENT_ERROR","CORE_REST_CLIENT_RETVAL","CoreRESTClient","wsURL","wsParameters","axiosParameters","_axiosCall","isSuccess","hasOwnProperty","isError","hasData","trim","getData","getError","getErrorCode","_generateRouterURI","_printDebug","parameters","errorThrown","axiosCallObj","helperAppContainer","helperApp","PvToast","PvConfirm","mailToUrl","slotProps","systemerror_mailto","openMessagecard","Collapse","getOrCreateInstance","showmaillink","PvConfig","PvConfirmationService","helperAppInstance","alertSuccess","summary","life","alertInfo","alertWarning","confirmDelete","$confirm","require","acceptLabel","acceptClass","rejectLabel","rejectClass","accept","sticky","html","alertMultiple","messageArray","handleSystemError","errMsg","toUpperCase","stack","handleSystemMessage","resetFormValidation","Event","dispatchEvent","handleFormValidation","nodeType","Node","ELEMENT_NODE","notFound","CustomEvent","arr","FhcApi","$fhcApiFactory","Phrases","fhcApi","appSideMenuEntries"],"mappings":"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"} \ No newline at end of file diff --git a/public/dist/js/apps/LVVerwaltung.js b/public/dist/js/apps/LVVerwaltung.js index 7f1908ae9..1f38da096 100644 --- a/public/dist/js/apps/LVVerwaltung.js +++ b/public/dist/js/apps/LVVerwaltung.js @@ -1,4 +1,4 @@ -import t from"../../../../index.ci.php/public/js/components/primevue/tabview/tabview.esm.min.js?2025102901";import e from"../../../../index.ci.php/public/js/components/primevue/tabpanel/tabpanel.esm.min.js?2025102901";import n from"../../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js?2025102901";import r from"../../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js?2025102901";import a from"../../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js?2025102901";import i from"../../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js?2025102901";var s={name:"SearchbarResultTemplateAction",emits:["actionexecuted"],props:{res:Object,action:Object},computed:{actionHref(){return"link"!==this.action.type?"javascript:void(0);":"function"==typeof this.action.action?this.action.action(this.res):this.action.action}},methods:{actionFunc(){"function"===this.action.type&&this.action.action(this.res),this.$emit("actionexecuted")},renderif:function(){return void 0===this.action?.renderif||this.action.renderif(this.res)}},template:'\n\t\n\t'},l={name:"SearchbarResultTemplateFrame",components:{ResultAction:s,ResultActions:{name:"SearchbarResultTemplateActions",components:{ResultAction:s},emits:["actionexecuted"],props:{res:Object,actions:Array},methods:{renderif:function(t){return void 0===t?.renderif||t.renderif(this.res)}},template:'\n\t
    \n\t\t\n\t
    '}},emits:["actionexecuted"],props:{res:Object,actions:Object,title:String,image:String,imageFallback:String},template:'\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{{ title }}\n\t\t\t\t\n\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t
    '},o={name:"SearchbarResultPerson",components:{TemplateFrame:l},emits:["actionexecuted"],props:{res:Object,actions:Object},computed:{emails(){return new Set(this.res.email)}},template:'\n\t\n\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'person/person_id\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.person_id }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_emails\') }}
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t'},d={name:"SearchbarResultRoom",components:{TemplateFrame:l},emits:["actionexecuted"],props:{mode:String,res:Object,actions:Object},computed:{equipment(){return this.res.equipment?this.res.equipment.replace(new RegExp("
    ","ig"),""):""},address(){let t=this.res.zip||"";return this.res.city&&(t+=(t?" ":"")+this.res.city),this.res.street&&(t+=(t?", ":"")+this.res.street),this.res.floor&&(t+=(t?" / ":"")+this.$p.t("search/result_address_floor",this.res)),t||this.$p.t("search/result_address_none")}},template:'\n\t\n\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_room_address\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ address }}\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_workplaces\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.sitzplaetze }}\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_building\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.building }}\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_equipment\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t'},c={name:"SearchbarResultEmployee",components:{TemplateFrame:l},emits:["actionexecuted"],props:{res:Object,actions:Object},template:'\n\t\n\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_stdkst\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t
      \n\t\t\t\t\t\t
    • {{ stdkst }}
    • \n\t\t\t\t\t
    \n\t\t\t\t\t{{ $p.t(\'search/result_stdkst_none\') }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'lehre/organisationseinheit\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t
      \n\t\t\t\t\t\t
    • {{ oe }}
    • \n\t\t\t\t\t
    \n\t\t\t\t\t{{ $p.t(\'search/result_oe_none\') }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_emails\') }}
    \n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'person/telefon\') }}
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t'},u={name:"SearchbarResultOrganistationunit",components:{TemplateFrame:l},emits:["actionexecuted"],props:{res:Object,actions:Object},template:'\n\t\n\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_parent_oe\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.parentoe_name }}\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_group_emails\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t{{ res.mailgroup }}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_leader\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t
      \n\t\t\t\t\t\t
    • {{ leader.name }}
    • \n\t\t\t\t\t
    \n\t\t\t\t\t{{ $p.t(\'search/result_leader_none\') }}\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_number_of_employees\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.number_of_people }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t'},p={name:"SearchbarResultStudent",components:{TemplateFrame:l},emits:["actionexecuted"],props:{mode:String,res:Object,actions:Object},computed:{photo_url(){return"simple"!=this.mode?this.res.photo_url:this.res.foto?"data:image/jpeg;base64,"+this.res.foto:null},emails(){return"simple"==this.mode?new Set([this.res.email]):new Set(this.res.email)}},template:'\n\t\n\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_student_uid\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.uid }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'person/person_id\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.person_id }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'person/matrikelnummer\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.matrikelnr }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_emails\') }}
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t'},h={name:"SearchbarResultPrestudent",components:{TemplateFrame:l},emits:["actionexecuted"],props:{mode:String,res:Object,actions:Object},computed:{title(){return"simple"==this.mode?this.res.name:this.res.name+" ("+this.res.status+" "+this.res.stg_kuerzel+")"},photo_url(){return"simple"!=this.mode?this.res.photo_url:this.res.foto?"data:image/jpeg;base64,"+this.res.foto:null},emails(){return"simple"==this.mode?new Set([this.res.email]):new Set(this.res.email)}},template:'\n\t\n\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'person/person_id\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.person_id }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_emails\') }}
    \n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_student_uid\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.uid }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'person/matrikelnummer\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.matrikelnr }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_prestudent_id\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.prestudent_id }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'lehre/studiengang\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.bezeichnung }} {{ res.orgform ? \'(\' + res.orgform + \')\' : \'\' }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t'},f={name:"SearchbarResultDms",components:{TemplateFrame:l},emits:["actionexecuted"],props:{res:Object,actions:Object},computed:{icon(){switch(this.res.mimetype){case"application/pdf":return"file-pdf";case"application/vnd.openxmlformats-officedocument.wordprocessingml.document":case"application/msword":return"file-word";case"application/vnd.openxmlformats-officedocument.presentationml.presentation":case"application/mspowerpoint":return"file-powerpoint";case"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":case"application/vnd.ms-excel":return"file-excel";case"application/x-zip":case"application/zip":return"file-zipper";case"image/jpeg":case"image/gif":case"image/png":return"file-image";default:return"file"}}},template:'\n\t\n\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_dms_id\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.dms_id }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_version\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.version }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_keywords\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.keywords }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'global/beschreibung\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.description }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t'},m={name:"SearchbarResultCms",components:{TemplateFrame:l},emits:["actionexecuted"],props:{res:Object,actions:Object},inject:["query"],computed:{preview(){if("redirect"!=this.res.template_kurzbz){let t=this.res.content.replace(//gi,"").replace(/<[^>]+>/gi,"").replace(/^\s+|\s+$/g,"");if(t.length>1e3){let e=t.toLowerCase(),n=Math.min(this.query.split(" ").reduce((t,n)=>{if("or"==n)return t;let r=n.indexOf(":");if(r<0||r>0&&["content","inhalt"].includes(n.split(":")[0])){let r=e.indexOf(n);r>=0&&t.push(r)}return t},[]));if(n){if(!(n+997>=t.length))return"..."+t.substr(n,994)+"...";if(n=t.length-997,n>0)return"..."+t.substr(n,997)}t=t.substr(0,997)+"..."}return t}let t=this.res.content_url;return"../index.ci.php/"==t.substr(0,16)?t=this.$fhcApi.getUri(t.substr(16)):"../"==t.substr(0,3)&&(t=FHC_JS_DATA_STORAGE_OBJECT.app_root.replace(/\/+$/,"")+t.substr(2)),''+t+""}},template:'\n\t\n\t\t
    \n\t\t
    \n\t\t\t{{ $p.t(\'search/result_content_none\') }}\n\t\t
    \n\t'},g={name:"SearchbarResultMergedstudent",components:{ResultPrestudent:h,ResultStudent:p},emits:["actionexecuted"],props:{mode:String,res:Object,actions:Object},computed:{prestudent(){return this.res.list.filter(t=>"prestudent"==t.type).pop()}},template:'\n\t\n\t'},v={name:"SearchbarResultMergedperson",components:{TemplateFrame:l,TemplateAction:s},emits:["actionexecuted"],props:{mode:String,res:Object,actions:Object},computed:{person(){const t=this.res.list.reduce((t,e)=>[...t,...Array.isArray(e.email)?e.email:[e.email]],[]),e=this.res.list.find(t=>"person"==t.type);if(e)return{...e,email:t};const{person_id:n,name:r}=this.res.list[0];let a;if("simple"==this.mode){let t=(this.students?this.students.find(t=>t.foto):null)?.foto;t&&(t="data:image/jpeg;base64,"+t),a=t||this.employee?.photo_url}else a=((this.students?this.students.find(t=>t.photo_url):null)||this.employee)?.photo_url;return{person_id:n,name:r,photo_url:a,email:t}},employee(){return this.res.list.find(t=>["employee","unassigned_employee","mitarbeiter","mitarbeiter_ohne_zuordnung"].includes(t.type))||null},students(){const t=this.res.list.filter(t=>["student","prestudent","studentcis","studentStv"].includes(t.type)).filter((t,e,n)=>{if("prestudent"===t.type)return!0;return!n.some(e=>e.uid===t.uid&&"prestudent"===e.type)}).sort((t,e)=>(t.sort||0)-(e.sort||0));return t.length?t:null},emails(){return new Set(this.person.email)},telurl(){return"tel:"+this.employee?.phone},inaktiv(){return this.res.list.some(t=>!1===t?.aktiv)}},template:'\n\t\n\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'person/person_id\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ person.person_id }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_emails\') }}
    \n\t\t\t\t\n\t\t\t
    \n\n\t\t\t\n\n\t\t\t\n\t\t
    \n\t'},b={name:"FhcSearchbar",components:{person:o,room:d,employee:c,organisationunit:u,student:p,prestudent:h,dms:f,cms:m,mergedStudent:g,mergedPerson:v},props:["searchoptions","searchfunction"],provide(){return{query:Vue.computed(()=>this.lastQuery)}},data:function(){return{searchtimer:null,hidetimer:null,searchsettings:{searchstr:this.getSearchStr(),types:this.getInitiallySelectedTypes()},searchresult:[],searchmode:"",showresult:!1,searching:!1,error:null,abortController:null,settingsDropdown:null,lastQuery:""}},computed:{searchTypesPlaceholder(){return this.searchsettings.types.length?this.searchsettings.types.map(t=>this.typeLabels[t]).join(" / "):Object.values(this.typeLabels).join(" / ")},types(){return this.searchoptions.types?Array.isArray(this.searchoptions.types)?this.searchoptions.types:Object.keys(this.searchoptions.types):[]},typeLabels(){return this.searchoptions.types?Array.isArray(this.searchoptions.types)?this.searchoptions.types.reduce((t,e)=>(t[e]=e,t),{}):this.searchoptions.types:{}}},template:'\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n