From 01436cb4d13c001ce79a0cc4703f561dbf235bcb Mon Sep 17 00:00:00 2001 From: Alexei Karpenko Date: Fri, 13 Feb 2026 18:21:43 +0100 Subject: [PATCH] Studiensemester model: adapted getAktOrNextSemester method to return current semester, next semester only if there is no current, set default days offset to 0, set default offset of getLastorAktSemester to 0, simplified getByDate method --- .../lehre/lehrauftrag/Lehrauftrag.php | 2 +- .../lehrauftrag/LehrauftragAkzeptieren.php | 2 +- .../lehre/lehrauftrag/LehrauftragErteilen.php | 2 +- .../organisation/Studiensemester_model.php | 80 +++++++++++-------- 4 files changed, 49 insertions(+), 37 deletions(-) diff --git a/application/controllers/lehre/lehrauftrag/Lehrauftrag.php b/application/controllers/lehre/lehrauftrag/Lehrauftrag.php index 0fe70a302..a76cbf945 100644 --- a/application/controllers/lehre/lehrauftrag/Lehrauftrag.php +++ b/application/controllers/lehre/lehrauftrag/Lehrauftrag.php @@ -109,7 +109,7 @@ class Lehrauftrag extends Auth_Controller $studiensemester_kurzbz = $this->input->get('studiensemester'); // if provided by selected studiensemester if (is_null($studiensemester_kurzbz)) // else set next studiensemester as default value { - $studiensemester = $this->StudiensemesterModel->getAktOrNextSemester(); + $studiensemester = $this->StudiensemesterModel->getAktOrNextSemester(62); if (hasData($studiensemester)) { $studiensemester_kurzbz = $studiensemester->retval[0]->studiensemester_kurzbz; diff --git a/application/controllers/lehre/lehrauftrag/LehrauftragAkzeptieren.php b/application/controllers/lehre/lehrauftrag/LehrauftragAkzeptieren.php index 4abb1c400..d3f75fa79 100644 --- a/application/controllers/lehre/lehrauftrag/LehrauftragAkzeptieren.php +++ b/application/controllers/lehre/lehrauftrag/LehrauftragAkzeptieren.php @@ -75,7 +75,7 @@ class LehrauftragAkzeptieren extends Auth_Controller $studiensemester_kurzbz = $this->input->get('studiensemester'); // if provided by selected studiensemester if (is_null($studiensemester_kurzbz)) // else set next studiensemester as default value { - $studiensemester = $this->StudiensemesterModel->getAktOrNextSemester(); + $studiensemester = $this->StudiensemesterModel->getAktOrNextSemester(62); if (hasData($studiensemester)) { $studiensemester_kurzbz = $studiensemester->retval[0]->studiensemester_kurzbz; diff --git a/application/controllers/lehre/lehrauftrag/LehrauftragErteilen.php b/application/controllers/lehre/lehrauftrag/LehrauftragErteilen.php index 64a2be69b..3d09f2b90 100644 --- a/application/controllers/lehre/lehrauftrag/LehrauftragErteilen.php +++ b/application/controllers/lehre/lehrauftrag/LehrauftragErteilen.php @@ -91,7 +91,7 @@ class LehrauftragErteilen extends Auth_Controller $studiensemester_kurzbz = $this->input->get('studiensemester'); // if provided by selected studiensemester if (is_null($studiensemester_kurzbz)) // else set next studiensemester as default value { - $studiensemester = $this->StudiensemesterModel->getAktOrNextSemester(); + $studiensemester = $this->StudiensemesterModel->getAktOrNextSemester(62); if (hasData($studiensemester)) { $studiensemester_kurzbz = $studiensemester->retval[0]->studiensemester_kurzbz; diff --git a/application/models/organisation/Studiensemester_model.php b/application/models/organisation/Studiensemester_model.php index 5fa6ffb14..add9eab9c 100644 --- a/application/models/organisation/Studiensemester_model.php +++ b/application/models/organisation/Studiensemester_model.php @@ -45,41 +45,46 @@ class Studiensemester_model extends DB_Model /** * getLastOrAktSemester + * @param $days offset in days, if last semester should be returned instead of current */ - public function getLastOrAktSemester($days = 60) + public function getLastOrAktSemester($days = 0) { - if (!is_numeric($days)) - { - $days = 60; - } + if (!is_numeric($days)) $days = 0; - $query = 'SELECT studiensemester_kurzbz, start, ende - FROM public.tbl_studiensemester - WHERE start < NOW() - \'' . $days . ' DAYS\'::INTERVAL - ORDER BY start DESC - LIMIT 1'; + $query = ' + SELECT + studiensemester_kurzbz, start, ende + FROM + public.tbl_studiensemester + WHERE + start < NOW() - \'' . $this->escape($days) . ' DAYS\'::INTERVAL + ORDER + BY start DESC + LIMIT 1'; return $this->execQuery($query); } /** - * getNextOrAktSemester - * 62 days - in july and august, semester after summer is returned + * Returns current semester, or next + * @param $days offset in days, if next semester should be returned earlier */ - public function getAktOrNextSemester($days = 62) + public function getAktOrNextSemester($days = 0) { - if (!is_numeric($days)) - { - $days = 62; - } + $days = is_numeric($days) ? $this->escape($days) : 0; - $query = 'SELECT studiensemester_kurzbz, start, ende - FROM public.tbl_studiensemester - WHERE start < NOW() + \'' . $days . ' DAYS\':: INTERVAL - ORDER BY start DESC - LIMIT 1'; + $query = " + SELECT + studiensemester_kurzbz, start, ende + FROM + public.tbl_studiensemester + WHERE + ende >= NOW() + '". $this->escape($days) . " DAYS'::INTERVAL + ORDER BY + ende + LIMIT 1;"; - return $this->execQuery($query); + return $this->execQuery($query, [$days, $days]); } /** @@ -177,15 +182,19 @@ class Studiensemester_model extends DB_Model */ public function getByDate($date) { - // gets the studiensemster of a date or the next closest previous studiensemester if a date is not within a studiensemester + // gets the studiensemster of a date or the closest previous studiensemester if a date is not within a studiensemester $query = " - SELECT studiensemester_kurzbz, start, ende - FROM public.tbl_studiensemester - WHERE ( ende >= ?::date AND start <= ?::date ) OR ( ende >= ?::date + '-45 days'::interval AND start <= ?::date + '-45 days'::interval ) - ORDER BY start DESC + SELECT + studiensemester_kurzbz, start, ende + FROM + public.tbl_studiensemester + WHERE + start <= ?::date + ORDER BY + start DESC LIMIT 1"; - return $this->execQuery($query, array($date,$date,$date,$date)); + return $this->execQuery($query, array($date)); } /** @@ -200,10 +209,13 @@ class Studiensemester_model extends DB_Model return success(array()); $query = " - SELECT * - FROM public.tbl_studiensemester - WHERE ( ?::date < ende AND ?::date > start ) - ORDER BY start DESC"; + SELECT * + FROM + public.tbl_studiensemester + WHERE + ?::date < ende AND ?::date > start + ORDER BY + start DESC"; return $this->execQuery($query, array($from, $to)); } @@ -275,7 +287,7 @@ class Studiensemester_model extends DB_Model $this->addLimit($minus); $this->db->where('start <= NOW()', null, false); $minus = $this->db->get_compiled_select($this->dbTable); - + $this->db->where_in($this->pk, '(' . $plus . ') UNION (' . $minus . ')', false); }