diff --git a/application/controllers/CisVue/Cms.php b/application/controllers/CisVue/Cms.php index 72706d4c3..0263a00c4 100644 --- a/application/controllers/CisVue/Cms.php +++ b/application/controllers/CisVue/Cms.php @@ -83,13 +83,13 @@ class Cms extends Auth_Controller */ public function news($infoscreen = false, $studiengang_kz = null, $semester = null, $mischen = true, $titel = '', $edit = false, $sichtbar = true) { - // TODO: what are those parameters and what are they used for? - $this->load->view('CisRouterView/CisRouterView.php', ['route' => 'News']); -// $this->load->view('CisVue/Cms/Content', ['infoscreen' => $infoscreen, 'studiengang_kz' => $studiengang_kz, 'semester' => $semester, 'mischen' => $mischen, 'titel' => $titel, 'edit' => $edit, 'sichtbar' => $sichtbar]); } - + public function getRoomInformation($ort_kurzbz){ - $this->load->view('CisVue/Cms/RoomInformation',['ort_kurzbz'=>$ort_kurzbz]); + $viewData = array( + 'ort_kurzbz' => $ort_kurzbz + ); + $this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'CmsRoom']); } } diff --git a/application/controllers/api/frontend/v1/Stundenplan.php b/application/controllers/api/frontend/v1/Stundenplan.php index 6cbdf17c1..249f0fb3c 100644 --- a/application/controllers/api/frontend/v1/Stundenplan.php +++ b/application/controllers/api/frontend/v1/Stundenplan.php @@ -117,7 +117,7 @@ class Stundenplan extends FHCAPI_Controller * @access public * */ - //TODO: getStundenplan fuer Mitarbeiter anpassen + public function getStundenplan(){ $this->load->model('ressource/Mitarbeiter_model','MitarbeiterModel'); @@ -160,27 +160,34 @@ class Stundenplan extends FHCAPI_Controller $is_mitarbeiter = getData($this->MitarbeiterModel->isMitarbeiter($student_uid)); if($is_mitarbeiter) { - $this->terminateWithError("Not possible to look at the Student Calendar as a Mitarbeiter"); + + $stundenplan_data = $this->StundenplanModel->getStundenplanMitarbeiter($start_date, $end_date, $student_uid); + $stundenplan_data = $this->getDataOrTerminateWithError($stundenplan_data) ?? []; + $this->expand_object_information($stundenplan_data); + $this->terminateWithSuccess($stundenplan_data); + } else { + // getting the gruppen_kurzbz of the student in the different studiensemester + $benutzer_gruppen = $this->fetchBenutzerGruppenFromStudiensemester($semester_range); + + // getting the student_lehrverbaende of the student in the different studiensemester + $student_lehrverband = $this->fetchStudentlehrverbandFromStudiensemester($semester_range); + + $stundenplan_query = $this->StundenplanModel->getStundenplanQuery($start_date, $end_date, $semester_range, $benutzer_gruppen, $student_lehrverband); + if(!$stundenplan_query) + { + $this->terminateWithSuccess([]); + } + $stundenplan_data = $this->StundenplanModel->stundenplanGruppierung($stundenplan_query); + $stundenplan_data = $this->getDataOrTerminateWithError($stundenplan_data) ?? []; + + $this->expand_object_information($stundenplan_data); + + $this->returnObj['$stundenplan_query'] = $stundenplan_query; + $this->returnObj['$student_lehrverband'] = $student_lehrverband; + $this->returnObj['$benutzer_gruppen'] = $benutzer_gruppen; + $this->terminateWithSuccess($stundenplan_data); } - - // getting the gruppen_kurzbz of the student in the different studiensemester - $benutzer_gruppen = $this->fetchBenutzerGruppenFromStudiensemester($semester_range); - - // getting the student_lehrverbaende of the student in the different studiensemester - $student_lehrverband = $this->fetchStudentlehrverbandFromStudiensemester($semester_range); - - $stundenplan_query = $this->StundenplanModel->getStundenplanQuery($start_date, $end_date, $semester_range, $benutzer_gruppen, $student_lehrverband); - if(!$stundenplan_query) - { - $this->terminateWithSuccess([]); - } - $stundenplan_data = $this->StundenplanModel->stundenplanGruppierung($stundenplan_query); - $stundenplan_data = $this->getDataOrTerminateWithError($stundenplan_data) ?? []; - - $this->expand_object_information($stundenplan_data); - - $this->terminateWithSuccess($stundenplan_data); } // gets the reservierungen of a room if the ort_kurzbz parameter is supplied otherwise gets the reservierungen of the stundenplan of a student @@ -193,19 +200,25 @@ class Stundenplan extends FHCAPI_Controller $this->form_validation->set_rules('end_date', "EndDate", "required"); if($this->form_validation->run() == FALSE) $this->terminateWithValidationErrors($this->form_validation->error_array()); - // storing the get parameter in local variables + $this->load->model('ressource/Mitarbeiter_model','MitarbeiterModel'); + + // storing the get parameter in local variables $start_date = $this->input->get('start_date', TRUE); $end_date = $this->input->get('end_date', TRUE); - // querying the reservierungen - $reservierungen = $this->ReservierungModel->getReservierungen($start_date, $end_date, $ort_kurzbz); - - $reservierungen = $this->getDataOrTerminateWithError($reservierungen) ?? []; - + $is_mitarbeiter = getData($this->MitarbeiterModel->isMitarbeiter(getAuthUID())); + if($is_mitarbeiter) + { + $reservierungen = $this->ReservierungModel->getReservierungenMitarbeiter($start_date, $end_date, $ort_kurzbz); + } else { + // querying the reservierungen + $reservierungen = $this->ReservierungModel->getReservierungen($start_date, $end_date, $ort_kurzbz); + } + + $reservierungen = $this->getDataOrTerminateWithError($reservierungen) ?? []; $this->expand_object_information($reservierungen); - $this->terminateWithSuccess($reservierungen); - + } public function getLehreinheitStudiensemester($lehreinheit_id){ diff --git a/application/models/ressource/Reservierung_model.php b/application/models/ressource/Reservierung_model.php index fdfc9926b..f635d0cb1 100644 --- a/application/models/ressource/Reservierung_model.php +++ b/application/models/ressource/Reservierung_model.php @@ -71,6 +71,51 @@ class Reservierung_model extends DB_Model return $query_result; } + /** + * @param $uid + * + * @return stdClass + */ + public function getReservierungenMitarbeiter($start_date, $end_date, $ort_kurzbz = null) + { + + $raum_reservierungen_query = "SELECT res.*, beginn, ende, + CASE + WHEN res.gruppe_kurzbz IS NOT NULL THEN res.gruppe_kurzbz + ELSE CONCAT(UPPER(studg.typ),UPPER(studg.kurzbz),'-',COALESCE(CAST(res.semester AS varchar),'/'),COALESCE(CAST(res.verband AS varchar),'/')) + END as gruppen_kuerzel + FROM campus.vw_reservierung res + JOIN public.tbl_studiengang studg ON studg.studiengang_kz=res.studiengang_kz + JOIN lehre.tbl_stunde ON lehre.tbl_stunde.stunde = res.stunde + WHERE res.uid = ? AND datum >= ? AND datum <= ?"; + +// $subquery = is_null($ort_kurzbz)? $stundenplan_reservierungen_query:$raum_reservierungen_query; + $subquery = $raum_reservierungen_query; + + + $query_result= $this->execReadOnlyQuery(" + SELECT + 'reservierung' as type, beginn, ende, datum, + COALESCE(titel, beschreibung) as topic, + array_agg(DISTINCT mitarbeiter_kurzbz) as lektor, + array_agg(DISTINCT (gruppe,verband,semester,studiengang_kz,gruppen_kuerzel)) as gruppe, + + ort_kurzbz, 'FFFFFF' as farbe + + FROM + ( + ". $subquery ." + ) AS subquery + + GROUP BY datum, beginn, ende, ort_kurzbz, titel, beschreibung + + ORDER BY datum, beginn + ", [getAuthUID(), $start_date, $end_date]); + + + return $query_result; + } + /** * @param $uid * diff --git a/application/models/ressource/Stundenplan_model.php b/application/models/ressource/Stundenplan_model.php index 909892674..012ce0a57 100644 --- a/application/models/ressource/Stundenplan_model.php +++ b/application/models/ressource/Stundenplan_model.php @@ -232,7 +232,7 @@ class Stundenplan_model extends DB_Model AND sp.datum <= ? AND sp.lehrveranstaltung_id = ? ) sp JOIN lehre.tbl_stunde ON lehre.tbl_stunde.stunde = sp.stunde - + ) as subquery GROUP BY unr, datum, beginn, ende, ort_kurzbz, titel, lehrform, lehrfach, lehrfach_bez, organisationseinheit, farbe, lehrveranstaltung_id @@ -240,6 +240,62 @@ class Stundenplan_model extends DB_Model ORDER BY datum, beginn ", [$start_date, $end_date, $lv_id]); } + + /** + * queries Stundenplan and filters by assigned ma_kurzbz, very similar to get by LVA + * + * @return void + */ + public function getStundenplanMitarbeiter($start_date, $end_date, $ma_uid) { + return $this->execReadOnlyQuery(" + + SELECT + 'lehreinheit' as type, beginn, ende, datum, + CONCAT(lehrfach,'-',lehrform) as topic, + array_agg(DISTINCT lektor) as lektor, + array_agg(DISTINCT (gruppe,verband,semester,studiengang_kz,gruppen_kuerzel)) as gruppe, + string_agg(DISTINCT ort_kurzbz, '/') as ort_kurzbz, + array_agg(DISTINCT lehreinheit_id) as lehreinheit_id, + + titel, lehrfach, lehrform, lehrfach_bez, organisationseinheit, farbe, lehrveranstaltung_id + + FROM + ( + SELECT unr,datum,beginn, ende, + CASE + WHEN sp.mitarbeiter_kurzbz IS NOT NULL THEN sp.mitarbeiter_kurzbz + ELSE sp.lektor + END as lektor, + CASE + WHEN gruppe_kurzbz IS NOT NULL THEN gruppe_kurzbz + ELSE CONCAT(UPPER(sp.stg_typ),UPPER(sp.stg_kurzbz),'-',COALESCE(CAST(sp.semester AS varchar),'/'),COALESCE(CAST(sp.verband AS varchar),'/')) + END as gruppen_kuerzel, + (SELECT bezeichnung + FROM public.tbl_organisationseinheit + WHERE oe_kurzbz IN( + SELECT oe_kurzbz + FROM lehre.tbl_lehrveranstaltung + WHERE lehrveranstaltung_id = sp.lehrveranstaltung_id + )) as organisationseinheit, + sp.ort_kurzbz, sp.studiengang_kz, sp.titel,sp.lehreinheit_id,sp.lehrfach_id,sp.anmerkung,fix,lehrveranstaltung_id,stg_kurzbzlang,stg_bezeichnung,stg_typ,fachbereich_kurzbz,lehrfach,lehrfach_bez,farbe,lehrform,anmerkung_lehreinheit,gruppe, verband, semester,stg_kurzbz + + FROM ( + SELECT sp.* + FROM lehre.vw_stundenplan sp + WHERE + sp.datum >= ? + AND sp.datum <= ? + ) sp + JOIN lehre.tbl_stunde ON lehre.tbl_stunde.stunde = sp.stunde + JOIN public.tbl_mitarbeiter ON public.tbl_mitarbeiter.kurzbz = sp.mitarbeiter_kurzbz + WHERE mitarbeiter_uid = ? + + ) as subquery + + GROUP BY unr, datum, beginn, ende, ort_kurzbz, titel, lehrform, lehrfach, lehrfach_bez, organisationseinheit, farbe, lehrveranstaltung_id + + ORDER BY datum, beginn", [$start_date, $end_date, $ma_uid]); + } /** * NO STANDALONE FUNCTION - Generates a SQL query string to fetch 'stundenplan' events for a specific student within the current semester. diff --git a/application/views/CisVue/Cms/Content.php b/application/views/CisVue/Cms/Content.php deleted file mode 100644 index 3d0097031..000000000 --- a/application/views/CisVue/Cms/Content.php +++ /dev/null @@ -1,32 +0,0 @@ - ['public/js/apps/Cis/Cms.js'], - 'primevue3'=>true, - 'customCSSs' => [ - 'public/css/Cis4/Cms.css', - #'skin/style.css.php' - ] -); - -// adds the tabulator5 dependency for all templates to replace the tablesorter -$includesArray['tabulator5'] = true; - -if(defined('CIS4')){ - $this->load->view('templates/CISVUE-Header', $includesArray); -}else{ - $this->load->view('templates/FHC-Header', $includesArray); -} -?> - -
- ' : ''); ?> -
- -load->view('templates/CISVUE-Footer', $includesArray); -} else { - $this->load->view('templates/FHC-Footer', $includesArray); -} - ?> - diff --git a/application/views/CisVue/Cms/RoomInformation.php b/application/views/CisVue/Cms/RoomInformation.php deleted file mode 100644 index e7b197504..000000000 --- a/application/views/CisVue/Cms/RoomInformation.php +++ /dev/null @@ -1,20 +0,0 @@ - 'RoomInformation', - 'customJSModules' => ['public/js/apps/Cis/RoomInformation.js'], - 'customCSSs' => ['public/css/components/calendar.css'] -); - -$this->load->view('templates/CISVUE-Header', $includesArray); -?> - -
-

