diff --git a/include/lehreinheit.class.php b/include/lehreinheit.class.php index 91688691b..5f3b3272d 100644 --- a/include/lehreinheit.class.php +++ b/include/lehreinheit.class.php @@ -526,7 +526,7 @@ class lehreinheit extends basis_db WHERE datum=".$this->db_add_param($datum)." AND stunde=".$this->db_add_param($stunde); // Direkte Lehreinheitsgruppen kollidieren nicht - $sql_query.=" AND NOT EXISTS(SELECT 1 FROM public.tbl_gruppe g WHERE g.gruppe_kurzbz=gruppe_kurzbz AND direktinskription=true)"; + $sql_query.=" AND NOT EXISTS(SELECT 1 FROM public.tbl_gruppe g WHERE g.gruppe_kurzbz=$stpl_table.gruppe_kurzbz AND direktinskription=true)"; if (is_numeric($this->unr)) $sql_query.=" AND unr!=".$this->db_add_param($this->unr)." AND (1=2 "; diff --git a/include/wochenplan.class.php b/include/wochenplan.class.php index 718815f3c..c9be5f567 100644 --- a/include/wochenplan.class.php +++ b/include/wochenplan.class.php @@ -1725,17 +1725,32 @@ class wochenplan extends basis_db $leids=''; for ($i=0;$i<$num_rows_stpl;$i++) { + $direktinskription = false; $row=$this->db_fetch_object(null,$i); if ($row->gruppe_kurzbz!=null) + { $gruppe[]=$row->gruppe_kurzbz; + + // Bei direkten Gruppen wird kein Lehrverband hinzugefuegt da diese nicht kollidieren + $grp_obj = new gruppe(); + $grp_obj->load($row->gruppe_kurzbz); + if($grp_obj->direktinskription) + $direktinskription = true; + } else + { $gruppe[]=''; - if (!isset($lehrverband[$i])) - $lehrverband[$i]= new stdClass(); - $lehrverband[$i]->stg_kz=$row->studiengang_kz; - $lehrverband[$i]->sem=$row->semester; - $lehrverband[$i]->ver=$row->verband; - $lehrverband[$i]->grp=$row->gruppe; + } + + if (!$direktinskription) + { + if (!isset($lehrverband[$i])) + $lehrverband[$i]= new stdClass(); + $lehrverband[$i]->stg_kz=$row->studiengang_kz; + $lehrverband[$i]->sem=$row->semester; + $lehrverband[$i]->ver=$row->verband; + $lehrverband[$i]->grp=$row->gruppe; + } $leids.="$row->lehreinheit_id,"; $lektor[$i]=$row->uid; $unr=$row->unr; @@ -1764,6 +1779,10 @@ class wochenplan extends basis_db foreach ($lektor as $l) $lkt.=" OR uid=".$this->db_add_param($l); $lkt=mb_substr($lkt,3); + + // Kollisionsfreie User ausnehmen + $lkt="(($lkt) AND uid not in (".$this->db_implode4SQL(unserialize(KOLLISIONSFREIE_USER))."))"; + // Einheiten $gruppe=array_unique($gruppe); $gruppen=''; @@ -1801,10 +1820,17 @@ class wochenplan extends basis_db $raster[$t][$s]->kollision=false; } } + + if($lvb!='') + $lvbor = "OR ($lvb)"; + else + $lvbor = ''; // Stundenplanabfrage bauen (Wo ist Kollision?) $sql_query="SELECT DISTINCT datum, stunde FROM $stpl_view WHERE datum>=".$this->db_add_param($this->datum_begin)." AND datum<".$this->db_add_param($this->datum_end)." AND - ($lkt $gruppen OR ($lvb) ) AND unr!=".$this->db_add_param($unr); + ($lkt $gruppen $lvbor ) AND unr!=".$this->db_add_param($unr); + + $sql_query.=" AND NOT EXISTS(SELECT 1 FROM public.tbl_gruppe g WHERE g.gruppe_kurzbz=$stpl_view.gruppe_kurzbz AND direktinskription=true)"; if (!$this->db_query($sql_query)) die($this->db_last_error());