diff --git a/cis/private/lvplan/stpl_week.php b/cis/private/lvplan/stpl_week.php index becc9e24f..35611a8fe 100644 --- a/cis/private/lvplan/stpl_week.php +++ b/cis/private/lvplan/stpl_week.php @@ -29,18 +29,15 @@ require_once('../../../include/benutzerberechtigung.class.php'); require_once('../../../include/ort.class.php'); require_once('../../../include/phrasen.class.php'); -$sprache = getSprache(); -$p=new phrasen($sprache); +$sprache = getSprache(); +$p=new phrasen($sprache); if (!$db = new basis_db()) die($p->t('global/fehlerBeimOeffnenDerDatenbankverbindung')); - - $uid=get_uid(); -?> - +?> @@ -54,7 +51,7 @@ $uid=get_uid(); if (restore) selObj.selectedIndex=0; } - + function toggle_checkboxes(obj) { var f = obj.form; @@ -66,7 +63,7 @@ $uid=get_uid(); e.checked = f.check_all.checked; } } - + $(document).ready(function() { $("select[name='studiengang_kz']").change(function() { var studiengang_kz = $("select[name='studiengang_kz']").val(); @@ -77,7 +74,7 @@ $uid=get_uid(); }, type: "POST", dataType: "json", - success: function(data) + success: function(data) { $("select[name='semester']").empty(); $("select[name='semester']").append(''); @@ -85,13 +82,13 @@ $uid=get_uid(); $("select[name='semester']").append(''); }); }, - error: function(data) + error: function(data) { alert("Fehler beim Laden der Daten"); } }); }) - + $("select[name='semester']").change(function() { var studiengang_kz = $("select[name='studiengang_kz']").val(); var semester = $("select[name='semester']").val(); @@ -103,7 +100,7 @@ $uid=get_uid(); }, type: "POST", dataType: "json", - success: function(data) + success: function(data) { $("select[name='verband']").empty(); $("select[name='verband']").append(''); @@ -111,13 +108,13 @@ $uid=get_uid(); $("select[name='verband']").append(''); }); }, - error: function(data) + error: function(data) { alert("Fehler beim Laden der Daten"); } }); }) - + $("select[name='verband']").change(function() { var studiengang_kz = $("select[name='studiengang_kz']").val(); var semester = $("select[name='semester']").val(); @@ -131,7 +128,7 @@ $uid=get_uid(); }, type: "POST", dataType: "json", - success: function(data) + success: function(data) { $("select[name='gruppe']").empty(); $("select[name='gruppe']").append(''); @@ -139,7 +136,7 @@ $uid=get_uid(); $("select[name='gruppe']").append(''); }); }, - error: function(data) + error: function(data) { alert("Fehler beim Laden der Daten"); } @@ -152,7 +149,6 @@ $uid=get_uid(); -

t('lvplan/wochenplan');?>

