mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-23 01:42:17 +00:00
Bugfix beim Kollisionscheck
This commit is contained in:
+108
-74
@@ -478,6 +478,9 @@ class lehreinheit extends basis_db
|
||||
|
||||
$this->errormsg ='';
|
||||
|
||||
$stg_obj = new studiengang();
|
||||
$stg_obj->getAll();
|
||||
|
||||
$ignore_reservation=false;
|
||||
$ignore_zeitsperre=false;
|
||||
// Parameter Checken
|
||||
@@ -498,6 +501,7 @@ class lehreinheit extends basis_db
|
||||
AND (ort_kurzbz='".addslashes($ort)."' OR $sql_lkt)";
|
||||
if (is_numeric($this->unr))
|
||||
$sql_query.=" AND unr!='".addslashes($this->unr)."'";
|
||||
|
||||
if (!$this->db_query($sql_query))
|
||||
{
|
||||
$this->errormsg=$this->db_last_error();
|
||||
@@ -509,84 +513,114 @@ class lehreinheit extends basis_db
|
||||
//Check
|
||||
if ($anzahl==0)
|
||||
{
|
||||
// Reservierungen pruefen?
|
||||
if (!$ignore_reservation)
|
||||
{
|
||||
// Datenbank abfragen ( studiengang_kz, titel, beschreibung )
|
||||
//Lektoren SQL
|
||||
$sql_lkt='';
|
||||
foreach ($this->mitarbeiter_uid as $lkt)
|
||||
$sql_lkt.="OR uid='$lkt' ";
|
||||
$sql_lkt=mb_substr($sql_lkt,3);
|
||||
$sql_lkt="(($sql_lkt) AND uid!='_DummyLektor')";
|
||||
$sql_query="SELECT reservierung_id AS id, uid AS lektor, stg_kurzbz, ort_kurzbz, semester, verband, gruppe, gruppe_kurzbz, datum, stunde
|
||||
FROM lehre.vw_reservierung
|
||||
WHERE datum='".addslashes($datum)."' AND stunde='".addslashes($stunde)."'
|
||||
AND (ort_kurzbz='".addslashes($ort)."' OR $sql_lkt)";
|
||||
// Verband SQL
|
||||
//$sql_query.="(studiengang_kz=$this->studiengang_kz AND semester=$this->sem";
|
||||
//if ($this->ver!=null && $this->ver!='' && $this->ver!=' ')
|
||||
// $sql_query.=" AND (verband='$this->ver' OR verband IS NULL OR verband='' OR verband=' ')";
|
||||
//if ($this->grp!=null && $this->grp!='' && $this->grp!=' ')
|
||||
// $sql_query.=" AND (gruppe='$this->grp' OR gruppe IS NULL OR gruppe='' OR gruppe=' ')";
|
||||
//if ($this->gruppe_kurzbz!=null && $this->gruppe_kurzbz!='' && $this->gruppe_kurzbz!=' ')
|
||||
// $sql_query.=" AND (gruppe_kurzbz='$this->gruppe_kurzbz')";
|
||||
//$sql_query.="))";
|
||||
//Gruppen / Verbaende pruefen
|
||||
$sql_query="SELECT $stpl_id, studiengang_kz, semester, verband, gruppe_kurzbz, stunde FROM $stpl_table
|
||||
WHERE datum='".addslashes($datum)."' AND stunde='".addslashes($stunde)."'";
|
||||
if (is_numeric($this->unr))
|
||||
$sql_query.=" AND unr!='".addslashes($this->unr)."' AND (1=2 ";
|
||||
|
||||
//echo $sql_query.'<br>';
|
||||
if (!$this->db_query($sql_query))
|
||||
{
|
||||
$this->errormsg=$sql_query.$this->db_last_error();
|
||||
return false;
|
||||
}
|
||||
$erg_res=$this->db_result;
|
||||
$anz_res=$this->db_num_rows($erg_res);
|
||||
//Check
|
||||
if ($anz_res==0)
|
||||
{
|
||||
// Zeitsperren pruefen?
|
||||
if (!$ignore_zeitsperre)
|
||||
{
|
||||
// Datenbank abfragen ( studiengang_kz, titel, beschreibung )
|
||||
//Lektoren SQL
|
||||
$sql_lkt='';
|
||||
foreach ($this->mitarbeiter_uid as $lkt)
|
||||
$sql_lkt.="OR mitarbeiter_uid='$lkt' ";
|
||||
$sql_lkt=mb_substr($sql_lkt,3);
|
||||
$sql_query="SELECT * FROM campus.tbl_zeitsperre
|
||||
WHERE ($sql_lkt) AND
|
||||
( (vondatum<'$datum' AND bisdatum>'$datum')
|
||||
OR (vondatum='$datum' AND bisdatum='$datum' AND vonstunde<=$stunde AND bisstunde>=$stunde)
|
||||
OR (vondatum='$datum' AND bisdatum>'$datum' AND vonstunde<=$stunde)
|
||||
OR (vondatum<'$datum' AND bisdatum='$datum' AND bisstunde>=$stunde) )";
|
||||
//echo $sql_query.'<br>';
|
||||
if (!$this->db_query($sql_query))
|
||||
{
|
||||
$this->errormsg=$sql_query.$this->db_last_error();
|
||||
return false;
|
||||
}
|
||||
$erg_zs=$this->db_result;
|
||||
$anz_zs=$this->db_num_rows($erg_zs);
|
||||
//Check
|
||||
if ($anz_zs==0)
|
||||
return true;
|
||||
else
|
||||
{
|
||||
$row=$this->db_fetch_object($erg_zs);
|
||||
$this->errormsg="Kollision (Zeitsperre): $row->zeitsperre_id|$row->mitarbeiter_uid|$row->zeitsperretyp_kurzbz|$row->bezeichnung|$row->vondatum/$row->vonstunde-$row->bisdatum/$row->bisstunde - $row->vertretung_uid";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
for($anz=0;$anz<count($this->studiengang_kz);$anz++)
|
||||
{
|
||||
$sql_query.=" OR ((studiengang_kz=".$this->studiengang_kz[$anz]." AND semester=".$this->semester[$anz].")";
|
||||
|
||||
if ($this->gruppe_kurzbz[$anz]!=null && $this->gruppe_kurzbz[$anz]!='' && $this->gruppe_kurzbz[$anz]!=' ')
|
||||
$sql_query.=" OR (gruppe_kurzbz='".$this->gruppe_kurzbz[$anz]."')";
|
||||
else
|
||||
{
|
||||
$row=$this->db_fetch_object($erg_res);
|
||||
$this->errormsg="Kollision (Reservierung): $row->id|$row->lektor|$row->ort_kurzbz|$row->stg_kurzbz-$row->semester$row->verband$row->gruppe$row->gruppe_kurzbz - $row->datum/$row->stunde";
|
||||
return false;
|
||||
}
|
||||
if ($this->verband[$anz]!=null && $this->verband[$anz]!='' && $this->verband[$anz]!=' ')
|
||||
$sql_query.=" AND (verband='".$this->verband[$anz]."' OR verband IS NULL OR verband='' OR verband=' ')";
|
||||
if ($this->gruppe[$anz]!=null && $this->gruppe[$anz]!='' && $this->gruppe[$anz]!=' ')
|
||||
$sql_query.=" AND (gruppe='".$this->gruppe[$anz]."' OR gruppe IS NULL OR gruppe='' OR gruppe=' ')";
|
||||
}
|
||||
$sql_query.=')';
|
||||
}
|
||||
$sql_query.=")";
|
||||
|
||||
if (!$this->db_query($sql_query))
|
||||
{
|
||||
$this->errormsg=$this->db_last_error();
|
||||
return false;
|
||||
}
|
||||
$erg_stpl=$this->db_result;
|
||||
|
||||
$anzahl=$this->db_num_rows($erg_stpl);
|
||||
if($anzahl==0)
|
||||
{
|
||||
// Reservierungen pruefen?
|
||||
if (!$ignore_reservation)
|
||||
{
|
||||
// Datenbank abfragen ( studiengang_kz, titel, beschreibung )
|
||||
//Lektoren SQL
|
||||
$sql_lkt='';
|
||||
foreach ($this->mitarbeiter_uid as $lkt)
|
||||
$sql_lkt.="OR uid='$lkt' ";
|
||||
$sql_lkt=mb_substr($sql_lkt,3);
|
||||
$sql_lkt="(($sql_lkt) AND uid!='_DummyLektor')";
|
||||
$sql_query="SELECT reservierung_id AS id, uid AS lektor, stg_kurzbz, ort_kurzbz, semester, verband, gruppe, gruppe_kurzbz, datum, stunde
|
||||
FROM lehre.vw_reservierung
|
||||
WHERE datum='".addslashes($datum)."' AND stunde='".addslashes($stunde)."'
|
||||
AND (ort_kurzbz='".addslashes($ort)."' OR $sql_lkt)";
|
||||
|
||||
if (!$this->db_query($sql_query))
|
||||
{
|
||||
$this->errormsg=$sql_query.$this->db_last_error();
|
||||
return false;
|
||||
}
|
||||
$erg_res=$this->db_result;
|
||||
$anz_res=$this->db_num_rows($erg_res);
|
||||
//Check
|
||||
if ($anz_res==0)
|
||||
{
|
||||
// Zeitsperren pruefen?
|
||||
if (!$ignore_zeitsperre)
|
||||
{
|
||||
// Datenbank abfragen ( studiengang_kz, titel, beschreibung )
|
||||
//Lektoren SQL
|
||||
$sql_lkt='';
|
||||
foreach ($this->mitarbeiter_uid as $lkt)
|
||||
$sql_lkt.="OR mitarbeiter_uid='$lkt' ";
|
||||
$sql_lkt=mb_substr($sql_lkt,3);
|
||||
$sql_query="SELECT * FROM campus.tbl_zeitsperre
|
||||
WHERE ($sql_lkt) AND
|
||||
( (vondatum<'$datum' AND bisdatum>'$datum')
|
||||
OR (vondatum='$datum' AND bisdatum='$datum' AND vonstunde<=$stunde AND bisstunde>=$stunde)
|
||||
OR (vondatum='$datum' AND bisdatum>'$datum' AND vonstunde<=$stunde)
|
||||
OR (vondatum<'$datum' AND bisdatum='$datum' AND bisstunde>=$stunde) )";
|
||||
//echo $sql_query.'<br>';
|
||||
if (!$this->db_query($sql_query))
|
||||
{
|
||||
$this->errormsg=$sql_query.$this->db_last_error();
|
||||
return false;
|
||||
}
|
||||
$erg_zs=$this->db_result;
|
||||
$anz_zs=$this->db_num_rows($erg_zs);
|
||||
//Check
|
||||
if ($anz_zs==0)
|
||||
return true;
|
||||
else
|
||||
{
|
||||
$row=$this->db_fetch_object($erg_zs);
|
||||
$this->errormsg="Kollision (Zeitsperre): $row->zeitsperre_id|$row->mitarbeiter_uid|$row->zeitsperretyp_kurzbz|$row->bezeichnung|$row->vondatum/$row->vonstunde-$row->bisdatum/$row->bisstunde - $row->vertretung_uid";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$row=$this->db_fetch_object($erg_res);
|
||||
$this->errormsg="Kollision (Reservierung): $row->id|$row->lektor|$row->ort_kurzbz|$row->stg_kurzbz-$row->semester$row->verband$row->gruppe$row->gruppe_kurzbz - $row->datum/$row->stunde";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$row=$this->db_fetch_object($erg_stpl);
|
||||
$this->errormsg="Kollision mit StundenplanID($stpl_id): ".$row->$stpl_id." | $datum - $row->stunde | $ort | ".($row->gruppe_kurzbz!=''?$row->gruppe_kurzbz:$stg_obj->kuerzel_arr[$row->studiengang_kz]."-$row->semester$row->verband$row->gruppe");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -562,12 +562,18 @@ class lehrstunde extends basis_db
|
||||
if($kollision_student=='false')
|
||||
{
|
||||
$sql_query.=" OR (studiengang_kz='".addslashes($this->studiengang_kz)."' AND semester='".addslashes($this->sem)."'";
|
||||
if ($this->ver!=null && $this->ver!='' && $this->ver!=' ')
|
||||
$sql_query.=" AND (verband='".addslashes($this->ver)."' OR verband IS NULL OR verband='' OR verband=' ')";
|
||||
if ($this->grp!=null && $this->grp!='' && $this->grp!=' ')
|
||||
$sql_query.=" AND (gruppe='".addslashes($this->grp)."' OR gruppe IS NULL OR gruppe='' OR gruppe=' ')";
|
||||
if ($this->gruppe_kurzbz!=null && $this->gruppe_kurzbz!='' && $this->gruppe_kurzbz!=' ')
|
||||
$sql_query.=" AND (gruppe_kurzbz='".addslashes($this->gruppe_kurzbz)."' OR gruppe_kurzbz IS null)";
|
||||
if($this->gruppe_kurzbz!=null && $this->gruppe_kurzbz!='' && $this->gruppe_kurzbz!=' ')
|
||||
{
|
||||
$sql_query.=" OR (gruppe_kurzbz='".addslashes($this->gruppe_kurzbz)."')";
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($this->ver!=null && $this->ver!='' && $this->ver!=' ')
|
||||
$sql_query.=" AND (verband='".addslashes($this->ver)."' OR verband IS NULL OR verband='' OR verband=' ')";
|
||||
if ($this->grp!=null && $this->grp!='' && $this->grp!=' ')
|
||||
$sql_query.=" AND (gruppe='".addslashes($this->grp)."' OR gruppe IS NULL OR gruppe='' OR gruppe=' ')";
|
||||
}
|
||||
|
||||
$sql_query.=")";
|
||||
}
|
||||
$sql_query.=") AND unr!='".addslashes($this->unr)."'";
|
||||
@@ -577,7 +583,7 @@ class lehrstunde extends basis_db
|
||||
$this->errormsg=$sql_query.$this->db_last_error();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
$anz=$this->db_num_rows($erg_stpl);
|
||||
if ($anz==0)
|
||||
{
|
||||
|
||||
@@ -1428,7 +1428,7 @@ class wochenplan extends basis_db
|
||||
if ($l->grp!='' && $l->grp!=' ' && $l->grp!=null)
|
||||
$lvb.=" AND (gruppe='".addslashes($l->grp)."' OR gruppe IS NULL OR gruppe='')";
|
||||
}
|
||||
//if ($gruppen=='')
|
||||
//if ($gruppen!='')
|
||||
// $lvb.=' AND gruppe_kurzbz IS NULL';
|
||||
$lvb.=')';
|
||||
}
|
||||
@@ -1718,8 +1718,7 @@ class wochenplan extends basis_db
|
||||
if ($l->grp!='' && $l->grp!=' ' && $l->grp!=null)
|
||||
$lvb.=" AND (gruppe='".addslashes($l->grp)."' OR gruppe IS NULL OR gruppe='' OR gruppe=' ')";
|
||||
}
|
||||
if ($gruppen=='')
|
||||
$lvb.=' AND gruppe_kurzbz IS NULL';
|
||||
|
||||
$lvb.=')';
|
||||
}
|
||||
$lvb=mb_substr($lvb,3);
|
||||
@@ -1873,9 +1872,7 @@ class wochenplan extends basis_db
|
||||
{
|
||||
// Bei Gruppenkollision den Wert bei allen Raumen erhoehen
|
||||
foreach ($this->std_plan[$t][$s][0]->frei_orte as $ort=>$value)
|
||||
{
|
||||
$this->std_plan[$t][$s][0]->frei_orte[$ort]=(isset($this->std_plan[$t][$s][0]->frei_orte[$ort])?$this->std_plan[$t][$s][0]->frei_orte[$ort]+1:1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1886,7 +1883,6 @@ class wochenplan extends basis_db
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Variablen abgleichen
|
||||
$rest-=$block;
|
||||
if ($block>$rest)
|
||||
@@ -2131,7 +2127,7 @@ class wochenplan extends basis_db
|
||||
echo $this->crlf.'"'.$this->std_plan[$i][$j][$idx]->lehrfach.(isset($this->std_plan[$i][$j][$idx]->lehrform) && $this->std_plan[$i][$j][$idx]->lehrform!=''?'-'.$this->std_plan[$i][$j][$idx]->lehrform:'').($lvb!=''?' - '.$lvb:'').'","'.$start_date.'","'.$start_time.'","'.$end_date.'","'.$end_time.'","Aus","Aus",,,,,,,,"Stundenplan';
|
||||
echo $this->crlf.$this->std_plan[$i][$j][$idx]->lehrfach.$this->crlf.$this->std_plan[$i][$j][$idx]->lektor.$this->crlf.$lvb.$this->crlf.$this->std_plan[$i][$j][$idx]->ort.'","StundenplanFH","'.$this->std_plan[$i][$j][$idx]->ort.'","Normal","Aus",,"Normal","2"';
|
||||
}
|
||||
else if ($target=='ical')
|
||||
elseif ($target=='ical')
|
||||
{
|
||||
$sda = explode(".",$start_date); //sda start date array
|
||||
$sta = explode(":",$start_time); //sta start time array
|
||||
@@ -2153,6 +2149,30 @@ class wochenplan extends basis_db
|
||||
.'DTEND;TZID=Europe/Vienna:'.$end_date_time_ical.$this->crlf
|
||||
.'END:VEVENT';
|
||||
}
|
||||
elseif ($target=='freebusy')
|
||||
{
|
||||
$sda = explode(".",$start_date); //sda start date array
|
||||
$sta = explode(":",$start_time); //sta start time array
|
||||
$eda = explode(".",$end_date); //eda end date array
|
||||
$eta = explode(":",$end_time); //eta end time array
|
||||
|
||||
//Die Zeitzone muss angegeben werden, da sonst der Google Kalender die Endzeiten nicht richtig erkennt
|
||||
// diese wird in stpl_kalender global definiert und bei den Start und Ende Zeiten mitangegeben
|
||||
$start_date_time_ical = $sda[2].$sda[1].$sda[0].'T'.sprintf('%02s',($sta[0])).$sta[1].$sta[2]; //neu gruppieren der Startzeit und des Startdatums
|
||||
$end_date_time_ical = $eda[2].$eda[1].$eda[0].'T'.sprintf('%02s',($eta[0])).$eta[1].$eta[2]; //neu gruppieren der Startzeit und des Startdatums
|
||||
echo $this->crlf,'FREEBUSY: ',$start_date_time_ical,'/',$end_date_time_ical;
|
||||
/*
|
||||
echo $this->crlf.'BEGIN:VEVENT'.$this->crlf
|
||||
.'UID:'.'FH'.$lvb.$this->std_plan[$i][$j][$idx]->ort.$this->std_plan[$i][$j][$idx]->lektor.$lehrfach[$idx].$start_date_time_ical.$this->crlf
|
||||
.'SUMMARY:'.$lehrfach[$idx].' '.$this->std_plan[$i][$j][$idx]->ort.' - '.$lvb.$this->crlf
|
||||
.'DESCRIPTION:'.$lehrfach[$idx].'\n'.$this->std_plan[$i][$j][$idx]->lektor.'\n'.$lvb.'\n'.$this->std_plan[$i][$j][$idx]->ort.$this->crlf
|
||||
.'LOCATION:'.$this->std_plan[$i][$j][$idx]->ort.$this->crlf
|
||||
.'CATEGORIES:'.$lvplan_kategorie.$this->crlf
|
||||
.'DTSTART;TZID=Europe/Vienna:'.$start_date_time_ical.$this->crlf
|
||||
.'DTEND;TZID=Europe/Vienna:'.$end_date_time_ical.$this->crlf
|
||||
.'END:VEVENT';
|
||||
*/
|
||||
}
|
||||
else
|
||||
{
|
||||
echo $this->crlf.'"'.$lehrfach[$idx].'","'.$lvplan_kategorie.'","'.$this->std_plan[$i][$j][$idx]->ort.'","Stundenplan'.$this->crlf.$this->std_plan[$i][$j][$idx]->lehrfach.$this->crlf;
|
||||
|
||||
Reference in New Issue
Block a user