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..2ca822649 --- /dev/null +++ b/application/controllers/api/frontend/v1/lv/Betreuungen.php @@ -0,0 +1,81 @@ +. + */ + +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() + { + $semester = $this->input->get("semester"); + if (!$semester) $this->terminateWithError("Missing parameters!"); + + $personId = getAuthPersonId(); + + $betreuungenQuery = "SELECT + tbl_lehrveranstaltung.bezeichnung, + tbl_projektarbeit.titel, + (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) + 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/application/controllers/api/frontend/v1/lv/Lehreinheit.php b/application/controllers/api/frontend/v1/lv/Lehreinheit.php index 6329d30ac..71ef771e7 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,27 @@ 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); + + 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); + } + private function checkPermission($lehreinheit_id) { diff --git a/application/models/education/Lehreinheit_model.php b/application/models/education/Lehreinheit_model.php index 3d0ec34dc..f446f7c84 100644 --- a/application/models/education/Lehreinheit_model.php +++ b/application/models/education/Lehreinheit_model.php @@ -862,4 +862,47 @@ 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, + tbl_lehrveranstaltung.lehrveranstaltung_id + 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); + } + + public function getGroupsByLehreinheit($lehreinheitId) + { + $query = "SELECT * + FROM lehre.tbl_lehreinheitgruppe + WHERE lehreinheit_id='$lehreinheitId'"; + + return $this->execReadOnlyQuery($query); + } } 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/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/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/Lehreinheiten.js b/public/js/components/Cis/Mylv/Lehreinheiten.js new file mode 100644 index 000000000..6ef2cdd47 --- /dev/null +++ b/public/js/components/Cis/Mylv/Lehreinheiten.js @@ -0,0 +1,226 @@ +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, + 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", + 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, + formatter: "textarea", + }, + { + 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, + lvId: lehreinheitData.lehrveranstaltung_id, + subject: lehreinheitData.lehrfach, + lehrform: lehreinheitData.lehrform, + title: lehreinheitData.lv_bezeichnung, + 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, + 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 + " " + $p.t("mylv/lehreinheiten") }}
+ +
+
+

No teaching units found!

