dbTable = 'lehre.tbl_stundenplan'; $this->pk = 'stundenplan_id'; } /** * @param string $ort_kurzbz * @param string $date * * @return stdClass */ public function getRoomDataOnInterval($ort_kurzbz,$start_date,$end_date){ /*$raum_stundenplan= $this->execReadOnlyQuery(" -- merging all reservierungs information with the stundenplan information but with different types SELECT 'stundenplan_eintrag' as eintrags_type, CONCAT(UPPER(sp.stg_typ),UPPER(sp.stg_kurzbz),'-',COALESCE(CAST(sp.semester AS varchar),'/'),COALESCE(CAST(sp.verband AS varchar),'/')) AS stg, CONCAT(lehrfach,'-',lehrform) AS lv_info, ort_kurzbz, studiengang_kz, uid, stunde, datum, titel, semester, verband, gruppe, gruppe_kurzbz, stg_kurzbz, * FROM lehre.vw_stundenplan sp WHERE ort_kurzbz = ? AND datum >= ? AND datum <= ? UNION ALL SELECT 'reservierungs_eintrag' as eintrags_type, NULL, NULL, ort_kurzbz, studiengang_kz, uid, stunde, datum, titel, semester, verband, gruppe, gruppe_kurzbz, stg_kurzbz, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL FROM lehre.vw_reservierung res WHERE ort_kurzbz = ? AND datum >= ? AND datum <= ? ", [$ort_kurzbz, $start_date, $end_date,$ort_kurzbz, $start_date, $end_date]); */ $raum_stundenplan= $this->execReadOnlyQuery(" SELECT CONCAT(UPPER(sp.stg_typ),UPPER(sp.stg_kurzbz),'-',COALESCE(CAST(sp.semester AS varchar),'/'),COALESCE(CAST(sp.verband AS varchar),'/')) AS stg, CONCAT(lehrfach,'-',lehrform) AS lv_info, * FROM lehre.vw_stundenplan sp WHERE ort_kurzbz = ? AND datum >= ? AND datum <= ? ", [$ort_kurzbz, $start_date, $end_date]); return $raum_stundenplan; } /** * @param string $ort_kurzbz The room to query the planning for * @param string $start_date The start date of the query interval * @param string $end_date The end date of the query interval * * @return stdClass */ public function groupedCalendarEvents($ort_kurzbz,$start_date,$end_date){ $gruppierteEvents= $this->execReadOnlyQuery(" SELECT 'reservierung' as type, NULL as unr,datum, stunde, titel AS topic, beschreibung as beschreibung, string_agg(DISTINCT gruppe, '/') as gruppe, string_agg(DISTINCT lektor, '/') as lektor, res.ort_kurzbz,res.studiengang_kz, res.titel, res.beschreibung,NULL as lehreinheit_id,NULL as lehrfach_id,NULL as anmerkung, NULL as fix,NULL as lehrveranstaltung_id,NULL as stg_kurzbzlang,NULL as stg_bezeichnung,NULL as stg_typ, NULL as fachbereich_kurzbz,NULL as lehrfach,NULL as lehrfach_bez,NULL as farbe,NULL as lehrform, NULL as anmerkung_lehreinheit FROM ( SELECT NULL as unr,datum, stunde, CASE WHEN gruppe_kurzbz IS NOT NULL THEN gruppe_kurzbz ELSE CONCAT(UPPER(studg.typ),UPPER(res.stg_kurzbz),'-',COALESCE(CAST(res.semester AS varchar),'/'),COALESCE(CAST(res.verband AS varchar),'/')) END as gruppe, CASE WHEN mit.kurzbz IS NOT NULL THEN mit.kurzbz ELSE uid END as lektor, res.ort_kurzbz,res.studiengang_kz, res.titel, res.beschreibung,NULL as lehreinheit_id,NULL as lehrfach_id,NULL as anmerkung, NULL as fix,NULL as lehrveranstaltung_id,NULL as stg_kurzbzlang,NULL as stg_bezeichnung,NULL as stg_typ, NULL as fachbereich_kurzbz,NULL as lehrfach,NULL as lehrfach_bez,NULL as farbe,NULL as lehrform, NULL as anmerkung_lehreinheit FROM lehre.vw_reservierung res LEFT JOIN public.tbl_mitarbeiter mit ON mit.mitarbeiter_uid=uid JOIN public.tbl_studiengang studg ON studg.studiengang_kz=res.studiengang_kz WHERE res.ort_kurzbz = ? AND res.datum >= ? AND res.datum <= ? ) as res GROUP BY res.ort_kurzbz,res.studiengang_kz, res.datum, res.stunde, res.titel, res.beschreibung UNION ALL SELECT 'stundenplan' as type, unr,datum, stunde, CONCAT(lehrfach,'-',lehrform) as topic, '' as beschreibung, string_agg(DISTINCT gruppe, '/') as gruppe, string_agg(DISTINCT lektor, '/') as lektor, ort_kurzbz, studiengang_kz, titel,'' as beschreibung,lehreinheit_id,lehrfach_id,anmerkung,fix,lehrveranstaltung_id,stg_kurzbzlang,stg_bezeichnung,stg_typ,fachbereich_kurzbz,lehrfach,lehrfach_bez,farbe,lehrform,anmerkung_lehreinheit FROM ( SELECT unr,datum, stunde, 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 gruppe, CASE WHEN sp.mitarbeiter_kurzbz IS NOT NULL THEN sp.mitarbeiter_kurzbz ELSE lektor END as lektor, ort_kurzbz, studiengang_kz, titel,'' as beschreibung,lehreinheit_id,lehrfach_id,anmerkung,fix,lehrveranstaltung_id,stg_kurzbzlang,stg_bezeichnung,stg_typ,fachbereich_kurzbz,lehrfach,lehrfach_bez,farbe,lehrform,anmerkung_lehreinheit FROM lehre.vw_stundenplan sp WHERE ort_kurzbz = ? AND datum >= ? AND datum <= ? ) as sp GROUP BY ort_kurzbz,unr, datum, stunde, lehreinheit_id, lehrfach_id,studiengang_kz,titel,anmerkung,fix,lehrveranstaltung_id,stg_kurzbzlang,stg_bezeichnung,stg_typ,fachbereich_kurzbz,lehrfach,lehrfach_bez,farbe,lehrform,anmerkung_lehreinheit ORDER BY datum, stunde ", [$ort_kurzbz, $start_date, $end_date, $ort_kurzbz, $start_date, $end_date]); return $gruppierteEvents; } /** * groups rows of a subquery that fetches data from the lehre.vw_stundenplan table * @param string $stundenplanViewQuery the subquery used to group the result * * @return stdClass */ public function stundenplanGruppierung($stundenplanViewQuery) { $query_result = $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 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, ort_kurzbz, studiengang_kz, titel,lehreinheit_id,lehrfach_id,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 (".$stundenplanViewQuery.") sp JOIN lehre.tbl_stunde ON lehre.tbl_stunde.stunde = sp.stunde ) as subquery GROUP BY unr, datum, beginn, ende, titel, lehrform, lehrfach, lehrfach_bez, organisationseinheit, farbe, lehrveranstaltung_id ORDER BY datum, beginn "); return $query_result; } /** * groups rows of a subquery that fetches data from the lehre.vw_stundenplan table or lehre.vw_stundenplandev * @param string $stundenplanViewQuery the subquery used to group the result regarding consecutive hours (Tab LV Termine) * * @return stdClass */ public function stundenplanGruppierungConsecutive($stundenplanViewQuery) { $query_result = $this->execReadOnlyQuery(" SELECT distinct lehrveranstaltung_id, datum, MIN(beginn) as beginn, MAX(ende) as ende, type, topic, gruppe, ort_kurzbz, lehreinheit_id, lehrfach_bez, lektor, lektorname, gruppen_kuerzel, farbe FROM ( SELECT 'lehreinheit' as type, beginn, ende, datum, CONCAT(lehrfach,'-',lehrform) as topic, array_agg(DISTINCT lektor) as lektor, array_agg(DISTINCT lektorname) as lektorname, array_agg(DISTINCT (gruppe,verband,semester,studiengang_kz,gruppen_kuerzel)) as gruppe, array_agg(DISTINCT (gruppen_kuerzel)) as gruppen_kuerzel, 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 lektor END as lektor, CASE WHEN gruppe_kurzbz IS NOT NULL THEN gruppe_kurzbz ELSE (SELECT UPPER(typ || kurzbz) FROM public.tbl_studiengang WHERE studiengang_kz=sp.studiengang_kz) || COALESCE(sp.semester,'0') || COALESCE(sp.verband,'') || COALESCE(sp.gruppe,'') 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, ort_kurzbz, studiengang_kz, titel,lehreinheit_id,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, CONCAT(p.nachname, ' ', p.vorname) as lektorname FROM (".$stundenplanViewQuery.") sp JOIN lehre.tbl_stunde ON lehre.tbl_stunde.stunde = sp.stunde LEFT JOIN public.tbl_benutzer bn ON bn.uid = sp.uid LEFT JOIN public.tbl_person p ON p.person_id = bn.person_id ) as subquery GROUP BY unr, datum, beginn, ende, ort_kurzbz, titel, lehrform, lehrfach, lehrfach_bez, organisationseinheit, farbe, lehrveranstaltung_id ORDER BY datum, beginn) t GROUP BY lehrveranstaltung_id, type, datum, topic, lektor, lehrfach_bez, gruppe, ort_kurzbz, lehreinheit_id, lektorname, gruppen_kuerzel, farbe ORDER BY datum, beginn " ); return $query_result; } /** * queries Stundenplan but for a whole lva, irrespective of who is requesting it * * @return void */ public function getStundenplanLVA($start_date, $end_date, $lv_id) { 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 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, ort_kurzbz, studiengang_kz, titel,lehreinheit_id,lehrfach_id,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 <= ? AND sp.lehrveranstaltung_id = ? ) sp JOIN lehre.tbl_stunde ON lehre.tbl_stunde.stunde = sp.stunde ) as subquery GROUP BY unr, datum, beginn, ende, titel, lehrform, lehrfach, lehrfach_bez, organisationseinheit, farbe, lehrveranstaltung_id 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, 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. * * @param isLvList if condition needed for Tab LV Termine is given * @param db_stpl_table enables switch to db 'stundenplandev' * * @return mixed */ public function getStundenplanQuery($start_date, $end_date, $semester, $gruppen, $studentlehrverbaende, $isLvList=false, $db_stpl_table='stundenplan'){ // helper function to check if either $gruppen or $studentlehrverbaende are empty for each semester $emptyCheck = function($toBeCheckedArray) use ($semester){ $result = true; $sem = array_keys($semester); foreach($sem as $s){ if(count($toBeCheckedArray[$s]) > 0){ $result = false; break; } } return $result; }; // if both the gruppen and the studentlehrverbaende are empty we early return if($emptyCheck($gruppen) && $emptyCheck($studentlehrverbaende)) { return false; } $query = "select sp.* from lehre.vw_".$db_stpl_table." sp WHERE sp.datum >= ".$this->escape($start_date)." AND sp.datum <= ".$this->escape($end_date); // adds the AND sql chain only if both $gruppen and $studentlehrverbaende are not empty if(!$emptyCheck($gruppen) || !$emptyCheck($studentlehrverbaende)) { $query .= " AND ( "; } foreach($semester as $sem => $semester_date_range) { foreach($semester_date_range as $sem_date => $sem_date_range) { // if there are not groups for the semester skip the iteration step if(!array_key_exists($sem_date,$gruppen) || count($gruppen[$sem_date]) == 0) { continue; } // converts the array of gruppen strings into a sql IN (_,_,_) chain $query .="(sp.gruppe_kurzbz IN (" .implode(',',$gruppen[$sem_date]).") AND sp.datum BETWEEN ".$this->escape($sem_date_range->start)." AND ".$this->escape($sem_date_range->ende)." )"; $query .="OR"; } } // if there are no studentlehrverbaende and the gruppen are not empty, we can remove the last OR added after the groups if($emptyCheck($studentlehrverbaende) && !$emptyCheck($gruppen)) { $query = substr($query, 0, -2); } //Condition for showLVList FHC4 if(!$isLvList) $stringGroupLv = "AND gruppe_kurzbz is null"; else $stringGroupLv =""; foreach($semester as $sem=>$semester_date_range) { foreach($semester_date_range as $sem_date => $sem_date_range) { if(!array_key_exists($sem_date,$studentlehrverbaende) || count($studentlehrverbaende[$sem_date]) == 0) { continue; } foreach($studentlehrverbaende[$sem_date] as $key=>$lehrverband) { $query .= "(((sp.studiengang_kz = ".$this->escape($lehrverband->studiengang_kz)." AND sp.semester = ".$this->escape($lehrverband->semester)." AND sp.verband = ".$this->escape($lehrverband->verband)." AND sp.gruppe = ".$this->escape($lehrverband->gruppe)." AND sp.datum BETWEEN ".$this->escape($sem_date_range->start)." AND ".$this->escape($sem_date_range->ende).")"; // Eintraege fuer den ganzen Verband $query .= "OR (sp.studiengang_kz = ".$this->escape($lehrverband->studiengang_kz)." AND sp.semester = ".$this->escape($lehrverband->semester)." AND sp.verband = ".$this->escape($lehrverband->verband)." AND (sp.gruppe is null OR sp.gruppe='') AND sp.datum BETWEEN ".$this->escape($sem_date_range->start)." AND ".$this->escape($sem_date_range->ende).")"; // Eintraege fuer das ganze Semester $query .= "OR (sp.studiengang_kz = ".$this->escape($lehrverband->studiengang_kz)." AND sp.semester = ".$this->escape($lehrverband->semester)." AND (sp.verband is null OR sp.verband='') AND sp.datum BETWEEN ".$this->escape($sem_date_range->start) ." AND ".$this->escape($sem_date_range->ende).")) AND gruppe_kurzbz is null)"; $query .="OR"; } } } // if the studentlehrverbaende is not empty we can remove the last OR that was added to the query if(!$emptyCheck($studentlehrverbaende)) { $query = substr($query, 0, -2); } // closes the AND sql chain only if it was opened previously if(!$emptyCheck($gruppen) || !$emptyCheck($studentlehrverbaende)) { $query .= ")"; } return $query; } /** * NO STANDALONE FUNCTION - Generates a SQL query string to fetch 'stundenplan' events for a specific room within a date range. * @param string $ort_kurzbz the ort from which we want to query the stundenplan events * @param string $start_date (inclusive) the minimum date that an event should have to be fetched * @param string $end_date (inclusive) the maximum date that an event should not extend to be fetched * * @return string */ public function getRoomQuery($ort_kurzbz, $start_date, $end_date) { return "select sp.* FROM lehre.vw_stundenplan sp WHERE ort_kurzbz = ".$this->escape($ort_kurzbz)." AND datum >= ".$this->escape($start_date)." AND datum <= ".$this->escape($end_date); } /** * @param string $uid * * @return stdClass */ public function loadForUid($uid) { $this->addSelect(['sp.*','le.studiensemester_kurzbz']); $this->db->join('public.tbl_benutzergruppe bg', 'sp.gruppe_kurzbz=bg.gruppe_kurzbz AND bg.uid=?', 'LEFT', false); $this->addJoin('public.tbl_studiensemester ss1', 'bg.studiensemester_kurzbz=ss1.studiensemester_kurzbz AND ss1.start<=sp.datum AND ss1.ende>=sp.datum', 'LEFT'); $this->db->join('public.tbl_studentlehrverband slv', "sp.studiengang_kz=slv.studiengang_kz AND slv.student_uid=? AND (slv.semester=sp.semester OR sp.semester IS NULL) AND (slv.verband=sp.verband OR sp.verband IS NULL OR sp.verband='' OR sp.verband='0') AND (slv.gruppe=sp.gruppe OR sp.gruppe IS NULL OR sp.gruppe='' OR sp.gruppe='0') AND sp.gruppe_kurzbz IS NULL", 'LEFT', false); $this->addJoin('public.tbl_studiensemester ss2', 'slv.studiensemester_kurzbz=ss2.studiensemester_kurzbz AND ss2.start<=sp.datum AND ss2.ende>=sp.datum', 'LEFT'); $this->db->join('lehre.tbl_lehreinheit le', 'le.lehreinheit_id=sp.lehreinheit_id', 'LEFT'); $this->db->or_where('ss1.studiensemester_kurzbz IS NOT NULL', null, false); $this->db->or_where('ss2.studiensemester_kurzbz IS NOT NULL', null, false); $query = $this->db->get_compiled_select('lehre.vw_stundenplan sp'); return $this->execQuery($query, [$uid, $uid]); } /** * Get Stundenplantermine for given Lehreinheit. * * @param $lehreinheit_id * @return array|stdClass|null */ public function getTermineByLe($lehreinheit_id) { $qry = ' SELECT DISTINCT datum FROM lehre.vw_stundenplan WHERE lehreinheit_id = ? ORDER BY datum ASC '; return $this->execQuery($qry, [$lehreinheit_id]); } /** * Get Stundenplantermine for given Lehrveranstaltung of given Studiensemester. * * @param $lehrveranstaltung_id * @param $studiensemester_kurzbz * @return array|stdClass|null */ public function getTermineByLv($lehrveranstaltung_id, $studiensemester_kurzbz) { $qry = ' SELECT DISTINCT datum FROM lehre.vw_stundenplan WHERE lehreinheit_id IN ( SELECT lehreinheit_id FROM lehre.tbl_lehreinheit WHERE lehrveranstaltung_id = ? AND studiensemester_kurzbz = ? ) ORDER BY datum ASC '; return $this->execQuery($qry, [$lehrveranstaltung_id, $studiensemester_kurzbz]); } }