Room Information:

-
-
- -
- -
- -load->view('templates/CISVUE-Footer', $includesArray); ?> diff --git a/application/views/templates/CISVUE-Header.php b/application/views/templates/CISVUE-Header.php index de413bc7e..86b5b8755 100644 --- a/application/views/templates/CISVUE-Header.php +++ b/application/views/templates/CISVUE-Header.php @@ -34,4 +34,4 @@ $this->load->view('templates/FHC-Header', $includesArray); > -
\ No newline at end of file +
\ No newline at end of file diff --git a/public/js/api/cms.js b/public/js/api/cms.js index 23643ba28..10e722b1a 100644 --- a/public/js/api/cms.js +++ b/public/js/api/cms.js @@ -10,7 +10,6 @@ export default { } ); }, - //api function used for the news View that renders the html getNews(page = 1, page_size = 10, sprache) { return this.$fhcApi.get( @@ -22,7 +21,6 @@ export default { }, ); }, - //api function used for the widget component news(limit) { return this.$fhcApi.get( @@ -32,19 +30,16 @@ export default { } ); }, - getNewsRowCount: function () { return this.$fhcApi.get( "/api/frontend/v1/Cms/getNewsRowCount", {} ); }, - getNewsExtra: function(){ return this.$fhcApi.get( "/api/frontend/v1/Cms/getStudiengangInfoForNews", {} ); } - } \ No newline at end of file diff --git a/public/js/apps/Cis/RoomInformation.js b/public/js/apps/Cis/RoomInformation.js deleted file mode 100644 index 51b63030d..000000000 --- a/public/js/apps/Cis/RoomInformation.js +++ /dev/null @@ -1,19 +0,0 @@ -import Phrasen from "../../plugin/Phrasen.js"; -import RoomInformation from "../../components/Cis/Mylv/RoomInformation.js"; -import {setScrollbarWidth} from "../../helpers/CssVarCalcHelpers"; - -const app = Vue.createApp({ - name: 'RoomInformationApp', - components: { - RoomInformation - }, - data() { - return { - } - } -}); - -setScrollbarWidth(); - -app.use(Phrasen); -app.mount('#content'); \ No newline at end of file diff --git a/public/js/apps/Dashboard/Fhc.js b/public/js/apps/Dashboard/Fhc.js index 5570dd76d..8d7f9888b 100644 --- a/public/js/apps/Dashboard/Fhc.js +++ b/public/js/apps/Dashboard/Fhc.js @@ -9,6 +9,7 @@ import Profil from "../../components/Cis/Profil/Profil"; import CmsNews from "../../components/Cis/Cms/News"; import CmsContent from "../../components/Cis/Cms/Content"; import Info from "../../components/Cis/Mylv/Semester/Studiengang/Lv/Info"; +import RoomInformation from "../../components/Cis/Mylv/RoomInformation"; const ciPath = FHC_JS_DATA_STORAGE_OBJECT.app_root.replace(/(https:|)(^|\/\/)(.*?\/)/g, '') + FHC_JS_DATA_STORAGE_OBJECT.ci_router; @@ -27,7 +28,12 @@ const router = VueRouter.createRouter({ component: Profil, props: true }, - + { + path: `/CisVue/Cms/getRoomInformation/:ort_kurzbz`, + name: 'RoomInformation', + component: RoomInformation, + props: true + }, { path: `/CisVue/Cms/Content/:content_id`, name: 'Content', diff --git a/public/js/components/Calendar/Calendar.js b/public/js/components/Calendar/Calendar.js index fe987a643..8d4c56cfe 100644 --- a/public/js/components/Calendar/Calendar.js +++ b/public/js/components/Calendar/Calendar.js @@ -28,8 +28,8 @@ export default { date: this.date, focusDate: this.focusDate, size: Vue.computed({ get: () => this.size }), - calendarHeight: Vue.computed({ get: () => this.calendarHeight }), - calendarWidth: Vue.computed({ get: () => this.calendarWidth }), + containerHeight: Vue.computed({ get: () => this.containerHeight }), + containerWidth: Vue.computed({ get: () => this.containerWidth }), events: Vue.computed(() => this.eventsPerDay), filteredEvents: Vue.computed(() => this.filteredEvents), diff --git a/public/js/components/Calendar/Day/Page.js b/public/js/components/Calendar/Day/Page.js index 4342dd1ce..3d5cc5f02 100644 --- a/public/js/components/Calendar/Day/Page.js +++ b/public/js/components/Calendar/Day/Page.js @@ -100,7 +100,6 @@ export default { 'pointer-events': 'none', 'z-index': 2, height: this.getDayTimePercent + '%', - width: '100%', opacity: 0.5, overflow: 'hidden' } @@ -161,7 +160,7 @@ export default { } }, noEventsCondition() { - return !this.isSliding && this.filteredEvents?.length === 0; + return !this.isSliding && (this.filteredEvents?.length === 0 || !this.filteredEvents); }, hours() { // returns an array with elements starting at 7 and ending at 24 diff --git a/public/js/components/Calendar/Header.js b/public/js/components/Calendar/Header.js index 2770d055b..5d92304c6 100644 --- a/public/js/components/Calendar/Header.js +++ b/public/js/components/Calendar/Header.js @@ -16,6 +16,7 @@ export default { 'mode', 'noWeekView', 'noMonthView', + 'containerWidth' ], props: { title: String @@ -26,15 +27,23 @@ export default { 'next', 'click' ], + computed: { + getHeaderClassSide() { + return this.containerWidth > 780 ? 'col-3' : 'col-12' + }, + getHeaderClassMiddle() { + return this.containerWidth > 780 ? 'col-6' : 'col-12' + } + }, template: /*html*/`
-
+
-
+
-
+
@@ -45,12 +54,12 @@ export default {
-
+
-
+