From 03af6bfda5058d4b6374a9a6efcf2faabd595479 Mon Sep 17 00:00:00 2001 From: adisposkofh Date: Tue, 29 Sep 2026 17:12:52 +0200 Subject: [PATCH 01/12] 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/12] 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 {
- - - + +
+ +
+
From d8959d9776ff9a798c77cb5f297f0a4c6ec3205a Mon Sep 17 00:00:00 2001 From: adisposkofh Date: Tue, 6 Oct 2026 17:00:28 +0200 Subject: [PATCH 06/12] 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 07/12] 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 70a93cc093bc33de5dd9e12dc8de6d66b86c6c6b Mon Sep 17 00:00:00 2001 From: adisposkofh Date: Wed, 7 Oct 2026 10:15:57 +0200 Subject: [PATCH 08/12] 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 09/12] 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 10/12] 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 11/12] 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 4e7a3b22fe276af461785d9d0f3f8774ee2373ee Mon Sep 17 00:00:00 2001 From: adisposkofh Date: Fri, 9 Oct 2026 10:04:50 +0200 Subject: [PATCH 12/12] 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)