mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-01 20:29:29 +00:00
1568 lines
57 KiB
PHP
1568 lines
57 KiB
PHP
<?php
|
|
/*
|
|
$Header: /include/stundenplan.class.php,v 1.2 2004/10/16 17:05:38 pam Exp $
|
|
$Log: stundenplan.class.php,v $
|
|
Revision 1.2 2004/10/16 17:05:38 pam
|
|
Anpassung an neue DB-Struktur.
|
|
globals.inc.php wird benoetigt.
|
|
*/
|
|
|
|
|
|
/****************************************************************************
|
|
* @class Stundenplan
|
|
* @author Christian Paminger
|
|
* @date 2001/8/21
|
|
* @version $Revision: 1.3 $
|
|
* Update: 10.11.2004 von Christian Paminger
|
|
* @brief Klasse zm Berechnen und Anzeigen des Stundenplans.
|
|
* Abhaengig: von functions.inc.php
|
|
*****************************************************************************/
|
|
|
|
require_once('lehrstunde.class.php');
|
|
require_once('ferien.class.php');
|
|
|
|
class wochenplan
|
|
{
|
|
var $conn; // @brief Connection zur Datenbank
|
|
var $crlf; // @brief Return Linefeed
|
|
var $type; // @brief Typ des Plans (Student, Lektor, Verband, Ort)
|
|
var $user; // @brief Benutzergruppe
|
|
var $user_uid; // @brief id in der Datenbank des Benutzers
|
|
var $link; // @brief Link auf eigene Seite
|
|
var $kal_link; // @brief Link auf den kalender
|
|
|
|
var $stg_kz; // @brief Kennzahl des Studiengangs
|
|
var $stg_bez; // @brief Bezeichnung Studiengang
|
|
var $stg_kurzbz; // @brief Kurzbezeichnung Studiengang
|
|
var $stg_kurzbzlang;// @brief lange Kurzbezeichnung Studiengang
|
|
var $sem; // @brief Semester
|
|
var $ver; // @brief Verband (A,B,C,...)
|
|
var $grp; // @brief Gruppe (1,2)
|
|
|
|
var $pers_uid; // @brief Account Name der Person (PK)
|
|
var $pers_titelpre; // @brief Titel der Person
|
|
var $pers_nachname; // @brief Personendaten
|
|
var $pers_vornamen; // @brief Personendaten
|
|
|
|
var $ort_kurzbz; // @brief Ort PK
|
|
var $ort_bezeichnung;
|
|
|
|
var $gruppe_kurzbz;
|
|
var $einheit_bezeichnung;
|
|
|
|
var $datum; // @brief Datum des Montags der zu zeichnenden Woche
|
|
var $datum_nextweek;
|
|
var $datum_next4week;
|
|
var $datum_prevweek;
|
|
var $datum_prev4week;
|
|
var $datum_begin;
|
|
var $datum_end;
|
|
var $kalenderwoche;
|
|
|
|
var $studiensemester_now;
|
|
var $studiensemester_next;
|
|
|
|
var $std_plan;
|
|
var $stunde;
|
|
|
|
var $wochenplan;
|
|
var $errormsg;
|
|
|
|
function wochenplan($type,$conn)
|
|
{
|
|
$this->type=$type;
|
|
$this->conn=$conn;
|
|
$this->link='stpl_week.php?type='.$type;
|
|
$this->kal_link='stpl_kalender.php?type='.$type;
|
|
$this->datum=mktime();
|
|
$this->init_stdplan();
|
|
}
|
|
|
|
function init_stdplan()
|
|
{
|
|
//Stundenplan Array initialisieren (Anzahl auf 0 setzten)
|
|
unset($this->std_plan);
|
|
for ($i=1; $i<7; $i++)
|
|
for ($j=0; $j<20; $j++)
|
|
{
|
|
$this->std_plan[$i][$j][0]->anz=0;
|
|
$this->std_plan[$i][$j][0]->unr=0;
|
|
}
|
|
}
|
|
|
|
/**************************************************************************
|
|
* @brief Funktion load_data ladet alle Zusatzinformationen fuer die Darstellung
|
|
* und ueberprueft die Daten
|
|
*
|
|
* @param datum Datum eines Tages in der angeforderten Woche
|
|
*
|
|
* @return gruppe_kurzbz
|
|
*
|
|
*/
|
|
function load_data($type, $uid, $ort_kurzbz=NULL, $studiengang_kz=NULL, $sem=NULL, $ver=NULL, $grp=NULL, $gruppe_kurzbz=NULL)
|
|
{
|
|
///////////////////////////////////////////////////////////////////////
|
|
// Parameter Checken
|
|
// Typ des Stundenplans
|
|
if ($type=='student' || $type=='lektor' || $type=='verband' || $type=='einheit' || $type=='ort')
|
|
$this->type=$type;
|
|
else
|
|
{
|
|
$this->errormsg='Error: type is not defined!';
|
|
return false;
|
|
}
|
|
// Person
|
|
if (($type=='student' || $type=='lektor') && ($uid==NULL || $uid==''))
|
|
{
|
|
$this->errormsg='Fehler: uid der Person ist nicht gesetzt';
|
|
return false;
|
|
}
|
|
else
|
|
$this->pers_uid=$uid;
|
|
|
|
// Ort
|
|
if ($type=='ort' && $ort_kurzbz==NULL)
|
|
{
|
|
$this->errormsg='Fehler: Kurzbezeichnung des Orts ist nicht gesetzt';
|
|
return false;
|
|
}
|
|
elseif ($type=='ort')
|
|
$this->ort_kurzbz=$ort_kurzbz;
|
|
else
|
|
$this->ort_kurzbz='';
|
|
|
|
// Lehrverband
|
|
if ($type=='verband' && $studiengang_kz==NULL)
|
|
{
|
|
$this->errormsg='Fehler: Kennzahl des Studiengangs ist nicht gesetzt';
|
|
return false;
|
|
}
|
|
elseif($type=='verband')
|
|
{
|
|
$this->stg_kz=$studiengang_kz;
|
|
$this->sem=$sem;
|
|
$this->ver=$ver;
|
|
$this->grp=$grp;
|
|
}
|
|
|
|
// Einheit
|
|
if ($type=='einheit' && $gruppe_kurzbz==NULL)
|
|
{
|
|
$this->errormsg='Fehler: Kurzbezeichnung der Einheit ist nicht gesetzt';
|
|
return false;
|
|
}
|
|
elseif ($type=='einheit')
|
|
$this->gruppe_kurzbz=$gruppe_kurzbz;
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////
|
|
// Zusaetzliche Daten ermitteln
|
|
//personendaten
|
|
if ($this->type=='student' || $this->type=='lektor')
|
|
{
|
|
$this->link.='&pers_uid='.$this->pers_uid; //Link erweitern
|
|
if ($this->type=='student')
|
|
$sql_query="SELECT uid, titelpre, nachname, vornamen, studiengang_kz, semester, verband, gruppe FROM vw_student WHERE uid='$this->pers_uid'";
|
|
else
|
|
$sql_query="SELECT uid, titelpre, nachname, vornamen FROM vw_mitarbeiter WHERE uid='$this->pers_uid'";
|
|
//echo $sql_query;
|
|
if (!($result=pg_exec($this->conn, $sql_query)))
|
|
{
|
|
$this->errormsg=pg_last_error($this->conn);
|
|
return false;
|
|
}
|
|
if (pg_num_rows($result)!=1)
|
|
{
|
|
$this->errormsg='Error: Cannot identify UID "'.$this->pers_uid.'"!';
|
|
return false;
|
|
}
|
|
$this->pers_uid=pg_result($result,0,'"uid"');
|
|
$this->pers_titelpre=pg_result($result,0,'"titelpre"');
|
|
$this->pers_nachname=pg_result($result,0,'"nachname"');
|
|
$this->pers_vornamen=pg_result($result,0,'"vornamen"');
|
|
if ($this->type=='student')
|
|
{
|
|
$this->stg_kz=pg_result($result,0,'"studiengang_kz"');
|
|
$this->sem=pg_result($result,0,'"semester"');
|
|
$this->ver=pg_result($result,0,'"verband"');
|
|
$this->grp=pg_result($result,0,'"gruppe"');
|
|
}
|
|
}
|
|
|
|
//ortdaten ermitteln
|
|
if ($this->type=='ort')
|
|
{
|
|
$sql_query="SELECT bezeichnung, ort_kurzbz FROM tbl_ort WHERE ort_kurzbz='$this->ort_kurzbz'";
|
|
//echo $sql_query;
|
|
if (!$result=pg_query($this->conn, $sql_query))
|
|
$this->errormsg=pg_last_error($this->conn);
|
|
$this->ort_bezeichnung=pg_result($result,0,'"bezeichnung"');
|
|
$this->ort_kurzbz=pg_result($result,0,'"ort_kurzbz"');
|
|
$this->link.='&ort_kurzbz='.$this->ort_kurzbz; //Link erweitern
|
|
}
|
|
|
|
// Studiengangsdaten ermitteln
|
|
if ($this->type=='student' || $this->type=='verband')
|
|
{
|
|
$sql_query="SELECT bezeichnung, kurzbz, kurzbzlang FROM tbl_studiengang WHERE studiengang_kz=$this->stg_kz";
|
|
//echo $sql_query;
|
|
if(!($result=pg_exec($this->conn, $sql_query)))
|
|
die(pg_last_error($this->conn));
|
|
$this->stg_bez=pg_result($result,0,'"bezeichnung"');
|
|
$this->stg_kurzbz=pg_result($result,0,'"kurzbz"');
|
|
$this->stg_kurzbzlang=pg_result($result,0,'"kurzbzlang"');
|
|
}
|
|
|
|
// Stundentafel abfragen
|
|
$sql_query="SELECT stunde, beginn, ende FROM lehre.tbl_stunde ORDER BY stunde";
|
|
if(!$this->stunde=pg_exec($this->conn, $sql_query))
|
|
die(pg_last_error($this->conn));
|
|
|
|
// Studiensemesterdaten ermitteln
|
|
$sql_query="SELECT * FROM public.tbl_studiensemester WHERE now()<ende ORDER BY start LIMIT 2";
|
|
if(!$result=pg_exec($this->conn, $sql_query))
|
|
die(pg_last_error($this->conn));
|
|
else
|
|
{
|
|
$row=pg_fetch_object($result);
|
|
$this->studiensemester_now->name=$row->studiensemester_kurzbz;
|
|
$this->studiensemester_now->start=mktime(0,0,0,substr($row->start,5,2),substr($row->start,8,2),substr($row->start,0,4));
|
|
$this->studiensemester_now->ende=mktime(0,0,0,substr($row->ende,5,2),substr($row->ende,8,2),substr($row->ende,0,4));
|
|
$row=pg_fetch_object($result);
|
|
$this->studiensemester_next->name=$row->studiensemester_kurzbz;
|
|
$this->studiensemester_next->start=mktime(0,0,0,substr($row->start,5,2),substr($row->start,8,2),substr($row->start,0,4));
|
|
$this->studiensemester_next->ende=mktime(0,0,0,substr($row->ende,5,2),substr($row->ende,8,2),substr($row->ende,0,4));
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**************************************************************************
|
|
* @brief Funktion load_week ladet die Stundenplandaten einer Woche
|
|
*
|
|
* @param datum Datum eines Tages in der angeforderten Woche
|
|
*
|
|
* @return true oder false
|
|
*
|
|
*/
|
|
function load_week($datum, $stpl_view='stundenplan')
|
|
{
|
|
// Pruefung der Attribute
|
|
if (!isset($this->type))
|
|
{
|
|
$this->errormsg='$type is not set in stundenplan.load_week!';
|
|
return false;
|
|
}
|
|
|
|
//Kalenderdaten setzen
|
|
$this->datum=montag($datum);
|
|
$this->datum_begin=$this->datum;
|
|
$this->datum_end=jump_week($this->datum_begin, 1);
|
|
$this->datum_nextweek=$this->datum_end;
|
|
$this->datum_prevweek=jump_week($this->datum_begin, -1);
|
|
$this->datum_next4week=jump_week($this->datum_begin, 4);
|
|
$this->datum_prev4week=jump_week($this->datum_begin, -4);
|
|
// Formatieren fuer Datenbankabfragen
|
|
$this->datum_begin=date("Y-m-d",$this->datum_begin);
|
|
$this->datum_end=date("Y-m-d",$this->datum_end);
|
|
$this->kalenderwoche=kalenderwoche($this->datum);
|
|
|
|
// Stundenplandaten ermittlen
|
|
$this->wochenplan=new lehrstunde($this->conn);
|
|
$anz=$this->wochenplan->load_lehrstunden($this->type,$this->datum_begin,$this->datum_end,$this->pers_uid,$this->ort_kurzbz,$this->stg_kz,$this->sem,$this->ver,$this->grp,$this->gruppe_kurzbz, $stpl_view);
|
|
if ($anz<0)
|
|
{
|
|
$this->errormsg=$this->wochenplan->errormsg;
|
|
return false;
|
|
}
|
|
|
|
// Stundenplandaten aufbereiten
|
|
for($i=0;$i<$anz;$i++)
|
|
{
|
|
$idx=0;
|
|
$mtag=substr($this->wochenplan->lehrstunden[$i]->datum, 8,2);
|
|
$month=substr($this->wochenplan->lehrstunden[$i]->datum, 5,2);
|
|
$jahr=substr($this->wochenplan->lehrstunden[$i]->datum, 0,4);
|
|
$tag=date("w",mktime(12,0,0,$month,$mtag,$jahr));
|
|
//echo $tag.':'.$this->wochenplan->lehrstunden[$i]->datum.'<BR>';
|
|
$stunde=$this->wochenplan->lehrstunden[$i]->stunde;
|
|
// naechste freie Stelle im Array suchen
|
|
while (isset($this->std_plan[$tag][$stunde][$idx]->lektor_uid))
|
|
$idx++;
|
|
//echo $idx.'<BR>';
|
|
$this->std_plan[$tag][$stunde][$idx]->unr=$this->wochenplan->lehrstunden[$i]->unr;
|
|
if ($this->wochenplan->lehrstunden[$idx]->reservierung)
|
|
$this->std_plan[$tag][$stunde][$idx]->lehrfach=$this->wochenplan->lehrstunden[$i]->titel;
|
|
else
|
|
{
|
|
$this->std_plan[$tag][$stunde][$idx]->lehrfach=$this->wochenplan->lehrstunden[$i]->lehrfach;
|
|
$this->std_plan[$tag][$stunde][$idx]->lehrform=$this->wochenplan->lehrstunden[$i]->lehrform;
|
|
$this->std_plan[$tag][$stunde][$idx]->lehrfach_nr=$this->wochenplan->lehrstunden[$i]->lehrfach_nr;
|
|
$this->std_plan[$tag][$stunde][$idx]->farbe=$this->wochenplan->lehrstunden[$i]->farbe;
|
|
//$this->std_plan[$tag][$stunde][$idx]->titel=$this->wochenplan->lehrstunden[$i]->titel;
|
|
}
|
|
$this->std_plan[$tag][$stunde][$idx]->titel=$this->wochenplan->lehrstunden[$i]->titel;
|
|
$this->std_plan[$tag][$stunde][$idx]->stundenplan_id=$this->wochenplan->lehrstunden[$i]->stundenplan_id;
|
|
$this->std_plan[$tag][$stunde][$idx]->lektor_uid=$this->wochenplan->lehrstunden[$i]->lektor_uid;
|
|
$this->std_plan[$tag][$stunde][$idx]->lektor=$this->wochenplan->lehrstunden[$i]->lektor_kurzbz;
|
|
$this->std_plan[$tag][$stunde][$idx]->ort=$this->wochenplan->lehrstunden[$i]->ort_kurzbz;
|
|
$this->std_plan[$tag][$stunde][$idx]->stg=$this->wochenplan->lehrstunden[$i]->studiengang;
|
|
$this->std_plan[$tag][$stunde][$idx]->stg_kz=$this->wochenplan->lehrstunden[$i]->studiengang_kz;
|
|
$this->std_plan[$tag][$stunde][$idx]->sem=$this->wochenplan->lehrstunden[$i]->sem;
|
|
$this->std_plan[$tag][$stunde][$idx]->ver=$this->wochenplan->lehrstunden[$i]->ver;
|
|
$this->std_plan[$tag][$stunde][$idx]->grp=$this->wochenplan->lehrstunden[$i]->grp;
|
|
$this->std_plan[$tag][$stunde][$idx]->gruppe_kurzbz=$this->wochenplan->lehrstunden[$i]->gruppe_kurzbz;
|
|
$this->std_plan[$tag][$stunde][$idx]->anmerkung=$this->wochenplan->lehrstunden[$i]->anmerkung;
|
|
$this->std_plan[$tag][$stunde][$idx]->updateamum=$this->wochenplan->lehrstunden[$i]->updateamum;
|
|
$this->std_plan[$tag][$stunde][$idx]->updatevon=$this->wochenplan->lehrstunden[$i]->updatevon;
|
|
//echo $tag.' '.$stunde.' '.$this->std_plan[$tag][$stunde][$idx]->lektor_uid.'<br>';
|
|
}
|
|
unset($this->wochenplan);
|
|
return true;
|
|
}
|
|
|
|
function draw_header()
|
|
{
|
|
echo '<TABLE width="100%" bgcolor="#EEEEEE" border="0" cellspacing="0">';
|
|
echo '<TR>';
|
|
echo '<TD valign="bottom"><P valign="top">';
|
|
if ($this->type=='student' || $this->type=='lektor')
|
|
echo '<strong>Person: </strong>'.$this->pers_titelpre.' '.$this->pers_vornamen.' '.$this->pers_nachname.' - '.$this->pers_uid.'<br>';
|
|
if ($this->type=='student' || $this->type=='verband')
|
|
{
|
|
echo '<strong>Studiengang: </strong>'.$this->stg_kurzbzlang.' - '.$this->stg_bez.'<br>';
|
|
echo 'Semester: '.$this->sem.'<br>';
|
|
if ($this->ver!='0' && $this->ver!='' && $this->ver!=null)
|
|
echo 'Verband: '.$this->ver.'<br>';
|
|
if ($this->grp!='0' && $this->grp!='' && $this->grp!=null)
|
|
echo 'Gruppe: '.$this->grp.'<br>';
|
|
$this->link.='&stg_kz='.$this->stg_kz.'&sem='.$this->sem.'&ver='.$this->ver.'&grp='.$this->grp;
|
|
}
|
|
if ($this->type=='ort')
|
|
echo '<strong>Ort: </strong>'.$this->ort_kurzbz.' - '.$this->ort_bezeichnung.'<br>';
|
|
echo '</P><div valign="bottom" align="center">';
|
|
|
|
//Kalender
|
|
$this->kal_link.='&pers_uid='.$this->pers_uid.'&ort_kurzbz='.$this->ort_kurzbz.'&stg_kz='.$this->stg_kz.'&sem='.$this->sem.'&ver='.$this->ver.'&grp='.$this->grp.'&gruppe_kurzbz='.$this->gruppe_kurzbz;
|
|
//global $kalender_begin_ws, $kalender_ende_ws, $kalender_begin_ss, $kalender_ende_ss;
|
|
$kal_link_ws=$this->kal_link.'&begin='.$this->studiensemester_now->start.'&ende='.$this->studiensemester_now->ende;
|
|
$kal_link_ss=$this->kal_link.'&begin='.$this->studiensemester_next->start.'&ende='.$this->studiensemester_next->ende;
|
|
echo ' <strong>Kalender: </strong>';
|
|
echo '<A href="'.$kal_link_ws.'&format=html" target="_blank" title="HTML">'.$this->studiensemester_now->name.'</A> ';
|
|
echo ' <A href="'.$kal_link_ws.'&format=html" target="_blank" title="HTML">
|
|
<IMG src="../../../skin/images/website.png" height="24" alt="HTML" border="0"></A>';
|
|
echo ' <A href="'.$kal_link_ws.'&format=csv" title="CSV">
|
|
<IMG src="../../../skin/images/csv.png" height="24" alt="CSV" border="0"></A>';
|
|
echo ' <A href="'.$kal_link_ws.'&format=csv&target=outlook" title="CSV-Outlook">
|
|
<IMG src="../../../skin/images/outlook.png" height="24" alt="CSV-Outlook" border="0"></A>';
|
|
echo ' <A href="'.$kal_link_ws.'&format=ical&version=1&target=ical" title="iCal Version 1.0">
|
|
<IMG src="../../../skin/images/vcal_v1.png" height="24" alt="vCal Version 1.0" border="0"></A>';
|
|
echo ' <A href="'.$kal_link_ws.'&format=ical&version=2&target=ical" title="iCal Version 2.0">
|
|
<IMG src="../../../skin/images/vcal_v2.png" height="24" alt="vCal Version 2.0" border="0"></A>';
|
|
echo ' <A href="'.$kal_link_ss.'&format=html" target="_blank" title="HTML">'.$this->studiensemester_next->name.'</A> ';
|
|
echo ' <A href="'.$kal_link_ss.'&format=html" target="_blank" title="HTML">
|
|
<IMG src="../../../skin/images/website.png" height="24" alt="HTML" border="0"></A>';
|
|
echo ' <A href="'.$kal_link_ss.'&format=csv" title="CSV">
|
|
<IMG src="../../../skin/images/csv.png" height="24" alt="CSV" border="0"></A>';
|
|
echo ' <A href="'.$kal_link_ss.'&format=csv&target=outlook" title="CSV-Outlook">
|
|
<IMG src="../../../skin/images/outlook.png" height="24" alt="CSV-Outlook" border="0"></A>';
|
|
echo ' <A href="'.$kal_link_ss.'&format=ical&version=1&target=ical" title="iCal Version 1.0">
|
|
<IMG src="../../../skin/images/vcal_v1.png" height="24" alt="iCal Version 1.0" border="0"></A>';
|
|
echo ' <A href="'.$kal_link_ss.'&format=ical&version=2&target=ical" title="iCal Version 2.0">
|
|
<IMG src="../../../skin/images/vcal_v2.png" height="24" alt="iCal Version 2.0" border="0"></A>';
|
|
echo '</div></TD>';
|
|
|
|
// Kalenderjump
|
|
echo '<TD align="right" valign="top">';
|
|
jahreskalenderjump($this->link);
|
|
echo '</TD>';
|
|
echo '</TR>';
|
|
echo '</TABLE><HR>';
|
|
|
|
// Jump Wochenweise
|
|
if ($this->type=='verband')
|
|
$link_parameter='&stg_kz='.$this->stg_kz.'&sem='.$this->sem.'&ver='.$this->ver.'&grp='.$this->grp;
|
|
if ($this->type=='student' || $this->type=='lektor')
|
|
$link_parameter='&pers_uid='.$this->pers_uid;
|
|
|
|
// Ort Jump
|
|
if ($this->type=='ort')
|
|
{
|
|
// Orte abfragen
|
|
$sql_query="SELECT * FROM tbl_ort WHERE aktiv AND lehre ORDER BY ort_kurzbz";
|
|
if(!$result_ort=pg_exec($this->conn, $sql_query))
|
|
die(pg_last_error($this->conn));
|
|
$num_rows_ort=pg_numrows($result_ort);
|
|
|
|
// vorigen Ort bestimmen
|
|
for ($i=0;$i<($num_rows_ort-1);$i++)
|
|
if (pg_result($result_ort,$i+1,'"ort_kurzbz"')==$this->ort_kurzbz)
|
|
$prev_ort=pg_fetch_object($result_ort,$i);
|
|
// naechsten Ort bestimmen
|
|
for ($i=1;$i<$num_rows_ort;$i++)
|
|
if (pg_result($result_ort,$i-1,'"ort_kurzbz"')==$this->ort_kurzbz)
|
|
$next_ort=pg_fetch_object($result_ort,$i);
|
|
|
|
// Ort Jump
|
|
echo '<FORM align="center" name="AuswahlOrt" action="stpl_week.php"><p align="center">';
|
|
//$datum=mktime($this->datum[hours], $this->datum[minutes], $this->datum[seconds], $this->datum[mon], $this->datum[mday], $this->datum[year]);
|
|
if (isset($prev_ort))
|
|
{
|
|
echo '<a href="stpl_week.php?type='.$this->type;
|
|
echo '&datum='.$this->datum.'&ort_kurzbz='.$prev_ort->ort_kurzbz;
|
|
echo '" alt="$prev_ort->kurzbz"><img src="../../skin/images/left.gif" border="0"></a>';
|
|
}
|
|
echo "<SELECT name=\"select\" onChange=\"MM_jumpMenu('self',this,0)\" class=\"xxxs_black\">";
|
|
for ($i=0;$i<$num_rows_ort;$i++)
|
|
{
|
|
$row=pg_fetch_object ($result_ort, $i);
|
|
echo '<OPTION value="stpl_week.php?type=ort&ort_kurzbz='.$row->ort_kurzbz.'&datum='.$this->datum.'"';
|
|
if ($row->ort_kurzbz==$this->ort_kurzbz)
|
|
echo ' selected ';
|
|
echo ">$row->ort_kurzbz</option>";
|
|
}
|
|
echo '</SELECT>';
|
|
if (isset($next_ort))
|
|
{
|
|
echo '<a href="stpl_week.php?type='.$this->type;
|
|
echo '&datum='.$this->datum.'&ort_kurzbz='.$next_ort->ort_kurzbz;
|
|
echo '" alt="$next_ort->kurzbz"><img src="../../skin/images/right.gif" border="0"></a>';
|
|
}
|
|
echo '</p>';
|
|
$link_parameter='&ort_kurzbz='.$this->ort_kurzbz;
|
|
}
|
|
echo '<p align="center">';
|
|
// 4 Wochen zurueck
|
|
echo '<a href="stpl_week.php?type='.$this->type;
|
|
echo $link_parameter;
|
|
echo '&datum='.$this->datum_prev4week;
|
|
echo '"><img src="../../../skin/images/moreleft.gif" border="0"></a>';
|
|
// 1 Woche zurueck
|
|
echo '<a href="stpl_week.php?type='.$this->type;
|
|
echo $link_parameter;
|
|
echo '&datum='.$this->datum_prevweek;
|
|
echo '"><img src="../../../skin/images/left.gif" border="0"></a> KW '.$this->kalenderwoche;
|
|
// 1 Woche nach vor
|
|
echo '<a href="stpl_week.php?type='.$this->type;
|
|
echo $link_parameter;
|
|
echo '&datum='.$this->datum_nextweek;
|
|
echo '"><img src="../../../skin/images/right.gif" border="0"></a>';
|
|
// 4 Wochen nach vor
|
|
echo '<a href="stpl_week.php?type='.$this->type;
|
|
echo $link_parameter;
|
|
echo '&datum='.$this->datum_next4week;
|
|
echo '"><img src="../../../skin/images/moreright.gif" border="0"></a>';
|
|
echo '</p>';
|
|
return true;
|
|
}
|
|
|
|
/**************************************************************************
|
|
* Zeichnen der Stundenplanwoche in HTML
|
|
*/
|
|
function draw_week($user_uid='pam')
|
|
{
|
|
// Stundentafel abfragen
|
|
$sql_query="SELECT stunde, beginn, ende FROM lehre.tbl_stunde ORDER BY stunde";
|
|
if(!$result_stunde=pg_exec($this->conn, $sql_query))
|
|
die(pg_last_error($this->conn));
|
|
$num_rows_stunde=pg_numrows($result_stunde);
|
|
|
|
// Formularbeginn wenn Lektor
|
|
if ($this->user=='lektor' && $this->type=='ort')
|
|
echo '<FORM name="reserve" method="post" action="stpl_week.php">';
|
|
|
|
//Tabelle zeichnen
|
|
echo '<table class="stdplan" width="100%" border="1" cellpadding="0" cellspacing="0" name="Stundenplantabelle" align="center">';
|
|
// Kopfzeile darstellen
|
|
echo '<tr>';
|
|
echo '<th align="right">Stunde <br>Beginn <br>Ende </th>';
|
|
for ($i=0;$i<$num_rows_stunde; $i++)
|
|
{
|
|
$beginn=pg_result($result_stunde,$i,'"beginn"');
|
|
$beginn=substr($beginn,0,5);
|
|
$ende=pg_result($result_stunde,$i,'"ende"');
|
|
$ende=substr($ende,0,5);
|
|
$stunde=pg_result($result_stunde,$i,'"stunde"');
|
|
echo '<th><div align="center">'.$stunde.'<br> '.$beginn .' <br> '.$ende.' </div></th>';
|
|
}
|
|
echo '</tr>';
|
|
// Von Montag bis Samstag
|
|
$datum_now=mktime();
|
|
$datum_res_lektor_start=jump_day($datum_now,RES_TAGE_LEKTOR_MIN);
|
|
$datum_res_lektor_ende=jump_day($datum_now,RES_TAGE_LEKTOR_MAX);
|
|
if (!date("w",$this->datum))
|
|
$this->datum=jump_day($this->datum,1);
|
|
$datum=$this->datum;
|
|
for ($i=1; $i<7; $i++)
|
|
{
|
|
echo '<tr><td>'.date("l",$datum).'<br>'.date("j. M y",$datum).'<br></td>'; //.strftime("%A %d %B %Y",$this->datum)
|
|
for ($k=0; $k<$num_rows_stunde; $k++)
|
|
{
|
|
$j=pg_result($result_stunde,$k,'"stunde"');
|
|
// Stunde aufbereiten
|
|
if (isset($this->std_plan[$i][$j][0]->lehrfach))
|
|
{
|
|
// Anzahl der Felder
|
|
|
|
// Daten aufbereiten
|
|
$kollision=-1;
|
|
unset($unr);
|
|
unset($lektor);
|
|
unset($lehrverband);
|
|
unset($lehrfach);
|
|
foreach ($this->std_plan[$i][$j] as $lehrstunde)
|
|
{
|
|
$unr[]=$lehrstunde->unr;
|
|
// Lektoren
|
|
$lektor[]=$lehrstunde->lektor;
|
|
// Lehrverband
|
|
$lvb=$lehrstunde->stg.'-'.$lehrstunde->sem;
|
|
if ($lehrstunde->ver!=null && $lehrstunde->ver!='0' && $lehrstunde->ver!='')
|
|
{
|
|
$lvb.=$lehrstunde->ver;
|
|
if ($lehrstunde->grp!=null && $lehrstunde->grp!='0' && $lehrstunde->grp!='')
|
|
$lvb.=$lehrstunde->grp;
|
|
}
|
|
if (count($lehrstunde->gruppe_kurzbz)>0)
|
|
$lvb=$lehrstunde->gruppe_kurzbz;
|
|
$lehrverband[]=$lvb;
|
|
// Lehrfach
|
|
$lf=$lehrstunde->lehrfach;
|
|
if (isset($lehrstunde->lehrform))
|
|
$lf.='-'.$lehrstunde->lehrform;
|
|
$lehrfach[]=$lf;
|
|
$titel=$lehrstunde->titel;
|
|
$anmerkung=$lehrstunde->anmerkung;
|
|
}
|
|
|
|
|
|
// Unterrichtsnummer (Kollision?)
|
|
$unr=array_unique($unr);
|
|
$kollision+=count($unr);
|
|
|
|
// Lektoren
|
|
if ($this->type!='lektor')
|
|
{
|
|
$lektor=array_unique($lektor);
|
|
sort($lektor);
|
|
$lkt='';
|
|
foreach ($lektor as $l)
|
|
$lkt.=$l.'<BR>';
|
|
}
|
|
else
|
|
$lkt=$lektor[0].'<BR>';
|
|
//echo $lkt;
|
|
|
|
// Lehrverband
|
|
if ($this->type!='verband')
|
|
{
|
|
$lehrverband=array_unique($lehrverband);
|
|
sort($lehrverband);
|
|
$lvb='';
|
|
foreach ($lehrverband as $l)
|
|
$lvb.=$l.'<BR>';
|
|
}
|
|
else
|
|
$lvb=$lehrverband[0].'<BR>';
|
|
|
|
// Lehrfach
|
|
if ($this->type=='verband')
|
|
{
|
|
$lehrfach=array_unique($lehrfach);
|
|
sort($lehrfach);
|
|
$lf='';
|
|
foreach ($lehrfach as $l)
|
|
$lf.=$l.'<BR>';
|
|
}
|
|
else
|
|
$lf=$lehrfach[0].'<BR>';
|
|
|
|
//$lkt=$this->std_plan[$i][$j][0]->lektor.'<BR>';
|
|
//$lvb=$this->std_plan[$i][$j][0]->stg.'-'.$this->std_plan[$i][$j][0]->sem.$this->std_plan[$i][$j][0]->ver.$this->std_plan[$i][$j][0]->grp.'<BR>';
|
|
|
|
|
|
// Blinken oder nicht ?
|
|
if ($kollision)
|
|
{
|
|
$blink_ein='<blink>'.$kollision;
|
|
$blink_aus='</blink>';
|
|
}
|
|
else
|
|
{
|
|
$blink_ein='';
|
|
$blink_aus='';
|
|
}
|
|
|
|
// Ausgabe einer Stunde im Raster (HTML)
|
|
echo '<td nowrap ';
|
|
if (isset($this->std_plan[$i][$j][0]->farbe))
|
|
echo 'style="background-color: #'.$this->std_plan[$i][$j][0]->farbe.';"';
|
|
echo '>'.$blink_ein.'<DIV align="center">';
|
|
// Link zu Details setzten
|
|
echo '<A class="stpl_detail" onClick="window.open(';
|
|
echo "'stpl_detail.php";
|
|
echo '?type='.$this->type.'&datum='.date("Y-m-d",$datum).'&stunde='.$j;
|
|
echo '&pers_uid='.$this->pers_uid;
|
|
echo '&stg_kz='.$this->stg_kz;
|
|
echo '&sem='.$this->sem;
|
|
echo '&ver='.$this->ver;
|
|
echo '&grp='.$this->grp;
|
|
echo '&ort_kurzbz='.$this->std_plan[$i][$j][0]->ort; //.'">'
|
|
echo "','Details', 'height=320,width=480,left=0,top=0,hotkeys=0,resizable=yes,status=no,scrollbars=no,toolbar=no,location=no,menubar=no,dependent=yes');";
|
|
echo '" title="'.$titel.' - '.$anmerkung.'" ';
|
|
echo ' href="#">';
|
|
|
|
// Ausgabe
|
|
echo $lf;
|
|
if ($this->type=='ort' || $this->type=='lektor')
|
|
echo $lvb;
|
|
if ($this->type!='lektor')
|
|
echo $lkt;
|
|
if ($this->type!='ort')
|
|
echo $this->std_plan[$i][$j][0]->ort;
|
|
echo '</A></DIV>'.$blink_aus.'</td>';
|
|
}
|
|
else
|
|
{
|
|
echo '<td align="center"><br>';
|
|
if ($this->user=='lektor' && $this->type=='ort' && (($datum>$datum_res_lektor_start && $datum<=$datum_res_lektor_ende) || $user_uid=='wagner'))
|
|
echo '<INPUT type="checkbox" name="reserve'.$i.'_'.$j.'" value="'.date("Y-m-d",$datum).'">'; //&& $datum>=$datum_now
|
|
echo '</td>';
|
|
}
|
|
}
|
|
echo "</tr>";
|
|
$datum=jump_day($datum, 1);
|
|
}
|
|
echo '</table>';
|
|
if ($this->user=='lektor' && $this->type=='ort' && (($datum>=$datum_now && $datum>$datum_res_lektor_start && $datum<=$datum_res_lektor_ende) || $user_uid=='wagner' ))
|
|
{
|
|
echo '<br>Titel: <INPUT type="text" name="titel" size="10" maxlength="10"> ';
|
|
echo ' Beschreibung: <INPUT type="text" name="beschreibung" size="20" maxlength="20"> ';
|
|
echo ' <INPUT type="submit" name="reserve" value="Reservieren">';
|
|
echo ' <INPUT type="hidden" name="user_uid" value="'.$this->user_uid.'">';
|
|
echo ' <INPUT type="hidden" name="ort_kurzbz" value="'.$this->ort_kurzbz.'">';
|
|
echo ' <INPUT type="hidden" name="datum" value="'.$this->datum.'">';
|
|
echo ' <INPUT type="hidden" name="type" value="'.$this->type.'">';
|
|
echo '</FORM>';
|
|
}
|
|
}
|
|
|
|
/**************************************************************************
|
|
* @brief Funktion draw_week_xul Stundenplan im XUL-Format
|
|
*
|
|
* @param datum Datum eines Tages in der angeforderten Woche
|
|
*
|
|
* @return true oder false
|
|
*
|
|
*/
|
|
function draw_week_xul($semesterplan,$uid, $wunsch=null)
|
|
{
|
|
echo $wunsch;
|
|
global $cfgStdBgcolor;
|
|
$count=0;
|
|
$berechtigung=new berechtigung($this->conn);
|
|
$berechtigung->getBerechtigungen($uid);
|
|
// Stundentafel abfragen
|
|
$sql_query="SELECT * FROM lehre.tbl_stunde ORDER BY stunde";
|
|
if(!$result_stunde=pg_query($this->conn, $sql_query))
|
|
$this->errormsg=pg_last_error($this->conn);
|
|
$num_rows_stunde=pg_numrows($result_stunde);
|
|
|
|
// Kontext Menue
|
|
echo '<popupset>
|
|
<popup id="stplPopupMenue">
|
|
<menuitem label="Raumvorschlag" oncommand="alert(\'Mittlere Taste!\');" />
|
|
<menuitem label="Entfernen" oncommand="onStplDelete(\'stpl_delete_single\');" />
|
|
</popup>
|
|
</popupset>';
|
|
|
|
//Tabelle zeichnen
|
|
echo '<grid flex="1">';
|
|
echo '<columns>';
|
|
echo ' <column style="background-color:lightblue; border:1px solid black" />';
|
|
for ($i=0;$i<$num_rows_stunde; $i++)
|
|
echo ' <column />';
|
|
echo '</columns>';
|
|
echo '<rows>';
|
|
|
|
// Kopfzeile darstellen
|
|
echo '<row style="background-color:lightgreen; border:1px solid black">'.$this->crlf;
|
|
echo '<vbox>
|
|
<label align="center">Stunde</label>
|
|
<label id="TimeTableWeekData" class="kalenderwoche"
|
|
datum="'.$this->datum.'"
|
|
stpl_type="'.$this->type.'"
|
|
stg_kz="'.$this->stg_kz.'"
|
|
sem="'.$this->sem.'"
|
|
ver="'.$this->ver.'"
|
|
grp="'.$this->grp.'"
|
|
einheit="'.$this->gruppe_kurzbz.'"
|
|
ort="'.$this->ort_kurzbz.'"
|
|
pers_uid="'.$this->pers_uid.'"
|
|
kw="'.$this->kalenderwoche.'"
|
|
align="left">KW:'.$this->kalenderwoche.'</label>
|
|
</vbox>'.$this->crlf; //<html:br />Beginn<html:br />Ende
|
|
for ($i=0;$i<$num_rows_stunde; $i++)
|
|
{
|
|
$row=pg_fetch_object($result_stunde,$i);
|
|
$beginn=substr($row->beginn,0,5);
|
|
$ende=substr($row->ende,0,5);
|
|
$stunde=$row->stunde;
|
|
echo '<vbox><label align="center">'.$stunde.'<html:br />
|
|
<html:small>'.$beginn.'<html:br />
|
|
'.$ende.'</html:small></label>
|
|
</vbox>'.$this->crlf;
|
|
}
|
|
echo '</row>';
|
|
|
|
// Von Montag bis Samstag
|
|
if (!date("w",$this->datum))
|
|
$this->datum=jump_day($this->datum,1);
|
|
$datum=$this->datum;
|
|
|
|
// Ferien holen
|
|
$ferien=new ferien($this->conn);
|
|
if ($this->type=='verband')
|
|
$ferien->getAll($this->stg_kz);
|
|
else
|
|
$ferien->getAll(0);
|
|
for ($i=1; $i<7; $i++)
|
|
{
|
|
$isferien=$ferien->isferien($datum);
|
|
echo '<row><vbox>';
|
|
echo '<html:div><html:small>'.date("l",$datum).'<html:br /></html:small>'.date("j.m y",$datum).'</html:div>';
|
|
echo '</vbox>';
|
|
for ($k=0; $k<$num_rows_stunde; $k++)
|
|
{
|
|
$j=pg_result($result_stunde,$k,'"stunde"');
|
|
if (isset($wunsch[$i][$j]))
|
|
$index=$wunsch[$i][$j];
|
|
else
|
|
$index=1;
|
|
if ($index=='')
|
|
$index=1;
|
|
$bgcolor=$cfgStdBgcolor[$index+3];
|
|
if ($isferien)
|
|
$bgcolor='#FFFF55';
|
|
echo '<vbox style="border:1px solid black; background-color:'.$bgcolor.'"
|
|
ondragdrop="nsDragAndDrop.drop(event,boardObserver)"
|
|
ondragover="nsDragAndDrop.dragOver(event,boardObserver)"
|
|
ondragenter="nsDragAndDrop.dragEnter(event,boardObserver)"
|
|
ondragexit="nsDragAndDrop.dragExit(event,boardObserver)"
|
|
datum="'.date("Y-m-d",$datum).'" stunde="'.$j.'"
|
|
stg_kz="'.$this->stg_kz.'" sem="'.$this->sem.'" ver="'.$this->ver.'"
|
|
grp="'.$this->grp.'" einheit="'.$this->gruppe_kurzbz.'"
|
|
pers_uid="'.$this->pers_uid.'" stpltype="'.$this->type.'">';
|
|
|
|
if (isset($this->std_plan[$i][$j][0]->lehrfach))
|
|
{
|
|
// Daten aufbereiten
|
|
$kollision=-1;
|
|
unset($a_unr);
|
|
foreach ($this->std_plan[$i][$j] as $lehrstunde)
|
|
{
|
|
$a_unr[]=$lehrstunde->unr;
|
|
$a_lvb[$lehrstunde->unr][]=$lehrstunde->sem.$lehrstunde->ver.$lehrstunde->grp;
|
|
}
|
|
// Unterrichtsnummer (Kollision?)
|
|
$a_unr=array_unique($a_unr);
|
|
$kollision+=count($a_unr);
|
|
// Ist es bei LVB-Ansicht wirklich eine Kollision?
|
|
if ($kollision>0 && $this->type=='verband')
|
|
{
|
|
$kollision=0;
|
|
$a=0;
|
|
foreach ($a_unr as $unr)
|
|
{
|
|
array_unique($a_lvb[$unr]);
|
|
$lvb[$a++]=$a_lvb[$unr];
|
|
}
|
|
for ($a=0;$a<count($lvb)-1;$a++)
|
|
for ($b=0;$b<count($lvb[$a]);$b++)
|
|
for ($c=$a+1;$c<count($lvb);$c++)
|
|
for ($d=0;$d<count($lvb[$c]);$d++)
|
|
{
|
|
$s1=substr($lvb[$a][$b],0,1);
|
|
$s2=substr($lvb[$c][$d],0,1);
|
|
$v1=substr($lvb[$a][$b],1,1);
|
|
$v2=substr($lvb[$c][$d],1,1);
|
|
$g1=substr($lvb[$a][$b],2,1);
|
|
$g2=substr($lvb[$c][$d],2,1);
|
|
if ($s1==$s2 || !$s1 || $s1=='' || $s1=='0' || !$s2 || $s2=='' || $s2=='0')
|
|
if ($v1==$v2 || !$v1 || $v1=='' || $v1=='0' || !$v2 || $v2=='' || $v2=='0')
|
|
if ($g1==$g2 || !$g1 || $g1=='' || $g1=='0' || !$g2 || $g2=='' || $g2=='0')
|
|
$kollision++;
|
|
}
|
|
}
|
|
|
|
//Daten aufbereiten
|
|
foreach ($a_unr as $unr)
|
|
{
|
|
// Daten vorbereiten
|
|
unset($lektor);
|
|
unset($lehrverband);
|
|
unset($lehrfach);
|
|
unset($ort);
|
|
unset($updateamum);
|
|
unset($updatevon);
|
|
$paramList='';
|
|
$z=0;
|
|
foreach ($this->std_plan[$i][$j] as $lehrstunde)
|
|
if ($lehrstunde->unr==$unr)
|
|
{
|
|
// Lektoren
|
|
$lektor[]=$lehrstunde->lektor;
|
|
// Lehrverband
|
|
$lvb=$lehrstunde->stg.'-'.$lehrstunde->sem;
|
|
if ($lehrstunde->ver!=null && $lehrstunde->ver!='0' && $lehrstunde->ver!='')
|
|
{
|
|
$lvb.=$lehrstunde->ver;
|
|
if ($lehrstunde->grp!=null && $lehrstunde->grp!='0' && $lehrstunde->grp!='')
|
|
$lvb.=$lehrstunde->grp;
|
|
}
|
|
if (count($lehrstunde->gruppe_kurzbz)>0)
|
|
$lvb=$lehrstunde->gruppe_kurzbz;
|
|
$lehrverband[]=$lvb;
|
|
// Lehrfach
|
|
$lf=$lehrstunde->lehrfach;
|
|
if (isset($lehrstunde->lehrform))
|
|
$lf.='-'.$lehrstunde->lehrform;
|
|
$lehrfach[]=$lf;
|
|
$ort[]=$lehrstunde->ort;
|
|
$stg_kz=$lehrstunde->stg_kz;
|
|
$updateamum[]=substr($lehrstunde->updateamum,0,16);
|
|
$updatevon[]=$lehrstunde->updatevon;
|
|
$paramList.='&stundenplan_id'.$z++.'='.$lehrstunde->stundenplan_id;
|
|
$farbe=$lehrstunde->farbe;
|
|
$titel=$lehrstunde->titel;
|
|
$anmerkung=$lehrstunde->anmerkung;
|
|
}
|
|
|
|
// Lektoren
|
|
//if ($this->type!='lektor')
|
|
$lektor=array_unique($lektor);
|
|
sort($lektor);
|
|
$lkt='';
|
|
foreach ($lektor as $l)
|
|
$lkt.=$l.'<html:br />';
|
|
|
|
// Lehrverband
|
|
//if ($this->type!='verband')
|
|
$lehrverband=array_unique($lehrverband);
|
|
sort($lehrverband);
|
|
$lvb='';
|
|
foreach ($lehrverband as $l)
|
|
$lvb.=$l.'<html:br />';
|
|
|
|
// Lehrfach
|
|
//if ($this->type=='verband')
|
|
$lehrfach=array_unique($lehrfach);
|
|
sort($lehrfach);
|
|
$lf='';
|
|
foreach ($lehrfach as $l)
|
|
$lf.=$l.'<html:br />';
|
|
|
|
// Ort
|
|
//if ($this->type=='verband')
|
|
$ort=array_unique($ort);
|
|
sort($ort);
|
|
$orte='';
|
|
foreach ($ort as $o)
|
|
$orte.=$o.'<html:br />';
|
|
|
|
// Update Von
|
|
$updatevon=array_unique($updatevon);
|
|
sort($updatevon);
|
|
$updatevonam='Ge??ndert von ';
|
|
foreach ($updatevon as $u)
|
|
$updatevonam.=$u.', ';
|
|
|
|
// Update Am
|
|
$updateamum=array_unique($updateamum);
|
|
sort($updateamum);
|
|
$updatevonam.='am ';
|
|
foreach ($updateamum as $u)
|
|
$updatevonam.=$u.' ';
|
|
//$updatevonam='Ge??ndert von '.$updatevon.', am '.$updateamum;
|
|
|
|
// Blinken oder nicht ?
|
|
if ($kollision)
|
|
{
|
|
$blink_ein='<html:blink>';// .$kollision;
|
|
$blink_aus='</html:blink>';
|
|
}
|
|
else
|
|
{
|
|
$blink_ein='';
|
|
$blink_aus='';
|
|
}
|
|
|
|
// Ausgabe
|
|
echo '<button id="buttonSTPL'.$count++.'"
|
|
tooltiptext="'.$titel.' - '.$anmerkung.' ('.$updatevonam.')"
|
|
style="border-width:1px;background-color:#'.$farbe.';"
|
|
styleOrig="border-width:1px;background-color:#'.$farbe.';" ';
|
|
if ($berechtigung->isBerechtigt('stplVerschieben',$stg_kz) || $berechtigung->isBerechtigt('admin',0) || $berechtigung->isBerechtigt('admin',$stg_kz))
|
|
echo ' context="stplPopupMenue" ';
|
|
if ($berechtigung->isBerechtigt('stplVerschieben',$stg_kz) || $berechtigung->isBerechtigt('admin',0) || $berechtigung->isBerechtigt('admin',$stg_kz))
|
|
echo 'ondraggesture="nsDragAndDrop.startDrag(event,listObserver)" ';
|
|
echo 'ondragdrop="nsDragAndDrop.drop(event,boardObserver)"
|
|
ondragover="nsDragAndDrop.dragOver(event,boardObserver)"
|
|
onclick="return onStplSearchRoom(event, event.target);"
|
|
oncommand="onStplDetail(event);"
|
|
aktion="stpl"
|
|
elem="stundenplan'.$i.$j.'"
|
|
idList="'.$paramList.'" stpltype="'.$this->type.'"
|
|
stg_kz="'.$this->stg_kz.'" sem="'.$this->sem.'" ver="'.$this->ver.'"
|
|
grp="'.$this->grp.'" einheit="'.$this->gruppe_kurzbz.'"
|
|
datum="'.date("Y-m-d",$datum).'" stunde="'.$j.'"
|
|
pers_uid="'.$this->pers_uid.'" ort_kurzbz="'.utf8_encode($this->ort_kurzbz).'">';
|
|
echo '<label align="center">'.$blink_ein;
|
|
echo $lf;
|
|
echo $lvb;
|
|
if ($this->type!='lektor')
|
|
echo $lkt;
|
|
if ($this->type!='ort')
|
|
echo utf8_encode($orte);
|
|
echo $blink_aus.'</label></button>';
|
|
}
|
|
}
|
|
if (isset($this->std_plan[$i][$j][0]->frei_orte))
|
|
foreach ($this->std_plan[$i][$j][0]->frei_orte as $f_ort)
|
|
{
|
|
echo '<label value="'.utf8_encode($f_ort).'"
|
|
styleOrig=""
|
|
ondragenter="nsDragAndDrop.dragEnter(event,boardObserver)"
|
|
ondragexit="nsDragAndDrop.dragExit(event,boardObserver)"
|
|
ondragdrop="nsDragAndDrop.drop(event,boardObserver)"
|
|
datum="'.date("Y-m-d",$datum).'" stunde="'.$j.'"
|
|
stg_kz="'.$this->stg_kz.'" sem="'.$this->sem.'" ver="'.$this->ver.'"
|
|
grp="'.$this->grp.'" einheit="'.$this->gruppe_kurzbz.'"
|
|
stpltype="'.$this->type.'"
|
|
/>';
|
|
}
|
|
echo '</vbox>'.$this->crlf;
|
|
}
|
|
echo "</row>";
|
|
$datum=jump_day($datum, 1);
|
|
}
|
|
|
|
// Fuszzeile darstellen
|
|
if (!$semesterplan)
|
|
{
|
|
echo '<row style="background-color:lightgreen; border:1px solid black">'.$this->crlf;
|
|
echo '<vbox>
|
|
<label align="center">Stunde</label>
|
|
<label align="left" class="kalenderwoche">KW:'.$this->kalenderwoche.'</label>
|
|
</vbox>'.$this->crlf; //<html:br />Beginn<html:br />Ende
|
|
for ($i=0;$i<$num_rows_stunde; $i++)
|
|
{
|
|
$row=pg_fetch_object($result_stunde,$i);
|
|
$beginn=substr($row->beginn,0,5);
|
|
$ende=substr($row->ende,0,5);
|
|
$stunde=$row->stunde;
|
|
echo '<vbox><label align="center">'.$stunde.'<html:br />
|
|
<html:small>'.$beginn.'<html:br />
|
|
'.$ende.'</html:small></label>
|
|
</vbox>'.$this->crlf;
|
|
}
|
|
echo '</row>';
|
|
}
|
|
echo '</rows>';
|
|
echo '</grid>';
|
|
}
|
|
|
|
|
|
|
|
/**************************************************************************
|
|
* @brief Funktion load_stpl_search sucht Vorschlag fuer Stundenverschiebung
|
|
*
|
|
* @param datum der Aktuellen Woche
|
|
* @param stpl_id Array der stundenplan_id's
|
|
* @param db_stpl_table Name der DB-Tabelle
|
|
*
|
|
* @return true oder false
|
|
*
|
|
*/
|
|
function load_stpl_search($datum,$stpl_id,$db_stpl_table, $block=1)
|
|
{
|
|
// Name der View
|
|
$stpl_view=VIEW_BEGIN.$db_stpl_table;
|
|
$stpl_view_id=$db_stpl_table.TABLE_ID;
|
|
//Kalenderdaten setzen
|
|
$this->datum=montag($datum);
|
|
$this->datum_begin=$this->datum;
|
|
$this->datum_end=jump_week($this->datum_begin, 1);
|
|
// Formatieren fuer Datenbankabfragen
|
|
$this->datum_begin=date("Y-m-d",$this->datum_begin);
|
|
$this->datum_end=date("Y-m-d",$this->datum_end);
|
|
// Stundentafel abfragen
|
|
$sql_query='SELECT min(stunde),max(stunde)FROM lehre.tbl_stunde';
|
|
if(!$result_stunde=pg_exec($this->conn, $sql_query))
|
|
die(pg_last_error($this->conn));
|
|
$min_stunde=pg_result($result_stunde,0,'min');
|
|
$max_stunde=pg_result($result_stunde,0,'max');
|
|
// Stundenplaneintraege holen
|
|
$sql_query="SELECT * FROM $stpl_view WHERE";
|
|
$stplids='';
|
|
foreach ($stpl_id as $id)
|
|
$stplids.=" OR $stpl_view_id=$id";
|
|
$stplids=substr($stplids,3);
|
|
$sql_query.=$stplids;
|
|
//echo $sql_query;
|
|
if(!$result_stpl=pg_exec($this->conn, $sql_query))
|
|
die(pg_last_error($this->conn));
|
|
$num_rows_stpl=pg_numrows($result_stpl);
|
|
// Daten aufbereiten
|
|
for ($i=0;$i<$num_rows_stpl;$i++)
|
|
{
|
|
$row=pg_fetch_object($result_stpl,$i);
|
|
//$block=$row->stundenblockung;
|
|
//$raumtyp[$i]=$row->raumtyp;
|
|
//$raumtypalt[$i]=$row->raumtypalternativ;
|
|
if ($row->gruppe_kurzbz!=null)
|
|
$einheit[]=$row->gruppe_kurzbz;
|
|
else
|
|
$einheit[]='';
|
|
$lehrverband[$i]->stg_kz=$row->studiengang_kz;
|
|
$lehrverband[$i]->sem=$row->semester;
|
|
$lehrverband[$i]->ver=$row->verband;
|
|
$lehrverband[$i]->grp=$row->gruppe;
|
|
$lektor[$i]=$row->uid;
|
|
$unr=$row->unr;
|
|
}
|
|
// Raumtypen
|
|
//$raumtyp=array_unique($raumtyp);
|
|
//$rtype='';
|
|
//foreach ($raumtyp as $r)
|
|
// $rtype.=" OR raumtyp_kurzbz='$r'";
|
|
//$raumtypalt=array_unique($raumtypalt);
|
|
//foreach ($raumtypalt as $r)
|
|
// $rtype.=" OR raumtyp_kurzbz='$r'";
|
|
//$rtype=substr($rtype,3);
|
|
//Lektor
|
|
$lektor=array_unique($lektor);
|
|
$lkt='';
|
|
foreach ($lektor as $l)
|
|
$lkt.=" OR uid='$l'";
|
|
$lkt=substr($lkt,3);
|
|
// Einheiten
|
|
$einheit=array_unique($einheit);
|
|
$einheiten='';
|
|
foreach ($einheit as $e)
|
|
if ($e!='')
|
|
$einheiten.=" OR gruppe_kurzbz='$e'";
|
|
//$einheiten=substr($einheiten,3);
|
|
//Lehrverband
|
|
//$lehrverband=array_unique($lehrverband);
|
|
$lvb='';
|
|
foreach ($lehrverband as $l)
|
|
{
|
|
$lvb.=' OR (studiengang_kz='.$l->stg_kz.' AND semester='.$l->sem;
|
|
if ($l->ver!='' && $l->ver!=' ' && $l->ver!=null)
|
|
{
|
|
$lvb.=" AND (verband='$l->ver' OR verband IS NULL OR verband='')";
|
|
if ($l->grp!='' && $l->grp!=' ' && $l->grp!=null)
|
|
$lvb.=" AND (gruppe='$l->grp' OR gruppe IS NULL OR gruppe='')";
|
|
}
|
|
//if ($einheiten=='')
|
|
// $lvb.=' AND gruppe_kurzbz IS NULL';
|
|
$lvb.=')';
|
|
}
|
|
$lvb=substr($lvb,3);
|
|
|
|
// Raeume die in Frage kommen, aufgrund der Raumtypen
|
|
$sql_query="SELECT DISTINCT ort_kurzbz FROM tbl_ort
|
|
WHERE aktiv AND ort_kurzbz NOT LIKE '\\\\_%' ORDER BY ort_kurzbz"; // NATURAL JOIN tbl_ortraumtyp WHERE $rtype hierarchie
|
|
//echo $sql_query;
|
|
if(!$result=pg_exec($this->conn, $sql_query))
|
|
die(pg_last_error($this->conn));
|
|
$num_orte=pg_numrows($result);
|
|
for ($i=0;$i<$num_orte;$i++)
|
|
$orte[]=pg_fetch_result($result,$i,"ort_kurzbz");
|
|
|
|
// Raster vorbereiten
|
|
for ($t=1;$t<7;$t++)
|
|
for ($s=$min_stunde;$s<=$max_stunde;$s++)
|
|
{
|
|
$raster[$t][$s]->ort=array();
|
|
$raster[$t][$s]->kollision=false;
|
|
}
|
|
|
|
// Stundenplanabfrage bauen (Wo ist Kollision?)
|
|
$sql_query="SELECT DISTINCT datum, stunde FROM $stpl_view
|
|
WHERE datum>='$this->datum_begin' AND datum<'$this->datum_end' AND
|
|
($lkt $einheiten OR ($lvb) ) AND unr!=$unr"; //AND unr!=$unr"
|
|
//echo $sql_query;
|
|
if(!$result_kollision=pg_exec($this->conn, $sql_query))
|
|
die(pg_last_error($this->conn));
|
|
$num_k=pg_numrows($result_kollision);
|
|
for ($i=0;$i<$num_k;$i++)
|
|
{
|
|
$row=pg_fetch_object($result_kollision,$i);
|
|
$mtag=substr($row->datum, 8,2);
|
|
$month=substr($row->datum, 5,2);
|
|
$jahr=substr($row->datum, 0,4);
|
|
$tag=date("w",mktime(12,0,0,$month,$mtag,$jahr));
|
|
$raster[$tag][$row->stunde]->kollision=true;
|
|
}
|
|
|
|
// Stundenplanabfrage bauen (Wo ist besetzt?)
|
|
$sql_query="SELECT DISTINCT datum, stunde, ort_kurzbz FROM $stpl_view
|
|
WHERE datum>='$this->datum_begin' AND datum<'$this->datum_end' AND unr!=$unr";
|
|
//echo $sql_query; NATURAL JOIN tbl_ortraumtyp AND ($rtype) "
|
|
if(!$result_besetzt=pg_exec($this->conn, $sql_query))
|
|
die(pg_last_error($this->conn));
|
|
$num_b=pg_numrows($result_besetzt);
|
|
for ($i=0;$i<$num_b;$i++)
|
|
{
|
|
$row=pg_fetch_object($result_besetzt,$i);
|
|
$mtag=substr($row->datum, 8,2);
|
|
$month=substr($row->datum, 5,2);
|
|
$jahr=substr($row->datum, 0,4);
|
|
$tag=date("w",mktime(12,0,0,$month,$mtag,$jahr));
|
|
$raster[$tag][$row->stunde]->ort[]=$row->ort_kurzbz;
|
|
}
|
|
|
|
// freie Plaetze in den Stundenplan eintragen.
|
|
for ($t=1;$t<7;$t++)
|
|
for ($s=1;$s<=$max_stunde;$s++)
|
|
if (!$raster[$t][$s]->kollision && ($s+$block)<=($max_stunde+1))
|
|
{
|
|
if (count($raster[$t][$s]->ort)>0)
|
|
$this->std_plan[$t][$s][0]->frei_orte=array_diff($orte,$raster[$t][$s]->ort);
|
|
else
|
|
$this->std_plan[$t][$s][0]->frei_orte=$orte;
|
|
for ($b=1;$b<$block && ($s+$block)<=($max_stunde+1);$b++)
|
|
$this->std_plan[$t][$s][0]->frei_orte=array_diff($this->std_plan[$t][$s][0]->frei_orte,$raster[$t][$s+$b]->ort);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**************************************************************************
|
|
* @brief Funktion load_lva_search sucht Vorschlag fuer LVAs
|
|
*
|
|
* @param datum der Aktuellen Woche
|
|
* @param lva_id Array der lvaIDs
|
|
* @param db_stpl_table Name der DB-Tabelle
|
|
*
|
|
* @return true oder false
|
|
*
|
|
*/
|
|
function load_lva_search($datum,$lva_id,$db_stpl_table,$type)
|
|
{
|
|
// Name der View
|
|
$stpl_view=VIEW_BEGIN.$db_stpl_table;
|
|
$lva_stpl_view=VIEW_BEGIN.'lva_'.$db_stpl_table;
|
|
$stpl_table=TABLE_BEGIN.$db_stpl_table;
|
|
//Kalenderdaten setzen
|
|
$this->datum=montag($datum);
|
|
$this->datum_begin=$this->datum;
|
|
$this->datum_end=jump_week($this->datum_begin, 1);
|
|
// Formatieren fuer Datenbankabfragen
|
|
$this->datum_begin=date("Y-m-d",$this->datum_begin);
|
|
$this->datum_end=date("Y-m-d",$this->datum_end);
|
|
// Stundentafel abfragen
|
|
$sql_query='SELECT min(stunde),max(stunde) FROM lehre.tbl_stunde';
|
|
if(!$result_stunde=pg_exec($this->conn, $sql_query))
|
|
die(pg_last_error($this->conn));
|
|
$min_stunde=pg_result($result_stunde,0,'min');
|
|
$max_stunde=pg_result($result_stunde,0,'max');
|
|
|
|
// LVAs holen
|
|
$sql_query='SELECT *, (semesterstunden-verplant::smallint) AS offenestunden FROM '.$lva_stpl_view.' WHERE';
|
|
$lvas='';
|
|
foreach ($lva_id as $id)
|
|
$lvas.=' OR lehrveranstaltung_id='.$id;
|
|
$lvas=substr($lvas,3);
|
|
$sql_query.=$lvas;
|
|
//$this->errormsg.=$sql_query;
|
|
//return false;
|
|
if(!$result_lva=pg_exec($this->conn, $sql_query))
|
|
die(pg_last_error($this->conn));
|
|
$num_rows_lva=pg_numrows($result_lva);
|
|
// Arrays setzen
|
|
//$wochenrythmus=array();
|
|
$verplant=array();
|
|
$block=array();
|
|
$semesterstunden=array();
|
|
$offenestunden=array();
|
|
// Daten aufbereiten
|
|
for ($i=0;$i<$num_rows_lva;$i++)
|
|
{
|
|
$row=pg_fetch_object($result_lva,$i);
|
|
$raumtyp[$i]=$row->raumtyp;
|
|
$raumtypalt[$i]=$row->raumtypalternativ;
|
|
if ($row->gruppe_kurzbz!=null && $row->gruppe_kurzbz!='')
|
|
$einheit[$i]=$row->gruppe_kurzbz;
|
|
$lehrverband[$i]->stg_kz=$row->studiengang_kz;
|
|
$lehrverband[$i]->sem=$row->semester;
|
|
$lehrverband[$i]->ver=$row->verband;
|
|
$lehrverband[$i]->grp=$row->gruppe;
|
|
$lektor[$i]=$row->lektor_uid;
|
|
$verplant[$i]=$row->verplant;
|
|
$offenestunden[]=$row->offenestunden;
|
|
$unr=$row->unr;
|
|
$block[$i]=$row->stundenblockung;
|
|
$wochenrythmus[$i]=$row->wochenrythmus;
|
|
$semesterstunden[$i]=(integer)$row->semesterstunden;
|
|
//$this->errormsg.='SS:'.$semesterstunden[$i];
|
|
}
|
|
/*// verplante Stunden eindeutig?
|
|
$verpl=$verplant[0];
|
|
$verplant=array_unique($verplant);
|
|
if (count($verplant)==1)
|
|
$verplant=$verpl; //verplant[0];
|
|
else
|
|
{
|
|
$this->errormsg.='Verplante Stunden sind nicht eindeutig!';
|
|
return false;
|
|
}
|
|
//$this->errormsg.='Verplant:'.$verplant;
|
|
// Semesterstunden eindeutig?
|
|
$semstd=$semesterstunden[0];
|
|
$semesterstunden=array_unique($semesterstunden);
|
|
//$this->errormsg.='SS:'.$semesterstunden[0];
|
|
if (count($semesterstunden)==1)
|
|
$semesterstunden=$semstd;//semesterstunden[0];
|
|
else
|
|
{
|
|
$this->errormsg.='Semesterstunden sind nicht eindeutig!';
|
|
return false;
|
|
}
|
|
//$this->errormsg.='SS:'.$semesterstunden;*/
|
|
// Blockung eindeutig?
|
|
$blck=$block[0];
|
|
$block=array_unique($block);
|
|
if (count($block)==1)
|
|
$block=$blck; //block[0];
|
|
else
|
|
{
|
|
$this->errormsg.='Blockung ist nicht eindeutig!';
|
|
return false;
|
|
}
|
|
//$this->errormsg.='Block:'.$block;
|
|
// Offene Stunden eindeutig?
|
|
$os=$offenestunden[0];
|
|
$offenestunden=array_unique($offenestunden);
|
|
if ($type=='lva_single_search')
|
|
$offenestunden=$block;
|
|
elseif (count($offenestunden)==1)
|
|
$offenestunden=$os;
|
|
else
|
|
{
|
|
$this->errormsg.='Offene Stunden sind nicht eindeutig!';
|
|
return false;
|
|
}
|
|
// Wochenrythmus eindeutig?
|
|
$wr=$wochenrythmus[0];
|
|
$wochenrythmus=array_unique($wochenrythmus);
|
|
if (count($wochenrythmus)==1)
|
|
$wr=$wr;
|
|
else
|
|
{
|
|
$this->errormsg.='Wochenrythmus ist nicht eindeutig!';
|
|
return false;
|
|
}
|
|
// Raumtypen
|
|
$raumtyp=array_unique($raumtyp);
|
|
$rtype='';
|
|
foreach ($raumtyp as $r)
|
|
$rtype.=" OR raumtyp_kurzbz='$r'";
|
|
$raumtypalt=array_unique($raumtypalt);
|
|
foreach ($raumtypalt as $r)
|
|
$rtype.=" OR raumtyp_kurzbz='$r'";
|
|
$rtype=substr($rtype,3);
|
|
//Lektor
|
|
$lektor=array_unique($lektor);
|
|
$lkt='';
|
|
foreach ($lektor as $l)
|
|
$lkt.=" OR uid='$l'";
|
|
$lkt=substr($lkt,3);
|
|
//Dummy Lektor kollidiert nicht
|
|
$lkt='(('.$lkt.") AND uid!='_DummyLektor')";
|
|
// Einheiten
|
|
$einheit=array_unique($einheit);
|
|
$einheiten='';
|
|
foreach ($einheit as $e)
|
|
$einheiten.=" OR gruppe_kurzbz='$e'";
|
|
//$einheiten=substr($einheiten,3);
|
|
//Lehrverband
|
|
//$lehrverband=array_unique($lehrverband);
|
|
$lvb='';
|
|
foreach ($lehrverband as $l)
|
|
{
|
|
$lvb.=' OR (studiengang_kz='.$l->stg_kz.' AND semester='.$l->sem;
|
|
if ($l->ver!='' && $l->ver!=' ' && $l->ver!=null)
|
|
{
|
|
$lvb.=" AND (verband='$l->ver' OR verband IS NULL OR verband='' OR verband=' ')";
|
|
if ($l->grp!='' && $l->grp!=' ' && $l->grp!=null)
|
|
$lvb.=" AND (gruppe='$l->grp' OR gruppe IS NULL OR gruppe='' OR gruppe=' ')";
|
|
}
|
|
if ($einheiten=='')
|
|
$lvb.=' AND gruppe_kurzbz IS NULL';
|
|
$lvb.=')';
|
|
}
|
|
$lvb=substr($lvb,3);
|
|
|
|
// Raeume die in Frage kommen aufgrund der Raumtypen
|
|
$sql_query="SELECT DISTINCT ort_kurzbz, hierarchie FROM tbl_ort
|
|
NATURAL JOIN tbl_ortraumtyp WHERE ($rtype) AND aktiv AND ort_kurzbz NOT LIKE '\\\\_%' ORDER BY hierarchie,ort_kurzbz"; //
|
|
//echo $sql_query;
|
|
if(!$result=pg_exec($this->conn, $sql_query))
|
|
die(pg_last_error($this->conn));
|
|
$num_orte=pg_numrows($result);
|
|
for ($i=0;$i<$num_orte;$i++)
|
|
$orte[]=pg_fetch_result($result,$i,"ort_kurzbz");
|
|
|
|
// Suche nach freien Orten. Bei 'lva_multi_search' wird die Schleife (do) aktiv
|
|
$count=0;
|
|
$rest=$offenestunden;
|
|
if ($rest<=0 && $type=='lva_multi_search')
|
|
{
|
|
$this->errormsg.='Es sind bereits alle Stunden verplant!';
|
|
return false;
|
|
}
|
|
$datum=$this->datum;
|
|
$datum_begin=$this->datum_begin;
|
|
$datum_end=$this->datum_end;
|
|
do
|
|
{
|
|
// Raster vorbereiten
|
|
for ($t=1;$t<7;$t++)
|
|
for ($s=$min_stunde;$s<=$max_stunde;$s++)
|
|
{
|
|
unset($raster[$t][$s]);
|
|
$raster[$t][$s]->ort=array();
|
|
$raster[$t][$s]->kollision=false;
|
|
}
|
|
|
|
// Stundenplanabfrage bauen (Wo ist Kollision?)
|
|
$sql_query="SELECT DISTINCT datum, stunde FROM $stpl_table
|
|
WHERE datum>='$datum_begin' AND datum<'$datum_end' AND
|
|
($lkt $einheiten OR ($lvb) ) AND unr!=$unr";
|
|
//$this->errormsg.=htmlspecialchars($sql_query);
|
|
//return false;
|
|
if(!$result_kollision=pg_exec($this->conn, $sql_query))
|
|
{
|
|
$this->errormsg=pg_last_error($this->conn);
|
|
return false;
|
|
}
|
|
$num_k=pg_numrows($result_kollision);
|
|
// Kollisionen ins Raster eintragen
|
|
for ($i=0;$i<$num_k;$i++)
|
|
{
|
|
$row=pg_fetch_object($result_kollision,$i);
|
|
$mtag=substr($row->datum, 8,2);
|
|
$month=substr($row->datum, 5,2);
|
|
$jahr=substr($row->datum, 0,4);
|
|
$tag=date("w",mktime(12,0,0,$month,$mtag,$jahr));
|
|
$raster[$tag][$row->stunde]->kollision=true;
|
|
}
|
|
|
|
// Stundenplanabfrage bauen (Wo ist besetzt?)
|
|
$sql_query="SELECT DISTINCT datum, stunde, ort_kurzbz FROM $stpl_view
|
|
NATURAL JOIN tbl_ortraumtyp
|
|
WHERE datum>='$datum_begin' AND datum<'$datum_end' AND
|
|
($rtype) AND unr!=$unr"; //
|
|
//echo $sql_query;
|
|
if(!$result_besetzt=pg_query($this->conn, $sql_query))
|
|
{
|
|
$this->errormsg=pg_last_error($this->conn);
|
|
return false;
|
|
}
|
|
$num_b=pg_numrows($result_besetzt);
|
|
|
|
// Besetzte Orte ins Raster eintragen
|
|
for ($i=0;$i<$num_b;$i++)
|
|
{
|
|
$row=pg_fetch_object($result_besetzt,$i);
|
|
$mtag=substr($row->datum, 8,2);
|
|
$month=substr($row->datum, 5,2);
|
|
$jahr=substr($row->datum, 0,4);
|
|
$tag=date("w",mktime(12,0,0,$month,$mtag,$jahr));
|
|
$raster[$tag][$row->stunde]->ort[]=$row->ort_kurzbz;
|
|
//if ($row->ort_kurzbz=='EDV6.10' && $tag==2 && $row->stunde==8)
|
|
// $this->errormsg.=htmlspecialchars($row->ort_kurzbz).'/'.$mtag.'/'.$month;
|
|
}
|
|
|
|
// freie Plaetze in den Stundenplan eintragen.
|
|
for ($t=1;$t<7;$t++)
|
|
for ($s=1;$s<=$max_stunde;$s++)
|
|
if (!$raster[$t][$s]->kollision && ($s+$block)<=($max_stunde+1))
|
|
{
|
|
// Besetzte Orte von den freien abziehen
|
|
if (count($raster[$t][$s]->ort)>0 && $count==0)
|
|
$this->std_plan[$t][$s][0]->frei_orte=array_diff($orte,$raster[$t][$s]->ort);
|
|
elseif ($count==0)
|
|
$this->std_plan[$t][$s][0]->frei_orte=$orte;
|
|
elseif (count($raster[$t][$s]->ort)>0)
|
|
$this->std_plan[$t][$s][0]->frei_orte=array_diff($this->std_plan[$t][$s][0]->frei_orte,$raster[$t][$s]->ort);
|
|
// Blockung beruecksichtigen
|
|
for ($b=1;$b<$block && ($s+$block)<=($max_stunde+1);$b++)
|
|
if (!$raster[$t][$s+$b]->kollision)
|
|
$this->std_plan[$t][$s][0]->frei_orte=array_diff($this->std_plan[$t][$s][0]->frei_orte,$raster[$t][$s+$b]->ort);
|
|
else
|
|
$this->std_plan[$t][$s][0]->frei_orte=array();
|
|
}
|
|
elseif($raster[$t][$s]->kollision)
|
|
$this->std_plan[$t][$s][0]->frei_orte=array();
|
|
|
|
// Variablen abgleichen
|
|
$rest-=$block;
|
|
if ($block>$rest)
|
|
$block=$rest;
|
|
$datum=jump_week($datum,$wr);
|
|
$datum_begin=$datum;
|
|
$datum_end=jump_week($datum_begin, 1);
|
|
// Formatieren fuer Datenbankabfragen
|
|
$datum_begin=date("Y-m-d",$datum_begin);
|
|
$datum_end=date("Y-m-d",$datum_end);
|
|
$count++;
|
|
} while($type=='lva_multi_search' && $rest>0);
|
|
return true;
|
|
}
|
|
|
|
|
|
/**************************************************************************
|
|
* @brief Funktion draw_week_csv Stundenplan im XUL-Format
|
|
*
|
|
* @param target Ziel-System zB Outlook
|
|
*
|
|
* @return true oder false
|
|
*
|
|
*/
|
|
function draw_week_csv($target)
|
|
{
|
|
if (!date("w",$this->datum))
|
|
$this->datum=jump_day($this->datum,1);
|
|
$num_rows_stunde=pg_numrows($this->stunde);
|
|
for ($i=1; $i<7; $i++)
|
|
{
|
|
for ($k=0; $k<$num_rows_stunde; $k++)
|
|
{
|
|
$j=pg_result($this->stunde,$k,'"stunde"'); // get id of hour
|
|
if (isset($this->std_plan[$i][$j][0]->lehrfach))
|
|
{
|
|
// Daten aufbereiten
|
|
unset($unr);
|
|
unset($lektor);
|
|
unset($lehrverband);
|
|
unset($lehrfach);
|
|
foreach ($this->std_plan[$i][$j] as $lehrstunde)
|
|
{
|
|
$unr[]=$lehrstunde->unr;
|
|
// Lektoren
|
|
$lektor[]=$lehrstunde->lektor;
|
|
// Lehrverband
|
|
$lvb=$lehrstunde->stg.'-'.$lehrstunde->sem;
|
|
if ($lehrstunde->ver!=null && $lehrstunde->ver!='0' && $lehrstunde->ver!='')
|
|
{
|
|
$lvb.=$lehrstunde->ver;
|
|
if ($lehrstunde->grp!=null && $lehrstunde->grp!='0' && $lehrstunde->grp!='')
|
|
$lvb.=$lehrstunde->grp;
|
|
}
|
|
if (count($lehrstunde->gruppe_kurzbz)>0)
|
|
$lvb=$lehrstunde->gruppe_kurzbz;
|
|
$lehrverband[]=$lvb;
|
|
// Lehrfach
|
|
$lf=$lehrstunde->lehrfach;
|
|
if (isset($lehrstunde->lehrform))
|
|
$lf.='-'.$lehrstunde->lehrform;
|
|
$lehrfach[]=$lf;
|
|
$titel=$lehrstunde->titel;
|
|
$anmerkung=$lehrstunde->anmerkung;
|
|
}
|
|
|
|
// Unterrichtsnummer (Kollision?)
|
|
$unr=array_unique($unr);
|
|
if(!isset($kollision))
|
|
$kollision=0;
|
|
$kollision+=count($unr);
|
|
|
|
// Lektoren
|
|
if ($this->type!='lektor')
|
|
{
|
|
$lektor=array_unique($lektor);
|
|
sort($lektor);
|
|
$lkt='';
|
|
foreach ($lektor as $l)
|
|
$lkt.=$l.' ';
|
|
}
|
|
else
|
|
$lkt=$lektor[0];
|
|
//echo $lkt;
|
|
|
|
// Lehrverband
|
|
if ($this->type!='verband')
|
|
{
|
|
$lehrverband=array_unique($lehrverband);
|
|
sort($lehrverband);
|
|
$lvb='';
|
|
foreach ($lehrverband as $l)
|
|
$lvb.=$l.' ';
|
|
}
|
|
else
|
|
$lvb=$lehrverband[0];
|
|
|
|
|
|
$start_time=pg_result($this->stunde,$k,'"beginn"');
|
|
// Blockungen erkennen
|
|
if (($this->std_plan[$i][$j][0]->unr == $this->std_plan[$i][$j+1][0]->unr) && $this->std_plan[$i][$j][0]!=0 && $k<($num_rows_stunde-1))
|
|
{
|
|
$end_time=pg_result($this->stunde,++$k,'"ende"');
|
|
if (($this->std_plan[$i][$j][0]->unr == $this->std_plan[$i][$j+2][0]->unr) && $k<($num_rows_stunde-2))
|
|
{
|
|
$end_time=pg_result($this->stunde,++$k,'"ende"');
|
|
if (($this->std_plan[$i][$j][0]->unr == $this->std_plan[$i][$j+3][0]->unr) && $k<($num_rows_stunde-3))
|
|
$end_time=pg_result($this->stunde,++$k,'"ende"');
|
|
}
|
|
}
|
|
else
|
|
$end_time=pg_result($this->stunde,$k,'"ende"');
|
|
//$start_time=substr($start_time,0,5);
|
|
//$end_time=substr($end_time,0,5);
|
|
//$start_date=$this->datum[year].'/'.$this->datum[mon].'/'.$this->datum[mday];
|
|
|
|
$start_date=date("d.m.Y",$this->datum);
|
|
$end_date=$start_date;
|
|
if ($target=='outlook')
|
|
{
|
|
echo $this->crlf.'"'.$this->std_plan[$i][$j][0]->lehrfach.'","'.$start_date.'","'.$start_time.'","'.$end_date.'","'.$end_time.'","Aus","Aus",,,,,,,,"Stundenplan';
|
|
echo $this->crlf.$this->std_plan[$i][$j][0]->lehrfach.$this->crlf.$this->std_plan[$i][$j][0]->lektor.$this->crlf.$lvb.$this->crlf.$this->std_plan[$i][$j][0]->ort.'","StundenplanFH","'.$this->std_plan[$i][$j][0]->ort.'","Normal","Aus",,"Normal","2"';
|
|
}
|
|
else if ($target=='ical')
|
|
{
|
|
$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
|
|
|
|
$start_date_time_ical = $sda[2].$sda[1].$sda[0].'T'.$sta[0].$sta[1].$sta[2]; //.'Z'; //neu gruppieren der Startzeit und des Startdatums
|
|
$end_date_time_ical = $eda[2].$eda[1].$eda[0].'T'.$eta[0].$eta[1].$eta[2]; //.'Z'; //neu gruppieren der Startzeit und des Startdatums
|
|
|
|
echo $this->crlf.'BEGIN:VEVENT'.$this->crlf
|
|
.'UID:'.'TW'.$lvb.$this->std_plan[$i][$j][0]->ort.$this->std_plan[$i][$j][0]->lektor.$lehrfach[0].$start_date_time_ical.$this->crlf
|
|
.'SUMMARY:'.$lehrfach[0].' '.$this->std_plan[$i][$j][0]->ort.' - '.$lvb.$this->crlf
|
|
.'DESCRIPTION:'.$lehrfach[0].'\n'.$this->std_plan[$i][$j][0]->lektor.'\n'.$lvb.'\n'.$this->std_plan[$i][$j][0]->ort.$this->crlf
|
|
.'LOCATION:'.$this->std_plan[$i][$j][0]->ort.$this->crlf
|
|
.'CATEGORIES:StundenplanTW'.$this->crlf
|
|
.'DTSTART:'.$start_date_time_ical.$this->crlf
|
|
.'DTEND:'.$end_date_time_ical.$this->crlf
|
|
.'END:VEVENT';
|
|
}
|
|
else
|
|
{
|
|
echo $this->crlf.'"'.$lehrfach[0].'","StundenplanTW","'.$this->std_plan[$i][$j][0]->ort.'","Stundenplan'.$this->crlf.$this->std_plan[$i][$j][0]->lehrfach.$this->crlf;
|
|
echo $this->std_plan[$i][$j][0]->lektor.$this->crlf.$lvb.$this->crlf.$this->std_plan[$i][$j][0]->ort.'","Stundenplan",';
|
|
echo '"'.$start_date.'","'.$start_time.'","'.$end_date.'","'.$end_time.'",,,,,';
|
|
}
|
|
}
|
|
}
|
|
$this->datum=jump_day($this->datum, 1);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
}
|
|
|
|
?>
|