From b1256856c112c671bbbad1f504be42b88d3a4812 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Tue, 16 Sep 2014 08:05:08 +0000 Subject: [PATCH] Fehler in Kollisionscheck auf Studentenebene behoben bei dem Stunden blinkten wenn zu selben Zeit an einer anderen Stelle eine kollission eingetragen ist --- include/wochenplan.class.php | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/include/wochenplan.class.php b/include/wochenplan.class.php index 6965b39ce..de2e1dafa 100644 --- a/include/wochenplan.class.php +++ b/include/wochenplan.class.php @@ -41,6 +41,7 @@ require_once(dirname(__FILE__).'/zeitsperre.class.php'); require_once(dirname(__FILE__).'/phrasen.class.php'); require_once(dirname(__FILE__).'/globals.inc.php'); require_once(dirname(__FILE__).'/sprache.class.php'); +require_once(dirname(__FILE__).'/functions.inc.php'); class wochenplan extends basis_db { @@ -623,6 +624,7 @@ class wochenplan extends basis_db echo ''.$tagbez[$spracheLoad->index][$i].'
'.strftime("%e. %b %Y",$datum).'
'.$this->crlf; //.strftime("%A %d %B %Y",$this->datum) for ($k=0; $k<$num_rows_stunde; $k++) { + $row = $this->db_fetch_object($result_stunde, $k); $j = $row->stunde; // Stunde aufbereiten @@ -1206,26 +1208,37 @@ class wochenplan extends basis_db FROM ( SELECT stpl.unr, stpl.datum, stpl.stunde, tbl_benutzergruppe.uid AS student_uid FROM lehre.tbl_stundenplandev stpl JOIN public.tbl_benutzergruppe USING (gruppe_kurzbz) - WHERE tbl_benutzergruppe.studiensemester_kurzbz::text = ".$this->db_add_param($studiensemester)." + WHERE tbl_benutzergruppe.studiensemester_kurzbz::text = ".$this->db_add_param($studiensemester)." GROUP BY stpl.unr, stpl.datum, stpl.stunde, tbl_benutzergruppe.uid UNION SELECT stpl.unr, stpl.datum, stpl.stunde, tbl_studentlehrverband.student_uid FROM lehre.tbl_stundenplandev stpl JOIN public.tbl_studentlehrverband ON stpl.gruppe_kurzbz IS NULL AND stpl.studiengang_kz = tbl_studentlehrverband.studiengang_kz AND stpl.semester = tbl_studentlehrverband.semester AND (stpl.verband = tbl_studentlehrverband.verband OR stpl.verband = ' '::bpchar AND stpl.verband <> tbl_studentlehrverband.verband) AND (stpl.gruppe = tbl_studentlehrverband.gruppe OR stpl.gruppe = ' '::bpchar AND stpl.gruppe <> tbl_studentlehrverband.gruppe) WHERE tbl_studentlehrverband.studiensemester_kurzbz::text = ".$this->db_add_param($studiensemester)." - GROUP BY stpl.unr, stpl.datum, stpl.stunde, tbl_studentlehrverband.student_uid) sub_stpl_uid + GROUP BY stpl.unr, stpl.datum, stpl.stunde, tbl_studentlehrverband.student_uid) sub_stpl_uid GROUP BY sub_stpl_uid.unr, sub_stpl_uid.datum, sub_stpl_uid.stunde, sub_stpl_uid.student_uid ) as a WHERE datum='".date('Y-m-d',$datum)."' AND stunde=".$this->db_add_param($j)." GROUP BY datum, stunde, student_uid - HAVING count(student_uid)>1 - ORDER BY datum, stunde, student_uid LIMIT 1; - "; + HAVING count(student_uid)>1 "; + + if(count($a_unr)>0) + { + // Nur die Eintraege als kollision anzeigen, die auch aktuell im Tempus sichtbar sind + // Dazu werden die UNRs der betroffenen Studierenden zuerst ein ein Array gruppiert und danach + // verglichen ob die angezeigte UNR dabei ist. + // Etwas kompliziert aber performanter als wenn die betroffenen UNRs zusätzlich zum WHERE hinzugefügt werden + + $qry.=" AND array_agg(unr) && ARRAY[".implode('::bigint,',$a_unr)."::bigint] "; + // ==> AND array_agg(unr) && ARRAY[123::bigint,345::bigint] + } + $qry.="ORDER BY datum, stunde, student_uid LIMIT 1;"; if($this->db_query($qry)) if($this->db_num_rows()>0) $kollision++; + } else {