From 4495632393d4811760f3083665653edd96102025 Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Fri, 17 Oct 2025 14:45:03 +0200 Subject: [PATCH 1/8] join only prestudent for studiengang_kz of student --- application/controllers/api/frontend/v1/ProfilUpdate.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/controllers/api/frontend/v1/ProfilUpdate.php b/application/controllers/api/frontend/v1/ProfilUpdate.php index 604ae33c9..f97546288 100644 --- a/application/controllers/api/frontend/v1/ProfilUpdate.php +++ b/application/controllers/api/frontend/v1/ProfilUpdate.php @@ -637,7 +637,7 @@ class ProfilUpdate extends FHCAPI_Controller //? Send email to the Studiengangsassistentinnen $this->StudentModel->addSelect(["public.tbl_studiengang.email"]); $this->StudentModel->addJoin("public.tbl_benutzer", "public.tbl_benutzer.uid = public.tbl_student.student_uid"); - $this->StudentModel->addJoin("public.tbl_prestudent", "public.tbl_benutzer.person_id = public.tbl_prestudent.person_id"); + $this->StudentModel->addJoin("public.tbl_prestudent", "public.tbl_benutzer.person_id = public.tbl_prestudent.person_id and public.tbl_student.studiengang_kz = public.tbl_prestudent.studiengang_kz"); $this->StudentModel->addJoin("public.tbl_prestudentstatus", "public.tbl_prestudentstatus.prestudent_id = public.tbl_prestudent.prestudent_id"); $this->StudentModel->addJoin("public.tbl_studiengang", "public.tbl_studiengang.studiengang_kz = public.tbl_prestudent.studiengang_kz"); $this->StudentModel->addGroupBy(["public.tbl_studiengang.email"]); From 87ec4fd482f4a568dbe4b8f7db8a43ac6fcd47ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Mon, 20 Oct 2025 17:32:43 +0200 Subject: [PATCH 2/8] =?UTF-8?q?Problem=20beim=20Drucken=20von=20Zeugnissen?= =?UTF-8?q?=20behoben=20wo=20die=20LV=20der=20Studienverpflichtung=20Sonde?= =?UTF-8?q?rzeichen=20enth=C3=A4lt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rdf/lehrveranstaltungszeugnis_ktu.rdf.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rdf/lehrveranstaltungszeugnis_ktu.rdf.php b/rdf/lehrveranstaltungszeugnis_ktu.rdf.php index 9696978b3..8c614c21e 100644 --- a/rdf/lehrveranstaltungszeugnis_ktu.rdf.php +++ b/rdf/lehrveranstaltungszeugnis_ktu.rdf.php @@ -335,14 +335,14 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml") $anrechnung = new anrechnung(); $anrechnung->getAnrechnungPrestudent($student->prestudent_id, null, $lehrveranstaltung_id); - $xml .= ""; + $xml .= "result) === 1) { $lehrveranstaltung_id_kompatibel = $anrechnung->result[0]->lehrveranstaltung_id; $xml .= $anrechnung->result[0]->lehrveranstaltung_bez; } - $xml .= ""; + $xml .= "]]>"; if($lehrveranstaltung_id_kompatibel != "") { From 8ddc2f02fece2440279012082196bb513ccfaaa7 Mon Sep 17 00:00:00 2001 From: chfhtw Date: Thu, 23 Oct 2025 11:47:33 +0200 Subject: [PATCH 3/8] SVG Icons --- public/css/SvgIcons.css | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 public/css/SvgIcons.css diff --git a/public/css/SvgIcons.css b/public/css/SvgIcons.css new file mode 100644 index 000000000..f25d842a4 --- /dev/null +++ b/public/css/SvgIcons.css @@ -0,0 +1,28 @@ +/* Themable Variables */ +:root { + --svg-icon-apps: var(--fhc-icon-apps, url('data:image/svg+xml,\ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + ')); +} +.svg-icon { + display: inline-block; + width: 1rem; + line-height: 1; + background-color: currentColor; +} +.svg-icon:before { + content: "\00a0"; +} +.svg-icon.svg-icon-apps { + -webkit-mask-image: var(--svg-icon-apps); + mask-image: var(--svg-icon-apps); +} From 752ef8a57bbac02d0056aecac24e36868ff24f56 Mon Sep 17 00:00:00 2001 From: chfhtw Date: Thu, 23 Oct 2025 11:48:03 +0200 Subject: [PATCH 4/8] AppMenu Component --- public/css/components/AppMenu.css | 26 ++++++++++++ public/js/components/AppMenu.js | 68 +++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 public/css/components/AppMenu.css create mode 100644 public/js/components/AppMenu.js diff --git a/public/css/components/AppMenu.css b/public/css/components/AppMenu.css new file mode 100644 index 000000000..b980c1efc --- /dev/null +++ b/public/css/components/AppMenu.css @@ -0,0 +1,26 @@ +.fhc-app-menu { + display: flex; + flex-direction: column; + padding-left: 0; + margin: calc(var(--bs-offcanvas-padding-y) * -1) calc(var(--bs-offcanvas-padding-x) * -1); +} +.fhc-app-menu li { + display: block; + border: var(--bs-border-width) solid var(--bs-border-color); +} +.fhc-app-menu li + li { + border-top-width: 0; +} +.fhc-app-menu li a { + display: block; + padding: .5rem 1rem; + text-decoration: none; +} +.fhc-app-menu li a.active, +.fhc-app-menu li a:hover { + --bs-link-color-rgb: var(--bs-link-hover-color-rgb); + background: var(--surface-hover); +} +.fhc-app-menu li a.active { + pointer-events: none; +} diff --git a/public/js/components/AppMenu.js b/public/js/components/AppMenu.js new file mode 100644 index 000000000..33d35f8df --- /dev/null +++ b/public/js/components/AppMenu.js @@ -0,0 +1,68 @@ +/** + * 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 . + */ + +import ApiNavigation from '../api/factory/navigation.js'; + +export default { + name: 'AppMenu', + props: { + appIdentifier: { + type: String, + required: true + }, + navigationPage: { + type: String, + default: 'apps' + } + }, + data() { + return { + items: [] + }; + }, + watch: { + navigationPage() { + this.getItems(); + } + }, + methods: { + getItems() { + this.$api + .call(ApiNavigation.getMenu(this.navigationPage)) + .then(result => { + this.items = result.data; + }) + .catch(this.$fhcAlert.handleSystemError); + } + }, + created() { + this.getItems(); + }, + template: /* html */` + ` +}; From 11daf968501665c2078243826eb4e12e8f1c08e3 Mon Sep 17 00:00:00 2001 From: chfhtw Date: Thu, 23 Oct 2025 11:48:55 +0200 Subject: [PATCH 5/8] add navigation entries for StV & LvV --- application/config/navigation.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/application/config/navigation.php b/application/config/navigation.php index 11fd1a3a6..2ce6a0062 100644 --- a/application/config/navigation.php +++ b/application/config/navigation.php @@ -336,3 +336,19 @@ $config['navigation_menu']['system/issues/Issues/*'] = array( 'requiredPermissions' => array('admin:rw') ), ); + +// TODO(chris): phrases? +$config['navigation_menu']['apps'] = [ + 'stv' => [ + 'link' => site_url('studentenverwaltung'), + 'description' => 'Studierenden Verwaltung', + #'icon' => 'users', + 'requiredPermissions' => array('admin:r', 'assistenz:r') + ], + 'lvv' => [ + 'link' => site_url('lVVerwaltung'), + 'description' => 'LV Verwaltung', + #'icon' => 'person-chalkboard', + 'requiredPermissions' => array('admin:r', 'assistenz:r') + ] +]; From 5baf8b645fe5ac46c9b3a1d20036bd7592730591 Mon Sep 17 00:00:00 2001 From: chfhtw Date: Thu, 23 Oct 2025 11:49:07 +0200 Subject: [PATCH 6/8] use AppMenu in StV --- public/css/Studentenverwaltung.css | 10 +++-- .../js/components/Stv/Studentenverwaltung.js | 40 +++++++++++++++++-- 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/public/css/Studentenverwaltung.css b/public/css/Studentenverwaltung.css index bb2588926..56e99b937 100644 --- a/public/css/Studentenverwaltung.css +++ b/public/css/Studentenverwaltung.css @@ -1,15 +1,21 @@ @import './Fhc.css'; +@import './SvgIcons.css'; @import './components/searchbar/searchbar.css'; @import './components/verticalsplit.css'; @import './components/FilterComponent.css'; @import './components/Tabs.css'; @import './components/Notiz.css'; @import './components/Messages.css'; +@import './components/AppMenu.css'; html { font-size: .875em; } +#appMenu { + width: 300px; +} + .navbar-dark .navbar-brand:focus { box-shadow: 0 0 0 .25rem rgba(13,110,253,.25); z-index: 3; @@ -37,10 +43,6 @@ html { flex: 1 1 auto; } -#sidebarMenu { - width: 0%; -} - .tabulator-row.disabled.tabulator-row-odd .tabulator-cell { color: var(--gray-400); } diff --git a/public/js/components/Stv/Studentenverwaltung.js b/public/js/components/Stv/Studentenverwaltung.js index d0543ad59..63511924f 100644 --- a/public/js/components/Stv/Studentenverwaltung.js +++ b/public/js/components/Stv/Studentenverwaltung.js @@ -17,6 +17,7 @@ import CoreSearchbar from "../searchbar/searchbar.js"; import VerticalSplit from "../verticalsplit/verticalsplit.js"; +import AppMenu from "../AppMenu.js"; import StvVerband from "./Studentenverwaltung/Verband.js"; import StvList from "./Studentenverwaltung/List.js"; import StvDetails from "./Studentenverwaltung/Details.js"; @@ -32,6 +33,7 @@ export default { components: { CoreSearchbar, VerticalSplit, + AppMenu, StvVerband, StvList, StvDetails, @@ -345,11 +347,34 @@ export default { //FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto = 'ma0068@technikum-wien.at';this.$fhcAlert.handleSystemError(1); this.handlePersonUrl(); }, - template: ` + template: /* html */`