From 03af6bfda5058d4b6374a9a6efcf2faabd595479 Mon Sep 17 00:00:00 2001 From: adisposkofh Date: Tue, 29 Sep 2026 17:12:52 +0200 Subject: [PATCH 01/15] added different views (lvs, lehrenheiten, supervisor) to mylv page --- .../api/frontend/v1/lv/Betreuungen.php | 43 ++++++++++ public/js/components/Cis/Mylv/Lehrenheiten.js | 12 +++ public/js/components/Cis/Mylv/Lvs.js | 46 ++++++++++ public/js/components/Cis/Mylv/MyLv.js | 84 ++++++++----------- public/js/components/Cis/Mylv/Supervisor.js | 12 +++ public/js/components/Cis/Mylv/Table.js | 15 ++-- 6 files changed, 157 insertions(+), 55 deletions(-) create mode 100644 application/controllers/api/frontend/v1/lv/Betreuungen.php create mode 100644 public/js/components/Cis/Mylv/Lehrenheiten.js create mode 100644 public/js/components/Cis/Mylv/Lvs.js create mode 100644 public/js/components/Cis/Mylv/Supervisor.js diff --git a/application/controllers/api/frontend/v1/lv/Betreuungen.php b/application/controllers/api/frontend/v1/lv/Betreuungen.php new file mode 100644 index 000000000..8267a5b56 --- /dev/null +++ b/application/controllers/api/frontend/v1/lv/Betreuungen.php @@ -0,0 +1,43 @@ +. + */ + +if (! defined('BASEPATH')) exit('No direct script access allowed'); + +class Betreuungen extends FHCAPI_Controller +{ + + /** + * Object initialization + */ + public function __construct() + { + parent::__construct([ + 'getBetreuungen' => self::PERM_LOGGED, + ]); + + } + + //------------------------------------------------------------------------------------------------------------------ + // Public methods + + public function getBetreuungen() + { + + } + +} diff --git a/public/js/components/Cis/Mylv/Lehrenheiten.js b/public/js/components/Cis/Mylv/Lehrenheiten.js new file mode 100644 index 000000000..97aa926a3 --- /dev/null +++ b/public/js/components/Cis/Mylv/Lehrenheiten.js @@ -0,0 +1,12 @@ +export default { + name: "Lehrenheiten", + props: ["current"], + data() { + return {}; + }, + template: /*html*/ ` +
+ LEHRENHEITEN PLACEHOLDER +
+ `, +} \ No newline at end of file diff --git a/public/js/components/Cis/Mylv/Lvs.js b/public/js/components/Cis/Mylv/Lvs.js new file mode 100644 index 000000000..536a03384 --- /dev/null +++ b/public/js/components/Cis/Mylv/Lvs.js @@ -0,0 +1,46 @@ +import MylvSemesterCards from "./Semester.js"; +import MylvTable from "./Table.js"; + +export default { + name: "Lvs", + components: { + MylvSemesterCards, + MylvTable + }, + props: ["current"], + data() { + return { + mode: localStorage.getItem('myLvaDefaultMode') ?? 'cards' + }; + }, + methods: { + selectMode(mode) { + localStorage.setItem('myLvaDefaultMode', mode) + this.mode = mode + }, + }, + template: /*html*/ ` +
+
+ + +
+ + +
+ `, +} \ No newline at end of file diff --git a/public/js/components/Cis/Mylv/MyLv.js b/public/js/components/Cis/Mylv/MyLv.js index bb130f2db..ecb30b5f3 100644 --- a/public/js/components/Cis/Mylv/MyLv.js +++ b/public/js/components/Cis/Mylv/MyLv.js @@ -1,15 +1,15 @@ -import MylvSemesterCards from "./Semester.js"; -import MylvTable from "./Table.js"; -import ApiAddons from "../../../api/factory/addons.js" +import Lvs from "./Lvs.js"; +import Lehrenheiten from "./Lehrenheiten.js"; +import Supervisor from "./Supervisor.js"; -// TODO(chris): phrase: global/studiensemester_auswaehlen -// TODO(chris): phrase: next & prev +aria-label +import ApiAddons from "../../../api/factory/addons.js" export default { name: 'MyLv', components: { - MylvSemesterCards, - MylvTable + Lvs, + Lehrenheiten, + Supervisor, }, data: () => { return { @@ -17,7 +17,8 @@ export default { studiensemester: null, lvs: {}, currentSemester: null, - mode: localStorage.getItem('myLvaDefaultMode') ?? 'cards' + modes: ["lvs", "lehrenheiten", "supervision"], + selectedMode: "lvs" }; }, provide() { @@ -91,13 +92,9 @@ export default { }, currentIsLast() { return this.studiensemester[this.studiensemester.length-1].studiensemester_kurzbz == this.currentSemester; - } + }, }, methods: { - clickMode(evt, mode) { - localStorage.setItem('myLvaDefaultMode', mode) - this.mode = mode - }, prevSem() { this.$refs.studiensemester.selectedIndex--; this.$refs.studiensemester.dispatchEvent(new Event('change', { bubbles: true })); @@ -126,7 +123,7 @@ export default { next(); }, - template: ` + template: /*html*/ `

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


@@ -135,48 +132,39 @@ export default {
-
-
- - + + + +
+
+
+ -
-
-
- - -
+
+ + +
-
- ` -}; + + `, +} \ No newline at end of file diff --git a/public/js/components/Cis/Mylv/Supervisor.js b/public/js/components/Cis/Mylv/Supervisor.js new file mode 100644 index 000000000..32af05e63 --- /dev/null +++ b/public/js/components/Cis/Mylv/Supervisor.js @@ -0,0 +1,12 @@ +export default { + name: "Supervisor", + props: ["current"], + data() { + return {}; + }, + template: /*html*/ ` +
+ SUPERVISOR PLACEHOLDER +
+ `, +} \ No newline at end of file diff --git a/public/js/components/Cis/Mylv/Table.js b/public/js/components/Cis/Mylv/Table.js index 18f169e8f..ed4057753 100644 --- a/public/js/components/Cis/Mylv/Table.js +++ b/public/js/components/Cis/Mylv/Table.js @@ -22,21 +22,22 @@ export default { layout: 'fitDataStretch', placeholder: this.$p.t('global/noDataAvailable'), columns: [ - {title: Vue.computed(() => this.$capitalize(this.$p.t('lehre/studiengang'))), field: 'sg_bezeichnung', widthGrow: 1}, - {title: Vue.computed(() => this.$capitalize(this.$p.t('global/bezeichnung'))), field: 'bezeichnung', widthGrow: 2}, - {title: Vue.computed(() => this.$capitalize(this.$p.t('lehre/orgform'))), field: 'orgform_kurzbz', widthGrow: 1}, - {title: Vue.computed(() => this.$capitalize(this.$p.t('lehre/kurzbz'))), field: 'studiengang_kuerzel', widthGrow: 1}, - {title: Vue.computed(() => this.$capitalize(this.$p.t('lehre/semesterstunden'))), field: 'semesterstunden', + {titlePhrase: 'lehre/studiengang', title: 'placeholder', field: 'sg_bezeichnung', widthGrow: 1}, + {titlePhrase: 'global/bezeichnung', title: 'placeholder', field: 'bezeichnung', widthGrow: 2}, + {titlePhrase: 'lehre/orgform', title: 'placeholder', field: 'orgform_kurzbz', widthGrow: 1}, + {titlePhrase: 'lehre/kurzbz', title: 'placeholder', field: 'studiengang_kuerzel', widthGrow: 1}, + {titlePhrase: 'lehre/semesterstunden', title: 'placeholder', field: 'semesterstunden', bottomCalc: this.semesterstundenCalc, widthGrow: 1, visible: false}, {title: Vue.computed(() => this.$capitalize(this.$p.t('global/actions'))), headerSort: false, field: 'menu', formatter: this.actionFormatter, widthGrow: 1, tooltip: this.spoofingFunc} ], persistence: false, - persistenceID: "mylv_2026_04_17" + persistenceID: "mylv_2026_04_17", + locale: true, }, mylvTableEventHandlers: [ - ] + ], } }, computed: { From af978e13120fb0a9dfb7699acb2d7e94804cabe5 Mon Sep 17 00:00:00 2001 From: adisposkofh Date: Wed, 30 Sep 2026 13:23:03 +0200 Subject: [PATCH 02/15] implemented myLv supervisor view --- .../api/frontend/v1/lv/Betreuungen.php | 40 ++++- public/js/api/factory/betreuungen.js | 28 ++++ public/js/components/Cis/Mylv/MyLv.js | 10 +- public/js/components/Cis/Mylv/Supervisor.js | 132 +++++++++++++++- system/phrasesupdate.php | 142 ++++++++++++++++++ 5 files changed, 343 insertions(+), 9 deletions(-) create mode 100644 public/js/api/factory/betreuungen.js diff --git a/application/controllers/api/frontend/v1/lv/Betreuungen.php b/application/controllers/api/frontend/v1/lv/Betreuungen.php index 8267a5b56..f81474fd2 100644 --- a/application/controllers/api/frontend/v1/lv/Betreuungen.php +++ b/application/controllers/api/frontend/v1/lv/Betreuungen.php @@ -37,7 +37,45 @@ class Betreuungen extends FHCAPI_Controller public function getBetreuungen() { - + $semester = $this->input->get("semester"); + if (!$semester) $this->terminateWithError("Missing parameters!"); + + $personId = getAuthPersonId(); + + $betreuungenQuery = "SELECT + tbl_lehrveranstaltung.bezeichnung, + tbl_projektarbeit.titel, + (SELECT nachname || ' ' || vorname + FROM public.tbl_benutzer + JOIN public.tbl_person USING(person_id) + WHERE uid=student_uid) + as name, + (SELECT uid + FROM public.tbl_benutzer + WHERE uid=student_uid) + as uid, + tbl_lehrveranstaltung.studiengang_kz, + tbl_lehrveranstaltung.semester, + tbl_studiengang.kurzbzlang as studiengang, + tbl_studiengang.email, + tbl_betreuerart.beschreibung AS beutreuerart_beschreibung, + tbl_projektbetreuer.stunden + FROM + lehre.tbl_lehrveranstaltung, lehre.tbl_projektarbeit, lehre.tbl_projektbetreuer, public.tbl_studiengang, lehre.tbl_betreuerart + WHERE + tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_projektarbeit.lehrveranstaltung_id AND + tbl_projektarbeit.studiensemester_kurzbz = '$semester' AND + tbl_projektarbeit.projektarbeit_id = tbl_projektbetreuer.projektarbeit_id AND + tbl_lehrveranstaltung.studiengang_kz = tbl_studiengang.studiengang_kz AND + tbl_projektbetreuer.betreuerart_kurzbz = tbl_betreuerart.betreuerart_kurzbz AND + tbl_projektbetreuer.person_id = '$personId'"; + $this->addMeta("query", $betreuungenQuery); + + $this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel'); + $result = $this->LehrveranstaltungModel->execReadOnlyQuery($betreuungenQuery); + $result = $this->getDataOrTerminateWithError($result); + + $this->terminateWithSuccess($result); } } diff --git a/public/js/api/factory/betreuungen.js b/public/js/api/factory/betreuungen.js new file mode 100644 index 000000000..6aecadd15 --- /dev/null +++ b/public/js/api/factory/betreuungen.js @@ -0,0 +1,28 @@ +/** + * Copyright (C) 2026 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 { + getBetreuungen(semester) { + return { + method: 'get', + url: '/api/frontend/v1/lv/Betreuungen/getBetreuungen', + params: { + semester + }, + }; + }, +}; \ No newline at end of file diff --git a/public/js/components/Cis/Mylv/MyLv.js b/public/js/components/Cis/Mylv/MyLv.js index ecb30b5f3..7720a37c9 100644 --- a/public/js/components/Cis/Mylv/MyLv.js +++ b/public/js/components/Cis/Mylv/MyLv.js @@ -17,7 +17,7 @@ export default { studiensemester: null, lvs: {}, currentSemester: null, - modes: ["lvs", "lehrenheiten", "supervision"], + modes: ["lvs", "lehrenheiten", "supervision", "all"], selectedMode: "lvs" }; }, @@ -153,9 +153,11 @@ export default {
- - - + +
+ +
+
- +
@@ -605,7 +614,7 @@ export default { - + ` } diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 5a32c633b..63453bbfe 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -61337,7 +61337,7 @@ I have been informed that I am under no obligation to consent to the transmissio 'insertvon' => 'system' ) ) - ), + ), array( 'app' => 'core', 'category' => 'tabulator', @@ -62611,8 +62611,28 @@ I have been informed that I am under no obligation to consent to the transmissio 'insertvon' => 'system' ) ) - ) + ), // ### Infocenter Onboarding END + array( + 'app' => 'core', + 'category' => 'ui', + 'phrase' => 'editingMitarbeiterPVonly', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Kontaktdaten von Mitarbeiter*innen dürfen nur in der Personalverwaltung editiert werden.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Employee contact details may only be edited in the personnel administration system.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ) ); From 8b58c8238520813ce5eb7c44056ab1a1461f1355 Mon Sep 17 00:00:00 2001 From: adisposkofh Date: Mon, 5 Oct 2026 12:58:38 +0200 Subject: [PATCH 04/15] myLv supervisor table formatting --- public/js/components/Cis/Mylv/Supervisor.js | 38 ++++++++++++++------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/public/js/components/Cis/Mylv/Supervisor.js b/public/js/components/Cis/Mylv/Supervisor.js index 157322f0a..59d5f52f6 100644 --- a/public/js/components/Cis/Mylv/Supervisor.js +++ b/public/js/components/Cis/Mylv/Supervisor.js @@ -1,11 +1,11 @@ -import {CoreFilterCmpt} from "../../../components/filter/Filter.js"; +import { CoreFilterCmpt } from "../../../components/filter/Filter.js"; import ApiBetreuungen from "../../../api/factory/betreuungen.js"; export default { name: "Supervisor", components: { - CoreFilterCmpt + CoreFilterCmpt, }, props: { semester: null | String, @@ -15,14 +15,21 @@ export default { students: [], isFetchingStudents: false, supervisorTableOptions: { - index: 'lehrveranstaltung_id', - layout: 'fitColumns', + index: "lehrveranstaltung_id", + layout: "fitColumns", columns: [ { titlePhrase: "betreuungen/studiengang", title: "placeholder", field: "studiengang", widthGrow: 1, + formatter: "link", + formatterParams: { + target: "_blank", + url: (cell) => { + return "mailto:" + cell._cell.row.data.email; + }, + }, }, { titlePhrase: "betreuungen/semester", @@ -35,6 +42,8 @@ export default { title: "placeholder", field: "stunden", widthGrow: 1, + bottomCalc: "sum", + bottomCalcParams: { precision: 2 }, }, { titlePhrase: "betreuungen/lvBezeichnung", @@ -49,11 +58,12 @@ export default { widthGrow: 3, formatter: "link", formatterParams: { - target:"_blank", + target: "_blank", url: (cell) => { - const uid = cell._cell.row.data.uid; - // todo: get full profilview url (or just use cell click instead of link formatter) - return this.$router.resolve("ProfilView").href; + return this.$router.resolve({ + name: "ProfilView", + params: { uid: cell._cell.row.data.uid }, + }).href; }, }, }, @@ -92,7 +102,12 @@ export default { ApiBetreuungen.getBetreuungen(this.$props.semester), ); if (studentsResponse.meta.status === "success") { - this.students = studentsResponse.data; + this.students = studentsResponse.data.map((studentData) => { + studentData.stunden = parseFloat( + studentData.stunden, + ).toFixed(2); + return { ...studentData }; + }); this.setTableData(); } @@ -103,15 +118,12 @@ export default { }, setTableData() { if (this.$refs.supervisorTable && this.students?.length) { - this.$refs.supervisorTable.tabulator.setData( - this.students - ); + this.$refs.supervisorTable.tabulator.setData(this.students); } }, }, mounted() { this.getStudents(); - console.log(this.$router); }, template: /*html*/ `
From a5aa4c84667060f1ba7a85f3a810a46bfaf6c6c2 Mon Sep 17 00:00:00 2001 From: adisposkofh Date: Mon, 5 Oct 2026 15:14:04 +0200 Subject: [PATCH 05/15] added myLv lehrenheiten table --- .../api/frontend/v1/lv/Lehreinheit.php | 11 +- .../models/education/Lehreinheit_model.php | 33 ++ public/js/api/factory/lehreinheit.js | 28 ++ .../js/components/Cis/Mylv/Lehreinheiten.js | 206 +++++++++++ public/js/components/Cis/Mylv/Lehrenheiten.js | 12 - public/js/components/Cis/Mylv/MyLv.js | 6 +- public/js/components/Cis/Mylv/Supervisor.js | 3 +- system/phrasesupdate.php | 322 ++++++++++++++++++ 8 files changed, 603 insertions(+), 18 deletions(-) create mode 100644 public/js/api/factory/lehreinheit.js create mode 100644 public/js/components/Cis/Mylv/Lehreinheiten.js delete mode 100644 public/js/components/Cis/Mylv/Lehrenheiten.js diff --git a/application/controllers/api/frontend/v1/lv/Lehreinheit.php b/application/controllers/api/frontend/v1/lv/Lehreinheit.php index 6329d30ac..fb76540d0 100644 --- a/application/controllers/api/frontend/v1/lv/Lehreinheit.php +++ b/application/controllers/api/frontend/v1/lv/Lehreinheit.php @@ -19,7 +19,8 @@ class Lehreinheit extends FHCAPI_Controller 'getLehrfach' => ['admin:r', 'assistenz:r'], 'getSprache' => ['admin:r', 'assistenz:r'], 'getRaumtyp' => ['admin:r', 'assistenz:r'], - 'getLehrform' => ['admin:r', 'assistenz:r'] + 'getLehrform' => ['admin:r', 'assistenz:r'], + 'getLehreinheitenBySemester' => self::PERM_LOGGED, ]); $this->_ci = &get_instance(); @@ -438,6 +439,14 @@ class Lehreinheit extends FHCAPI_Controller $this->terminateWithSuccess($this->p->t('global', 'gespeichert')); } + public function getLehreinheitenBySemester() + { + $semester = $this->input->get('semester'); + $lehreinheiten = $this->LehreinheitModel->getLehrenheitenBySemester(getAuthUID(), $semester); + $lehreinheiten = $this->getDataOrTerminateWithError($lehreinheiten); + $this->terminateWithSuccess($lehreinheiten); + } + private function checkPermission($lehreinheit_id) { diff --git a/application/models/education/Lehreinheit_model.php b/application/models/education/Lehreinheit_model.php index 8a242cf2a..579532edb 100644 --- a/application/models/education/Lehreinheit_model.php +++ b/application/models/education/Lehreinheit_model.php @@ -763,4 +763,37 @@ EOSQL; return $this->execQuery($query, [$lva_id, $sem_kurzbz, $ma_uid]); } + + public function getLehrenheitenBySemester($uid, $semester) + { + $query = "SELECT + tbl_lehreinheit.lehreinheit_id, + lehrfach.kurzbz as lehrfach, + tbl_lehreinheit.lehrform_kurzbz as lehrform, + tbl_lehrveranstaltung.bezeichnung as lv_bezeichnung, + (SELECT kurzbz FROM public.tbl_mitarbeiter + WHERE mitarbeiter_uid=tbl_lehreinheitmitarbeiter.mitarbeiter_uid) as lektor, + UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as stg_kurzbz, + tbl_lehrveranstaltung.semester as lv_semester, + tbl_lehreinheit.raumtyp, + tbl_lehreinheit.raumtypalternativ, + tbl_lehreinheit.stundenblockung, + tbl_lehreinheit.wochenrythmus, + tbl_lehreinheitmitarbeiter.semesterstunden as semesterstunden, + tbl_lehreinheit.start_kw, + lvangebot.anmeldefenster_start, + lvangebot.anmeldefenster_ende + FROM + lehre.tbl_lehreinheit JOIN lehre.tbl_lehreinheitmitarbeiter USING(lehreinheit_id) + JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id) + JOIN public.tbl_studiengang USING(studiengang_kz) + JOIN lehre.tbl_lehrveranstaltung as lehrfach ON(tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id) + LEFT JOIN lehre.tbl_lvangebot as lvangebot ON(tbl_lehrveranstaltung.lehrveranstaltung_id=lvangebot.lehrveranstaltung_id) + WHERE + tbl_lehreinheit.studiensemester_kurzbz = '$semester' + AND mitarbeiter_uid = '$uid' + ORDER BY stg_kurzbz,lv_semester,lv_bezeichnung"; + + return $this->execReadOnlyQuery($query); + } } diff --git a/public/js/api/factory/lehreinheit.js b/public/js/api/factory/lehreinheit.js new file mode 100644 index 000000000..777c5154c --- /dev/null +++ b/public/js/api/factory/lehreinheit.js @@ -0,0 +1,28 @@ +/** + * Copyright (C) 2026 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 { + getLehreinheitenBySemester(semester) { + return { + method: 'get', + url: '/api/frontend/v1/lv/Lehreinheit/getLehreinheitenBySemester', + params: { + semester + }, + }; + }, +}; \ No newline at end of file diff --git a/public/js/components/Cis/Mylv/Lehreinheiten.js b/public/js/components/Cis/Mylv/Lehreinheiten.js new file mode 100644 index 000000000..4ba24d80e --- /dev/null +++ b/public/js/components/Cis/Mylv/Lehreinheiten.js @@ -0,0 +1,206 @@ +import { CoreFilterCmpt } from "../../filter/Filter.js"; + +import ApiLehreinheit from "../../../api/factory/lehreinheit.js"; + +export default { + name: "Lehreinheiten", + components: { + CoreFilterCmpt, + }, + props: { + semester: null | String, + }, + data() { + return { + lehreinheiten: [], + isFetchingLehreinheiten: false, + lehreinheitTableOptions: { + layout: "fitColumns", + columns: [ + { + titlePhrase: "lehreinheiten/inputGrades", + title: "placeholder", + field: "inputGrades", + widthGrow: 2, + }, + { + title: "ID", + field: "lehreinheitId", + widthGrow: 2, + }, + { + titlePhrase: "lehreinheiten/subject", + title: "placeholder", + field: "subject", + widthGrow: 2, + }, + { + titlePhrase: "lehreinheiten/lehrform", + title: "placeholder", + field: "lehrform", + widthGrow: 2, + }, + { + titlePhrase: "lehreinheiten/title", + title: "placeholder", + field: "title", + widthGrow: 3, + }, + { + titlePhrase: "lehreinheiten/lector", + title: "placeholder", + field: "lector", + widthGrow: 2, + }, + { + titlePhrase: "lehreinheiten/dp", + title: "placeholder", + field: "stg", + widthGrow: 2, + }, + { + titlePhrase: "lehreinheiten/sem", + title: "placeholder", + field: "semester", + widthGrow: 1, + }, + { + titlePhrase: "lehreinheiten/groups", + title: "placeholder", + field: "groups", + widthGrow: 2, + }, + { + titlePhrase: "lehreinheiten/room", + title: "placeholder", + field: "room", + widthGrow: 3, + }, + { + titlePhrase: "lehreinheiten/alt", + title: "placeholder", + field: "alternativeRoom", + widthGrow: 3, + }, + { + titlePhrase: "lehreinheiten/block", + title: "placeholder", + field: "block", + widthGrow: 1, + }, + { + titlePhrase: "lehreinheiten/wr", + title: "placeholder", + field: "weeklyRhythm", + widthGrow: 1, + }, + { + titlePhrase: "lehreinheiten/hrs", + title: "placeholder", + field: "hours", + widthGrow: 1, + bottomCalc: "sum", + bottomCalcParams: { precision: 2 }, + }, + { + titlePhrase: "lehreinheiten/cw", + title: "placeholder", + field: "cw", + widthGrow: 1, + }, + { + titlePhrase: "lehreinheiten/registrationWindowStart", + title: "placeholder", + field: "registrationWindowStart", + widthGrow: 2, + }, + { + titlePhrase: "lehreinheiten/registrationWindowEnd", + title: "placeholder", + field: "registrationWindowEnd", + widthGrow: 2, + }, + ], + locale: true, + persistence: false, + persistenceID: "supervisorTable", + }, + }; + }, + watch: { + semester() { + this.getLehreinheiten(); + }, + }, + methods: { + async getLehreinheiten() { + if (!this.$props.semester?.length) return; + + this.lehreinheiten = []; + this.isFetchingLehreinheiten = true; + + const lehreinheitenResponse = await this.$api.call( + ApiLehreinheit.getLehreinheitenBySemester(this.$props.semester), + ); + if (lehreinheitenResponse.meta.status === "success") { + this.lehreinheiten = lehreinheitenResponse.data.map( + (lehreinheitData) => { + return { + lehreinheitId: lehreinheitData.lehreinheit_id, + subject: lehreinheitData.lehrfach, + lehrform: lehreinheitData.lehrform, + title: lehreinheitData.lv_bezeichnung, + lector: lehreinheitData.lektor, + stg: lehreinheitData.stg_kurzbz, + semester: lehreinheitData.lv_semester, + room: lehreinheitData.raumtyp, + alternativeRoom: lehreinheitData.raumtypalternativ, + block: lehreinheitData.stundenblockung, + weeklyRhythm: lehreinheitData.wochenrythmus, + hours: lehreinheitData.semesterstunden, + cw: lehreinheitData.start_kw, + registrationWindowStart: + lehreinheitData.anmeldefenster_start, + registrationWindowEnd: + lehreinheitData.anmeldefenster_ende, + }; + }, + ); + } + this.setTableData(); + + this.isFetchingLehreinheiten = false; + }, + handleTableBuilt() { + this.setTableData(); + }, + setTableData() { + if (this.$refs.lehreinheitenTable && this.lehreinheiten?.length) { + this.$refs.lehreinheitenTable.tabulator.setData(this.lehreinheiten); + } + }, + }, + mounted() { + this.getLehreinheiten(); + }, + template: /*html*/ ` +
+
+ +
+
+
{{ lehreinheiten.length + " teaching units" }}
+ +
+
+

No teaching units found!

+
+
+ `, +}; diff --git a/public/js/components/Cis/Mylv/Lehrenheiten.js b/public/js/components/Cis/Mylv/Lehrenheiten.js deleted file mode 100644 index 97aa926a3..000000000 --- a/public/js/components/Cis/Mylv/Lehrenheiten.js +++ /dev/null @@ -1,12 +0,0 @@ -export default { - name: "Lehrenheiten", - props: ["current"], - data() { - return {}; - }, - template: /*html*/ ` -
- LEHRENHEITEN PLACEHOLDER -
- `, -} \ No newline at end of file diff --git a/public/js/components/Cis/Mylv/MyLv.js b/public/js/components/Cis/Mylv/MyLv.js index 7720a37c9..a0467c42c 100644 --- a/public/js/components/Cis/Mylv/MyLv.js +++ b/public/js/components/Cis/Mylv/MyLv.js @@ -1,5 +1,5 @@ import Lvs from "./Lvs.js"; -import Lehrenheiten from "./Lehrenheiten.js"; +import Lehreinheiten from "./Lehreinheiten.js"; import Supervisor from "./Supervisor.js"; import ApiAddons from "../../../api/factory/addons.js" @@ -8,7 +8,7 @@ export default { name: 'MyLv', components: { Lvs, - Lehrenheiten, + Lehreinheiten, Supervisor, }, data: () => { @@ -155,7 +155,7 @@ export default {

- +
diff --git a/public/js/components/Cis/Mylv/Supervisor.js b/public/js/components/Cis/Mylv/Supervisor.js index 59d5f52f6..daef104eb 100644 --- a/public/js/components/Cis/Mylv/Supervisor.js +++ b/public/js/components/Cis/Mylv/Supervisor.js @@ -15,7 +15,6 @@ export default { students: [], isFetchingStudents: false, supervisorTableOptions: { - index: "lehrveranstaltung_id", layout: "fitColumns", columns: [ { @@ -131,7 +130,7 @@ export default {
- {{ students.length + " supervised students" }} +
{{ students.length + " supervised students" }}
'core', + 'category' => 'lehreinheiten', + 'phrase' => 'inputGrades', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Noten eintragen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Input grades', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'lehreinheiten', + 'phrase' => 'subject', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Lehrfach', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Subject', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'lehreinheiten', + 'phrase' => 'lehrform', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Lehrform', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Course Type', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'lehreinheiten', + 'phrase' => 'title', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'LV Bezeichnung', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Course Title', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'lehreinheiten', + 'phrase' => 'lector', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Lektor/in', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Lector', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'lehreinheiten', + 'phrase' => 'dp', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Stg', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'DP', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'lehreinheiten', + 'phrase' => 'sem', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Sem', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Sem', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'lehreinheiten', + 'phrase' => 'groups', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Gruppen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Groups', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'lehreinheiten', + 'phrase' => 'room', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Raumtyp', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Room', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'lehreinheiten', + 'phrase' => 'alt', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Alternativ', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Alternative', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'lehreinheiten', + 'phrase' => 'block', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Block', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Block', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'lehreinheiten', + 'phrase' => 'wr', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'WR', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'WR', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'lehreinheiten', + 'phrase' => 'hrs', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Std', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Hrs', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'lehreinheiten', + 'phrase' => 'cw', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'KW', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'CW', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'lehreinheiten', + 'phrase' => 'registrationWindowStart', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Anm. von', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Registration Start', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'lehreinheiten', + 'phrase' => 'registrationWindowEnd', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Anm. bis', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Registration End', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + // LEHREINHEITEN PHRASES END ); From 4549c92d501e51e60870844f4dc205f7b5f8e947 Mon Sep 17 00:00:00 2001 From: adisposkofh Date: Tue, 6 Oct 2026 13:48:23 +0200 Subject: [PATCH 06/15] myLV lehreinheiten table formatting --- .../models/education/Lehreinheit_model.php | 3 ++- .../js/components/Cis/Mylv/Lehreinheiten.js | 20 ++++++++++++++++++- public/js/components/Cis/Mylv/MyLv.js | 5 +++-- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/application/models/education/Lehreinheit_model.php b/application/models/education/Lehreinheit_model.php index 579532edb..9ee0e9012 100644 --- a/application/models/education/Lehreinheit_model.php +++ b/application/models/education/Lehreinheit_model.php @@ -782,7 +782,8 @@ EOSQL; tbl_lehreinheitmitarbeiter.semesterstunden as semesterstunden, tbl_lehreinheit.start_kw, lvangebot.anmeldefenster_start, - lvangebot.anmeldefenster_ende + lvangebot.anmeldefenster_ende, + tbl_lehrveranstaltung.lehrveranstaltung_id FROM lehre.tbl_lehreinheit JOIN lehre.tbl_lehreinheitmitarbeiter USING(lehreinheit_id) JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id) diff --git a/public/js/components/Cis/Mylv/Lehreinheiten.js b/public/js/components/Cis/Mylv/Lehreinheiten.js index 4ba24d80e..c7f9204f2 100644 --- a/public/js/components/Cis/Mylv/Lehreinheiten.js +++ b/public/js/components/Cis/Mylv/Lehreinheiten.js @@ -22,6 +22,21 @@ export default { title: "placeholder", field: "inputGrades", widthGrow: 2, + formatter: () => { + return ''; + }, + hozAlign: "center", + cellClick: (event, cell) => { + window.open( + FHC_JS_DATA_STORAGE_OBJECT.app_root + + FHC_JS_DATA_STORAGE_OBJECT.ci_router + + "/Cis/Compat/legacy/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php?lvid=" + + cell._cell.row.data.lvId + + "&stsem=" + + this.$props.semester, + "_blank", + ); + }, }, { title: "ID", @@ -147,6 +162,7 @@ export default { (lehreinheitData) => { return { lehreinheitId: lehreinheitData.lehreinheit_id, + lvId: lehreinheitData.lehrveranstaltung_id, subject: lehreinheitData.lehrfach, lehrform: lehreinheitData.lehrform, title: lehreinheitData.lv_bezeichnung, @@ -176,7 +192,9 @@ export default { }, setTableData() { if (this.$refs.lehreinheitenTable && this.lehreinheiten?.length) { - this.$refs.lehreinheitenTable.tabulator.setData(this.lehreinheiten); + this.$refs.lehreinheitenTable.tabulator.setData( + this.lehreinheiten, + ); } }, }, diff --git a/public/js/components/Cis/Mylv/MyLv.js b/public/js/components/Cis/Mylv/MyLv.js index a0467c42c..bd4de3317 100644 --- a/public/js/components/Cis/Mylv/MyLv.js +++ b/public/js/components/Cis/Mylv/MyLv.js @@ -18,7 +18,8 @@ export default { lvs: {}, currentSemester: null, modes: ["lvs", "lehrenheiten", "supervision", "all"], - selectedMode: "lvs" + // todo: replace with lvs after dev + selectedMode: "lehrenheiten" }; }, provide() { @@ -148,7 +149,7 @@ export default {
From d8959d9776ff9a798c77cb5f297f0a4c6ec3205a Mon Sep 17 00:00:00 2001 From: adisposkofh Date: Tue, 6 Oct 2026 17:00:28 +0200 Subject: [PATCH 07/15] added groups to myLv lehreinheiten table --- .../controllers/api/frontend/v1/lv/Lehreinheit.php | 13 +++++++++++++ application/models/education/Lehreinheit_model.php | 9 +++++++++ public/js/components/Cis/Mylv/Lehreinheiten.js | 2 ++ 3 files changed, 24 insertions(+) diff --git a/application/controllers/api/frontend/v1/lv/Lehreinheit.php b/application/controllers/api/frontend/v1/lv/Lehreinheit.php index fb76540d0..71ef771e7 100644 --- a/application/controllers/api/frontend/v1/lv/Lehreinheit.php +++ b/application/controllers/api/frontend/v1/lv/Lehreinheit.php @@ -444,6 +444,19 @@ class Lehreinheit extends FHCAPI_Controller $semester = $this->input->get('semester'); $lehreinheiten = $this->LehreinheitModel->getLehrenheitenBySemester(getAuthUID(), $semester); $lehreinheiten = $this->getDataOrTerminateWithError($lehreinheiten); + + foreach ($lehreinheiten as $lehreinheit) { + $groups = $this->LehreinheitModel->getGroupsByLehreinheit($lehreinheit->lehreinheit_id); + $groups = $this->getDataOrTerminateWithError($groups); + $stgKurzbz = $lehreinheit->stg_kurzbz; + $lehreinheit->groups = array_map( + function ($group) use ($stgKurzbz) { + return $group->gruppe_kurzbz ?? $stgKurzbz . "-" . $group->semester . $group->verband . $group->gruppe; + }, + $groups + ); + } + $this->terminateWithSuccess($lehreinheiten); } diff --git a/application/models/education/Lehreinheit_model.php b/application/models/education/Lehreinheit_model.php index 9ee0e9012..587243b2d 100644 --- a/application/models/education/Lehreinheit_model.php +++ b/application/models/education/Lehreinheit_model.php @@ -797,4 +797,13 @@ EOSQL; return $this->execReadOnlyQuery($query); } + + public function getGroupsByLehreinheit($lehreinheitId) + { + $query = "SELECT * + FROM lehre.tbl_lehreinheitgruppe + WHERE lehreinheit_id='$lehreinheitId'"; + + return $this->execReadOnlyQuery($query); + } } diff --git a/public/js/components/Cis/Mylv/Lehreinheiten.js b/public/js/components/Cis/Mylv/Lehreinheiten.js index c7f9204f2..71083ea4e 100644 --- a/public/js/components/Cis/Mylv/Lehreinheiten.js +++ b/public/js/components/Cis/Mylv/Lehreinheiten.js @@ -84,6 +84,7 @@ export default { title: "placeholder", field: "groups", widthGrow: 2, + formatter: "textarea", }, { titlePhrase: "lehreinheiten/room", @@ -169,6 +170,7 @@ export default { lector: lehreinheitData.lektor, stg: lehreinheitData.stg_kurzbz, semester: lehreinheitData.lv_semester, + groups: lehreinheitData.groups?.join("\n"), room: lehreinheitData.raumtyp, alternativeRoom: lehreinheitData.raumtypalternativ, block: lehreinheitData.stundenblockung, From 4768fbda151c1c5d96bc8759e5c38c4029641d9b Mon Sep 17 00:00:00 2001 From: adisposkofh Date: Tue, 6 Oct 2026 17:13:42 +0200 Subject: [PATCH 08/15] saving last selected myLv mode; hiding modes for students --- public/js/components/Cis/Mylv/MyLv.js | 20 +++++-- system/phrasesupdate.php | 82 +++++++++++++++++++++++++++ 2 files changed, 98 insertions(+), 4 deletions(-) diff --git a/public/js/components/Cis/Mylv/MyLv.js b/public/js/components/Cis/Mylv/MyLv.js index bd4de3317..d7216797c 100644 --- a/public/js/components/Cis/Mylv/MyLv.js +++ b/public/js/components/Cis/Mylv/MyLv.js @@ -18,8 +18,7 @@ export default { lvs: {}, currentSemester: null, modes: ["lvs", "lehrenheiten", "supervision", "all"], - // todo: replace with lvs after dev - selectedMode: "lehrenheiten" + selectedMode: "lvs" }; }, provide() { @@ -95,6 +94,19 @@ export default { return this.studiensemester[this.studiensemester.length-1].studiensemester_kurzbz == this.currentSemester; }, }, + watch: { + isMitarbeiter() { + if (this.isMitarbeiter) { + const lastSelectedMode = window.localStorage.getItem("cis4-mylv-lastSelectedMode"); + if (this.modes.includes(lastSelectedMode)) { + this.selectedMode = lastSelectedMode; + } + } + }, + selectedMode(mode) { + window.localStorage.setItem("cis4-mylv-lastSelectedMode", mode); + }, + }, methods: { prevSem() { this.$refs.studiensemester.selectedIndex--; @@ -147,9 +159,9 @@ export default { -
+
diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index a54cdba09..bad744f92 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -67477,6 +67477,88 @@ I have been informed that I am under no obligation to consent to the transmissio ) ), // LEHREINHEITEN PHRASES END + // MYLV PHRASES START + array( + 'app' => 'core', + 'category' => 'mylv', + 'phrase' => 'lvs', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'LVs', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Course programs', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'mylv', + 'phrase' => 'lehrenheiten', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Lehrenheiten', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Teaching units', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'mylv', + 'phrase' => 'supervision', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Betreuungen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Supervision', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'mylv', + 'phrase' => 'all', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Alles zeigen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Show all', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + // MYLV PHRASES END ); From 2e15f2c5ab11bbd092d0c95aa0c61e5ecf16f93e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Wed, 7 Oct 2026 09:10:51 +0200 Subject: [PATCH 09/15] Edit Dialog von Kontaktdaten bei Projektbetreuer die Mitarbeiter sind wird nicht angezeigt --- .../Details/Projektarbeit/Projektbetreuer.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js index c1ba5bcd2..eba03b8f7 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js @@ -433,7 +433,11 @@ export default { }, actionKontaktdatenBearbeiten() { if (!this.autocompleteSelectedBetreuer) return; - if (this.isMitarbeiter) this.$fhcAlert.alertError(this.$p.t('ui', 'editingMitarbeiterPVonly')); + if (this.isMitarbeiter) + { + this.$fhcAlert.alertError(this.$p.t('ui', 'editingMitarbeiterPVonly')); + return; + } this.$refs.kontaktdatenModal.show(); }, // stuff to do after new person has been saved From 70a93cc093bc33de5dd9e12dc8de6d66b86c6c6b Mon Sep 17 00:00:00 2001 From: adisposkofh Date: Wed, 7 Oct 2026 10:15:57 +0200 Subject: [PATCH 10/15] minor phrases fix --- system/phrasesupdate.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index bad744f92..0c47cab79 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -67486,7 +67486,7 @@ I have been informed that I am under no obligation to consent to the transmissio 'phrases' => array( array( 'sprache' => 'German', - 'text' => 'LVs', + 'text' => 'Lehrveranstaltungen', 'description' => '', 'insertvon' => 'system' ), From 2b44b421dc63759bde557d7d258fbad4dc0884fc Mon Sep 17 00:00:00 2001 From: adisposkofh Date: Wed, 7 Oct 2026 10:16:26 +0200 Subject: [PATCH 11/15] minor phrases fix --- system/phrasesupdate.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 0c47cab79..bad744f92 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -67486,7 +67486,7 @@ I have been informed that I am under no obligation to consent to the transmissio 'phrases' => array( array( 'sprache' => 'German', - 'text' => 'Lehrveranstaltungen', + 'text' => 'LVs', 'description' => '', 'insertvon' => 'system' ), From 50a518ea7ada7ca41d1dc2c46975c95adc46d01e Mon Sep 17 00:00:00 2001 From: adisposkofh Date: Wed, 7 Oct 2026 10:53:46 +0200 Subject: [PATCH 12/15] additional mylv localizations --- .../js/components/Cis/Mylv/Lehreinheiten.js | 2 +- public/js/components/Cis/Mylv/MyLv.js | 4 +- public/js/components/Cis/Mylv/Supervisor.js | 4 +- system/phrasesupdate.php | 64 ++++++++++++++++++- 4 files changed, 67 insertions(+), 7 deletions(-) diff --git a/public/js/components/Cis/Mylv/Lehreinheiten.js b/public/js/components/Cis/Mylv/Lehreinheiten.js index 71083ea4e..6ef2cdd47 100644 --- a/public/js/components/Cis/Mylv/Lehreinheiten.js +++ b/public/js/components/Cis/Mylv/Lehreinheiten.js @@ -209,7 +209,7 @@ export default {
-
{{ lehreinheiten.length + " teaching units" }}
+
{{ lehreinheiten.length + " " + $p.t("mylv/lehreinheiten") }}

- +
diff --git a/public/js/components/Cis/Mylv/Supervisor.js b/public/js/components/Cis/Mylv/Supervisor.js index daef104eb..e54ac8898 100644 --- a/public/js/components/Cis/Mylv/Supervisor.js +++ b/public/js/components/Cis/Mylv/Supervisor.js @@ -130,7 +130,7 @@ export default {
-
{{ students.length + " supervised students" }}
+
{{ students.length + " " + $p.t("mylv/supervised_students") }}
-

No supervised students found!

+

{{ $p.t("mylv/no_supervised") }}

`, diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index bad744f92..140734e55 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -67501,12 +67501,12 @@ I have been informed that I am under no obligation to consent to the transmissio array( 'app' => 'core', 'category' => 'mylv', - 'phrase' => 'lehrenheiten', + 'phrase' => 'lehreinheiten', 'insertvon' => 'system', 'phrases' => array( array( 'sprache' => 'German', - 'text' => 'Lehrenheiten', + 'text' => 'Lehreinheiten', 'description' => '', 'insertvon' => 'system' ), @@ -67558,6 +67558,66 @@ I have been informed that I am under no obligation to consent to the transmissio ) ) ), + array( + 'app' => 'core', + 'category' => 'mylv', + 'phrase' => 'supervised_students', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Betreute Studierende', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Supervised students', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'mylv', + 'phrase' => 'no_supervised', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Keine Betreute Studierende gefunden!', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'No supervised students found!', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'mylv', + 'phrase' => 'no_lehreinheiten', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Keine Lehreinheiten gefunden!', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'No teaching units found!', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), // MYLV PHRASES END ); From 45647f0cec63ed52628d4f5bf9cc439e958b1336 Mon Sep 17 00:00:00 2001 From: adisposkofh Date: Wed, 7 Oct 2026 11:39:22 +0200 Subject: [PATCH 13/15] showing average grades in mylv table (already implemented in cards view) --- .../Studiengang => }/AverageGrade.js | 4 +-- public/js/components/Cis/Mylv/Lvs.js | 21 +++++++++-- public/js/components/Cis/Mylv/Semester.js | 14 ++++++-- .../Cis/Mylv/Semester/Studiengang.js | 19 ++-------- public/js/components/Cis/Mylv/Table.js | 35 ++++++++++--------- 5 files changed, 53 insertions(+), 40 deletions(-) rename public/js/components/Cis/Mylv/{Semester/Studiengang => }/AverageGrade.js (94%) diff --git a/public/js/components/Cis/Mylv/Semester/Studiengang/AverageGrade.js b/public/js/components/Cis/Mylv/AverageGrade.js similarity index 94% rename from public/js/components/Cis/Mylv/Semester/Studiengang/AverageGrade.js rename to public/js/components/Cis/Mylv/AverageGrade.js index ab43e0787..5978f68e6 100644 --- a/public/js/components/Cis/Mylv/Semester/Studiengang/AverageGrade.js +++ b/public/js/components/Cis/Mylv/AverageGrade.js @@ -1,5 +1,5 @@ -import Phrasen from "../../../../../mixins/Phrasen.js"; -import ApiLehre from "../../../../../api/factory/lehre.js"; +import Phrasen from "../../../mixins/Phrasen.js"; +import ApiLehre from "../../../api/factory/lehre.js"; export default { mixins: [ diff --git a/public/js/components/Cis/Mylv/Lvs.js b/public/js/components/Cis/Mylv/Lvs.js index 536a03384..ccda92234 100644 --- a/public/js/components/Cis/Mylv/Lvs.js +++ b/public/js/components/Cis/Mylv/Lvs.js @@ -1,12 +1,15 @@ import MylvSemesterCards from "./Semester.js"; import MylvTable from "./Table.js"; +import MylvSemesterStudiengangAverageGrade from "./AverageGrade.js"; export default { name: "Lvs", components: { MylvSemesterCards, - MylvTable + MylvTable, + MylvSemesterStudiengangAverageGrade, }, + inject: ['isStudent'], props: ["current"], data() { return { @@ -39,8 +42,20 @@ export default { - - + + + + + + `, } \ No newline at end of file diff --git a/public/js/components/Cis/Mylv/Semester.js b/public/js/components/Cis/Mylv/Semester.js index f774be506..6305dfbdb 100644 --- a/public/js/components/Cis/Mylv/Semester.js +++ b/public/js/components/Cis/Mylv/Semester.js @@ -37,9 +37,19 @@ export default { return this.lvs.filter(lv => lv.studiengang_kz == studiengang.studiengang_kz && lv.semester == studiengang.semester); } }, - template: ` + template: /*html*/ `
- + + +
diff --git a/public/js/components/Cis/Mylv/Semester/Studiengang.js b/public/js/components/Cis/Mylv/Semester/Studiengang.js index c026f952f..b085b5ce2 100644 --- a/public/js/components/Cis/Mylv/Semester/Studiengang.js +++ b/public/js/components/Cis/Mylv/Semester/Studiengang.js @@ -1,5 +1,4 @@ import MylvSemesterStudiengangLv from "./Studiengang/Lv.js"; -import MylvSemesterStudiengangAverageGrade from "./Studiengang/AverageGrade.js"; import Phrasen from "../../../../mixins/Phrasen.js"; import ApiAuthinfo from '../../../../api/factory/authinfo.js'; @@ -8,7 +7,6 @@ export default { name: 'Studiengang', components: { MylvSemesterStudiengangLv, - MylvSemesterStudiengangAverageGrade }, mixins: [ Phrasen @@ -21,11 +19,6 @@ export default { lvs: Array, sg_bezeichnung_eng: String }, - data() { - return { - isAverageGradeDisplayed: false, - } - }, computed: { lehrveranstaltungen() { return [... new Map( @@ -41,16 +34,8 @@ export default { note(lv) { return lv.benotung ? lv.znote || lv.lvnote || null : null; }, - async checkIfAverageGradeIsDisplayed() { - const authInfoResponse = await this.$api.call(ApiAuthinfo.getAuthInfo()); - const authInfo = authInfoResponse.data; - this.isAverageGradeDisplayed = !!authInfo.isStudent; - }, }, - created() { - this.checkIfAverageGradeIsDisplayed(); - }, - template: ` + template: /*html*/ `

{{$p.user_language.value === 'English' ? sg_bezeichnung_eng : bezeichnung}} - {{kuerzel}} @@ -61,7 +46,7 @@ export default {

- +
` }; diff --git a/public/js/components/Cis/Mylv/Table.js b/public/js/components/Cis/Mylv/Table.js index ed4057753..6e0142bc3 100644 --- a/public/js/components/Cis/Mylv/Table.js +++ b/public/js/components/Cis/Mylv/Table.js @@ -325,22 +325,25 @@ export default { deep: true } }, - template: ` -
- -
-
- + template: /*html*/ ` +
+
+ +
+
+ +
+
` }; \ No newline at end of file From 9e2cc68531d86280f9acf6fb20cf5f7017e87e87 Mon Sep 17 00:00:00 2001 From: adisposkofh Date: Wed, 7 Oct 2026 17:09:22 +0200 Subject: [PATCH 14/15] fixed prop type syntax --- public/js/components/Calendar/Base/Grid.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/js/components/Calendar/Base/Grid.js b/public/js/components/Calendar/Base/Grid.js index 429546309..759bd3a61 100644 --- a/public/js/components/Calendar/Base/Grid.js +++ b/public/js/components/Calendar/Base/Grid.js @@ -60,7 +60,7 @@ export default { axisMainCollapsible: Boolean, snapToGrid: Boolean, overwrittenEvents: { - type: Array | null, + type: [Array, null], default: null, }, shouldMatchParentHeight: { From 4e7a3b22fe276af461785d9d0f3f8774ee2373ee Mon Sep 17 00:00:00 2001 From: adisposkofh Date: Fri, 9 Oct 2026 10:04:50 +0200 Subject: [PATCH 15/15] displaying wahlname (if not null) instead of vorname in betreuungen table --- application/controllers/api/frontend/v1/lv/Betreuungen.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/controllers/api/frontend/v1/lv/Betreuungen.php b/application/controllers/api/frontend/v1/lv/Betreuungen.php index f81474fd2..2ca822649 100644 --- a/application/controllers/api/frontend/v1/lv/Betreuungen.php +++ b/application/controllers/api/frontend/v1/lv/Betreuungen.php @@ -45,7 +45,7 @@ class Betreuungen extends FHCAPI_Controller $betreuungenQuery = "SELECT tbl_lehrveranstaltung.bezeichnung, tbl_projektarbeit.titel, - (SELECT nachname || ' ' || vorname + (SELECT nachname || ' ' || (CASE WHEN wahlname IS NOT NULL THEN wahlname ELSE vorname END) FROM public.tbl_benutzer JOIN public.tbl_person USING(person_id) WHERE uid=student_uid)