diff --git a/cis/public/freebusy_lvplan.php b/cis/public/freebusy_lvplan.php
new file mode 100755
index 000000000..5b3da0891
--- /dev/null
+++ b/cis/public/freebusy_lvplan.php
@@ -0,0 +1,92 @@
+
+ */
+/**
+ * Dieses Script liefert die FreeBusy Informationen
+ *
+ * Aufruf: http://www.example.com/cis/public/freebusy.php/[uid]
+ * zB
+ * http://www.example.com/cis/public/freebusy.php/oesi
+ */
+require_once('../../config/cis.config.inc.php');
+require_once('../../include/benutzer.class.php');
+require_once('../../include/functions.inc.php');
+require_once('../../include/wochenplan.class.php');
+
+$uid = mb_substr($_SERVER['PATH_INFO'],1);
+
+$bn = new benutzer();
+if(!$bn->load($uid))
+ die('User invalid');
+
+if(check_lektor($uid))
+ $type='lektor';
+else
+ $type='student';
+
+
+header("Content-Type: text/calendar; charset=UTF-8");
+
+echo "BEGIN:VCALENDAR\n";
+echo "VERSION:2.0\n";
+echo "PRODID:-//FH TECHNIKUM WIEN//EN\n";
+echo "METHOD:PUBLISH\n";
+echo 'ORGANIZER;CN=',$bn->vorname,' ',$bn->nachname,':mailto:',$uid,'@',DOMAIN,"\n";
+echo 'DTSTAMP:',date('Ymd', mktime(date('H'),date('i'),date('s'),date('m'),date('d')-5,date('Y'))),'T',date('Hms'),"Z\n";
+echo 'DTSTART:',date('Ymd', mktime(0,0,0,date('m'),date('d')-5,date('Y'))),"T000000Z\n";
+echo 'DTEND:',date('Ymd', mktime(0,0,0,date('m'),date('d')+30,date('Y'))),"T000000Z\n";
+echo 'URL:',APP_ROOT,'cis/public/freebusy_lvplan.php/',$uid,"\n";
+echo "BEGIN:VFREEBUSY";
+
+// Stundenplanobjekt erzeugen
+$stdplan = new wochenplan($type);
+$stdplan->crlf="\n";
+
+// Zusaetzliche Daten laden
+if(!$stdplan->load_data($type,$uid))
+{
+ die($stdplan->errormsg);
+}
+
+$begin = mktime(0,0,0,date('m'),date('d')-5,date('Y'));
+$ende = mktime(0,0,0,date('m'),date('d')+30,date('Y'));
+$db_stpl_table = 'stundenplan';
+$i=0;
+// Kalender erstellen
+while($begin<$ende)
+{
+$i++;
+ if(!date("w",$begin))
+ $begin=jump_day($begin,1);
+
+ $stdplan->init_stdplan();
+ $datum=$begin;
+ $begin+=604800; // eine Woche
+
+ // Stundenplan einer Woche laden
+ if(!$stdplan->load_week($datum,$db_stpl_table))
+ {
+ die($stdplan->errormsg);
+ }
+ $stdplan->draw_week_csv('freebusy', LVPLAN_KATEGORIE);
+}
+
+echo "\nEND:VFREEBUSY";
+echo "\nEND:VCALENDAR";
+?>
\ No newline at end of file
diff --git a/include/lehreinheit.class.php b/include/lehreinheit.class.php
index e49f49e77..9268f8089 100644
--- a/include/lehreinheit.class.php
+++ b/include/lehreinheit.class.php
@@ -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.'
';
- 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.'
';
- 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;$anzstudiengang_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.'
';
+ 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
{
diff --git a/include/lehrstunde.class.php b/include/lehrstunde.class.php
index b4b102fe4..9cef694b3 100644
--- a/include/lehrstunde.class.php
+++ b/include/lehrstunde.class.php
@@ -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)
{
diff --git a/include/wochenplan.class.php b/include/wochenplan.class.php
index aa5cd5e8d..b035fbc53 100644
--- a/include/wochenplan.class.php
+++ b/include/wochenplan.class.php
@@ -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;