From bf8a791d09edf596ea42397ba39d2097099fa4a4 Mon Sep 17 00:00:00 2001 From: Christian Paminger Date: Wed, 13 Dec 2006 10:32:32 +0000 Subject: [PATCH] --- include/globals.inc.php | 25 ++ include/lehrstunde.class.php | 457 +++++++++++++++++++++++++++++++++++ 2 files changed, 482 insertions(+) create mode 100644 include/globals.inc.php create mode 100644 include/lehrstunde.class.php diff --git a/include/globals.inc.php b/include/globals.inc.php new file mode 100644 index 000000000..6d4c4a726 --- /dev/null +++ b/include/globals.inc.php @@ -0,0 +1,25 @@ + \ No newline at end of file diff --git a/include/lehrstunde.class.php b/include/lehrstunde.class.php new file mode 100644 index 000000000..d18883cba --- /dev/null +++ b/include/lehrstunde.class.php @@ -0,0 +1,457 @@ +conn=$conn; + $this->new=TRUE; + } + + + /** + * Einen Datensatz laden + * + */ + function load($stundenplan_id,$stpl_table='stundenplandev') + { + /////////////////////////////////////////////////////////////////////// + // Parameter Checken + // Bezeichnung der Stundenplan-Tabelle und des Keys + $stpl_id=$stpl_table.TABLE_ID; + $stpl_view=VIEW_BEGIN.$stpl_table; + $stpl_table=TABLE_BEGIN.$stpl_table; + + $sql_query="SELECT * FROM $stpl_view WHERE $stpl_id=$stundenplan_id;"; + //echo $sql_query.'
'; + + + //Datenbankabfrage + if (! $stpl_tbl=pg_query($this->conn, $sql_query)) + { + $this->errormsg=pg_last_error($this->conn); + //echo $this->errormsg; + return false; + } + $this->anzahl=pg_numrows($stpl_tbl); + //Daten uebernehmen + if ($this->anzahl!=1) + { + $this->errormsg='Keinen Datensatz gefunden'; + return false; + } + else + { + $row=pg_fetch_object ($stpl_tbl); + $this->stundenplan_id=$row->{$stpl_id}; + $this->unr=$row->unr; + $this->lektor_uid=$row->uid; + $this->lektor_kurzbz=$row->lektor; + $this->datum=$row->datum; + $this->stunde=$row->stunde; + $this->ort_kurzbz=$row->ort_kurzbz; + $this->lehrfach=$row->lehrfach; + $this->lehrfach_bez=$row->lehrfach_bez; + $this->lehrfach_nr=$row->lehrfach_nr; + $this->lehrform=$row->lehrform; + $this->studiengang_kz=$row->studiengang_kz; + $this->studiengang=$row->stg_kurzbz; + $this->sem=$row->semester; + $this->ver=$row->verband; + $this->grp=$row->gruppe; + $this->gruppe_kurzbz=$row->gruppe_kurzbz; + $this->titel=$row->titel; + $this->anmerkung=$row->anmerkung; + $this->updateamum=$row->updateamum; + $this->updatevon=$row->updatevon; + $this->new=false; + } + return true; + } + + /** + * Datensatz in DB speichern + * + */ + function save($uid, $stpl_table='stundenplandev') + { + // Parameter Checken + // Bezeichnung der Stundenplan-Tabelle und des Keys + $stpl_id=$stpl_table.TABLE_ID; + $stpl_table=TABLE_BEGIN.$stpl_table; + if ($this->new) + { + // insert + } + else + { + // update + $sql_query='UPDATE '.$stpl_table; + $sql_query.=" SET datum='$this->datum', stunde=$this->stunde"; + $sql_query.=", ort_kurzbz='$this->ort_kurzbz', uid='$this->lektor_uid'"; + $sql_query.=", updateamum=now(), updatevon='$uid'"; + $sql_query.=" WHERE $stpl_id=$this->stundenplan_id"; + //echo $sql_query."
"; + + //Datenbankabfrage + if (! @pg_query($this->conn, $sql_query)) + { + $this->errormsg=$sql_query.pg_last_error($this->conn); + //echo $this->errormsg; + return false; + } + //$this->errormsg.=$sql_query; + } + + return true; + } + + /** + * Datensatz aus DB entfernen + * @param id ID des Datensatzes in der Tabelle + * @param stpl_table Name der Tabelle + * + */ + function delete($id, $stpl_table='stundenplandev') + { + // Parameter Checken + // Bezeichnung der Stundenplan-Tabelle und des Keys + $stpl_id=$stpl_table.TABLE_ID; + $stpl_table=TABLE_BEGIN.$stpl_table; + // Delete SQL vorbereiten + $sql_query='DELETE FROM '.$stpl_table; + $sql_query.=" WHERE $stpl_id=$id"; + //echo $sql_query."
"; + + //Datenbankrequest + if (! pg_query($this->conn, $sql_query)) + { + $this->errormsg=$sql_query.pg_last_error($this->conn); + //echo $this->errormsg; + return false; + } + else + return true; + } + + /** + * @param type (student, lektor, lehrverband, einheit, ort, ....) + * @param datum_von (inklusive) Startdatum der Abfrage + * @param datum_bis (exklusive) Enddatum der Abfrage + * @param uid (des Lektors oder Studenten) kann auch NULL sein + * @param ort_kurzbz (Kurzbezeichnung des Orts) kann auch NULL sein + * @param studiengang_kz + * @param sem + * @param ver + * @param grp + * @param gruppe_kurzbz + * + */ + function load_lehrstunden($type, $datum_von, $datum_bis, $uid, $ort_kurzbz=NULL, $studiengang_kz=NULL, $sem=NULL, $ver=NULL, $grp=NULL, $gruppe_kurzbz=NULL, $stpl_view='stundenplan') + { + /////////////////////////////////////////////////////////////////////// + // Parameter Checken + // Bezeichnung der Stundenplan-Tabelle und des Keys + $stpl_id=$stpl_view.TABLE_ID; + $stpl_view=VIEW_BEGIN.$stpl_view; + // Datum im Format YYYY-MM-TT ? + if (!ereg("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})",$datum_von) ) + { + $this->errormsg='Fehler: Startdatum hat falsches Format!'; + return -1; + } + if (!ereg("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})",$datum_bis) ) + { + $this->errormsg='Fehler: Enddatum hat falsches Format!'; + return -1; + } + // Person + if (($type=='student' || $type=='lektor') && $uid==NULL) + { + $this->errormsg='Fehler: uid der Person ist nicht gesetzt'; + return -1; + } + // Ort + if ($type=='ort' && $ort_kurzbz==NULL) + { + $this->errormsg='Fehler: Kurzbezeichnung des Orts ist nicht gesetzt'; + return -1; + } + // Einheit + if ($type=='einheit' && $gruppe_kurzbz==NULL) + { + $this->errormsg='Fehler: Kurzbezeichnung der Einheit ist nicht gesetzt'; + return -1; + } + + /////////////////////////////////////////////////////////////////////// + // Zusaetzliche Daten ermitteln + // Personendaten + if ($type=='student') + { + // Lehrverband ermitteln + $sql_query="SELECT studiengang_kz, semester, verband, gruppe FROM tbl_student WHERE uid='$uid'"; + //echo $sql_query; + if (! $result=@pg_query($this->conn, $sql_query) ) + { + $this->errormsg=pg_last_error($this->conn); + return -2; + } + $num_rows=pg_num_rows($result); + if ($num_rows>0) + $row=pg_fetch_object($result); + else + { + $this->errormsg='Fehler: Student ('.$uid.') wurde nicht gefunden!'; + return -2; + } + $studiengang_kz=$row->studiengang_kz; + $sem=$row->semester; + $ver=$row->verband; + $grp=$row->gruppe; + + // Einheiten ermitteln + $sql_query="SELECT gruppe_kurzbz FROM tbl_einheitstudent WHERE uid='$uid'"; + //echo $sql_query; + if (! $result_einheit=@pg_query($this->conn, $sql_query) ) + { + $this->errormsg=pg_last_error($this->conn); + return -2; + } + $num_rows_einheit=pg_num_rows($result_einheit); + } + + /////////////////////////////////////////////////////////////////////// + // Stundenplandaten ermitteln + // Abfrage generieren + $sql_query_stdplan='SELECT * FROM '.$stpl_view; + $sql_query=" WHERE datum>='$datum_von' AND datum<'$datum_bis'"; + if ($type=='lektor') + $sql_query.=" AND uid='$uid'"; + elseif ($type=='ort') + $sql_query.=" AND ort_kurzbz='$ort_kurzbz'"; + elseif ($type=='einheit') + $sql_query.=" AND gruppe_kurzbz='$gruppe_kurzbz'"; + else + { + $sql_query.=' AND ( (studiengang_kz='.$studiengang_kz; + if ($sem!='0' && $sem!=null && $sem!=0 && $sem!='') + { + $sql_query.=" AND (semester=$sem OR semester IS NULL"; + if ($type=='student') + $sql_query.=' OR semester='.($sem+1); + $sql_query.=')'; + } + if ($ver!='0' && $ver!=null && $ver!='') + $sql_query.=" AND (verband='$ver' OR verband IS NULL OR verband='0' OR verband='')"; + if ($grp!='0' && $grp!=null && $grp!='') + $sql_query.=" AND (gruppe='$grp' OR gruppe IS NULL OR gruppe='0' OR gruppe='')"; + if ($type=='student') + $sql_query.=' AND gruppe_kurzbz IS NULL'; + $sql_query.=' )'; + for ($i=0;$i<$num_rows_einheit;$i++) + { + $row=pg_fetch_object($result_einheit,$i); + $sql_query.=" OR gruppe_kurzbz='$row->gruppe_kurzbz'"; + } + $sql_query.=')'; + } + $sql_query.=' ORDER BY datum, stunde, studiengang_kz, semester, verband, gruppe, gruppe_kurzbz, uid'; + $sql_query_stdplan.=$sql_query; + //echo ''; + + //Datenbankabfrage + if (! $stpl_tbl=pg_query($this->conn, $sql_query_stdplan)) + { + $this->errormsg=pg_last_error($this->conn); + //echo $this->errormsg; + return -2; + } + $num_rows=pg_numrows($stpl_tbl); + $this->anzahl=$num_rows; + //Daten uebernehmen + for ($i=0;$i<$num_rows;$i++) + { + $row=pg_fetch_object ($stpl_tbl, $i); + $stunde=new lehrstunde($this->conn); + $stunde->stundenplan_id=$row->{$stpl_id}; + $stunde->unr=$row->unr; + $stunde->lektor_uid=$row->uid; + $stunde->lektor_kurzbz=$row->lektor; + $stunde->datum=$row->datum; + $stunde->stunde=$row->stunde; + $stunde->ort_kurzbz=$row->ort_kurzbz; + $stunde->lehrfach=$row->lehrfach; + $stunde->lehrfach_bez=$row->lehrfach_bez; + $stunde->lehrfach_nr=$row->lehrfach_nr; + $stunde->lehrform=$row->lehrform; + if ($row->farbe!=' ' && $row->farbe!=null) + $stunde->farbe=$row->farbe; + else + $stunde->farbe='FFFFFF'; + $stunde->studiengang_kz=$row->studiengang_kz; + $stunde->studiengang=$row->stg_kurzbz; + $stunde->sem=$row->semester; + $stunde->ver=$row->verband; + $stunde->grp=$row->gruppe; + $stunde->gruppe_kurzbz=$row->gruppe_kurzbz; + $stunde->titel=$row->titel; + $stunde->anmerkung=$row->anmerkung; + $stunde->updateamum=$row->updateamum; + $stunde->updatevon=$row->updatevon; + $stunde->reservierung=false; + $this->lehrstunden[$i]=$stunde; + } + + /////////////////////////////////////////////////////////////////////// + // Reservierungsdaten ermitteln + // Datenbankabfrage generieren + $sql_query_reservierung='SELECT * FROM vw_reservierung'; + $sql_query_reservierung.=$sql_query; + //echo $sql_query_reservierung; + //Datenbankabfrage + if (! $stpl_tbl=pg_query($this->conn, $sql_query_reservierung)) + { + $this->errormsg=pg_last_error($this->conn); + return -2; + } + $num_rows=pg_numrows($stpl_tbl); + $this->anzahl+=$num_rows; + + //Daten uebernehmen + for ($i=0;$i<$num_rows;$i++) + { + $row=pg_fetch_object ($stpl_tbl, $i); + $stunde=new lehrstunde($this->conn); + $stunde->reservierung=true; + $stunde->stundenplan_id=$row->reservierung_id; + $stunde->unr=0; + $stunde->lektor_uid=$row->uid; + $stunde->lektor_kurzbz=$row->uid; + $stunde->datum=$row->datum; + $stunde->stunde=$row->stunde; + $stunde->ort_kurzbz=$row->ort_kurzbz; + //$stunde->lehrfach_nr=$row->lehrfach_nr; + $stunde->lehrfach=$row->titel; + $stunde->lehrfach_bez=$row->beschreibung; + $stunde->studiengang_kz=$row->studiengang_kz; + $stunde->studiengang=$row->stg_kurzbz; + $stunde->sem=$row->semester; + $stunde->ver=$row->verband; + $stunde->grp=$row->gruppe; + $stunde->gruppe_kurzbz=$row->gruppe_kurzbz; + $stunde->titel=$row->titel; + $stunde->anmerkung=$row->beschreibung; + $this->lehrstunden[]=$stunde; + //var_dump($stunde); + } + //echo $this->anzahl; + return $this->anzahl; + } + + /************************************************************************* + * Prueft die geladene Lehrveranstaltung auf Kollisionen im Stundenplan. + * Rueckgabewert 'false' und die Fehlermeldung steht in '$this->errormsg'. + * @param string datum gewuenschtes Datum YYYY-MM-TT + * @param integer stunde gewuenschte Stunde + * @param string ort gewuenschter Ort + * @param string db_stpl_table Tabllenname des Stundenplans im DBMS + * @return boolean true=ok, false=fehler + *************************************************************************/ + function kollision($stpl_table='stundenplandev') + { + // Parameter Checken + // Bezeichnung der Stundenplan-Tabelle und des Keys + $stpl_id=$stpl_table.TABLE_ID; + $stpl_table=VIEW_BEGIN.$stpl_table; + + // Datenbank abfragen + $sql_query="SELECT $stpl_id AS id, lektor, stg_kurzbz, ort_kurzbz, semester, verband, gruppe, gruppe_kurzbz, datum, stunde FROM $stpl_table + WHERE datum='$this->datum' AND stunde=$this->stunde AND (ort_kurzbz='$this->ort_kurzbz' OR "; + if ($this->lektor_uid!='_DummyLektor') + $sql_query.="(uid='$this->lektor_uid') AND uid!='_DummyLektor' OR "; + $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.=")) AND unr!=$this->unr"; + + //echo $sql_query.'
'; + if (! $erg_stpl=pg_query($this->conn, $sql_query)) + { + $this->errormsg=pg_last_error($this->conn); + return true; + } + $anz=pg_numrows($erg_stpl); + //Check + if ($anz==0) + return false; + else + { + $row=pg_fetch_object($erg_stpl); + $this->errormsg="Kollision ($stpl_table): $row->id|$row->lektor|$row->ort_kurzbz|$row->stg_kurzbz-$row->semester$row->verband$row->gruppe$row->gruppe_kurzbz - $row->datum/$row->stunde"; + return true; + } + } +} + +?> \ No newline at end of file