@@ -298,14 +294,14 @@ if (!isset($pers_uid)) if (isset($_POST['reserve'])) $reserve=$_POST['reserve']; else if (isset($_GET['reserve'])) - $reserve=$_GET['reserve']; + $reserve=$_GET['reserve']; // Reservieren if (isset($reserve) && $raumres) { $ort_obj = new ort(); if(!$ort_obj->load($ort_kurzbz)) die($p->t('lvplan/raumExistiertNicht')); - + if(!$erg_std=$db->db_query("SELECT * FROM lehre.tbl_stunde ORDER BY stunde")) { die($db->db_last_error()); @@ -319,13 +315,13 @@ if (isset($reserve) && $raumres) { $stunde=$db->db_result($erg_std,$j,'"stunde"'); $var='reserve'.$t.'_'.$stunde; - + if (isset($_REQUEST[$var])) { $datum_res=$_REQUEST[$var]; $reservierung = new reservierung(); - + if(!$reservierung->isReserviert($ort_kurzbz, $datum_res, $stunde)) { if (empty($_REQUEST['titel']) && empty($_REQUEST['beschreibung'])) @@ -335,7 +331,7 @@ if (isset($reserve) && $raumres) else if ( empty($_REQUEST['beschreibung'])) echo "
".$p->t('lvplan/beschreibungFehlt')."!
"; else - { + { $reservierung = new reservierung(); $reservierung->datum = $datum_res; $reservierung->ort_kurzbz = $ort_kurzbz; @@ -344,7 +340,7 @@ if (isset($reserve) && $raumres) $reservierung->titel = $_REQUEST['titel']; $reservierung->insertamum=date('Y-m-d H:i:s'); $reservierung->insertvon=$uid; - + if(isset($_REQUEST['studiengang_kz'])) { $reservierung->studiengang_kz = $_REQUEST['studiengang_kz']; @@ -359,17 +355,17 @@ if (isset($reserve) && $raumres) $reservierung->studiengang_kz='0'; $reservierung->uid = $uid; } - + if(!$reservierung->save(true)) echo $reservierung->errormsg; else $count++; - } + } } else { echo "
$ort_kurzbz ".$p->t('lvplan/bereitsReserviert').": $datum_res - Stunde $stunde
"; - } + } } } } diff --git a/include/lehrstunde.class.php b/include/lehrstunde.class.php index 54f8e4e1f..554ad5c9d 100644 --- a/include/lehrstunde.class.php +++ b/include/lehrstunde.class.php @@ -73,15 +73,15 @@ class lehrstunde extends basis_db public function __construct() { parent::__construct(); - + $this->new=TRUE; } - /** + /** * @brief Einen Datensatz aus optional angegebener Stundenplan-Tabelle laden - * \param stundenplan_id ID in der Datenbank - * \param stpl_table Name der Tabelle in der DB - * \return Boolean, Fehlermeldung kommt in das Attribut errormsg + * @param stundenplan_id ID in der Datenbank + * @param stpl_table Name der Tabelle in der DB + * @return Boolean, Fehlermeldung kommt in das Attribut errormsg */ public function load($stundenplan_id,$stpl_table='stundenplandev') { @@ -91,16 +91,16 @@ class lehrstunde extends basis_db $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; $sql_query="SELECT * FROM $stpl_view WHERE $stpl_id=$stundenplan_id;"; - + //Datenbankabfrage if (!$this->db_query($sql_query)) { $this->errormsg=$sql_query.$this->db_last_error(); return false; } - + $this->anzahl = $this->db_num_rows(); - + //Daten uebernehmen if ($this->anzahl!=1) { @@ -183,16 +183,16 @@ class lehrstunde extends basis_db { $stpl_id=$stpl_table.TABLE_ID; $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; - + $sql_query='UPDATE '.$stpl_table; $sql_query.=" SET datum=".$this->db_add_param($this->datum).", stunde=".$this->db_add_param($this->stunde); $sql_query.=", ort_kurzbz=".$this->db_add_param($this->ort_kurzbz).", mitarbeiter_uid=".$this->db_add_param($this->lektor_uid); $sql_query.=", updateamum=".$this->db_add_param($this->updateamum).", updatevon=".$this->db_add_param($this->updatevon); $sql_query.=" WHERE $stpl_id=".$this->db_add_param($this->stundenplan_id).";"; - + return $sql_query; } - + /** * Datensatz aus DB entfernen * @param id ID des Datensatzes in der Tabelle @@ -208,7 +208,7 @@ class lehrstunde extends basis_db // Delete SQL vorbereiten $sql_query='DELETE FROM '.$stpl_table; $sql_query.=" WHERE $stpl_id=".$this->db_add_param($id); - + //Datenbankrequest if (!$this->db_query($sql_query)) { @@ -221,7 +221,7 @@ class lehrstunde extends basis_db /** * Laedt Lehrstunden - * + * * @param type (student, lektor, lehrverband, gruppe, ort, ....) * @param datum_von (inklusive) Startdatum der Abfrage * @param datum_bis (exklusive) Enddatum der Abfrage @@ -302,47 +302,68 @@ class lehrstunde extends basis_db // Personendaten if ($type=='student') { - // Lehrverband ermitteln - $sql_query="SELECT studiengang_kz, semester, verband, gruppe FROM public.tbl_student WHERE student_uid=".$this->db_add_param($uid); - - if (!$this->db_query($sql_query) ) + // Bei Studierenden wird das passende Studiensemester ermittelt und das dazupassende + // naechstliegende Dadurch wird sichergestellt, dass Einheiten aus den Vorsemestern + // zB fuer Nachpruefungen oder Einheiten aus den Folgesemestern die vorgezogen werden + // auch im Plan sichtbar sind. + if (is_null($this->ss)) + { + $studiensemester_obj = new studiensemester(); + $this->ss = $studiensemester_obj->getSemesterFromDatum($datum_von,true); + $this->ssnext = $studiensemester_obj->getNearestTo($this->ss,$datum_von); + } + if(!isset($this->ssnext)) + $this->ssnext = $this->ss; + + // Lehrverbandszuordnungen der betreffenden Studiensemester laden + $sql_query="SELECT studiengang_kz, semester, verband, gruppe + FROM public.tbl_studentlehrverband + WHERE student_uid=".$this->db_add_param($uid)." + AND studiensemester_kurzbz in(".$this->db_add_param($this->ss).",".$this->db_add_param($this->ssnext).")"; + + $verbaende=array(); + if($this->db_query($sql_query)) + { + $num_rows=$this->db_num_rows(); + if ($num_rows>0) + { + while($row = $this->db_fetch_object()) + { + $verbaende[] = array('studiengang_kz'=>$row->studiengang_kz, + 'sem'=>$row->semester, + 'ver'=>$row->verband, + 'grp'=>$row->gruppe); + } + } + } + else { $this->errormsg=$this->db_last_error(); return -2; } - $num_rows=$this->db_num_rows(); - if ($num_rows>0) - $row=$this->db_fetch_object(); - 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; - - // Gruppen ermitteln - if (is_null($this->ss)) - { - $studiensemester_obj = new studiensemester(); - $this->ss=$studiensemester_obj->getNearest(); - } - $sql_query="SELECT gruppe_kurzbz FROM public.tbl_benutzergruppe WHERE uid=".$this->db_add_param($uid)." AND (studiensemester_kurzbz=".$this->db_add_param($this->ss)." OR studiensemester_kurzbz IS NULL)"; + // Spezialgruppen ermitteln zu denen die Person zugeteilt ist + $sql_query="SELECT + gruppe_kurzbz + FROM + public.tbl_benutzergruppe + WHERE + uid=".$this->db_add_param($uid)." + AND (studiensemester_kurzbz=".$this->db_add_param($this->ss)." + OR studiensemester_kurzbz=".$this->db_add_param($this->ssnext)." + OR studiensemester_kurzbz IS NULL)"; if (!$result_einheit=$this->db_query($sql_query)) { $this->errormsg=$this->db_last_error($this->conn); return false; } - else + else $num_rows_einheit=$this->db_num_rows($result_einheit); } // Stundenplandaten ermitteln // Abfrage generieren - + if ($type!='idList') { if($alle_unr_mitladen) @@ -363,24 +384,50 @@ class lehrstunde extends basis_db $sql_query.=" AND gruppe_kurzbz=".$this->db_add_param($gruppe_kurzbz); elseif($type=='fachbereich') $sql_query.=" AND fachbereich_kurzbz=".$this->db_add_param($fachbereich_kurzbz); + elseif($type=='student') + { + $sql_query.=" AND ("; + if(is_array($verbaende) && count($verbaende)>0) + { + foreach($verbaende as $row_verbaende) + { + $studiengang_kz = $row_verbaende['studiengang_kz']; + $ver = $row_verbaende['ver']; + $sem = $row_verbaende['sem']; + $grp = $row_verbaende['grp']; + + $sql_query.=" (studiengang_kz=".$this->db_add_param($studiengang_kz, FHC_INTEGER); + if ($sem!=null && $sem>=0 && $sem!='') + $sql_query.=" AND (semester=".$this->db_add_param($sem)." OR semester IS NULL)"; + if ($ver!='0' && $ver!=null && $ver!='') + $sql_query.=" AND (verband=".$this->db_add_param($ver)." OR verband IS NULL OR verband='0' OR verband='')"; + if ($grp!='0' && $grp!=null && $grp!='') + $sql_query.=" AND (gruppe=".$this->db_add_param($grp)." OR gruppe IS NULL OR gruppe='0' OR gruppe='')"; + $sql_query.=" AND gruppe_kurzbz is null"; + $sql_query.=") OR "; + } + } + + $sql_query.=" 1!=1"; + for ($i=0;$i<$num_rows_einheit;$i++) + { + $row=$this->db_fetch_object($result_einheit,$i); + $sql_query.=" OR gruppe_kurzbz=".$this->db_add_param($row->gruppe_kurzbz); + } + $sql_query.=')'; + } else { $sql_query.=" AND ( (studiengang_kz=".$this->db_add_param($studiengang_kz, FHC_INTEGER); if ($sem!=null && $sem>=0 && $sem!='') - { - $sql_query.=" AND (semester=".$this->db_add_param($sem)." OR semester IS NULL"; - if ($type=='student' && $sem>0) - $sql_query.=" OR semester=".$this->db_add_param(($sem+1)); - $sql_query.=')'; - } + $sql_query.=" AND (semester=".$this->db_add_param($sem)." OR semester IS NULL)"; if ($ver!='0' && $ver!=null && $ver!='') $sql_query.=" AND (verband=".$this->db_add_param($ver)." OR verband IS NULL OR verband='0' OR verband='')"; if ($grp!='0' && $grp!=null && $grp!='') $sql_query.=" AND (gruppe=".$this->db_add_param($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=$this->db_fetch_object($result_einheit,$i); @@ -390,7 +437,7 @@ class lehrstunde extends basis_db } $sql_query_orderby=' ORDER BY datum, stunde, studiengang_kz, semester, verband, gruppe, gruppe_kurzbz, uid'; $sql_query_stdplan.=$sql_query . $sql_query_lva . $sql_query_orderby; - + // Wenn aktiviert, werden alle Stunden mit der gleichen UNR geladen die zur selben Zeit stattfinden if($alle_unr_mitladen) { @@ -400,12 +447,12 @@ class lehrstunde extends basis_db $sql_query_stdplan ) SELECT - distinct $stpl_view_ohneschema.* - FROM + distinct $stpl_view_ohneschema.* + FROM ".$stpl_view.", lvplan WHERE - $stpl_view_ohneschema.datum=lvplan.datum - AND $stpl_view_ohneschema.stunde=lvplan.stunde + $stpl_view_ohneschema.datum=lvplan.datum + AND $stpl_view_ohneschema.stunde=lvplan.stunde AND $stpl_view_ohneschema.unr=lvplan.unr ORDER BY datum, stunde, studiengang_kz, semester, verband, gruppe, gruppe_kurzbz, uid "; @@ -420,7 +467,7 @@ class lehrstunde extends basis_db $sql_query=mb_substr($sql_query,3); $sql_query_stdplan.=' WHERE'.$sql_query; } -//die($sql_query_stdplan); +//echo $sql_query_stdplan; //Datenbankabfrage if (!$this->db_query($sql_query_stdplan)) { @@ -434,7 +481,7 @@ class lehrstunde extends basis_db for ($i=0;$i<$num_rows;$i++) { $row=$this->db_fetch_object($stpl_tbl, $i); - + $stunde=new lehrstunde(); $stunde->stundenplan_id=$row->{$stpl_id}; $stunde->lehreinheit_id=$row->lehreinheit_id; @@ -489,7 +536,7 @@ class lehrstunde extends basis_db for ($i=0;$i<$num_rows;$i++) { $row = $this->db_fetch_object($stpl_tbl, $i); - + $stunde=new lehrstunde(); $stunde->reservierung=true; $stunde->stundenplan_id=$row->reservierung_id; @@ -534,7 +581,7 @@ class lehrstunde extends basis_db $sql="SELECT * FROM ".$stpl_table." WHERE lehreinheit_id=".$this->db_add_param($lehreinheit_id, FHC_INTEGER); if ($uid!=null && !is_null($uid)) $sql.=" AND mitarbeiter_uid=".$this->db_add_param($uid); - + //Datenbankabfrage if (!$this->db_query($sql)) { @@ -547,7 +594,7 @@ class lehrstunde extends basis_db for ($i=0;$i<$num_rows;$i++) { $row=$this->db_fetch_object(null, $i); - + $stunde=new lehrstunde(); $stunde->stundenplan_id=$row->{$stpl_id}; $stunde->lehreinheit_id=$row->lehreinheit_id; @@ -585,27 +632,27 @@ class lehrstunde extends basis_db { $variablen_obj = new variable(); $variablen_obj->loadVariables(get_uid()); - + $kollision_student = $variablen_obj->variable->kollision_student; $ignore_reservierung = $variablen_obj->variable->ignore_reservierung; $ignore_zeitsperre = $variablen_obj->variable->ignore_zeitsperre; - + //Kollisionspruefung auf Studentenebene if($kollision_student=='true' && $this->kollision_student($stpl_table)) return true; - + // Parameter Checken // Bezeichnung der Stundenplan-Tabelle und des Keys $stpl_id=$stpl_table.TABLE_ID; $stpl_table='lehre.'.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->db_add_param($this->datum)." AND stunde=".$this->db_add_param($this->stunde)." AND (ort_kurzbz=".$this->db_add_param($this->ort_kurzbz)." "; if (!in_array($this->lektor_uid,unserialize(KOLLISIONSFREIE_USER))) $sql_query.=" OR (uid=".$this->db_add_param($this->lektor_uid)." AND uid not in (".$this->db_implode4SQL(unserialize(KOLLISIONSFREIE_USER))."))"; - - //Wenn eine Kollisionspruefung auf Studentenebene durchgefuehrt wird, werden die LVB nicht gecheckt + + //Wenn eine Kollisionspruefung auf Studentenebene durchgefuehrt wird, werden die LVB nicht gecheckt if($kollision_student=='false') { $sql_query.=" OR (studiengang_kz=".$this->db_add_param($this->studiengang_kz)." AND semester=".$this->db_add_param($this->sem); @@ -620,7 +667,7 @@ class lehrstunde extends basis_db if ($this->grp!=null && $this->grp!='' && $this->grp!=' ') $sql_query.=" AND (gruppe=".$this->db_add_param($this->grp)." OR gruppe IS NULL OR gruppe='' OR gruppe=' ')"; } - + $sql_query.=")"; } $sql_query.=") AND unr!=".$this->db_add_param($this->unr); @@ -630,18 +677,18 @@ 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) { // Zeitsperren pruefen if($ignore_zeitsperre=='false' && !in_array($this->lektor_uid,unserialize(KOLLISIONSFREIE_USER)) && $this->kollision_zeitsperre()) return true; - + // Reservierungen pruefen if ($ignore_reservierung=='false' && $this->kollision_reservierung()) return true; - + if($this->kollision_ressource()) return true; return false; @@ -661,9 +708,9 @@ class lehrstunde extends basis_db */ public function kollision_ressource() { - $qry = "SELECT + $qry = "SELECT tbl_betriebsmittel.beschreibung, tbl_stundenplandev.ort_kurzbz - FROM + FROM lehre.tbl_stundenplan_betriebsmittel JOIN lehre.tbl_stundenplandev USING(stundenplandev_id) JOIN wawi.tbl_betriebsmittel USING(betriebsmittel_id) @@ -692,7 +739,7 @@ class lehrstunde extends basis_db */ public function kollision_zeitsperre() { - $sql_query="SELECT + $sql_query="SELECT zeitsperre_id,zeitsperretyp_kurzbz,mitarbeiter_uid AS lektor,vondatum,vonstunde,bisdatum,bisstunde FROM campus.tbl_zeitsperre WHERE mitarbeiter_uid=".$this->db_add_param($this->lektor_uid)." @@ -704,7 +751,7 @@ class lehrstunde extends basis_db $this->errormsg=$sql_query.$this->db_last_error(); return true; } - + $anz_zs=$this->db_num_rows($erg_zs); if ($anz_zs!=0) { @@ -714,7 +761,7 @@ class lehrstunde extends basis_db } return false; } - + /** * Prueft ob eine LV-Plan Kollision mit den Reservierungen besteht * @@ -722,18 +769,18 @@ class lehrstunde extends basis_db */ public function kollision_reservierung() { - $sql_query="SELECT - reservierung_id AS id, uid AS lektor, stg_kurzbz, ort_kurzbz, + $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=".$this->db_add_param($this->datum)." AND - stunde=".$this->db_add_param($this->stunde)." AND + WHERE + datum=".$this->db_add_param($this->datum)." AND + stunde=".$this->db_add_param($this->stunde)." AND (ort_kurzbz=".$this->db_add_param($this->ort_kurzbz)." OR "; - + if (!in_array($this->lektor_uid, unserialize(KOLLISIONSFREIE_USER))) $sql_query.="(uid=".$this->db_add_param($this->lektor_uid)." AND uid not in(".$this->db_implode4SQL(unserialize(KOLLISIONSFREIE_USER)).")) OR "; - + $sql_query.="(studiengang_kz=".$this->db_add_param($this->studiengang_kz)." AND semester=".$this->db_add_param($this->sem); if ($this->ver!=null && $this->ver!='' && $this->ver!=' ') $sql_query.=" AND (verband=".$this->db_add_param($this->ver)." OR verband IS NULL OR verband='' OR verband=' ')"; @@ -742,7 +789,7 @@ class lehrstunde extends basis_db if ($this->gruppe_kurzbz!=null && $this->gruppe_kurzbz!='' && $this->gruppe_kurzbz!=' ') $sql_query.=" AND (gruppe_kurzbz=".$this->db_add_param($this->gruppe_kurzbz).")"; $sql_query.="))"; - + if (!$erg_res = $this->db_query($sql_query)) { $this->errormsg=$sql_query.$this->db_last_error(); @@ -758,12 +805,12 @@ class lehrstunde extends basis_db } return false; } - + /** * Prueft eine Kollision auf Studentenebene * Es werden nur die Kollisionen der Studenten abgefragt * Raum, Lektor, Reservierung, Zeitsperren, etc werden hier nicht geprueft - * + * * @param $stpl_table * @return boolean true=kollision, false=keine kollision */ @@ -772,53 +819,53 @@ class lehrstunde extends basis_db // Parameter Checken // Bezeichnung der Stundenplan-Tabelle $stpl_table='lehre.'.VIEW_BEGIN.$stpl_table; - + $sql_query = "SELECT * FROM ".$stpl_table."_student_unr WHERE datum=".$this->db_add_param($this->datum)." AND stunde=".$this->db_add_param($this->stunde)." AND student_uid IN( - SELECT uid FROM public.vw_gruppen WHERE - + SELECT uid FROM public.vw_gruppen WHERE + "; $sql_query.="(studiengang_kz=".$this->db_add_param($this->studiengang_kz)." AND semester=".$this->db_add_param($this->sem)." AND studiensemester_kurzbz=( SELECT tbl_studiensemester.studiensemester_kurzbz - FROM + FROM public.tbl_studiensemester - WHERE + WHERE tbl_studiensemester.ende >= ".$this->db_add_param($this->datum)." AND tbl_studiensemester.start <=".$this->db_add_param($this->datum)." LIMIT 1)"; if ($this->gruppe_kurzbz!=null && $this->gruppe_kurzbz!='' && $this->gruppe_kurzbz!=' ') $sql_query.=" AND (gruppe_kurzbz=".$this->db_add_param($this->gruppe_kurzbz).")"; - else + else { if ($this->ver!=null && $this->ver!='' && $this->ver!=' ') $sql_query.=" AND (verband=".$this->db_add_param($this->ver).")"; - else + else $sql_query.=" AND (verband IS NULL OR verband='' OR verband=' ')"; if ($this->grp!=null && $this->grp!='' && $this->grp!=' ') $sql_query.=" AND (gruppe=".$this->db_add_param($this->grp).")"; - else + else $sql_query.=" AND (gruppe IS NULL OR gruppe='' OR gruppe=' ')"; } - - + + $sql_query.=")) AND unr!=".$this->db_add_param($this->unr); - + if (!$erg_stpl=$this->db_query($sql_query)) { $this->errormsg=$sql_query.$this->db_last_error(); return true; } - + $anz=$this->db_num_rows($erg_stpl); - + if ($anz>0) { $row = $this->db_fetch_object($erg_stpl); $this->errormsg="Kollision Student ($stpl_table): $row->student_uid $row->datum/$row->stunde "; return true; } - else + else { return false; } @@ -842,10 +889,10 @@ class lehrstunde extends basis_db - gleiches Datum - gleiche Stunde - gleiche UNR - */ + */ foreach($result as $key=>$row_result) { - if($row_result->unr==$row_lehrstunde->unr + if($row_result->unr==$row_lehrstunde->unr && $row_result->datum==$row_lehrstunde->datum && $row_result->stunde==$row_lehrstunde->stunde) { @@ -896,15 +943,15 @@ class lehrstunde extends basis_db public function getStundenplanData($db_stpl_table, $lehrveranstaltung_id=null, $studiensemester_kurzbz=null, $lehreinheit_id=null, $mitarbeiter_uid=null, $student_uid=null) { - $qry = "SELECT - stpl.datum, min(stpl.stunde) as stundevon, max(stpl.stunde) as stundebis, + $qry = "SELECT + stpl.datum, min(stpl.stunde) as stundevon, max(stpl.stunde) as stundebis, stpl.lehreinheit_id, lehrfach.bezeichnung as lehrfach_bezeichnung, array_agg( - CASE WHEN gruppe_kurzbz is not null THEN gruppe_kurzbz + CASE WHEN gruppe_kurzbz is not null THEN gruppe_kurzbz ELSE (SELECT UPPER(typ || kurzbz) FROM public.tbl_studiengang WHERE studiengang_kz=stpl.studiengang_kz) || COALESCE(stpl.semester,'0') || COALESCE(stpl.verband,'') || COALESCE(stpl.gruppe,'') END) as gruppen, array_agg(mitarbeiter_uid) as lektoren, array_agg(ort_kurzbz) as orte - FROM + FROM lehre.tbl_".$db_stpl_table." as stpl JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) JOIN lehre.tbl_lehrveranstaltung as lehrfach ON(tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id) @@ -912,10 +959,10 @@ class lehrstunde extends basis_db if($lehrveranstaltung_id!='') { - $qry.=" lehreinheit_id in(SELECT lehreinheit_id FROM lehre.tbl_lehreinheit - WHERE lehrveranstaltung_id=".$this->db_add_param($lehrveranstaltung_id)." + $qry.=" lehreinheit_id in(SELECT lehreinheit_id FROM lehre.tbl_lehreinheit + WHERE lehrveranstaltung_id=".$this->db_add_param($lehrveranstaltung_id)." AND studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz).")"; - + } elseif($lehreinheit_id!='') { @@ -924,10 +971,10 @@ class lehrstunde extends basis_db elseif($mitarbeiter_uid!='') { $qry.=" mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid)." AND lehreinheit_id IN( - SELECT - lehreinheit_id - FROM - lehre.tbl_lehreinheitmitarbeiter + SELECT + lehreinheit_id + FROM + lehre.tbl_lehreinheitmitarbeiter JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) WHERE mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid)." AND studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz).")"; } diff --git a/include/studiensemester.class.php b/include/studiensemester.class.php index 7ff323c6e..6b90bc586 100644 --- a/include/studiensemester.class.php +++ b/include/studiensemester.class.php @@ -37,20 +37,20 @@ class studiensemester extends basis_db /** * Konstruktor - Laedt optional ein StSem - * + * * @param $studiensemester_kurzbz StSem das geladen werden soll (default=null) */ public function __construct($studiensemester_kurzbz=null) { parent::__construct(); - + if($studiensemester_kurzbz != null) $this->load($studiensemester_kurzbz); } - + /** * Laedt das Studiensemester mit der uebergebenen Kurzbz - * + * * @param $studiensemester_kurzbz Stsem das geladen werden soll */ public function load($studiensemester_kurzbz) @@ -84,9 +84,9 @@ class studiensemester extends basis_db /** * Prueft die Variablen vor dem Speichern * auf Gueltigkeit. - * + * * @return true wenn ok, false im Fehlerfall - */ + */ private function validate() { if(mb_strlen($this->studiensemester_kurzbz)>16) @@ -111,7 +111,7 @@ class studiensemester extends basis_db * Speichert das Studiensemester in die Datenbank * Wenn $new auf true gesetzt ist wird ein neuer Datensatz * angelegt, ansonsten der Datensatz upgedated - * + * * @return true wenn erfolgreich, false im Fehlerfall */ public function save() @@ -149,7 +149,7 @@ class studiensemester extends basis_db /** * Liefert das aktuelle Studiensemester - * + * * @return aktuelles Studiensemester oder false wenn es keines gibt */ public function getakt() @@ -177,17 +177,17 @@ class studiensemester extends basis_db /** * Liefert ein Studiensemester mit Startdatum vom naechstgelegenen Studiensemester und * dem Startdatum vom folgenden Studiensemester als Endedatum - * + * * @return boolean */ public function getNearestTillNext() { if(!$this->getNearest()) return false; - + $start=$this->start; $studiensemester_kurzbz=$this->studiensemester_kurzbz; - + if (!$this->getNextFrom($this->studiensemester_kurzbz)) return false; $ende=$this->start; @@ -201,7 +201,7 @@ class studiensemester extends basis_db /** * Liefert das Aktuelle Studiensemester oder das darauffolgende - * + * * @param $semester wenn das semester uebergeben wird, dann werden nur die studiensemester * geliefert die in dieses semester fallen (Bei geradem semester nur SS sonst WS) * @return Studiensemester oder false wenn es keines gibt @@ -213,7 +213,7 @@ class studiensemester extends basis_db else { $qry = "SELECT studiensemester_kurzbz FROM public.tbl_studiensemester WHERE true"; - + if($semester!='') { if($semester%2==0) @@ -245,7 +245,7 @@ class studiensemester extends basis_db /** * Liefert das naechstgelegenste Studiensemester - * + * * @param semester wenn das semester uebergeben wird, dann werden nur die studiensemester * geliefert die in dieses semester fallen (Bei geradem semester nur SS sonst WS) * @return Studiensemester oder false wenn es keines gibt @@ -292,7 +292,7 @@ class studiensemester extends basis_db public function getAll($order = null) { $qry = "SELECT * FROM public.tbl_studiensemester ORDER BY ende"; - + if($order == "desc") $qry .= " DESC"; @@ -322,7 +322,7 @@ class studiensemester extends basis_db /** * Liefert das naechste Studiensemester - * + * * @param $art Wenn art=WS dann wird das naechste Wintersemester geliefert * Wenn art=SS dann wird das naechste Sommersemester geliefert * @return true wenn ok, false wenn kein entsprechendes vorhanden ist @@ -356,10 +356,10 @@ class studiensemester extends basis_db return true; } - + /** * Liefert die naechsten Studiensemester bis zum eingestellten Limit - * + * * @param $art Wenn art=WS dann wird das naechste Wintersemester geliefert * Wenn art=SS dann wird das naechste Sommersemester geliefert * $limit Wie viele kommende Studiensemester sollen geliefert werden? @@ -374,10 +374,10 @@ class studiensemester extends basis_db $qry.= " AND substring(studiensemester_kurzbz from 1 for 2)=".$this->db_add_param($art); $qry.=" ORDER BY start"; - + if(!is_null($limit) && is_numeric($limit)) $qry.=" LIMIT ".$limit; - else + else $qry.=" LIMIT 1"; if($this->db_query($qry)) @@ -385,17 +385,17 @@ class studiensemester extends basis_db while($row = $this->db_fetch_object()) { $stsem_obj = new studiensemester(); - + $stsem_obj->studiensemester_kurzbz = $row->studiensemester_kurzbz; $stsem_obj->start = $row->start; $stsem_obj->ende = $row->ende; $stsem_obj->bezeichnung = $row->bezeichnung; - + $this->studiensemester[] = $stsem_obj; } return true; } - else + else { $this->errormsg = 'Fehler beim Lesen des Studiensemesters'; return false; @@ -404,7 +404,7 @@ class studiensemester extends basis_db /** * Liefert das vorige Studiensemester - * + * * @return studiensemester_kurzbz oder false wenn keines vorhanden */ public function getPrevious() @@ -429,10 +429,10 @@ class studiensemester extends basis_db return false; } } - + /** * Liefert das vorvorige Studiensemester - * + * * @return studiensemester_kurzbz oder false wenn keines vorhanden */ public function getBeforePrevious() @@ -468,7 +468,7 @@ class studiensemester extends basis_db /** * Liefert das Studiensemester vor $studiensemester_kurzbz - * + * * @param $studiensemester_kurzbz * @return $studiensemester_kurzbz oder false wenn Fehler */ @@ -500,7 +500,7 @@ class studiensemester extends basis_db /** * Liefert das Studiensemester nach $studiensemester_kurzbz - * + * * @param $studiensemester_kurzbz * @return $studiensemester_kurzbz oder false wenn Fehler */ @@ -535,7 +535,7 @@ class studiensemester extends basis_db /** * Liefert das Studiensemester das aktuell am naehesten zu $studiensemester_kurzbz liegt - * + * * @param $studiensemester_kurzbz * @return $studiensemester_kurzbz oder false wenn Fehler */ @@ -569,7 +569,7 @@ class studiensemester extends basis_db /** * Springt von Studiensemester $studiensemester_kurzbz um $wert Studiensemester vor/zurueck - * + * * @param $studiensemester_kurzbz * @param $wert * @return studiensemester_kurzbz @@ -616,13 +616,13 @@ class studiensemester extends basis_db else return $studiensemester_kurzbz; } - else + else { $this->errormsg='Fehler bei einer Abfrage'; return false; } } - + /** * Laedt die vergangenen Studiensemester und das aktuelle * @@ -655,12 +655,12 @@ class studiensemester extends basis_db return false; } } - + /** - * Liefert $days (Default 60) Tage nach dem start des neuen Semesters noch das vorherige Studiensemester + * Liefert $days (Default 60) Tage nach dem start des neuen Semesters noch das vorherige Studiensemester * zurueck, danach das aktuelle. - * - * + * + * * @return studiensemester_kurzbz oder false wenn keines vorhanden */ public function getLastOrAktSemester($days=60) @@ -685,12 +685,12 @@ class studiensemester extends basis_db return false; } } - + /** - * Liefert $days (Default 60) Tage nach dem start des neuen Semesters noch das vorherige Studiensemester + * Liefert $days (Default 60) Tage nach dem start des neuen Semesters noch das vorherige Studiensemester * zurueck, danach das aktuelle. - * - * + * + * * @return studiensemester_kurzbz oder false wenn keines vorhanden */ public function getNextOrAktSemester($days=60) @@ -717,7 +717,7 @@ class studiensemester extends basis_db } /** * Liefert den UNIX Timestamp (Beginn,Ende) eines Studiensemesters - * + * * @param $studiensemester_kurzbz * @return Beginn und Ende eines Studiensemesters als Timestamp */ @@ -729,7 +729,7 @@ class studiensemester extends basis_db if($this->db_query($qry)) { if($row = $this->db_fetch_object()) - { + { if(!isset($this->begin)) $this->begin=new stdclass(); $this->begin->start=mktime(0,0,0,mb_substr($row->start,5,2),mb_substr($row->start,8,2),mb_substr($row->start,0,4)); @@ -749,42 +749,45 @@ class studiensemester extends basis_db $this->errormsg = 'Fehler beim Ermitteln des Studiensemesters'; return false; } - } + } /** * untersucht das uebergebene datum in welchem semester es sich befindet * @param type $datum - * @return boolean + * @return boolean */ - public function getSemesterFromDatum($datum) + public function getSemesterFromDatum($datum, $next=null) { if($datum == '') { - $this->errormsg = "Ungueltiges Datum uebergeben"; - return false; + $this->errormsg = "Ungueltiges Datum uebergeben"; + return false; } - $qry = "SELECT * FROM public.tbl_studiensemester WHERE start <=".$this->db_add_param($datum, FHC_STRING)." AND ende >= ".$this->db_add_param($datum).';'; - + if(is_null($next)) + $qry = "SELECT * FROM public.tbl_studiensemester WHERE start <=".$this->db_add_param($datum, FHC_STRING)." AND ende >= ".$this->db_add_param($datum).';'; + else + $qry = "SELECT * FROM public.tbl_studiensemester WHERE start <=".$this->db_add_param($datum, FHC_STRING)." ORDER BY start desc limit 1;"; + if($result = $this->db_query($qry)) { if($row = $this->db_fetch_object()) { - return $row->studiensemester_kurzbz; + return $row->studiensemester_kurzbz; } else { - $this->errormsg = "Es wurde kein passendes Studiensemester gefunden"; - return false; + $this->errormsg = "Es wurde kein passendes Studiensemester gefunden"; + return false; } } else { - $this->errormsg = "Fehler bei der Abfrage aufgetreten."; - return false; + $this->errormsg = "Fehler bei der Abfrage aufgetreten."; + return false; } } - + /** - * Liefert das dazupassende Studiensemester im Studienjahr + * Liefert das dazupassende Studiensemester im Studienjahr * @param $studiensemester_kurzbz * @return $studiensemester_kurzbz */ @@ -798,39 +801,39 @@ class studiensemester extends basis_db /** * Laedt die Studiensemester die fuer die Onlinebewerbung aktiviert sind - * + * * @return true wenn ok, sonst false */ public function getStudiensemesterOnlinebewerbung() { $qry = "SELECT * FROM public.tbl_studiensemester WHERE onlinebewerbung=true ORDER BY start"; - + if($this->db_query($qry)) { while($row = $this->db_fetch_object()) { $stsem_obj = new studiensemester(); - + $stsem_obj->studiensemester_kurzbz = $row->studiensemester_kurzbz; $stsem_obj->start = $row->start; $stsem_obj->ende = $row->ende; $stsem_obj->bezeichnung = $row->bezeichnung; - + $this->studiensemester[] = $stsem_obj; } return true; } - else + else { $this->errormsg = 'Fehler beim Lesen des Studiensemesters'; return false; } } - + /** * Liefert ausgehend von heutigen Datum $plus studiensemester in die Zukunft und $minus Studiensemester in die Vergangenheit - * + * * @param integer $plus Wieviele Studiensemester in die Zukunft sollen ausgegeben werden. * @param integer $minus Wieviele Studiensemester in die Vergangenheit sollen ausgegeben werden. * @@ -840,30 +843,30 @@ class studiensemester extends basis_db { if((is_null($plus) || !is_numeric($plus)) || (is_null($minus) || !is_numeric($minus))) return false; - + $qry = "SELECT DISTINCT * FROM public.tbl_studiensemester WHERE studiensemester_kurzbz IN ( (SELECT studiensemester_kurzbz FROM public.tbl_studiensemester WHERE start >= now() - ORDER BY ende ASC LIMIT $plus) + ORDER BY ende ASC LIMIT $plus) UNION (SELECT studiensemester_kurzbz FROM public.tbl_studiensemester WHERE start <= now() ORDER BY start DESC LIMIT $minus) ) ORDER BY ende DESC"; - + if($this->db_query($qry)) { while($row = $this->db_fetch_object()) { $stsem_obj = new studiensemester(); - + $stsem_obj->studiensemester_kurzbz = $row->studiensemester_kurzbz; $stsem_obj->start = $row->start; $stsem_obj->ende = $row->ende; $stsem_obj->bezeichnung = $row->bezeichnung; $stsem_obj->studienjahr_kurzbz = $row->studienjahr_kurzbz; $stsem_obj->beschreibung = $row->beschreibung; - + $this->studiensemester[] = $stsem_obj; } return true; @@ -875,5 +878,55 @@ class studiensemester extends basis_db } } + /** + * Liefert das Studiensemester das am naehesten zu einem Datum in einem + * Studiensemester liegt + * + * @param $studiensemester_kurzbz + * @param $datum + * @return $studiensemester_kurzbz oder false wenn Fehler + */ + public function getNearestTo($studiensemester_kurzbz, $datum) + { + $qry = "SELECT * FROM + ( + SELECT tbl_studiensemester.studiensemester_kurzbz, + tbl_studiensemester.start, + tbl_studiensemester.ende, + tbl_studiensemester.ext_id, + @ (tbl_studiensemester.start - ".$this->db_add_param($datum)."::date) AS delta + FROM tbl_studiensemester + UNION + SELECT tbl_studiensemester.studiensemester_kurzbz, + tbl_studiensemester.start, + tbl_studiensemester.ende, + tbl_studiensemester.ext_id, + @ (".$this->db_add_param($datum)."::date - tbl_studiensemester.ende) AS delta + FROM tbl_studiensemester + ) a + WHERE a.studiensemester_kurzbz!=".$this->db_add_param($studiensemester_kurzbz)." + ORDER BY delta LIMIT 1"; + + if($this->db_query($qry)) + { + if($row = $this->db_fetch_object()) + { + $this->studiensemester_kurzbz = $row->studiensemester_kurzbz; + $this->start = $row->start; + $this->ende = $row->ende; + return $row->studiensemester_kurzbz; + } + else + { + $this->errormsg = 'Es wurde kein folgendes Studiensemester gefunden'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Ermitteln des folgenden Studiensemesters'; + return false; + } + } } ?> diff --git a/include/wochenplan.class.php b/include/wochenplan.class.php index bbd8ed592..f7b1dd8d8 100644 --- a/include/wochenplan.class.php +++ b/include/wochenplan.class.php @@ -638,7 +638,14 @@ class wochenplan extends basis_db // Formularbeginn wenn Lektor if ($raumres && $this->type=='ort') - echo '
'.$this->crlf; + { + $ort = new ort(); + $ort->load($this->ort_kurzbz); + if($ort->reservieren) + echo ''.$this->crlf; + else + $raumres=false; + } //Tabelle zeichnen echo ' '.$this->crlf;