diff --git a/application/controllers/components/Cis/Mylv.php b/application/controllers/components/Cis/Mylv.php index 3ce6106b0..b6d10931c 100644 --- a/application/controllers/components/Cis/Mylv.php +++ b/application/controllers/components/Cis/Mylv.php @@ -13,12 +13,13 @@ class Mylv extends Auth_Controller */ public function __construct() { + parent::__construct([ - 'Student' => ['student/anrechnung_beantragen:r','user:r'], // TODO(chris): permissions? - 'Studiensemester' => ['student/anrechnung_beantragen:r','user:r'], // TODO(chris): permissions? - 'Lvs' => ['student/anrechnung_beantragen:r','user:r'], // TODO(chris): permissions? - 'Info' => ['student/anrechnung_beantragen:r','user:r'], // TODO(chris): permissions? - 'Pruefungen' => ['student/anrechnung_beantragen:r','user:r'] // TODO(chris): permissions? + 'Student' => ['student/anrechnung_beantragen:r','user:r', 'basis/cis:r'], // TODO(chris): permissions? + 'Studiensemester' => ['student/anrechnung_beantragen:r','user:r', 'basis/cis:r'], // TODO(chris): permissions? + 'Lvs' => ['student/anrechnung_beantragen:r','user:r', 'basis/cis:r'], // TODO(chris): permissions? + 'Info' => ['student/anrechnung_beantragen:r','user:r', 'basis/cis:r'], // TODO(chris): permissions? + 'Pruefungen' => ['student/anrechnung_beantragen:r','user:r', 'basis/cis:r'] // TODO(chris): permissions? ]); } @@ -48,7 +49,6 @@ class Mylv extends Auth_Controller $this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel'); $isMitarbeiter = getData($this->MitarbeiterModel->isMitarbeiter(getAuthUID())) ?? false; - $isStudent = getData($this->StudentModel->isStudent(getAuthUID())) ?? false; if($isMitarbeiter) { $result = $this->StudiensemesterModel->getWhereMitarbeiterHasLvs(getAuthUID()); @@ -56,7 +56,7 @@ class Mylv extends Auth_Controller return $this->outputJsonError(getError($result)); $this->outputJsonSuccess(getData($result)); - } else if($isStudent) { // $isStudent + } else if(getData($this->StudentModel->isStudent(getAuthUID())) ?? false) { // $isStudent $result = $this->StudiensemesterModel->getWhereStudentHasLvs(getAuthUID()); if (isError($result)) @@ -83,14 +83,14 @@ class Mylv extends Auth_Controller if (isError($result)) return $this->outputJsonError(getError($result)); - $this->outputJsonSuccess([getData($result), 'employee']); + $this->outputJsonSuccess(getData($result)); } else if(getData($this->StudentModel->isStudent(getAuthUID())) ?? false) { // $isStudent $result = $this->LehrveranstaltungModel->getLvsByStudentWithGrades(getAuthUID(), $studiensemester_kurzbz, getUserLanguage()); if (isError($result)) return $this->outputJsonError(getError($result)); - $this->outputJsonSuccess([getData($result), 'student']); + $this->outputJsonSuccess(getData($result)); } else { $this->outputJsonError('neither student or mitarbeiter'); } diff --git a/public/js/apps/Dashboard/Fhc.js b/public/js/apps/Dashboard/Fhc.js index 140c76402..401c11b30 100644 --- a/public/js/apps/Dashboard/Fhc.js +++ b/public/js/apps/Dashboard/Fhc.js @@ -5,7 +5,7 @@ import contrast from '../../directives/contrast.js'; import {setScrollbarWidth} from "../../helpers/CssVarCalcHelpers.js"; import LvPlan from "../../components/Cis/LvPlan/Lehrveranstaltung.js"; import MyLvPlan from "../../components/Cis/LvPlan/Personal.js"; -import MylvStudent from "../../components/Cis/Mylv/Student.js"; +import Mylv from "../../components/Cis/Mylv/MyLv.js"; import Profil from "../../components/Cis/Profil/Profil.js"; import Raumsuche from "../../components/Cis/Raumsuche/Raumsuche.js"; import CmsNews from "../../components/Cis/Cms/News.js"; @@ -21,6 +21,7 @@ import Studium from "../../components/Cis/Studium/Studium.js"; import ApiRenderers from '../../api/factory/renderers.js'; import ApiRouteInfo from '../../api/factory/routeinfo.js'; import {capitalize} from "../../helpers/StringHelpers.js"; +import ApiAuthinfo from "../../api/factory/authinfo.js"; const ciPath = FHC_JS_DATA_STORAGE_OBJECT.app_root.replace(/(https:|)(^|\/\/)(.*?\/)/g, '') + FHC_JS_DATA_STORAGE_OBJECT.ci_router; @@ -149,7 +150,7 @@ const router = VueRouter.createRouter({ { path: `/Cis/MyLv/:studiensemester?`, name: 'MyLv', - component: MylvStudent, + component: Mylv, props: true, }, { @@ -231,6 +232,9 @@ const app = Vue.createApp({ data: () => ({ appSideMenuEntries: {}, renderers: null, + uid: '', + isStudent: null, + isMitarbeiter: null }), components: {}, computed: { @@ -244,7 +248,10 @@ const app = Vue.createApp({ return { // provide injectable & watchable language property language: Vue.computed(() => this.$p.user_language), renderers: Vue.computed(() => this.renderers), - isMobile: this.isMobile + isMobile: this.isMobile, + uid: Vue.computed(() => this.uid), + isStudent: Vue.computed(() => this.isStudent), + isMitarbeiter: Vue.computed(() => this.isMitarbeiter) } }, methods: { @@ -321,6 +328,14 @@ const app = Vue.createApp({ this.renderers[rendertype].calendarEvent = calendarEvent; } }); + + await this.$api + .call(ApiAuthinfo.getAuthInfo()) + .then(res => { + this.uid = res.data.uid; + this.isMitarbeiter = res.data.isMitarbeiter; + this.isStudent = res.data.isStudent; + }); }, mounted() { document.addEventListener('click', this.handleClick); diff --git a/public/js/components/Cis/Mylv/Student.js b/public/js/components/Cis/Mylv/MyLv.js similarity index 93% rename from public/js/components/Cis/Mylv/Student.js rename to public/js/components/Cis/Mylv/MyLv.js index d1837ed16..4bbc161bd 100644 --- a/public/js/components/Cis/Mylv/Student.js +++ b/public/js/components/Cis/Mylv/MyLv.js @@ -5,7 +5,7 @@ import Phrasen from "../../../mixins/Phrasen.js"; // TODO(chris): phrase: next & prev +aria-label export default { - name: 'Student', + name: 'MyLv', components: { MylvSemester }, @@ -17,7 +17,6 @@ export default { firstLoad: true, studiensemester: null, lvs: {}, - type: null, currentSemester: null }; }, @@ -26,7 +25,13 @@ export default { type: Vue.computed(() => this.type) } }, + inject: ['isStudent', 'isMitarbeiter'], computed: { + type() { + if(this.isStudent) return 'student' + if(this.isMitarbeiter) return 'employee' + return null + }, ready() { return this.studiensemester !== null && (!this.firstLoad || this.current.lvs !== null); }, @@ -39,8 +44,7 @@ export default { lvs: null }; axios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/components/Cis/Mylv/Lvs/' + this.currentSemester).then(res => { - this.lvs[this.currentSemester].lvs = res.data.retval[0] || []; - this.type = res.data.retval[1] // student or employee + this.lvs[this.currentSemester].lvs = res.data.retval || []; this.firstLoad = false; }); } @@ -107,7 +111,7 @@ export default {

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


-
+
@@ -131,7 +135,7 @@ export default {
-
+
` }; \ No newline at end of file diff --git a/public/js/components/Cis/Mylv/Semester/Studiengang/Lv.js b/public/js/components/Cis/Mylv/Semester/Studiengang/Lv.js index 1cc128f84..2d2651521 100644 --- a/public/js/components/Cis/Mylv/Semester/Studiengang/Lv.js +++ b/public/js/components/Cis/Mylv/Semester/Studiengang/Lv.js @@ -1,7 +1,6 @@ import LvPruefungen from "./Lv/Pruefungen.js"; import LvInfo from "./Lv/Info.js"; import Phrasen from "../../../../../mixins/Phrasen.js"; -import LvUebersicht from "../../LvUebersicht.js"; import ApiLehre from '../../../../../api/factory/lehre.js'; import ApiAddons from '../../../../../api/factory/addons.js'; @@ -10,15 +9,12 @@ import ApiAddons from '../../../../../api/factory/addons.js'; export default { name: 'Lv', - components:{ - LvUebersicht, - }, mixins: [ Phrasen ], inject: ['studien_semester', 'type'], props: { - lehrveranstaltung_id: Number, + lehrveranstaltung_id: [Number, String], bezeichnung: String, bezeichnung_eng: String, module: String, @@ -66,12 +62,6 @@ export default { emptyMenu(){ return !this.menu || !Array.isArray(this.menu) || Array.isArray(this.menu) && this.menu.length == 0; }, - bodyStyle() {return {}; - /*const bodyStyle = {}; - if (this.farbe) - bodyStyle['background-color'] = '#' + this.farbe; - return bodyStyle;*/ - }, grade() { const languageIndex = this.$p.user_language.value === 'English' ? 1 : 0 if(this.benotung && this.znotebez?.length) { @@ -85,7 +75,6 @@ export default { }, }, methods: { - fetchMenu(lehrveranstaltung_id = this.lehrveranstaltung_id, studien_semester = this.studien_semester) { return this.$api .call(ApiAddons.getLvMenu(lehrveranstaltung_id, studien_semester)) @@ -97,28 +86,18 @@ export default { this.menu = []; }); }, - + c4_target(menuItem) { + if (menuItem.c4_moodle_links?.length > 0) return null; + return menuItem.c4_target ?? null; + }, c4_link(menuItem) { if (!menuItem) return null; if (Array.isArray(menuItem.c4_moodle_links) && menuItem.c4_moodle_links.length) { return '#'; - } - else { + } else { return menuItem.c4_link ?? null; } }, - openLvOption(menuItem){ - if (menuItem.id == "core_menu_mailanstudierende"){ - window.location.href = menuItem.c4_link; - } else if (menuItem.id == "core_menu_digitale_anwesenheitslisten") { - window.location.href = menuItem.c4_link; - } else{ - this.preselectedMenuItem = menuItem; - Vue.nextTick(() => { - this.$refs.lvUebersicht.show(); - }); - } - }, openPruefungen() { // early return if the pruefungenData is empty or not set if (!this.LvHasPruefungenInformation) return; @@ -127,24 +106,6 @@ export default { pruefungenData: this.pruefungenData, bezeichnung: this.bezeichnung }); - }, - openInfos() { - if (!this.info) { - this.info = true; - // TODO(chris): load all this params on ajax? - LvInfo.popup({ - lehrveranstaltung_id: this.lehrveranstaltung_id, - bezeichnung: this.bezeichnung, - bezeichnung_eng: this.bezeichnung_eng, - studiengang_kuerzel: this.studiengang_kuerzel, - semester: this.semester, - studien_semester: this.studien_semester, - orgform_kurzbz: this.orgform_kurzbz, - sprache: this.sprache, - ects: this.ects, - incoming: this.incoming - }).then(() => this.info = false).catch(() => this.info = false); - } } }, watch:{ @@ -162,44 +123,57 @@ export default { this.pruefungenData = pruefungen; }); } - }, mounted() { this.fetchMenu(this.lehrveranstaltung_id, this.studien_semester); }, - template: /*html*/`
- - + template: /*html*/` +
{{ $p.t('lehre/organisationseinheit') }}:
{{$p.user_language.value === 'English' ? bezeichnung_eng : bezeichnung}}
-
+
diff --git a/public/js/components/Cis/Studium/Studium.js b/public/js/components/Cis/Studium/Studium.js index 1b7aff81b..18f0e4e0f 100644 --- a/public/js/components/Cis/Studium/Studium.js +++ b/public/js/components/Cis/Studium/Studium.js @@ -2,6 +2,7 @@ import LvUebersicht from "../Mylv/LvUebersicht.js"; export default { + name: 'Studium', data(){ return { studienSemester :[],