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/controllers/api/frontend/v1/stv/Kontakt.php b/application/controllers/api/frontend/v1/stv/Kontakt.php
index d246a04d9..cd35768f3 100644
--- a/application/controllers/api/frontend/v1/stv/Kontakt.php
+++ b/application/controllers/api/frontend/v1/stv/Kontakt.php
@@ -574,6 +574,19 @@ class Kontakt extends FHCAPI_Controller
$person_id = $this->input->post('person_id');
$standort_id = $this->input->post('standort_id');
+ //check person_id: allow editing only of persons who are no mitarbeiter
+ if($person_id)
+ {
+ $this->load->model('person/Benutzer_model', 'BenutzerModel');
+ $this->BenutzerModel->addJoin('public.tbl_mitarbeiter ma', 'ON (ma.mitarbeiter_uid = public.tbl_benutzer.uid)');
+
+ $result = $this->BenutzerModel->loadWhere([
+ 'person_id' => $person_id
+ ]);
+ if(hasData($result))
+ return $this->terminateWithError($this->p->t('ui', 'editingMitarbeiterPVonly'), self::ERROR_TYPE_GENERAL);
+ }
+
$result = $this->KontaktModel->update(
[
'kontakt_id' => $kontakt_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/Bootstrap/Modal.js b/public/js/components/Bootstrap/Modal.js
index 0f2504da6..778951c46 100644
--- a/public/js/components/Bootstrap/Modal.js
+++ b/public/js/components/Bootstrap/Modal.js
@@ -103,6 +103,13 @@ export default {
keyboard: this.keyboard
});
},
+ //to avoid pagelocks if more than one instance
+ beforeUnmount() {
+ if (this.modal) {
+ this.modal.dispose();
+ this.modal = null;
+ }
+ },
popup(body, options, title, footer) {
const BsModal = this,
slots = {};
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: {
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/public/js/components/Stv/Studentenverwaltung/Details/Kontakt/Contact.js b/public/js/components/Stv/Studentenverwaltung/Details/Kontakt/Contact.js
index 4bdda4762..f6f884dde 100644
--- a/public/js/components/Stv/Studentenverwaltung/Details/Kontakt/Contact.js
+++ b/public/js/components/Stv/Studentenverwaltung/Details/Kontakt/Contact.js
@@ -263,7 +263,7 @@ export default {
this.$refs[modalRef].hide();
},
reload() {
- this.$refs.table.reloadTable();
+ this.$refs.table?.reloadTable();
},
searchFirma(event) {
if (this.abortController.firmen) {
diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js
index 8be2d0153..eba03b8f7 100644
--- a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js
+++ b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js
@@ -30,6 +30,9 @@ export default {
computed: {
betreuerFormOpened() {
return this.newMode || this.editMode;
+ },
+ isMitarbeiter(){
+ return this.autocompleteSelectedBetreuer?.name?.includes('Mitarbeiter') ?? false;
}
},
props: {
@@ -430,6 +433,11 @@ export default {
},
actionKontaktdatenBearbeiten() {
if (!this.autocompleteSelectedBetreuer) return;
+ 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
@@ -494,7 +502,12 @@ export default {
-
+
@@ -605,7 +618,7 @@ export default {
-
+
`
}
diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php
index fd8964878..501b5d38e 100644
--- a/system/phrasesupdate.php
+++ b/system/phrasesupdate.php
@@ -63774,6 +63774,26 @@ I have been informed that I am under no obligation to consent to the transmissio
)
),
// ### 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'
+ )
+ )
+ ),
//**************************** CIS Projektabgabeuebersicht start
array(
'app' => 'core',
@@ -67193,6 +67213,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
);