mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-25 16:44:28 +00:00
refactor(Studenplan Query):queries all studiensemester from start_date to end_date and matches the gruppen and studentlehrverbaende to the associated studiensemester in the query
This commit is contained in:
@@ -272,4 +272,19 @@ class Studiensemester_model extends DB_Model
|
||||
if (is_numeric($studienjahrNumber) && mb_substr($studiensemester_kurzbz, 0, 2) == 'SS') (int)$studienjahrNumber -= 1;
|
||||
return $studienjahrNumber;
|
||||
}
|
||||
|
||||
/**
|
||||
* Holt Start und Ende des Studiensemester_kurzbz
|
||||
* @param studiensemester_kurzbz
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getStartEndeFromStudiensemester($studiensemester_kurzbz)
|
||||
{
|
||||
return $this->execReadOnlyQuery("
|
||||
SELECT
|
||||
start, ende
|
||||
FROM public.tbl_studiensemester
|
||||
WHERE studiensemester_kurzbz = ?",[$studiensemester_kurzbz]);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -192,43 +192,77 @@ class Stundenplan_model extends DB_Model
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getStundenplanQuery($start_date, $end_date,$gruppen,$studentlehrverbaende){
|
||||
|
||||
public function getStundenplanQuery($start_date, $end_date,$semester,$gruppen,$studentlehrverbaende){
|
||||
|
||||
// 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;
|
||||
};
|
||||
|
||||
$query =
|
||||
"select sp.*
|
||||
from lehre.vw_stundenplan sp
|
||||
WHERE
|
||||
sp.datum >= ".$this->escape($start_date)."
|
||||
AND sp.datum <= ".$this->escape($end_date);
|
||||
|
||||
if(count($gruppen) != 0 || count($studentlehrverbaende) != 0)
|
||||
|
||||
// adds the AND sql chain only if both $gruppen and $studentlehrverbaende are not empty
|
||||
if(!$emptyCheck($gruppen) || !$emptyCheck($studentlehrverbaende))
|
||||
{
|
||||
$query .= " AND ( ";
|
||||
}
|
||||
|
||||
if(count($gruppen) != 0)
|
||||
}
|
||||
|
||||
foreach($semester as $sem => $date_range)
|
||||
{
|
||||
$query .="sp.gruppe_kurzbz IN (".implode(',',$gruppen).")";
|
||||
}
|
||||
|
||||
foreach($studentlehrverbaende as $key=>$lehrverband){
|
||||
// only append OR if not first entry or previous condition was added
|
||||
if(($key == 0 && count($gruppen) != 0) || ($key > 0))
|
||||
if(count($gruppen[$sem]) > 0)
|
||||
{
|
||||
$query .= " OR ";
|
||||
// converts the array of gruppen strings into a sql IN (_,_,_) chain
|
||||
$query .="(sp.gruppe_kurzbz IN (" .implode(',',$gruppen[$sem]).") AND sp.datum BETWEEN ".$this->escape($date_range->start)." AND ".$this->escape($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";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach($semester as $sem=>$date_range)
|
||||
{
|
||||
|
||||
if(count($studentlehrverbaende[$sem]) > 0)
|
||||
{
|
||||
foreach($studentlehrverbaende[$sem] as $key=>$lehrverband)
|
||||
{
|
||||
// adds the OR sql chain only if its not the first element in the first semester of the $studentlehrverbaende array
|
||||
if($lehrverband != $studentlehrverbaende[array_keys($semester)[0]][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($date_range->start)." AND ".$this->escape($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($date_range->start)." AND ".$this->escape($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($date_range->start)." AND ".$this->escape($date_range->ende).") AND gruppe_kurzbz is null)";
|
||||
}
|
||||
|
||||
}
|
||||
// Eintraege fuer die spezifische Gruppe
|
||||
$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).")";
|
||||
// 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=''))";
|
||||
// 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 gruppe_kurzbz is null";
|
||||
}
|
||||
|
||||
if(count($gruppen) != 0 || count($studentlehrverbaende) != 0)
|
||||
// closes the AND sql chain only if it was opened previously
|
||||
if(!$emptyCheck($gruppen) || !$emptyCheck($studentlehrverbaende))
|
||||
{
|
||||
$query .= ")";
|
||||
}
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user