From 90bdb68175912e345f6d194fb5b22579ce0f4512 Mon Sep 17 00:00:00 2001 From: SimonGschnell Date: Mon, 25 Nov 2024 15:24:36 +0100 Subject: [PATCH] fix(Stundenplan_model/getStundenplanQuery):changes how the OR sql statments are added to the query --- .../api/frontend/v1/Stundenplan.php | 7 +++- .../models/ressource/Stundenplan_model.php | 36 ++++++++++++------- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/application/controllers/api/frontend/v1/Stundenplan.php b/application/controllers/api/frontend/v1/Stundenplan.php index 116854930..c14ea4315 100644 --- a/application/controllers/api/frontend/v1/Stundenplan.php +++ b/application/controllers/api/frontend/v1/Stundenplan.php @@ -151,7 +151,12 @@ class Stundenplan extends FHCAPI_Controller // getting the student_lehrverbaende of the student in the different studiensemester $student_lehrverband = $this->fetchStudentlehrverbandFromStudiensemester($semester_range); - $stundenplan_data = $this->StundenplanModel->stundenplanGruppierung($this->StundenplanModel->getStundenplanQuery($start_date, $end_date, $semester_range, $benutzer_gruppen, $student_lehrverband)); + $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); diff --git a/application/models/ressource/Stundenplan_model.php b/application/models/ressource/Stundenplan_model.php index 01d8dd792..896187ace 100644 --- a/application/models/ressource/Stundenplan_model.php +++ b/application/models/ressource/Stundenplan_model.php @@ -206,7 +206,13 @@ class Stundenplan_model extends DB_Model } return $result; }; - + + // if both the gruppen and the studentlehrverbaende are empty we return nothing + if($emptyCheck($gruppen) && $emptyCheck($studentlehrverbaende)) + { + return ""; + } + $query = "select sp.* from lehre.vw_stundenplan sp @@ -234,14 +240,16 @@ class Stundenplan_model extends DB_Model $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)." )"; // adds the OR sql chain only if the $studentlehrverbaende array is not empty - // DOES not include the sql OR if the $studentlehrverbaende are empty and it is the last gruppen element in the iteration - if(key($semester) != $sem || !$emptyCheck($studentlehrverbaende)) - { - $query .="OR"; - } - + // or its not the last semester to add the groups from + $query .="OR"; } } + + // if there are no studentlehrverbaende, we can remove the last OR added after the groups + if($emptyCheck($studentlehrverbaende) && !$emptyCheck($gruppen)) + { + $query = substr($query, 0, -2); + } foreach($semester as $sem=>$semester_date_range) { @@ -253,20 +261,24 @@ class Stundenplan_model extends DB_Model } foreach($studentlehrverbaende[$sem_date] as $key=>$lehrverband) { - // adds the OR sql chain only if its not the first element in the first semester of the $studentlehrverbaende array - if($sem != array_keys($semester)[0] || $key != array_keys($semester)[0]) - { - $query .="OR"; - } $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)) {