mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-06 21:39:39 +00:00
299d5f528d
Wenn bei einer Stundenverschiebung eine der geblockten Stunden kollidiert wird nun keine Verschiebung durchgeführt. Bisher wurden die Stunden die zu keiner kollision führten dennoch durchgeführt. Die Kollidierende Stunde blieb am Ursprung.
731 lines
21 KiB
PHP
731 lines
21 KiB
PHP
<?php
|
|
/* Copyright (C) 2008 Technikum-Wien
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation; either version 2 of the
|
|
* License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
|
*
|
|
* Authors: Christian Paminger <christian.paminger@technikum-wien.at>,
|
|
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
|
|
* Rudolf Hangl <rudolf.hangl@technikum-wien.at>.
|
|
* Gerald Simane-Sequens <gerald.simane-sequens@technikum-wien.at>.
|
|
*/
|
|
header("Content-type: application/vnd.mozilla.xul+xml");
|
|
|
|
require_once('../../config/vilesci.config.inc.php');
|
|
require_once('../../include/globals.inc.php');
|
|
require_once('../../include/functions.inc.php');
|
|
require_once('../../include/benutzerberechtigung.class.php');
|
|
require_once('../../include/lehreinheit.class.php');
|
|
require_once('../../include/zeitwunsch.class.php');
|
|
require_once('../../include/wochenplan.class.php');
|
|
require_once('../../include/reservierung.class.php');
|
|
require_once('../../include/log.class.php');
|
|
|
|
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
|
|
echo '<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>';
|
|
$PHP_SELF = $_SERVER['PHP_SELF'];
|
|
// Startwerte setzen
|
|
$db_stpl_table=null;
|
|
$db = new basis_db();
|
|
|
|
echo '<?xml-stylesheet href="'.APP_ROOT.'skin/tempus.css" type="text/css"?>';
|
|
|
|
$uid = get_uid();
|
|
|
|
//Berechtigung pruefen
|
|
$rechte = new benutzerberechtigung();
|
|
$rechte->getBerechtigungen($uid);
|
|
|
|
if(!$rechte->isBerechtigt('lehre/lvplan'))
|
|
die('Sie haben keine Berechtigung fuer diese Seite');
|
|
|
|
$error_msg='';
|
|
$kollision_msg='';
|
|
|
|
// Benutzerdefinierte Variablen laden
|
|
loadVariables($uid);
|
|
|
|
if (!isset($ignore_kollision))
|
|
$ignore_kollision=(boolean)false;
|
|
elseif ($ignore_kollision=='false')
|
|
$ignore_kollision=(boolean)false;
|
|
else
|
|
$ignore_kollision=(boolean)true;
|
|
|
|
if (!isset($alle_unr_mitladen))
|
|
$alle_unr_mitladen=(boolean)false;
|
|
elseif ($alle_unr_mitladen=='false')
|
|
$alle_unr_mitladen=(boolean)false;
|
|
else
|
|
$alle_unr_mitladen=(boolean)true;
|
|
|
|
// Bezeichnungen fuer Tabellen und Views
|
|
$lva_stpl_view=VIEW_BEGIN.'lva_'.$db_stpl_table;
|
|
|
|
// Variablen uebernehmen
|
|
if (isset($_GET['aktion']))
|
|
$aktion=$_GET['aktion'];
|
|
else
|
|
$aktion=null;
|
|
|
|
if (isset($_GET['semesterplan']))
|
|
$semesterplan=$_GET['semesterplan'];
|
|
else
|
|
$semesterplan=false;
|
|
if (isset($_GET['new_stunde']))
|
|
$new_stunde=$_GET['new_stunde'];
|
|
if (isset($_GET['new_datum']))
|
|
$new_datum=$_GET['new_datum'];
|
|
if (isset($_GET['old_ort']))
|
|
$old_ort=$_GET['old_ort'];
|
|
if (isset($_GET['new_ort']))
|
|
$new_ort=$_GET['new_ort'];
|
|
if (isset($_GET['kollisionsanzahl']))
|
|
$kollisionsanzahl=$_GET['kollisionsanzahl'];
|
|
else
|
|
$kollisionsanzahl=0;
|
|
if (isset($_GET['ort']))
|
|
$ort=$_GET['ort'];
|
|
else
|
|
$ort=null;
|
|
if (isset($_GET['datum']))
|
|
$datum=$_GET['datum'];
|
|
if (isset($_GET['type']))
|
|
$type=$_GET['type'];
|
|
if (isset($_GET['stg_kz']))
|
|
$stg_kz=$_GET['stg_kz'];
|
|
else
|
|
$stg_kz=null;
|
|
if (isset($_GET['sem']))
|
|
$sem=$_GET['sem'];
|
|
else
|
|
$sem=null;
|
|
if (isset($_GET['ver']))
|
|
$ver=$_GET['ver'];
|
|
else
|
|
$ver=null;
|
|
if (isset($_GET['grp']))
|
|
$grp=$_GET['grp'];
|
|
else
|
|
$grp=null;
|
|
if (isset($_GET['pers_uid']))
|
|
$pers_uid=$_GET['pers_uid'];
|
|
if (isset($_GET['gruppe']))
|
|
$gruppe=$_GET['gruppe'];
|
|
else
|
|
$gruppe=null;
|
|
if (isset($_GET['semester_aktuell']))
|
|
$semester_aktuell=$_GET['semester_aktuell'];
|
|
|
|
if (!isset($semester_aktuell) && $semesterplan)
|
|
$error_msg.='Studien-Semester ist nicht gesetzt!';
|
|
|
|
if(isset($_GET['fachbereich_kurzbz']))
|
|
$fachbereich_kurzbz = $_GET['fachbereich_kurzbz'];
|
|
else
|
|
$fachbereich_kurzbz=null;
|
|
|
|
if (isset($_GET['new_unr']))
|
|
$new_unr=$_GET['new_unr'];
|
|
else
|
|
$new_unr=null;
|
|
|
|
if (isset($_GET['new_blockung']))
|
|
$new_blockung=$_GET['new_blockung'];
|
|
else
|
|
$new_blockung=null;
|
|
?>
|
|
|
|
<!DOCTYPE page SYSTEM "chrome://tempus/locale/de-AT/tempus.dtd">
|
|
<window id="windowTimeTableWeek"
|
|
xmlns:html="http://www.w3.org/1999/xhtml"
|
|
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
|
<?php echo ((isset($semesterplan) && $semesterplan)?'':'onload="setScrollpositionTimeTableWeek()"'); ?>
|
|
>
|
|
|
|
<script type="application/x-javascript" src="chrome://global/content/nsTransferable.js"/>
|
|
<script type="application/x-javascript" src="<?php echo APP_ROOT; ?>content/DragAndDrop.js"/>
|
|
<script type="application/x-javascript" src="<?php echo APP_ROOT; ?>content/dragboard.js.php"/>
|
|
<script type="application/x-javascript" src="<?php echo APP_ROOT; ?>content/functions.js.php"/>
|
|
<script type="application/x-javascript" src="<?php echo APP_ROOT; ?>content/phpRequest.js.php" />
|
|
<?php
|
|
if (isset($semesterplan) && $semesterplan)
|
|
echo '<script type="application/x-javascript" src="'.APP_ROOT.'content/lvplanung/stpl-semester-overlay.js.php"/>';
|
|
else
|
|
echo '<script type="application/x-javascript" src="'.APP_ROOT.'content/lvplanung/stpl-week-overlay.js.php"/>';
|
|
?>
|
|
<scrollbox id="timetable-week-scrollbox" flex="1" style="overflow:auto;" orient="vertical">
|
|
<vbox id="boxTimeTableWeek" flex="5">
|
|
<keyset>
|
|
<key id="timetable-week-key-delete" keycode="VK_DELETE" oncommand="TimetableDeleteEntries();"/>
|
|
</keyset>
|
|
|
|
<?php
|
|
$user=NULL;
|
|
|
|
// User bestimmen
|
|
if (!isset($type))
|
|
$type='lektor';
|
|
if (!isset($pers_uid))
|
|
$pers_uid=$uid;
|
|
|
|
// Datums Format
|
|
//if(!$db->db_query("SET datestyle TO ISO;"))
|
|
// $error_msg=$db->db_last_error();
|
|
|
|
// ****************************************************************************
|
|
// Variablen fuer Aktionen setzen
|
|
if ($aktion=='lva_single_search' || $aktion=='lva_single_set'
|
|
|| $aktion=='lva_multi_search' || $aktion=='lva_multi_set'
|
|
|| $aktion=='lva_stpl_del_multi' || $aktion=='lva_stpl_del_single')
|
|
{
|
|
$i=0;
|
|
$name_lva_id='lva_id'.$i;
|
|
while ($i<100 && isset($_GET[$name_lva_id]))
|
|
{
|
|
$lva_id[$i]=$_GET[$name_lva_id];
|
|
//$error_msg.=$lva_id[$i];
|
|
$name_lva_id='lva_id'.++$i;
|
|
}
|
|
$lva_id=array_unique($lva_id);
|
|
}
|
|
if ($aktion=='stpl_move' || $aktion=='stpl_single_search' || $aktion=='stpl_set' || $aktion=='stpl_delete_single')
|
|
{
|
|
$i=0;
|
|
$name_stpl_id='stundenplan_id'.$i;
|
|
while ($i<100 && isset($_GET[$name_stpl_id]))
|
|
{
|
|
$stpl_id[]=$_GET[$name_stpl_id];
|
|
//echo $stpl_id[$i];
|
|
$name_stpl_id='stundenplan_id'.++$i;
|
|
}
|
|
// Mehrfachauswahl uebernehmen
|
|
$j=0;
|
|
$name_stpl_idx='x'.$j.'stundenplan_id0';
|
|
while ($j<100 && isset($_GET[$name_stpl_idx]))
|
|
{
|
|
$i=0;
|
|
$name_stpl_id='x'.$j.'stundenplan_id'.$i;
|
|
while ($i<100 && isset($_GET[$name_stpl_id]))
|
|
{
|
|
$stpl_idx[]=$_GET[$name_stpl_id];
|
|
$name_stpl_id='x'.$j.'stundenplan_id'.++$i;
|
|
}
|
|
$name_stpl_idx='x'.++$j.'stundenplan_id0';
|
|
}
|
|
|
|
//ReservierungsIDs
|
|
$i=0;
|
|
$name_res_id='reservierung_id'.$i;
|
|
while ($i<100 && isset($_GET[$name_res_id]))
|
|
{
|
|
$res_id[]=$_GET[$name_res_id];
|
|
$name_res_id='reservierung_id'.++$i;
|
|
}
|
|
|
|
// Mehrfachauswahl uebernehmen
|
|
$j=0;
|
|
$name_res_idx='x'.$j.'reservierung_id0';
|
|
while ($j<100 && isset($_GET[$name_res_idx]))
|
|
{
|
|
$i=0;
|
|
$name_res_id='x'.$j.'reservierung_id'.$i;
|
|
while ($i<100 && isset($_GET[$name_res_id]))
|
|
{
|
|
$res_idx[]=$_GET[$name_res_id];
|
|
$name_res_id='x'.$j.'reservierung_id'.++$i;
|
|
}
|
|
$name_res_idx='x'.++$j.'reservierung_id0';
|
|
}
|
|
}
|
|
|
|
// ****************************************************************************
|
|
// Aktionen durchfuehren
|
|
$db->db_query('BEGIN;');
|
|
// *************** Stunden verschieben ****************************************
|
|
if ($aktion=='stpl_move' || $aktion=='stpl_set')
|
|
{
|
|
$undo='';
|
|
$sql='';
|
|
$moved=array();
|
|
|
|
foreach ($stpl_id as $stundenplan_id)
|
|
{
|
|
$moved[]=$stundenplan_id;
|
|
$lehrstunde=new lehrstunde();
|
|
$lehrstunde->load($stundenplan_id,$db_stpl_table);
|
|
if($rechte->isBerechtigt('lehre/lvplan',$lehrstunde->studiengang_kz,'ui'))
|
|
{
|
|
$undo.=$lehrstunde->getUndo($db_stpl_table);
|
|
$diffStunde=$new_stunde-$lehrstunde->stunde;
|
|
$lehrstunde->datum=$new_datum;
|
|
$lehrstunde->stunde=$new_stunde;
|
|
if ($ort!=$old_ort)
|
|
$lehrstunde->ort_kurzbz=$ort;
|
|
if ($aktion=='stpl_set')
|
|
$lehrstunde->ort_kurzbz=$new_ort;
|
|
|
|
if($new_unr!='')
|
|
$lehrstunde->unr = $new_unr;
|
|
|
|
$kollision=$lehrstunde->kollision($db_stpl_table);
|
|
if ($kollision && !$ignore_kollision)
|
|
$kollision_msg.=$lehrstunde->errormsg;
|
|
if (!$kollision || $ignore_kollision || $kollisionsanzahl>0)
|
|
{
|
|
if(!$lehrstunde->save($uid,$db_stpl_table))
|
|
$error_msg.=$lehrstunde->errormsg;
|
|
$sql.=$lehrstunde->lastqry;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$error_msg.="Sie haben keine Berechtigung zur Verschiebung von Stunden des Studienganges ".$lehrstunde->studiengang;
|
|
}
|
|
}
|
|
// Mehrfachauswahl
|
|
if (isset($stpl_idx))
|
|
{
|
|
foreach ($stpl_idx as $stundenplan_id)
|
|
{
|
|
if(!in_array($stundenplan_id, $moved))
|
|
{
|
|
$lehrstunde=new lehrstunde();
|
|
$lehrstunde->load($stundenplan_id,$db_stpl_table);
|
|
if($rechte->isBerechtigt('lehre/lvplan',$lehrstunde->studiengang_kz,'ui'))
|
|
{
|
|
$undo.=$lehrstunde->getUndo($db_stpl_table);
|
|
$lehrstunde->datum=$new_datum;
|
|
$lehrstunde->stunde+=$diffStunde;
|
|
if ($ort!=$old_ort)
|
|
$lehrstunde->ort_kurzbz=$ort;
|
|
if ($aktion=='stpl_set')
|
|
$lehrstunde->ort_kurzbz=$new_ort;
|
|
if($new_unr!='')
|
|
$lehrstunde->unr = $new_unr;
|
|
|
|
$kollision=$lehrstunde->kollision($db_stpl_table);
|
|
if ($kollision && !$ignore_kollision)
|
|
$kollision_msg.=$lehrstunde->errormsg;
|
|
if (!$kollision || $ignore_kollision || $kollisionsanzahl>0)
|
|
{
|
|
if(!$lehrstunde->save($uid,$db_stpl_table))
|
|
$error_msg.=$lehrstunde->errormsg;
|
|
$sql.=$lehrstunde->lastqry;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$error_msg.="Sie haben keine Berechtigung zur Verschiebung von Stunden des Studienganges ".$lehrstunde->studiengang;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//UNDO Befehl schreiben
|
|
if($undo!='' && $error_msg=='' && $sql!='' && $kollision_msg=='')
|
|
{
|
|
$log = new log();
|
|
$log->executetime = date('Y-m-d H:i:s');
|
|
$log->sqlundo = $undo;
|
|
$log->sql = $sql;
|
|
$log->beschreibung = 'Stundenverschiebung '.$new_datum.'('.$new_stunde.') '.$ort;
|
|
$log->mitarbeiter_uid = $uid;
|
|
if(!$log->save(true))
|
|
$error_msg.='Fehler: '.$log->errormsg;
|
|
|
|
}
|
|
}
|
|
// ****************** STPL Delete *******************************
|
|
elseif ($aktion=='stpl_delete_single' || $aktion=='stpl_delete_block')
|
|
{
|
|
$lehrstunde=new lehrstunde();
|
|
|
|
if($rechte->isBerechtigt('lehre/lvplan',null,'uid'))
|
|
{
|
|
//Einzelne Stunden entfernen
|
|
if(isset($stpl_id))
|
|
{
|
|
foreach ($stpl_id as $stundenplan_id)
|
|
{
|
|
$lehrstunde->delete($stundenplan_id,$db_stpl_table);
|
|
$error_msg.=$lehrstunde->errormsg;
|
|
}
|
|
}
|
|
|
|
//Loeschen von mehreren Stunden
|
|
if(isset($stpl_idx))
|
|
{
|
|
foreach ($stpl_idx as $stundenplan_id)
|
|
{
|
|
$lehrstunde->delete($stundenplan_id,$db_stpl_table);
|
|
$error_msg.=$lehrstunde->errormsg;
|
|
}
|
|
}
|
|
|
|
if(isset($res_id))
|
|
{
|
|
foreach ($res_id as $reservierung_id)
|
|
{
|
|
$reservierung = new reservierung();
|
|
$reservierung->load($reservierung_id);
|
|
$deletetext = ' AND datum='.$reservierung->datum.' AND stunde='.$reservierung->stunde.' AND titel='.$reservierung->titel.' AND beschreibung='.$reservierung->beschreibung.' AND uid='.$reservierung->uid.';';
|
|
$reservierung->delete($reservierung_id);
|
|
$error_msg.=$reservierung->errormsg;
|
|
//UNDO Befehl zum mitloggen von geloeschten Reservierungen
|
|
if($error_msg=='')
|
|
{
|
|
$log = new log();
|
|
$log->executetime = date('Y-m-d H:i:s');
|
|
$log->sqlundo = '';
|
|
$log->sql = 'DELETE FROM campus.tbl_reservierung WHERE reservierung_id='.$reservierung_id.$deletetext;
|
|
$log->beschreibung = 'Löschen der Reservierung '.$reservierung_id;
|
|
$log->mitarbeiter_uid = $uid;
|
|
if(!$log->save(true))
|
|
$error_msg.='Fehler: '.$log->errormsg;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Loeschen von mehreren Reservierungen
|
|
if(isset($res_idx))
|
|
{
|
|
foreach ($res_idx as $reservierung_id)
|
|
{
|
|
$reservierung = new reservierung();
|
|
$reservierung->load($reservierung_id);
|
|
$deletetext = ' AND datum='.$reservierung->datum.' AND stunde='.$reservierung->stunde.' AND titel='.$reservierung->titel.' AND beschreibung='.$reservierung->beschreibung.' AND uid='.$reservierung->uid.';';
|
|
$reservierung->delete($reservierung_id);
|
|
$error_msg.=$reservierung->errormsg;
|
|
//UNDO Befehl zum mitloggen von geloeschten Reservierungen
|
|
if($error_msg=='')
|
|
{
|
|
$log = new log();
|
|
$log->executetime = date('Y-m-d H:i:s');
|
|
$log->sqlundo = '';
|
|
$log->sql = 'DELETE FROM campus.tbl_reservierung WHERE reservierung_id='.$reservierung_id.$deletetext;
|
|
$log->beschreibung = 'Löschen der Reservierung '.$reservierung_id;
|
|
$log->mitarbeiter_uid = $uid;
|
|
if(!$log->save(true))
|
|
$error_msg.='Fehler: '.$log->errormsg;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$error_msg.="Sie haben keine Berechtigung fuer diese Aktion";
|
|
}
|
|
}
|
|
// ******************** Lehrveranstaltung setzen ******************************
|
|
elseif ($aktion=='lva_single_set')
|
|
{
|
|
if($rechte->isBerechtigt('lehre/lvplan',null,'ui'))
|
|
{
|
|
$z=0;
|
|
foreach ($lva_id AS $le_id)
|
|
{
|
|
$lva[$z]=new lehreinheit();
|
|
$lva[$z]->loadLE($le_id);
|
|
|
|
if($new_unr!='')
|
|
$lva[$z]->unr=$new_unr;
|
|
if($new_blockung!='')
|
|
$lva[$z]->stundenblockung=$new_blockung;
|
|
|
|
//$error_msg.='test'.$le_id.($lva[$i]->errormsg).($lva[$i]->stundenblockung);
|
|
for ($j=0;$j<$lva[$z]->stundenblockung && $error_msg=='';$j++)
|
|
if (!$lva[$z]->check_lva($new_datum,$new_stunde+$j,$new_ort,$db_stpl_table) && !$ignore_kollision)
|
|
$kollision_msg.=$lva[$z]->errormsg."\n";
|
|
$z++;
|
|
}
|
|
for ($i=0;$i<$z && $error_msg=='';$i++)
|
|
{
|
|
if($new_unr!='')
|
|
$lva[$i]->unr=$new_unr;
|
|
if($new_blockung!='')
|
|
$lva[$i]->stundenblockung=$new_blockung;
|
|
|
|
for ($j=0;$j<$lva[$i]->stundenblockung;$j++)
|
|
{
|
|
|
|
if (!$lva[$i]->save_stpl($new_datum,$new_stunde+$j,$new_ort,$db_stpl_table,$uid))
|
|
$error_msg.='Error: '.$lva[$i]->errormsg;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$error_msg.="Sie haben keine Berechtigung fuer diese Aktion";
|
|
}
|
|
}
|
|
//******************* Multi Verplanung ***************
|
|
elseif ($aktion=='lva_multi_set')
|
|
{
|
|
if($rechte->isBerechtigt('lehre/lvplan',null,'ui'))
|
|
{
|
|
// Ferien holen
|
|
$ferien=new ferien();
|
|
if ($type=='verband')
|
|
$ferien->getAll($stg_kz);
|
|
else
|
|
$ferien->getAll(0);
|
|
|
|
// Ende holen
|
|
if (!$result_semester=$db->db_query("SELECT * FROM public.tbl_studiensemester WHERE studiensemester_kurzbz=".$db->db_add_param($semester_aktuell).";"))
|
|
die ($db->db_last_error());
|
|
if ($db->db_num_rows()>0)
|
|
{
|
|
$row = $db->db_fetch_object();
|
|
$ende = $row->ende;
|
|
}
|
|
else
|
|
$error_msg.="Fatal Error: Ende Datum ist nicht gesetzt ($semester_aktuell)!";
|
|
|
|
$ende=mktime(0,0,1,substr($ende,5,2),substr($ende,8,2),substr($ende,0,4));
|
|
$anz_lvas=count($lva_id);
|
|
// Arrays intitialisieren
|
|
$wochenrythmus=array();
|
|
$verplant=array();
|
|
$block=array();
|
|
$wochenrythmus=array();
|
|
$semesterstunden=array();
|
|
$planstunden=array();
|
|
$offenestunden=array();
|
|
// LVAs holen
|
|
$sql_query='SELECT * FROM lehre.'.$lva_stpl_view.' WHERE';
|
|
$lvas='';
|
|
foreach ($lva_id as $id)
|
|
$lvas.=' OR lehreinheit_id='.$id;
|
|
$lvas=substr($lvas,3);
|
|
$sql_query.=$lvas;
|
|
|
|
if(!$result_lva = $db->db_query($sql_query))
|
|
$error_msg.=$db->db_last_error();
|
|
$num_rows_lva=$db->db_num_rows($result_lva);
|
|
// Daten aufbereiten
|
|
for ($i=0;$i<$num_rows_lva;$i++)
|
|
{
|
|
$row=$db->db_fetch_object($result_lva,$i);
|
|
$verplant[]=$row->verplant;
|
|
$block[]=$row->stundenblockung;
|
|
$wochenrythmus[]=$row->wochenrythmus;
|
|
$semesterstunden[]=$row->semesterstunden;
|
|
$planstunden[]=$row->planstunden;
|
|
$offenestunden[]=$row->planstunden-$row->verplant;
|
|
}
|
|
// Variablen eindeutig?
|
|
// Offene Stunden
|
|
$os=$offenestunden[0];
|
|
$offenestunden=array_unique($offenestunden);
|
|
if (count($offenestunden)==1)
|
|
$offenestunden=$os;
|
|
else
|
|
$error_msg.='Offene Stunden sind nicht eindeutig!';
|
|
|
|
//Blockung
|
|
$blk=$block[0];
|
|
$block=array_unique($block);
|
|
if (count($block)==1)
|
|
$block=$blk;
|
|
else
|
|
$error_msg.='Blockung ist nicht eindeutig!';
|
|
//Wochenrythmus
|
|
$wr=$wochenrythmus[0];
|
|
$wochenrythmus=array_unique($wochenrythmus);
|
|
if (count($wochenrythmus)==1)
|
|
$wochenrythmus=$wr;
|
|
else
|
|
$error_msg.='Wochenrythmus ist nicht eindeutig!';
|
|
$count=0;
|
|
$rest=$offenestunden;
|
|
if ($rest<=0)
|
|
$error_msg.='Es sind bereits alle Stunden verplant!'.$rest;
|
|
if ($error_msg=='')
|
|
{
|
|
$d=mktime(0,0,1,substr($new_datum,5,2),substr($new_datum,8),substr($new_datum,0,4));
|
|
while ($rest>0 && $d<$ende)
|
|
{
|
|
if ($rest<$block && $rest>0)
|
|
$block=$rest;
|
|
//LVAs holen und pruefen ob moeglich
|
|
for ($i=0;$i<$anz_lvas;$i++)
|
|
{
|
|
$lva[$i]=new lehreinheit();
|
|
$lva[$i]->loadLE($lva_id[$i]);
|
|
for ($j=0;$j<$block;$j++)
|
|
if (!$lva[$i]->check_lva($new_datum,$new_stunde+$j,$new_ort,$db_stpl_table) && !$ignore_kollision)
|
|
$kollision_msg.=$lva[$i]->errormsg;
|
|
}
|
|
// LVAs setzen
|
|
for ($i=0;$i<$anz_lvas && $error_msg=='';$i++)
|
|
for ($j=0;$j<$block;$j++)
|
|
if (!$lva[$i]->save_stpl($new_datum,$new_stunde+$j,$new_ort,$db_stpl_table,$uid))
|
|
$error_msg.=$lva[$i]->errormsg;
|
|
$d=jump_week($d,$wochenrythmus);
|
|
while ($ferien->isferien($d))
|
|
$d=jump_week($d,$wochenrythmus);
|
|
// Es kann sein, dass die Zeitumstellung (1 Stunde) Probleme macht
|
|
// Falls 23 Uhr eine Stunde nach vor
|
|
$new_datum=date('Y-m-d',$d);
|
|
$rest-=$block;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$error_msg.="Sie haben keine Berechtigung fuer diese Aktion";
|
|
}
|
|
}
|
|
// Lehrveranstaltungen aus dem Stundenplan loeschen
|
|
elseif ($aktion=='lva_stpl_del_multi' || $aktion=='lva_stpl_del_single')
|
|
{
|
|
if($rechte->isBerechtigt('lehre/lvplan',null,'uid'))
|
|
{
|
|
$result_semester = $db->db_query("SELECT start,ende FROM public.tbl_studiensemester WHERE studiensemester_kurzbz='".addslashes($semester_aktuell)."';");
|
|
if ($db->db_num_rows()>0)
|
|
{
|
|
$start=date('Y-m-d',$datum);
|
|
if ($aktion=='lva_stpl_del_multi')
|
|
{
|
|
$row = $db->db_fetch_object($result_semester);
|
|
$ende = $row->ende;
|
|
}
|
|
else
|
|
$ende=date('Y-m-d',jump_week($datum,1));
|
|
$anz_lvas=count($lva_id);
|
|
$sql_query_lvaid='';
|
|
$sql_query='DELETE FROM lehre.'.TABLE_BEGIN.$db_stpl_table.' WHERE (';
|
|
for ($i=0;$i<$anz_lvas;$i++)
|
|
$sql_query_lvaid.=' OR lehreinheit_id='.$lva_id[$i];
|
|
$sql_query_lvaid=substr($sql_query_lvaid,3);
|
|
$sql_query.=$sql_query_lvaid;
|
|
$sql_query.=") AND datum>='$start' AND datum<'$ende'";
|
|
if(!$result_lva_del=$db->db_query($sql_query))
|
|
$error_msg.=$db->db_last_error();
|
|
}
|
|
else
|
|
$error_msg.='Studiensemester '.$semester_aktuell.' konnte nicht gefunden werden!';
|
|
}
|
|
else
|
|
$error_msg.="Sie haben keine Berechtigung fuer diese Aktion";
|
|
}
|
|
|
|
if ($error_msg=='' && ($kollision_msg=='' || $kollisionsanzahl>0))
|
|
{
|
|
$db->db_query('COMMIT;');
|
|
if($kollisionsanzahl>0)
|
|
$error_msg.="\nStunden wurden verplant\n";
|
|
}
|
|
else
|
|
$db->db_query('ROLLBACK;');
|
|
|
|
$error_msg.=$kollision_msg;
|
|
|
|
// Stundenplan erstellen
|
|
$stdplan=new wochenplan($type);
|
|
if (!isset($datum))
|
|
$datum=time();
|
|
if (!isset($semesterplan) || !$semesterplan)
|
|
$begin=$ende=$datum;
|
|
else
|
|
{
|
|
$db->db_query("SELECT start,ende FROM public.tbl_studiensemester WHERE studiensemester_kurzbz='".addslashes($semester_aktuell)."';");
|
|
if ($db->db_num_rows()>0)
|
|
{
|
|
$row = $db->db_fetch_object();
|
|
$begin=strtotime($row->start);
|
|
$ende=strtotime($row->ende);
|
|
}
|
|
else
|
|
$error_msg.='Studiensemester '.$semester_aktuell.' konnte nicht gefunden werden!';
|
|
}
|
|
|
|
// Benutzergruppe
|
|
$stdplan->user=$user;
|
|
// aktueller Benutzer
|
|
$stdplan->user_uid=$uid;
|
|
|
|
// Zusaetzliche Daten laden
|
|
if (! $stdplan->load_data($type,$pers_uid,$ort,$stg_kz,$sem,$ver,$grp,$gruppe,$fachbereich_kurzbz) && $error_msg!='')
|
|
$error_msg.=$stdplan->errormsg;
|
|
|
|
// Stundenplan einer Woche laden
|
|
//if (! $stdplan->load_week($datum,$db_stpl_table))
|
|
// $error_msg.=$stdplan->errormsg;
|
|
while ($begin<=$ende)
|
|
{
|
|
$stdplan->init_stdplan();
|
|
$datum=$begin;
|
|
$begin=strtotime("+1 week",$begin);
|
|
|
|
// Zeitwuensche laden falls benoetigt
|
|
$zeitwunsch=null;
|
|
if ($type=='lektor' || $aktion=='lva_single_search' || $aktion=='lva_multi_search')
|
|
{
|
|
$wunsch=new zeitwunsch();
|
|
if ($type=='lektor')
|
|
if ($wunsch->loadPerson($pers_uid,$datum))
|
|
$zeitwunsch=$wunsch->zeitwunsch;
|
|
else
|
|
$error_msg.=$wunsch->errormsg;
|
|
if ($aktion=='lva_single_search' || $aktion=='lva_multi_search')
|
|
if ($wunsch->loadZwLE($lva_id,$datum))
|
|
$zeitwunsch=$wunsch->zeitwunsch;
|
|
else
|
|
$error_msg.=$wunsch->errormsg;
|
|
}
|
|
|
|
// Stundenplan einer Woche laden
|
|
if (! $stdplan->load_week($datum,$db_stpl_table, $alle_unr_mitladen))
|
|
$error_msg.=$stdplan->errormsg;
|
|
|
|
//Raumvorschlag setzen
|
|
|
|
if ($aktion=='lva_single_search' || $aktion=='lva_multi_search')
|
|
if (! $stdplan->load_lva_search($datum,$lva_id,$db_stpl_table, $aktion))
|
|
$error_msg.=$stdplan->errormsg;
|
|
|
|
if ($aktion=='stpl_single_search')
|
|
{
|
|
if(isset($stpl_id))
|
|
{
|
|
if (! $stdplan->load_stpl_search($datum,$stpl_id,$db_stpl_table))
|
|
$error_msg.=$stdplan->errormsg;
|
|
}
|
|
else
|
|
$error_msg.='Derzeit gibt es keinen Raumvorschlag fuer Reservierungen';
|
|
}
|
|
|
|
// Stundenplan der Woche drucken
|
|
$stdplan->draw_week_xul($semesterplan,$uid,$zeitwunsch, $ignore_kollision, $kollision_student, $max_kollision);
|
|
|
|
}
|
|
|
|
?>
|
|
|
|
</vbox>
|
|
</scrollbox>
|
|
<label id="TimeTableWeekErrors"><?php echo htmlspecialchars($error_msg); ?></label>
|
|
|
|
<script type="application/x-javascript">
|
|
<?php
|
|
if ($error_msg!='')
|
|
echo "alert('".str_replace("'",'"',str_replace(chr(10),'\n',htmlspecialchars($error_msg)))."');";
|
|
?>
|
|
|
|
top.document.getElementById("statusbarpanel-text").setAttribute("label","<?php echo str_replace(chr(10),' ',htmlspecialchars($PHP_SELF.$error_msg)); ?>");
|
|
</script>
|
|
</window>
|