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();
-?>
-
+?>
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 '