- Scrollposition im Tempus bleibt erhalten

- Raumvorschlag zeigt nun auch Räume mit Kollisionen an (steuerbar über max_kollision)
- Semesterplan zeigt nun auch die Zeitsperren der Lektoren an
- Markieren von mehreren Stunden im Tempus unterstützt jetzt STRG und SHIFT
- Löschen von mehreren (markierten) Lehreinheiten möglich
- CSV Export für Uniflow Drucksystem
- SQL Injection Fixes
This commit is contained in:
Andreas Österreicher
2010-06-09 09:21:14 +00:00
parent 5a2b0f8b2f
commit 67af91fc52
17 changed files with 631 additions and 268 deletions
Binary file not shown.
+65 -103
View File
@@ -403,35 +403,28 @@ var listObserver=
{
onDragStart: function (evt,transferData,action)
{
var type=evt.target.getAttribute("stpltype");
var dragdatum=evt.target.getAttribute("datum");
var pers_uid=evt.target.getAttribute("pers_uid");
var idList=evt.target.getAttribute("idList");
var stg_kz=evt.target.getAttribute("stg_kz");
var sem=evt.target.getAttribute("sem");
var ver=evt.target.getAttribute("ver");
var grp=evt.target.getAttribute("grp");
var einheit=evt.target.getAttribute("einheit");
var old_ort=evt.target.getAttribute("ort");
var aktion=evt.target.getAttribute("aktion");
aktion+="_set";
var paramList="?dragtype="+type+"&dragdatum="+dragdatum+"&pers_uid="+pers_uid+"&stg_kz="+stg_kz+"&sem="+sem+"&ver="+ver+"&grp="+grp+"&einheit="+einheit+"&old_ort="+old_ort+idList+"&aktion="+aktion;
//var transferObjekt=new lehrstunde(type,dragdatum,pers_uid,stg_kz,sem,ver,grp,einheit,old_ort,idList);
transferData.data=new TransferData();
transferData.data.addDataForFlavour("application/tempus-lehrstunde",paramList);
var type=evt.target.getAttribute("stpltype");
var dragdatum=evt.target.getAttribute("datum");
var pers_uid=evt.target.getAttribute("pers_uid");
var idList=evt.target.getAttribute("idList");
var stg_kz=evt.target.getAttribute("stg_kz");
var sem=evt.target.getAttribute("sem");
var ver=evt.target.getAttribute("ver");
var grp=evt.target.getAttribute("grp");
var einheit=evt.target.getAttribute("einheit");
var old_ort=evt.target.getAttribute("ort");
var aktion=evt.target.getAttribute("aktion");
aktion+="_set";
var paramList="?dragtype="+type+"&dragdatum="+dragdatum+"&pers_uid="+pers_uid+"&stg_kz="+stg_kz+"&sem="+sem+"&ver="+ver+"&grp="+grp+"&einheit="+einheit+"&old_ort="+old_ort+idList+"&aktion="+aktion;
var styleOrig=evt.target.getAttribute("styleOrig");
evt.target.setAttribute("style",styleOrig+"color:red;font-style:italic;");
transferData.data=new TransferData();
transferData.data.addDataForFlavour("application/tempus-lehrstunde",paramList);
}
};
/***** Board Observer fuer STPL- und LVA-Verschiebung *****/
var boardObserver=
{
/*canHandleMultipleItems : function()
{
var canHandleMultipleItems=false;
},*/
getSupportedFlavours : function ()
{
var flavours = new FlavourSet();
@@ -446,7 +439,6 @@ var boardObserver=
evt.target.setAttribute("style","background-color:#AAFFAA;");
else
evt.target.setAttribute("style",styleNow+"border:1px dashed black;");
},
onDragExit: function (evt,flavour,session)
{
@@ -458,93 +450,63 @@ var boardObserver=
},
onDragOver: function(evt,flavour,session)
{
// Mehrfachauswahl von Lehrstunden mit CTRL bzw. ALT-Taste
if ((evt.ctrlKey || evt.altKey) && flavour.contentType=="application/tempus-lehrstunde" && evt.target.tagName=="button")
{
var idList=evt.target.getAttribute("idList");
var id=evt.target.getAttribute("id");
var styleOrig=evt.target.getAttribute("styleOrig");
// Ist Element schon vorhanden und an welcher stelle im Array?
var gesetzt=null;
for (var i=0;i<lehrstunden.length;i++)
if (lehrstunden[i].id==id)
gesetzt=i;
// User will Element anhaengen?
if (gesetzt==null && evt.ctrlKey)
{
var ls=new lehrstunde(id,idList);
lehrstunden.push(ls);
evt.target.setAttribute("style",styleOrig+"color:red;font-style:italic;");
}
else
// User will Element entfernen?
if (gesetzt!=null && evt.altKey)
{
// Element aus Array loeschen
if (gesetzt==0)
lehrstunden.shift();
else
if (gesetzt==lehrstunden.length)
lehrstunden.pop();
else
{
var tmpArray=new array();
tmpArray.concat(lehrstunden.slice(0,gesetzt-1));
tmpArray.concat(lehrstunden.slice(gesetzt+1,lehrstunden.length));
lehrstunden=tmpArray;
}
evt.target.setAttribute("style",styleOrig+"color:black;font-style:normal;");
}
}
},
onDrop: function (evt,dropdata,session)
{
if (dropdata.data!="")
{
saveScrollPositionTimeTableWeek();
var stplData=document.getElementById('TimeTableWeekData');
var datum=stplData.getAttribute("datum");
var type=stplData.getAttribute("stpl_type");
var stg_kz=stplData.getAttribute("stg_kz");
var sem=stplData.getAttribute("sem");
var ver=stplData.getAttribute("ver");
var grp=stplData.getAttribute("grp");
var pers_uid=stplData.getAttribute("pers_uid");
var ort=stplData.getAttribute("ort");
var einheit=stplData.getAttribute("gruppe");
var stunde=evt.target.getAttribute("stunde");
var new_datum=evt.target.getAttribute("datum");
if (evt.target.tagName=="label")
var new_ort=evt.target.getAttribute("value");
else
if (dropdata.flavour.contentType=="application/tempus-lehrveranstaltung")
var new_ort=ort;
if (dropdata.data!="")
{
saveScrollPositionTimeTableWeek();
var stplData=document.getElementById('TimeTableWeekData');
var datum=stplData.getAttribute("datum");
var type=stplData.getAttribute("stpl_type");
var stg_kz=stplData.getAttribute("stg_kz");
var sem=stplData.getAttribute("sem");
var ver=stplData.getAttribute("ver");
var grp=stplData.getAttribute("grp");
var pers_uid=stplData.getAttribute("pers_uid");
var ort=stplData.getAttribute("ort");
var einheit=stplData.getAttribute("gruppe");
var url="<?php echo APP_ROOT; ?>content/lvplanung/timetable-week.xul.php";
url+=dropdata.data+"&new_stunde="+stunde+"&new_datum="+new_datum;
url+="&type="+type+"&datum="+datum+"&ort="+ort+"&pers_uid="+pers_uid;
url+="&stg_kz="+stg_kz+"&sem="+sem+"&ver="+ver+"&grp="+grp+"&gruppe="+einheit;
if (evt.target.tagName=="label" || dropdata.flavour.contentType=="application/tempus-lehrveranstaltung")
url+="&new_ort="+new_ort;
else
url+="&aktion=stpl_move";
url+="&mime="+dropdata.flavour.contentType;
var stunde=evt.target.getAttribute("stunde");
var new_datum=evt.target.getAttribute("datum");
if (evt.target.tagName=="label")
{
var new_ort=evt.target.getAttribute("ort_kurzbz");
var kollisionsanzahl=evt.target.getAttribute("kollision");
}
else
{
if (dropdata.flavour.contentType=="application/tempus-lehrveranstaltung")
{
var new_ort=ort;
var kollisionsanzahl=0;
}
}
// Mehrfachauswahl anhaengen
for (var i=0;i<lehrstunden.length;i++)
url+=lehrstunden[i].idList.replace(/&/g,"&x"+i);
//alert(url);
//var BoxTimeTableWeek=document.getElementById('boxTimeTableWeek');
//var ScrollX=BoxTimeTableWeek.contentWindow.scrollX;
//var ScrollY=BoxTimeTableWeek.contentWindow.scrollY;
//alert('X:'+ScrollX+' Y:'+ScrollY);
//alert(url);
var url="<?php echo APP_ROOT; ?>content/lvplanung/timetable-week.xul.php";
url+=dropdata.data+"&new_stunde="+stunde+"&new_datum="+new_datum;
url+="&type="+type+"&datum="+datum+"&ort="+ort+"&pers_uid="+pers_uid;
url+="&stg_kz="+stg_kz+"&sem="+sem+"&ver="+ver+"&grp="+grp+"&gruppe="+einheit;
if (evt.target.tagName=="label" || dropdata.flavour.contentType=="application/tempus-lehrveranstaltung")
url+="&new_ort="+new_ort+"&kollisionsanzahl="+kollisionsanzahl;
else
url+="&aktion=stpl_move";
url+="&mime="+dropdata.flavour.contentType;
//IDs der Stunden die verschoben werden dazuhaengen
idList = TimeTableWeekGetMarkedIdList();
url+=idList;
if(new_ort=='' && ort=='')
{
alert('Es muss ein Ort gewaehlt werden');
}
else
{
location.href=url;
//BoxTimeTableWeek=document.getElementById('boxTimeTableWeek');
//BoxTimeTableWeek.scrollTo(ScrollX,ScrollY);
}
}
}
}
};
+187 -27
View File
@@ -22,7 +22,8 @@
*/
require_once('../../config/vilesci.config.inc.php');
?>
// Stunde die zuletzt markiert wurde
var TimeTableWeekLastMarkedItem='';
// LVA-Panel aktualisieren
function onLVARefresh()
@@ -168,6 +169,7 @@ function onJumpDateRel(evt)
function onLVAdoStpl(evt)
{
saveScrollPositionTimeTableWeek();
var contentFrame=document.getElementById('iframeTimeTableWeek');
var daten=window.TimeTableWeek.document.getElementById('TimeTableWeekData');
var datum=parseInt(daten.getAttribute("datum"));
@@ -239,33 +241,149 @@ function StplSearchRoom(target)
location.href=url;
}
function onStplDelete(aktion)
// ****
// * Markiert einen LV-Plan Eintrag
// * item ... Element das markiert werden soll
// * Wenn kein Item uebergeben wird, dann werden alle markierungen geloescht
// ****
function TimeTableWeekMarkiere(item)
{
saveScrollPositionTimeTableWeek();
var contentFrame=document.getElementById('iframeTimeTableWeek');
var daten=document.getElementById('TimeTableWeekData');
var datum=parseInt(daten.getAttribute("datum"));
var type=daten.getAttribute("stpl_type");
var stg_kz=daten.getAttribute("stg_kz");
var sem=daten.getAttribute("sem");
var ver=daten.getAttribute("ver");
var grp=daten.getAttribute("grp");
var gruppe=daten.getAttribute("gruppe");
var ort=daten.getAttribute("ort");
var pers_uid=daten.getAttribute("pers_uid");
var idList=document.popupNode.getAttribute("idList");
var doIt=true;
doIt=confirm('Es werden die gewaehlten Eintraege aus dem Stundenplan geloescht!\nSind Sie sicher?')
var attributes="\n?type="+type+"&datum="+datum+"&ort="+encodeURIComponent(ort)+"&pers_uid="+pers_uid+"\n&stg_kz="+stg_kz+"&sem="+sem+"&ver="+ver+"&grp="+grp+"\n&gruppe="+gruppe;
attributes+=idList+"&aktion="+aktion;
var url = "<?php echo APP_ROOT; ?>content/lvplanung/timetable-week.xul.php";
url+=attributes;
//alert(url);
if (url && doIt)
location.href=url;
if(!item)
{
items = document.getElementsByTagName('button');
for each(var button in items)
{
if(button.id && button.id.startsWith('buttonSTPL'))
{
button.setAttribute('marked','false');
button.style.color='black';
//button.style.fontStyle='normal';
//button.style.fontWeight='normal';
button.style.border = "1px solid transparent";
button.style.MozBorderTopColors='transparent';
button.style.MozBorderLeftColors='transparent';
button.style.MozBorderBottomColors='transparent';
button.style.MozBorderRightColors='transparent';
}
}
TimeTableWeekLastMarkedItem='';
}
else
{
item.setAttribute('marked','true');
item.style.color='darkred';
//item.style.fontStyle='italic';
//item.style.fontWeight='bold';
item.style.border = "1px solid darkred";
item.style.MozBorderTopColors='darkred';
item.style.MozBorderLeftColors='darkred';
item.style.MozBorderBottomColors='darkred';
item.style.MozBorderRightColors='darkred';
TimeTableWeekLastMarkedItem=item;
}
}
// ****
// * Liefert die IdList der Markierten Stunden
// ****
function TimeTableWeekGetMarkedIdList()
{
var items = document.getElementsByTagName('button');
var myidlist = '';
var i=0;
for each(var button in items)
{
if(button.id && button.id.startsWith('buttonSTPL'))
{
marked = button.getAttribute('marked');
if(marked=='true')
{
myidlist = myidlist+button.getAttribute('idList').replace(/&/g,"&x"+i);
i++;
}
}
}
return myidlist;
}
// ****
// * Klick auf eine Stunde im LV-Plan
// ****
function TimeTableWeekClick(event)
{
if(event.ctrlKey)
{
//Wenn mit Strg auf die Stunde geklickt wird, dann wird diese Stunde zur Markierung hinzugefuegt
TimeTableWeekMarkiere(event.target);
}
else if(event.shiftKey)
{
//Wenn mit Shift auf eine Stunde geklickt wird, dann werden alle Stunden markiert,
//die zwischen der zuletzt markierten und dieser Stunde liegen
start = parseInt(TimeTableWeekLastMarkedItem.id.substring('buttonSTPL'.length));
ende = parseInt(event.target.id.substring('buttonSTPL'.length));
if(start>ende)
{
hlp = ende;
ende = start;
start = hlp;
}
for(var i=start;i<=ende;i++)
{
item = document.getElementById('buttonSTPL'+i);
TimeTableWeekMarkiere(item);
}
}
else
{
//alle markierungen entfernen
TimeTableWeekMarkiere();
//aktuellen Eintrag markieren
TimeTableWeekMarkiere(event.target);
//Details anzeigen
onStplDetail(event);
}
}
// ****
// * Doppelklick auf eine Stunde im LV-Plan
// * Markiert alle Stunden mit der selben UNR an diesem Tag
// ****
function TimeTableWeekDblClick(event)
{
var items = document.getElementsByTagName('button');
var unr = event.target.getAttribute('unr');
var wochentag = event.target.getAttribute('wochentag');
for each(var button in items)
{
if(button.id && button.id.startsWith('buttonSTPL'))
{
buttonunr=button.getAttribute('unr');
buttonwochentag=button.getAttribute('wochentag');
if(buttonunr==unr && buttonwochentag==wochentag)
{
TimeTableWeekMarkiere(button);
}
}
}
}
// ****
// * Laedt die Details zu einer Stunde
// ****
function onStplDetail(event)
{
var idList=event.target.getAttribute("idList");
@@ -435,14 +553,18 @@ function STPLDetailDelete()
// ****
function saveScrollPositionTimeTableWeek()
{
var sbox = document.getElementById('timetable-week-scrollbox');
if(window.TimeTableWeek)
var sbox = window.TimeTableWeek.document.getElementById('timetable-week-scrollbox');
else
var sbox = document.getElementById('timetable-week-scrollbox');
if(sbox)
{
var xpcomInterface = sbox.boxObject.QueryInterface(Components.interfaces.nsIScrollBoxObject);
var x={};
var y={};
xpcomInterface.getPosition(x, y);
TimeTableWeekPositionX=x.value;
TimeTableWeekPositionY=y.value;
window.parent.TimeTableWeekPositionX=x.value;
window.parent.TimeTableWeekPositionY=y.value;
}
@@ -460,3 +582,41 @@ function setScrollpositionTimeTableWeek()
xpcomInterface.scrollTo(window.parent.TimeTableWeekPositionX, window.parent.TimeTableWeekPositionY);
}
}
// ****
// * Loescht alle markierten Stunden
// ****
function TimetableDeleteEntries()
{
saveScrollPositionTimeTableWeek();
var contentFrame=document.getElementById('iframeTimeTableWeek');
if(window.TimeTableWeek)
var daten=window.TimeTableWeek.document.getElementById('TimeTableWeekData');
else
var daten=document.getElementById('TimeTableWeekData');
var datum=parseInt(daten.getAttribute("datum"));
var type=daten.getAttribute("stpl_type");
var stg_kz=daten.getAttribute("stg_kz");
var sem=daten.getAttribute("sem");
var ver=daten.getAttribute("ver");
var grp=daten.getAttribute("grp");
var gruppe=daten.getAttribute("gruppe");
var ort=daten.getAttribute("ort");
var pers_uid=daten.getAttribute("pers_uid");
var doIt=true;
var aktion='stpl_delete_single';
doIt=confirm('Es werden die gewaehlten Eintraege aus dem Stundenplan geloescht!\nSind Sie sicher?')
var attributes="\n?type="+type+"&datum="+datum+"&ort="+encodeURIComponent(ort)+"&pers_uid="+pers_uid+"\n&stg_kz="+stg_kz+"&sem="+sem+"&ver="+ver+"&grp="+grp+"\n&gruppe="+gruppe;
attributes+="&aktion="+aktion;
var url = "<?php echo APP_ROOT; ?>content/lvplanung/timetable-week.xul.php";
url+=attributes;
//IDs der Stunden dazuhaengen
idList = TimeTableWeekGetMarkedIdList();
url+=idList
if (url && doIt)
location.href=url;
}
+1 -1
View File
@@ -38,7 +38,6 @@ echo '<?xul-overlay href="'.APP_ROOT.'content/lvplanung/stpl-details-overlay.xul
<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/lvplanung/stpl-week-overlay.js.php"/>
<hbox id="hboxTimeTableWeek">
<vbox id="vboxTimeTableWeek" flex="30">
<toolbox>
@@ -86,6 +85,7 @@ echo '<?xul-overlay href="'.APP_ROOT.'content/lvplanung/stpl-details-overlay.xul
/>
</toolbar>
</toolbox>
<iframe id="iframeTimeTableWeek" name="TimeTableWeek" flex="5"
src="<?php echo APP_ROOT; ?>content/lvplanung/timetable-week.xul.php" />
<splitter collapse="after" persist="state">
+53 -27
View File
@@ -51,6 +51,7 @@ if(!$rechte->isBerechtigt('lehre/lvplan'))
die('Sie haben keine Berechtigung fuer diese Seite');
$error_msg='';
$kollision_msg='';
// Benutzerdefinierte Variablen laden
loadVariables($uid);
@@ -83,6 +84,10 @@ 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
@@ -140,6 +145,10 @@ else
?>
<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;
@@ -229,8 +238,8 @@ if ($aktion=='stpl_move' || $aktion=='stpl_set')
$lehrstunde->ort_kurzbz=$new_ort;
$kollision=$lehrstunde->kollision($db_stpl_table);
if ($kollision && !$ignore_kollision)
$error_msg.=$lehrstunde->errormsg;
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;
@@ -255,8 +264,8 @@ if ($aktion=='stpl_move' || $aktion=='stpl_set')
$lehrstunde->ort_kurzbz=$new_ort;
$kollision=$lehrstunde->kollision($db_stpl_table);
if ($kollision && !$ignore_kollision)
$error_msg.=$lehrstunde->errormsg;
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;
@@ -267,7 +276,7 @@ if ($aktion=='stpl_move' || $aktion=='stpl_set')
}
//UNDO Befehl schreiben
if($undo!='' && $error_msg=='')
if($undo!='' && $error_msg=='' && $sql!='')
{
$log = new log();
$log->executetime = date('Y-m-d H:i:s');
@@ -285,6 +294,7 @@ elseif ($aktion=='stpl_delete_single' || $aktion=='stpl_delete_block')
{
$lehrstunde=new lehrstunde();
//Einzelne Stunden entfernen
if(isset($stpl_id))
{
foreach ($stpl_id as $stundenplan_id)
@@ -294,6 +304,16 @@ elseif ($aktion=='stpl_delete_single' || $aktion=='stpl_delete_block')
}
}
//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))
{
$reservierung=new reservierung();
@@ -315,7 +335,7 @@ elseif ($aktion=='lva_single_set')
//$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)
$error_msg.=$lva[$z]->errormsg;
$kollision_msg.=$lva[$z]->errormsg."\n";
$z++;
}
for ($i=0;$i<$z && $error_msg=='';$i++)
@@ -419,7 +439,7 @@ elseif ($aktion=='lva_multi_set')
$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)
$error_msg.=$lva[$i]->errormsg;
$kollision_msg.=$lva[$i]->errormsg;
}
// LVAs setzen
for ($i=0;$i<$anz_lvas && $error_msg=='';$i++)
@@ -465,10 +485,16 @@ elseif ($aktion=='lva_stpl_del_multi' || $aktion=='lva_stpl_del_single')
$error_msg.='Studiensemester '.$semester_aktuell.' konnte nicht gefunden werden!';
}
if ($error_msg=='')
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);
@@ -494,23 +520,6 @@ $stdplan->user=$user;
// aktueller Benutzer
$stdplan->user_uid=$uid;
// 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;
}
// Zusaetzliche Daten laden
if (! $stdplan->load_data($type,$pers_uid,$ort,$stg_kz,$sem,$ver,$grp,$gruppe) && $error_msg!='')
$error_msg.=$stdplan->errormsg;
@@ -524,6 +533,23 @@ while ($begin<=$ende)
$datum=$begin;
$begin+=604800; // eine Woche
// 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))
$error_msg.=$stdplan->errormsg;
@@ -546,7 +572,7 @@ while ($begin<=$ende)
}
// Stundenplan der Woche drucken
$stdplan->draw_week_xul($semesterplan,$uid,$zeitwunsch, $ignore_kollision, $kollision_student);
$stdplan->draw_week_xul($semesterplan,$uid,$zeitwunsch, $ignore_kollision, $kollision_student, $max_kollision);
}
@@ -559,7 +585,7 @@ while ($begin<=$ende)
<script type="application/x-javascript">
<?php
if ($error_msg!='')
echo "alert('".str_replace("'",'"',str_replace(chr(10),'',htmlspecialchars($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)); ?>");
+44 -34
View File
@@ -105,36 +105,13 @@ function loadURL(event)
if (url) contentFrame.setAttribute('src', url);
}
// ****
// * Aendert die Stundenplantabelle
// ****
function stpltableChange(db_stpl_table)
{
// Request absetzen
var url = '<?php echo APP_ROOT ?>content/fasDBDML.php';
var req = new phpRequest(url,'','');
req.add('type', 'variablechange');
req.add('name', 'db_stpl_table');
req.add('wert', db_stpl_table);
var response = req.executePOST();
var val = new ParseReturnValue(response)
if (!val.dbdml_return)
{
if(val.dbdml_errormsg=='')
alert(response)
else
alert(val.dbdml_errormsg)
}
else
{
//Statusbar setzen
document.getElementById("statusbarpanel-text").label = "Tabelle erfolgreich geaendert";
document.getElementById("statusbarpanel-db_table").label = db_stpl_table;
}
updatedbstpltable();
variableChange('db_stpl_table', null, db_stpl_table);
return true;
}
@@ -219,6 +196,22 @@ function studiensemesterChange(stsem, wert)
return true;
}
// ****
// * Oeffnet ein Fenster zum Aendern eines Variablenwertes
// ****
function variableChangeValue(variable)
{
var variablevalue = getvariable(variable);
if(variablevalue = prompt('Bitte geben Sie den neuen Wert fuer '+variable+' ein', variablevalue))
{
variableChange(variable, '', variablevalue);
}
}
// ****
// * Aendert den Wert der Variable IgnoreKollision
// ****
function toggleIgnoreKollision()
{
if(getvariable('ignore_kollision')=='true')
@@ -227,6 +220,9 @@ function toggleIgnoreKollision()
variableChange('ignore_kollision','menu-prefs-ignore_kollision', 'true');
}
// ****
// * Sendet einen Request zum Aendern einer Variable
// ****
function variableChange(variable, id, wert)
{
item = document.getElementById(id);
@@ -269,14 +265,19 @@ function variableChange(variable, id, wert)
if(variable=='ignore_kollision')
updateignorekollision();
if(variable=='db_stpl_table')
updateidbstpltable();
{
document.getElementById("statusbarpanel-db_table").label = wert;
updatedbstpltable();
}
//Statusbar setzen
document.getElementById("statusbarpanel-text").label = "Variable erfolgreich geaendert";
}
}
// Aktualisiert die IngnoreKollision Anzeige
// sowohl in der Toolbar als auch im Menue
// ****
// * Aktualisiert die IngnoreKollision Anzeige
// * sowohl in der Toolbar als auch im Menue
// ****
function updateignorekollision()
{
var panel = document.getElementById('statusbarpanel-ignore_kollision');
@@ -294,21 +295,27 @@ function updateignorekollision()
}
}
// markiert den eintrag in der statusleiste rot wenn auf die
// echte stpl tabelle zugegriffen wird
// ****
// * Markiert den Eintrag in der Statusleiste rot wenn auf die
// * echte stpl tabelle zugegriffen wird
// ****
function updatedbstpltable()
{
var panel = document.getElementById('statusbarpanel-db_table');
if(panel.label=='stundenplan')
{
panel.style.backgroundColor='red';
}
else
{
panel.style.backgroundColor='';
panel.style.backgroundColor='transparent';
}
}
// ****
// * Laedt den Wert einer Variable aus der DB
// ****
function getvariable(variable)
{
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
@@ -340,6 +347,9 @@ function getvariable(variable)
}
}
// ****
// * Liefert das eingestellte Studiensemester
// ****
function getStudiensemesterVariable()
{
if(stsem = getvariable('semester_aktuell'))
+9
View File
@@ -50,6 +50,7 @@ echo '<?xml-stylesheet href="datepicker/datepicker.css" type="text/css"?>';
<command id="menu-prefs-ignore_zeitsperre:command" oncommand="variableChange('ignore_zeitsperre','menu-prefs-ignore_zeitsperre');"/>
<command id="menu-prefs-ignore_reservierung:command" oncommand="variableChange('ignore_reservierung','menu-prefs-ignore_reservierung');"/>
<command id="menu-prefs-kollision_student:command" oncommand="variableChange('kollision_student','menu-prefs-kollision_student');"/>
<command id="menu-prefs-max_kollision:command" oncommand="variableChangeValue('max_kollision');"/>
<command id="menu-extras-kollisionstudent:command" oncommand="KollisionStudentShow();"/>
<command id="menu-extras-lvplanwartung:command" oncommand="LVPlanWartungShow();"/>
<command id="menu-extras-rescheck:command" oncommand="ResCheckShow();"/>
@@ -184,6 +185,14 @@ echo '<?xml-stylesheet href="datepicker/datepicker.css" type="text/css"?>';
checkbox ="true"
checked ="<?php echo $kollision_student;?>"
/>
<menuitem
id ="menu-prefs-max_kollision"
key ="menu-prefs-max_kollision:key"
label ="&menu-prefs-max_kollision.label;"
command ="menu-prefs-max_kollision:command"
accesskey ="&menu-prefs-max_kollision.accesskey;"
value ="<?php echo $max_kollision;?>"
/>
<?php
}
?>
+13
View File
@@ -295,6 +295,12 @@ function loadVariables($user)
$kollision_student='false';
}
if (!isset($max_kollision))
{
global $max_kollision;
$max_kollision='0';
}
if (!isset($ignore_zeitsperre))
{
global $ignore_zeitsperre;
@@ -324,6 +330,13 @@ function writeCISlog($stat, $rm = '')
');
}
function Debuglog($entry)
{
$handle = fopen(LOG_PATH.'debug.log','a');
fwrite($handle, $entry);
fclose($handle);
}
// ***************************************************************
// * Liefert das Studiensemester in dem sich
// * das uebergebene Datum befindet
+23 -23
View File
@@ -598,11 +598,11 @@ public function loadVeranstaltung($veranstaltungskategorie_kurzbz="",$veranstalt
// Suche nach einer einzigen Veranstaltung_id
if (!is_array($this->veranstaltung_id) && !empty($this->veranstaltung_id) )
{
$qry.=" AND ".$this->schemaSQL.".tbl_veranstaltung.veranstaltung_id=".$this->veranstaltung_id." ";
$qry.=" AND ".$this->schemaSQL.".tbl_veranstaltung.veranstaltung_id=".addslashes($this->veranstaltung_id)." ";
}
elseif (is_array($this->veranstaltung_id) && count($this->veranstaltung_id)>0 )
{
$qry.=" AND ".$this->schemaSQL.".tbl_veranstaltung.veranstaltung_id in (".implode(",",$this->veranstaltung_id).") ";
$qry.=" AND ".$this->schemaSQL.".tbl_veranstaltung.veranstaltung_id in (".addslashes(implode(",",$this->veranstaltung_id)).") ";
}
// Suche nach einer einzigen Veranstaltungskategorie_kurzbz
@@ -627,44 +627,44 @@ public function loadVeranstaltung($veranstaltungskategorie_kurzbz="",$veranstalt
}
if (!empty($this->start_jahr) && empty($this->ende_jahr))
$qry.=" AND to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYY')='".$this->start_jahr."'";
$qry.=" AND to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYY')='".addslashes($this->start_jahr)."'";
elseif (empty($this->start_jahr) && !empty($this->ende_jahr) )
$qry.=" AND to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYY')='".$this->ende_jahr."'";
$qry.=" AND to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYY')='".addslashes($this->ende_jahr)."'";
elseif (empty($this->start_jahr) && !empty($this->ende_jahr) )
{
$qry.=" AND '".$this->start_jahr."' between to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYY') AND to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYY') ";
$qry.=" AND '".$this->ende_jahr."' between to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYY') AND to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYY') ";
$qry.=" AND '".addslashes($this->start_jahr)."' between to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYY') AND to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYY') ";
$qry.=" AND '".addslashes($this->ende_jahr)."' between to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYY') AND to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYY') ";
}
if (!empty($this->start_jahr_monat) && empty($this->ende_jahr_monat) )
$qry.=" AND '".$this->start_jahr_monat."' between to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYYMM') and to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYYMM')";
$qry.=" AND '".addslashes($this->start_jahr_monat)."' between to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYYMM') and to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYYMM')";
elseif (empty($this->start_jahr_monat) && !empty($this->ende_jahr_monat) )
$qry.=" AND '".$this->start_jahr_monat."' between to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYYMM') and to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYYMM')";
$qry.=" AND '".addslashes($this->start_jahr_monat)."' between to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYYMM') and to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYYMM')";
elseif (!empty($this->start_jahr_monat) && !empty($this->ende_jahr_monat) )
{
$qry.=" AND '".$this->start_jahr_monat."' between to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYYMM') AND to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYYMM') ";
$qry.=" AND '".$this->ende_jahr_monat."' between to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYYMM') AND to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYYMM') ";
$qry.=" AND '".addslashes($this->start_jahr_monat)."' between to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYYMM') AND to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYYMM') ";
$qry.=" AND '".addslashes($this->ende_jahr_monat)."' between to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYYMM') AND to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYYMM') ";
}
if (!empty($this->start_jahr_woche) && empty($this->ende_jahr_woche) )
$qry.=" AND '".$this->start_jahr_woche."' between to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYYIW'') and to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYYIW'')";
$qry.=" AND '".addslashes($this->start_jahr_woche)."' between to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYYIW'') and to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYYIW'')";
elseif (empty($this->start_jahr_woche) && !empty($this->ende_jahr_woche) )
$qry.=" AND '".$this->start_jahr_woche."' between to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYYIW'') and to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYYIW'')";
$qry.=" AND '".addslashes($this->start_jahr_woche)."' between to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYYIW'') and to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYYIW'')";
elseif (!empty($this->start_jahr_woche) && !empty($this->ende_jahr_woche) )
{
$qry.=" AND '".$this->start_jahr_woche."' between to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYYIW'') AND to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYYIW'') ";
$qry.=" AND '".$this->ende_jahr_woche."' between to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYYIW'') AND to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYYIW'') ";
$qry.=" AND '".addslashes($this->start_jahr_woche)."' between to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYYIW'') AND to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYYIW'') ";
$qry.=" AND '".addslashes($this->ende_jahr_woche)."' between to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYYIW'') AND to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYYIW'') ";
}
if (!empty($this->start_jahr_monat_tag) && empty($this->ende_jahr_monat_tag) )
$qry.=" AND to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYYMMDD')>='".$this->start_jahr_monat_tag."'";
$qry.=" AND to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYYMMDD')>='".addslashes($this->start_jahr_monat_tag)."'";
elseif (empty($this->start_jahr_monat_tag) && !empty($this->ende_jahr_monat_tag) )
$qry.=" AND to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYYMMDD')<='".$this->ende_jahr_monat_tag."'";
$qry.=" AND to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYYMMDD')<='".addslashes($this->ende_jahr_monat_tag)."'";
elseif (!empty($this->start_jahr_monat_tag) && !empty($this->ende_jahr_monat_tag) )
{
$qry.=" AND '".$this->start_jahr_monat_tag."' between to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYYMMDD') AND to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYYMMDD') ";
$qry.=" AND '".$this->ende_jahr_monat_tag."' between to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYYMMDD') AND to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYYMMDD') ";
$qry.=" AND '".addslashes($this->start_jahr_monat_tag)."' between to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYYMMDD') AND to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYYMMDD') ";
$qry.=" AND '".addslashes($this->ende_jahr_monat_tag)."' between to_char(".$this->schemaSQL.".tbl_veranstaltung.start, 'YYYYMMDD') AND to_char(".$this->schemaSQL.".tbl_veranstaltung.ende, 'YYYYMMDD') ";
}
if ($this->suchtext)
@@ -672,10 +672,10 @@ public function loadVeranstaltung($veranstaltungskategorie_kurzbz="",$veranstalt
$this->suchtext='%'.$this->suchtext.'%';
$this->suchtext=str_replace(' ','%',$this->suchtext);
$this->suchtext=str_replace('%%','%',addslashes($this->suchtext));
$qry.=" AND ( ".$this->schemaSQL.".tbl_veranstaltungskategorie.veranstaltungskategorie_kurzbz like '".$this->suchtext."'
OR ".$this->schemaSQL.".tbl_veranstaltungskategorie.bezeichnung like '".$this->suchtext."'
OR ".$this->schemaSQL.".tbl_veranstaltung.beschreibung like '".$this->suchtext."'
OR ".$this->schemaSQL.".tbl_veranstaltung.inhalt like '".$this->suchtext."' ) ";
$qry.=" AND ( ".$this->schemaSQL.".tbl_veranstaltungskategorie.veranstaltungskategorie_kurzbz like '".addslashes($this->suchtext)."'
OR ".$this->schemaSQL.".tbl_veranstaltungskategorie.bezeichnung like '".addslashes($this->suchtext)."'
OR ".$this->schemaSQL.".tbl_veranstaltung.beschreibung like '".addslashes($this->suchtext)."'
OR ".$this->schemaSQL.".tbl_veranstaltung.inhalt like '".addslashes($this->suchtext)."' ) ";
}
// Entscheiden welche Daten angezeigt werden Public oder fuer Mitarbeiter alles
+1 -1
View File
@@ -590,7 +590,7 @@ class lehreinheit extends basis_db
else
{
$row=$this->db_fetch_row($erg_stpl);
$this->errormsg="Kollision mit StundenplanID($stpl_table.$stpl_id): $row[0]";
$this->errormsg="Kollision mit StundenplanID($stpl_id): $row[0] | $datum | $ort";
return false;
}
}
+3
View File
@@ -261,6 +261,9 @@ class variable extends basis_db
if (!isset($this->variable->kollision_student))
$this->variable->kollision_student='false';
if (!isset($this->variable->max_kollision))
$this->variable->max_kollision='0';
return true;
}
+153 -46
View File
@@ -137,7 +137,6 @@ class wochenplan extends basis_db
*/
public function load_data($type, $uid, $ort_kurzbz=NULL, $studiengang_kz=NULL, $sem=NULL, $ver=NULL, $grp=NULL, $gruppe=NULL)
{
///////////////////////////////////////////////////////////////////////
// Parameter Checken
// Typ des Stundenplans
if ($type=='student' || $type=='lektor' || $type=='verband' || $type=='gruppe' || $type=='ort')
@@ -191,7 +190,6 @@ class wochenplan extends basis_db
$this->gruppe_kurzbz=$gruppe;
///////////////////////////////////////////////////////////////////////
// Zusaetzliche Daten ermitteln
//personendaten
if ($this->type=='student' || $this->type=='lektor')
@@ -848,7 +846,7 @@ class wochenplan extends basis_db
* @param datum Datum eines Tages in der angeforderten Woche
* @return true oder false
*/
public function draw_week_xul($semesterplan, $uid, $wunsch=null, $ignore_kollision=false, $kollision_student=false)
public function draw_week_xul($semesterplan, $uid, $wunsch=null, $ignore_kollision=false, $kollision_student=false, $max_kollision=0)
{
//echo $wunsch;
global $cfgStdBgcolor;
@@ -866,7 +864,7 @@ class wochenplan extends basis_db
echo '<popupset>
<popup id="stplPopupMenue">
<menuitem label="Raumvorschlag" oncommand="StplSearchRoom(document.popupNode);" />
<menuitem label="Entfernen" oncommand="onStplDelete(\'stpl_delete_single\');" />
<menuitem label="Entfernen" oncommand="TimeTableWeekMarkiere(document.popupNode);TimetableDeleteEntries()" />
</popup>
</popupset>';
@@ -1087,6 +1085,7 @@ class wochenplan extends basis_db
$z=0;
$reservierung=false;
foreach ($this->std_plan[$i][$j] as $lehrstunde)
{
if ($lehrstunde->unr==$unr)
{
// Lektoren
@@ -1123,7 +1122,7 @@ class wochenplan extends basis_db
$titel=htmlspecialchars($lehrstunde->titel);
$anmerkung=htmlspecialchars($lehrstunde->anmerkung);
}
}
// Lektoren
//if ($this->type!='lektor')
$lektor=array_unique($lektor);
@@ -1186,28 +1185,31 @@ class wochenplan extends basis_db
$stg_obj->load($stg_kz);
// Ausgabe
echo '<button id="buttonSTPL'.$count++.'"
echo '<button id="buttonSTPL'.$count.'"
tooltiptext="('.$updatevonam.') '.$titel.' - '.$anmerkung.'"
style="border-width:1px;'.((isset($farbe) && $farbe!='')?'background-color:#'.$farbe:'').';"
styleOrig="border-width:1px;'.((isset($farbe) && $farbe!='')?'background-color:#'.$farbe:'').';" ';
style="border:1px solid transparent;'.((isset($farbe) && $farbe!='')?'background-color:#'.$farbe:'').';"
styleOrig="border:1px solid transparent;'.((isset($farbe) && $farbe!='')?'background-color:#'.$farbe:'').';" ';
if ($berechtigung->isBerechtigt('lehre/lvplan',$stg_obj->oe_kurzbz,'uid'))
echo ' context="stplPopupMenue" ';
if ($berechtigung->isBerechtigt('lehre/lvplan',$stg_obj->oe_kurzbz,'u'))
echo 'ondraggesture="nsDragAndDrop.startDrag(event,listObserver)" ';
//onclick="return onStplSearchRoom(event, event.target);"
echo 'ondragdrop="nsDragAndDrop.drop(event,boardObserver)"
ondragover="nsDragAndDrop.dragOver(event,boardObserver)"
onclick="return onStplSearchRoom(event, event.target);"
oncommand="onStplDetail(event);"
oncommand="TimeTableWeekClick(event)"
ondblclick="TimeTableWeekDblClick(event)"
aktion="stpl"
unr="'.$unr.'"
markiert="false"
elem="stundenplan'.$i.$j.'"
idList="'.$paramList.'" stpltype="'.$this->type.'"
stg_kz="'.$this->stg_kz.'" sem="'.$this->sem.'" ver="'.$this->ver.'"
grp="'.$this->grp.'" gruppe="'.$this->gruppe_kurzbz.'"
datum="'.date("Y-m-d",$datum).'" stunde="'.$j.'"
datum="'.date("Y-m-d",$datum).'" stunde="'.$j.'" wochentag="'.$i.'"
pers_uid="'.$this->pers_uid.'" ort_kurzbz="'.$this->ort_kurzbz.'">';
echo '<label align="center">'.$blink_ein;
$count++;
//echo $lf;
echo mb_substr($lf, 0,-strlen('<html:br />'));
if($titel!='' && !$reservierung)
@@ -1227,19 +1229,35 @@ class wochenplan extends basis_db
}
}
if (isset($this->std_plan[$i][$j][0]->frei_orte))
foreach ($this->std_plan[$i][$j][0]->frei_orte as $f_ort)
{
//orte sortieren => AnzahlKollisionen ASC, Ort_kurzbz ASC
$keys=array();
$values=array();
foreach ($this->std_plan[$i][$j][0]->frei_orte as $key=>$value)
{
echo '<label value="'.$f_ort.'"
styleOrig=""
ondragenter="nsDragAndDrop.dragEnter(event,boardObserver)"
ondragexit="nsDragAndDrop.dragExit(event,boardObserver)"
ondragdrop="nsDragAndDrop.drop(event,boardObserver)"
datum="'.date("Y-m-d",$datum).'" stunde="'.$j.'"
stg_kz="'.$this->stg_kz.'" sem="'.$this->sem.'" ver="'.$this->ver.'"
grp="'.$this->grp.'" gruppe="'.$this->gruppe_kurzbz.'"
stpltype="'.$this->type.'"
/>';
$keys[]=$key;
$values[]=$value;
}
array_multisort($values, SORT_ASC, $keys, SORT_ASC, $this->std_plan[$i][$j][0]->frei_orte);
foreach ($this->std_plan[$i][$j][0]->frei_orte as $f_ort=>$anzahl)
{
if($anzahl<=$max_kollision)
{
echo '<label value="'.$f_ort.($anzahl>0?'('.$anzahl.')':'').'"
styleOrig=""
ondragenter="nsDragAndDrop.dragEnter(event,boardObserver)"
ondragexit="nsDragAndDrop.dragExit(event,boardObserver)"
ondragdrop="nsDragAndDrop.drop(event,boardObserver)"
datum="'.date("Y-m-d",$datum).'" stunde="'.$j.'"
stg_kz="'.$this->stg_kz.'" sem="'.$this->sem.'" ver="'.$this->ver.'"
grp="'.$this->grp.'" gruppe="'.$this->gruppe_kurzbz.'"
stpltype="'.$this->type.'" ort_kurzbz="'.$f_ort.'" kollision="'.$anzahl.'"
'.($anzahl>0?'tooltiptext="'.$anzahl.' Kollision(en)"':'').'
/>';
}
}
}
echo '</vbox>'.$this->crlf;
}
echo "</row>";
@@ -1440,16 +1458,62 @@ class wochenplan extends basis_db
// freie Plaetze in den Stundenplan eintragen.
for ($t=1;$t<=TAGE_PRO_WOCHE;$t++)
{
for ($s=1;$s<=$max_stunde;$s++)
if (!$raster[$t][$s]->kollision && ($s+$block)<=($max_stunde+1))
{
if (($s+$block)<=($max_stunde+1))
{
if (count($raster[$t][$s]->ort)>0)
$this->std_plan[$t][$s][0]->frei_orte=array_diff($orte,$raster[$t][$s]->ort);
else
$this->std_plan[$t][$s][0]->frei_orte=$orte;
// Alle infrage kommenden Orte zuweisen
foreach($orte as $ort)
{
$this->std_plan[$t][$s][0]->frei_orte[$ort]=(isset($this->std_plan[$t][$s][0]->frei_orte[$ort])?$this->std_plan[$t][$s][0]->frei_orte[$ort]:0);
}
// Besetzte Raueme eintragen
foreach($raster[$t][$s]->ort as $ort)
{
if(in_array($ort, $orte))
$this->std_plan[$t][$s][0]->frei_orte[$ort]=(isset($this->std_plan[$t][$s][0]->frei_orte[$ort])?$this->std_plan[$t][$s][0]->frei_orte[$ort]+1:1);
}
// Gruppenkollision eintragen
if($raster[$t][$s]->kollision)
{
foreach($this->std_plan[$t][$s][0]->frei_orte as $ort=>$value)
{
$this->std_plan[$t][$s][0]->frei_orte[$ort]=(isset($this->std_plan[$t][$s][0]->frei_orte[$ort])?$this->std_plan[$t][$s][0]->frei_orte[$ort]+1:1);
}
}
// Blockung beruecksichtigen
for ($b=1;$b<$block && ($s+$block)<=($max_stunde+1);$b++)
$this->std_plan[$t][$s][0]->frei_orte=array_diff($this->std_plan[$t][$s][0]->frei_orte,$raster[$t][$s+$b]->ort);
{
if(!$raster[$t][$s+$b]->kollision)
{
//Wenn keine Gruppenkollision vorhanden ist, nur die Raumkollision eintragen
foreach($raster[$t][$s+$b]->ort as $ort)
{
if(in_array($ort, $orte))
$this->std_plan[$t][$s][0]->frei_orte[$ort]=(isset($this->std_plan[$t][$s][0]->frei_orte[$ort])?$this->std_plan[$t][$s][0]->frei_orte[$ort]+1:1);
}
}
else
{
// Bei Gruppenkollision kollidieren alle Raeume
foreach($this->std_plan[$t][$s][0]->frei_orte as $ort=>$value)
{
$this->std_plan[$t][$s][0]->frei_orte[$ort]=(isset($this->std_plan[$t][$s][0]->frei_orte[$ort])?$this->std_plan[$t][$s][0]->frei_orte[$ort]+1:1);
}
}
}
}
else
{
// Wenn sich die Stunden mit der Blockung nicht ausgehen, dann keine Raeume anzeigen
$this->std_plan[$t][$s][0]->frei_orte = array();
}
}
}
return true;
}
@@ -1629,7 +1693,7 @@ class wochenplan extends basis_db
// Raeume die in Frage kommen aufgrund der Raumtypen
$sql_query="SELECT DISTINCT ort_kurzbz, hierarchie FROM public.tbl_ort
JOIN public.tbl_ortraumtyp USING (ort_kurzbz) WHERE ($rtype) AND aktiv AND ort_kurzbz NOT LIKE '\\\\_%' ORDER BY hierarchie,ort_kurzbz"; //
//echo $sql_query;
//die($sql_query);
if(!$this->db_query($sql_query))
{
$this->errormsg=$this->db_last_error();
@@ -1664,6 +1728,7 @@ class wochenplan extends basis_db
{
// Raster vorbereiten
for ($t=1;$t<=TAGE_PRO_WOCHE;$t++)
{
for ($s=$min_stunde;$s<=$max_stunde;$s++)
{
if (isset($raster[$t][$s]))
@@ -1671,7 +1736,8 @@ class wochenplan extends basis_db
$raster[$t][$s]->ort=array();
$raster[$t][$s]->kollision=false;
}
}
// Stundenplanabfrage bauen (Wo ist Kollision?)
$sql_query="SELECT DISTINCT datum, stunde FROM $stpl_table
WHERE datum>='".addslashes($datum_begin)."' AND datum<'".addslashes($datum_end)."' AND
@@ -1720,32 +1786,73 @@ class wochenplan extends basis_db
$jahr=mb_substr($row->datum, 0,4);
$tag=date("w",mktime(12,0,0,$month,$mtag,$jahr));
$raster[$tag][$row->stunde]->ort[]=$row->ort_kurzbz;
//if ($row->ort_kurzbz=='EDV6.10' && $tag==2 && $row->stunde==8)
// $this->errormsg.=htmlspecialchars($row->ort_kurzbz).'/'.$mtag.'/'.$month;
}
// freie Plaetze in den Stundenplan eintragen.
// Moegliche Orte fuer den Vorschlag in den Stundenplan eintragen.
// $this->std_plan[$t][$s][0]->frei_orte ist ein Array mit den in Frage kommenden Orten
// der Wert von $this->std_plan[$t][$s][0]->frei_orte[$ort_kurzbz] gibt an, wie viele
// kollisionen bei der Zuteilung entstehen
for ($t=1;$t<=TAGE_PRO_WOCHE;$t++)
{
for ($s=1;$s<=$max_stunde;$s++)
if (!$raster[$t][$s]->kollision && ($s+$block)<=($max_stunde+1))
{
//Blockung passt in die Maximalstundenanzahl
if (($s+$blck)<=($max_stunde+1))
{
// Besetzte Orte von den freien abziehen
if (count($raster[$t][$s]->ort)>0 && $count==0)
$this->std_plan[$t][$s][0]->frei_orte=array_diff($orte,$raster[$t][$s]->ort);
elseif ($count==0)
$this->std_plan[$t][$s][0]->frei_orte=$orte;
elseif (count($raster[$t][$s]->ort)>0)
$this->std_plan[$t][$s][0]->frei_orte=array_diff($this->std_plan[$t][$s][0]->frei_orte,$raster[$t][$s]->ort);
if($count==0)
{
// Freie Orte beim 1. Durchlauf zuteilen
foreach($orte as $ort)
$this->std_plan[$t][$s][0]->frei_orte[$ort]=(isset($this->std_plan[$t][$s][0]->frei_orte[$ort])?$this->std_plan[$t][$s][0]->frei_orte[$ort]:0);
}
// Besetzte Orte eintragen
foreach ($raster[$t][$s]->ort as $ort)
{
if(in_array($ort, $orte))
$this->std_plan[$t][$s][0]->frei_orte[$ort]=(isset($this->std_plan[$t][$s][0]->frei_orte[$ort])?$this->std_plan[$t][$s][0]->frei_orte[$ort]+1:1);
}
//Kollision mit Gruppe
if($raster[$t][$s]->kollision)
{
foreach ($this->std_plan[$t][$s][0]->frei_orte as $ort=>$value)
{
if(in_array($ort, $orte))
$this->std_plan[$t][$s][0]->frei_orte[$ort]=(isset($this->std_plan[$t][$s][0]->frei_orte[$ort])?$this->std_plan[$t][$s][0]->frei_orte[$ort]+1:1);
}
}
// Blockung beruecksichtigen
for ($b=1;$b<$block && ($s+$block)<=($max_stunde+1);$b++)
{
if (!$raster[$t][$s+$b]->kollision)
$this->std_plan[$t][$s][0]->frei_orte=array_diff($this->std_plan[$t][$s][0]->frei_orte,$raster[$t][$s+$b]->ort);
{
// Wenn keine Gruppenkollision vorhanden ist, dann die kollidierenden Raeume eintragen
foreach ($raster[$t][$s+$b]->ort as $ort)
{
if(in_array($ort, $orte))
$this->std_plan[$t][$s][0]->frei_orte[$ort]=(isset($this->std_plan[$t][$s][0]->frei_orte[$ort])?$this->std_plan[$t][$s][0]->frei_orte[$ort]+1:1);
}
}
else
$this->std_plan[$t][$s][0]->frei_orte=array();
{
// Bei Gruppenkollision den Wert bei allen Raumen erhoehen
foreach ($this->std_plan[$t][$s][0]->frei_orte as $ort=>$value)
{
$this->std_plan[$t][$s][0]->frei_orte[$ort]=(isset($this->std_plan[$t][$s][0]->frei_orte[$ort])?$this->std_plan[$t][$s][0]->frei_orte[$ort]+1:1);
}
}
}
}
elseif($raster[$t][$s]->kollision)
else
{
// Wenn sich die Verplanung mit der Blockung nicht mehr ausgeht, dann keine Raeume vorschlagen
$this->std_plan[$t][$s][0]->frei_orte=array();
}
}
}
// Variablen abgleichen
$rest-=$block;
if ($block>$rest)
+3 -3
View File
@@ -355,9 +355,9 @@ class zeitsperre extends basis_db
FROM
campus.tbl_zeitsperre
WHERE
vondatum<='$datum' AND bisdatum>='$datum' AND
(vonstunde<='$stunde' OR vonstunde is null) AND
(bisstunde>='$stunde' OR bisstunde is null) AND
vondatum<='$datum' AND bisdatum>='$datum' AND
((vondatum='$datum' AND vonstunde<='$stunde') OR vonstunde is null OR vondatum<>'$datum') AND
((bisdatum='$datum' AND bisstunde>='$stunde') OR bisstunde is null OR bisdatum<>'$datum') AND
mitarbeiter_uid='$user'";
if($result = $this->db_query($qry))
+2 -2
View File
@@ -169,7 +169,7 @@ class zeitwunsch extends basis_db
// Zeitsperren abfragen
$sql="SELECT vondatum,vonstunde,bisdatum,bisstunde
FROM campus.tbl_zeitsperre
WHERE mitarbeiter_uid='".addslashes($uid)."' AND vondatum<='$ende' AND bisdatum>'$start'";
WHERE mitarbeiter_uid='".addslashes($uid)."' AND vondatum<='$ende' AND bisdatum>='$start'";
if(!$this->db_query($sql))
{
$this->errormsg=$this->db_last_error();
@@ -260,7 +260,7 @@ class zeitwunsch extends basis_db
// Zeitsperren abfragen
$sql="SELECT vondatum,vonstunde,bisdatum,bisstunde
FROM campus.tbl_zeitsperre
WHERE mitarbeiter_uid IN ($sql_query_le) AND vondatum<='$ende' AND bisdatum>'$start'";
WHERE mitarbeiter_uid IN ($sql_query_le) AND vondatum<='$ende' AND bisdatum>='$start'";
if(!$this->db_query($sql))
{
$this->errormsg = $this->db_last_error();
+4
View File
@@ -54,6 +54,10 @@
<!ENTITY menu-prefs-kollision_student.label "kollision_student">
<!ENTITY menu-prefs-kollision_student.accesskey "s">
<!ENTITY menu-prefs-max_kollision.key "m">
<!ENTITY menu-prefs-max_kollision.label "max_kollision">
<!ENTITY menu-prefs-max_kollision.accesskey "m">
<!ENTITY menu-help-about.key "U">
<!ENTITY menu-help-about.label "Über FHComplete">
<!ENTITY menu-help-about.accesskey "U">
+1 -1
View File
@@ -75,7 +75,7 @@ $ss->getNearestTillNext();
$datum_begin=$ss->start;
$datum_ende=$ss->ende;
//$datum_begin='2008-01-07';
//$datum_ende='2010-07-05'; // $ss->ende
$datum_ende='2011-02-05'; // $ss->ende
// ************* FUNCTIONS **************** //
+69
View File
@@ -0,0 +1,69 @@
<?php
/* Copyright (C) 2010 FH 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
* Markus Pospischil <markus.pospischil@technikum-wien.at>
*/
/**
* CSV Export fuer das UniFlow Drucksystem
*/
require_once('../../config/vilesci.config.inc.php');
require_once('../../include/basis_db.class.php');
header("Content-Type: text/csv");
header("Content-Disposition: attachment; filename=uniflow.csv");
$qry = "SELECT
uid, tbl_organisationseinheit.oe_kurzbz, tbl_organisationseinheit.bezeichnung, tbl_organisationseinheit.organisationseinheittyp_kurzbz
FROM
campus.vw_mitarbeiter
JOIN public.tbl_benutzerfunktion USING(uid)
JOIN public.tbl_organisationseinheit USING(oe_kurzbz)
WHERE
tbl_benutzerfunktion.funktion_kurzbz='oezuordnung'
AND vw_mitarbeiter.aktiv=true
AND tbl_organisationseinheit.aktiv=true
AND (tbl_benutzerfunktion.datum_bis >= now() OR tbl_benutzerfunktion.datum_bis IS NULL)
AND (tbl_benutzerfunktion.datum_von <= now() OR tbl_benutzerfunktion.datum_von IS NULL)
UNION
SELECT
uid, tbl_organisationseinheit.oe_kurzbz, tbl_organisationseinheit.bezeichnung, tbl_organisationseinheit.organisationseinheittyp_kurzbz
FROM
campus.vw_student
JOIN public.tbl_studiengang USING(studiengang_kz)
JOIN public.tbl_organisationseinheit USING(oe_kurzbz)
WHERE
tbl_organisationseinheit.aktiv=true
AND vw_student.aktiv=true
";
echo "Login;KSTName;KSTBeschreibung;KSTstandard\n";
$db = new basis_db();
if($result = $db->db_query($qry))
{
while($row = $db->db_fetch_object($result))
{
echo "$row->uid;$row->oe_kurzbz;$row->organisationseinheittyp_kurzbz $row->bezeichnung;1\n";
}
}
?>