+
+
+ `, +}; diff --git a/public/js/components/Cis/Mylv/Lvs.js b/public/js/components/Cis/Mylv/Lvs.js new file mode 100644 index 000000000..ccda92234 --- /dev/null +++ b/public/js/components/Cis/Mylv/Lvs.js @@ -0,0 +1,61 @@ +import MylvSemesterCards from "./Semester.js"; +import MylvTable from "./Table.js"; +import MylvSemesterStudiengangAverageGrade from "./AverageGrade.js"; + +export default { + name: "Lvs", + components: { + MylvSemesterCards, + MylvTable, + MylvSemesterStudiengangAverageGrade, + }, + inject: ['isStudent'], + 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..4450fa37e 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 Lehreinheiten from "./Lehreinheiten.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, + Lehreinheiten, + Supervisor, }, data: () => { return { @@ -17,7 +17,8 @@ export default { studiensemester: null, lvs: {}, currentSemester: null, - mode: localStorage.getItem('myLvaDefaultMode') ?? 'cards' + modes: ["lvs", "lehreinheiten", "supervision", "all"], + selectedMode: "lvs" }; }, provide() { @@ -91,13 +92,22 @@ export default { }, currentIsLast() { 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: { - 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 +136,7 @@ export default { next(); }, - template: ` + template: /*html*/ `

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


@@ -135,48 +145,41 @@ 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/Supervisor.js b/public/js/components/Cis/Mylv/Supervisor.js new file mode 100644 index 000000000..e54ac8898 --- /dev/null +++ b/public/js/components/Cis/Mylv/Supervisor.js @@ -0,0 +1,147 @@ +import { CoreFilterCmpt } from "../../../components/filter/Filter.js"; + +import ApiBetreuungen from "../../../api/factory/betreuungen.js"; + +export default { + name: "Supervisor", + components: { + CoreFilterCmpt, + }, + props: { + semester: null | String, + }, + data() { + return { + students: [], + isFetchingStudents: false, + supervisorTableOptions: { + 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", + title: "placeholder", + field: "semester", + widthGrow: 1, + }, + { + titlePhrase: "betreuungen/stunden", + title: "placeholder", + field: "stunden", + widthGrow: 1, + bottomCalc: "sum", + bottomCalcParams: { precision: 2 }, + }, + { + titlePhrase: "betreuungen/lvBezeichnung", + title: "placeholder", + field: "bezeichnung", + widthGrow: 3, + }, + { + titlePhrase: "betreuungen/student", + title: "placeholder", + field: "name", + widthGrow: 3, + formatter: "link", + formatterParams: { + target: "_blank", + url: (cell) => { + return this.$router.resolve({ + name: "ProfilView", + params: { uid: cell._cell.row.data.uid }, + }).href; + }, + }, + }, + { + titlePhrase: "betreuungen/betreuungsart", + title: "placeholder", + field: "beutreuerart_beschreibung", + widthGrow: 3, + }, + { + titlePhrase: "betreuungen/titelProjektarbeit", + title: "placeholder", + field: "titel", + widthGrow: 6, + }, + ], + locale: true, + persistence: false, + persistenceID: "supervisorTable", + }, + }; + }, + watch: { + semester() { + this.getStudents(); + }, + }, + methods: { + async getStudents() { + if (!this.$props.semester?.length) return; + + this.students = []; + this.isFetchingStudents = true; + + const studentsResponse = await this.$api.call( + ApiBetreuungen.getBetreuungen(this.$props.semester), + ); + if (studentsResponse.meta.status === "success") { + this.students = studentsResponse.data.map((studentData) => { + studentData.stunden = parseFloat( + studentData.stunden, + ).toFixed(2); + return { ...studentData }; + }); + this.setTableData(); + } + + this.isFetchingStudents = false; + }, + handleTableBuilt() { + this.setTableData(); + }, + setTableData() { + if (this.$refs.supervisorTable && this.students?.length) { + this.$refs.supervisorTable.tabulator.setData(this.students); + } + }, + }, + mounted() { + this.getStudents(); + }, + template: /*html*/ ` +
+
+ +
+
+
{{ students.length + " " + $p.t("mylv/supervised_students") }}
+ +
+
+

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

+
+
+ `, +}; diff --git a/public/js/components/Cis/Mylv/Table.js b/public/js/components/Cis/Mylv/Table.js index 18f169e8f..6e0142bc3 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: { @@ -324,22 +325,25 @@ export default { deep: true } }, - template: ` -
- -
-
- + template: /*html*/ ` +
+
+ +
+
+ +
+
` }; \ No newline at end of file diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index fd8964878..11c110f4f 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -67193,6 +67193,612 @@ I have been informed that I am under no obligation to consent to the transmissio ) ) ), + // BETREUUNGEN PHRASES START + array( + 'app' => 'core', + 'category' => 'betreuungen', + 'phrase' => 'studiengang', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Stg', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'DP', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'betreuungen', + 'phrase' => 'semester', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Sem', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Sem', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'betreuungen', + 'phrase' => 'stunden', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Std', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Hrs', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'betreuungen', + 'phrase' => 'lvBezeichnung', + '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' => 'betreuungen', + 'phrase' => 'student', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Student/in', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Student', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'betreuungen', + 'phrase' => 'betreuungsart', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Betreuungsart', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Supervision type', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'betreuungen', + 'phrase' => 'titelProjektarbeit', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Titel der Projektarbeit', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Project title', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + // BETREUUNGEN PHRASES END + // LEHREINHEITEN PHRASES END + array( + 'app' => '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 + // 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' => 'lehreinheiten', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Lehreinheiten', + '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' + ) + ) + ), + 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 );