Merge branch 'master' into feature-53599/Eingabe_von_Bankdaten_durch_Studierende

This commit is contained in:
Paolo
2024-12-11 17:23:44 +01:00
48 changed files with 983 additions and 284 deletions
@@ -0,0 +1,14 @@
<?php
class Gruppe_manager_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'public.tbl_gruppe_manager';
$this->pk = 'gruppe_manager_id';
}
}
@@ -135,7 +135,7 @@ class Stundenplan_model extends DB_Model
/**
* function that takes a query that fetches lehre.vw_stundenplan rows and groups them so that they can be displayed in a calendar
* 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
@@ -190,7 +190,7 @@ class Stundenplan_model extends DB_Model
* NO STANDALONE FUNCTION - Generates a SQL query string to fetch 'stundenplan' events for a specific student within the current semester.
* @param string $uid the user id that is used to fetch the stundenplan rows from the lehre.vw_stundenplan table
*
* @return string
* @return mixed
*/
public function getStundenplanQuery($start_date, $end_date,$semester,$gruppen,$studentlehrverbaende){
@@ -206,7 +206,13 @@ class Stundenplan_model extends DB_Model
}
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_stundenplan sp
@@ -233,15 +239,15 @@ class Stundenplan_model extends DB_Model
// 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)." )";
// 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";
}
$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);
}
foreach($semester as $sem=>$semester_date_range)
{
@@ -253,20 +259,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))
{