- LVPlan kann als Excel exportiert werden

- Stunden werden im Export (ICal, Caldav, etc) nicht mehr zu 4er Blöcken geblockt sondern auf die gesammte Länge
This commit is contained in:
oesi
2016-02-15 10:19:20 +01:00
parent 951e1bd976
commit 606949513c
4 changed files with 163 additions and 60 deletions
+121 -27
View File
@@ -34,20 +34,22 @@ require_once(dirname(__FILE__).'/../../../include/functions.inc.php');
require_once(dirname(__FILE__).'/../../../include/wochenplan.class.php');
require_once(dirname(__FILE__).'/../../../include/datum.class.php');
require_once(dirname(__FILE__).'/../../../include/studiensemester.class.php');
require_once(dirname(__FILE__).'/../../../include/phrasen.class.php');
require_once(dirname(__FILE__).'/../../../include/lehrveranstaltung.class.php');
require_once(dirname(__FILE__).'/../../../include/phrasen.class.php');
require_once(dirname(__FILE__).'/../../../include/Excel/excel.php');
if(!$db = new basis_db())
die($p->t('global/fehlerBeimOeffnenDerDatenbankverbindung'));
$sprache = getSprache();
$p=new phrasen($sprache);
$sprache = getSprache();
$p=new phrasen($sprache);
//Startwerte setzen
if(!isset($_GET['db_stpl_table']))
$db_stpl_table='stundenplan';
else
$db_stpl_table=$_GET['db_stpl_table'];
if(!in_array($db_stpl_table,array('stundenplan','stundenplandev')))
die('db_stpl_table invalid');
if(isset($_GET['type']))
@@ -83,16 +85,16 @@ if(isset($_GET["cal"]))
// fuer Abonnierung im Google ueber /webdav/google.php
$cal = $_GET["cal"];
$uid=decryptData($cal,LVPLAN_CYPHER_KEY);
//Wenn der Key manuell geaendert wird koennen Fehlerhaft kodierte Zeichen
//Wenn der Key manuell geaendert wird koennen Fehlerhaft kodierte Zeichen
//entstehen und fuehren zu DB fehlern deshalb werden falsch kodierte uids hier aussortiert
if(!check_utf8($uid))
die('Fehlerhafter Parameter');
//Pruefen ob dieser Benutzer auch wirklich existiert
$benutzer = new benutzer();
if(!$benutzer->load($uid))
die('Ungueltiger Benutzername');
//Output-Format wird auf ical geaendert
$target='ical';
$format='ical';
@@ -114,11 +116,11 @@ if(!isset($begin))
$objSS->load($ss);
$datum_obj = new datum();
$begin = $datum_obj->mktime_fromdate($objSS->start);
// Ein Monat vor ende des Studiensemester soll zusaetzlich das kommende angezeigt werden
$datum_obj = new datum();
$diff = $datum_obj->DateDiff($objSS->ende, date('Y-m-d H:i:s'));
if($diff>=-30)
{
$objSS->getNextFrom($ss);
@@ -128,21 +130,6 @@ if(!isset($begin))
$ende = $datum_obj->mktime_fromdate($objSS->ende);
}
// for spezial friends
if($uid=='maderdon')
{
if(!isset($_GET['format']))
{
$format='ical';
$version=2;
$target='ical';
$begin=1188597600;
$ende=1202166000;
}
}
$jahr=date("Y",$begin);
$mon=date("m",$begin);
$name='FH-Kalender_'.$mon.'_'.$jahr;
@@ -194,6 +181,10 @@ TZOFFSETTO:+0100
END:STANDARD
END:VTIMEZONE';
}
elseif($format=='excel')
{
$exceldata=array();
}
// Print in HTML-File
else
{
@@ -299,7 +290,7 @@ while($begin<$ende)
$i++;
if(!date("w",$begin))
$begin=jump_day($begin,1);
$stdplan->init_stdplan();
$datum=$begin;
$begin+=604800; // eine Woche
@@ -312,9 +303,14 @@ while($begin<$ende)
// Stundenplan der Woche drucken
if($format=='csv' || $format=='ical')
{
{
$stdplan->draw_week_csv($target, LVPLAN_KATEGORIE);
}
elseif($format=='excel')
{
$data = $stdplan->draw_week_csv('return', LVPLAN_KATEGORIE);
$exceldata = array_merge($exceldata, $data);
}
else
{
$style='style="padding-top: 10px;" class="page-break-after"';
@@ -335,10 +331,108 @@ elseif($format=='ical')
{
echo $crlf.'END:VCALENDAR';
}
elseif($format=='excel')
{
OutputKalenderAsExcel($exceldata);
}
// Print in HTML-File
else
{
echo '<P class="dont-print">'.$p->t('lvplan/fehlerUndFeedback').' <A class="Item" href="mailto:'.MAIL_LVPLAN.'">'.$p->t('lvplan/lvKoordinationsstelle').'</A></P>';
echo '</body></html>';
}
/**
*
*/
function OutputKalenderAsExcel($exceldata)
{
// Creating a workbook
$workbook = new Spreadsheet_Excel_Writer();
// sending HTTP headers
$workbook->send("Termine". "_" . date("d_m_Y") . ".xls");
$workbook->setVersion(8);
// Creating a worksheet
$worksheet =& $workbook->addWorksheet("Termine");
$worksheet->setInputEncoding('utf-8');
$format_bold =& $workbook->addFormat();
$format_bold->setBold();
$format_title =& $workbook->addFormat();
$format_title->setBold();
// let's merge
$format_title->setAlign('merge');
//Zeilenueberschriften ausgeben
$headline=array('Datum','Von','Bis','Ort','Lektoren','Gruppen','Lehrfach','Anmerkung','StundeVon','StundeBis');
$i=0;
foreach ($headline as $title)
{
$worksheet->write(0,$i,$title, $format_bold);
$maxlength[$i]=mb_strlen($title);
$i++;
}
$zeile=1;
if(is_array($exceldata))
{
foreach($exceldata as $row)
{
$i=0;
writecol($worksheet, $maxlength,$zeile, $i++, $row['start_date']);
writecol($worksheet, $maxlength,$zeile, $i++, $row['start_time']);
writecol($worksheet, $maxlength,$zeile, $i++, $row['end_time']);
writecol($worksheet, $maxlength,$zeile, $i++, $row['ort']);
$lkt='';
foreach($row['lektor_uid'] as $row_lkt)
{
$bn = new benutzer();
$bn->load($row_lkt);
$lkt.=$bn->vorname.' '.$bn->nachname.', ';
}
$lkt = mb_substr($lkt, 0, -2);
writecol($worksheet, $maxlength,$zeile, $i++, $lkt);
writecol($worksheet, $maxlength,$zeile, $i++, implode(',',$row['gruppen']));
if($row['lehrfach_id']!='')
{
$lv = new lehrveranstaltung();
$lv->load($row['lehrfach_id']);
$bezeichnung = $lv->bezeichnung;
}
else
$bezeichnung = $row['Summary'];
writecol($worksheet, $maxlength,$zeile, $i++, $bezeichnung);
writecol($worksheet, $maxlength,$zeile, $i++, $row['titel']);
writecol($worksheet, $maxlength,$zeile, $i++, min($row['stunden']));
writecol($worksheet, $maxlength,$zeile, $i++, max($row['stunden']));
$zeile++;
}
}
//Die Breite der Spalten setzen
foreach($maxlength as $i=>$breite)
$worksheet->setColumn($i, $i, $breite+2);
$workbook->close();
}
function writecol($worksheet, &$maxlength, $zeile, $i, $content)
{
$worksheet->write($zeile, $i, $content);
if(isset($maxlength[$i]))
if(mb_strlen($content)>$maxlength[$i])
$maxlength[$i]=mb_strlen($content);
}
?>
+42 -33
View File
@@ -495,11 +495,13 @@ class wochenplan extends basis_db
//global $kalender_begin_ws, $kalender_ende_ws, $kalender_begin_ss, $kalender_ende_ss;
$kal_link_ws=$this->kal_link.'&begin='.$this->studiensemester_now->start.'&ende='.$this->studiensemester_now->ende;
$kal_link_ss=$this->kal_link.'&begin='.$this->studiensemester_next->start.'&ende='.$this->studiensemester_next->ende;
//echo ' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>'.$p->t('global/kalender').':&nbsp;&nbsp;&nbsp;</strong>'.$this->crlf;
echo $this->crlf;
//echo ' '.$p->t('lvplan/uebersicht').':&nbsp;<A href="'.$kal_link_ws.'&format=html" target="_blank" title="HTML">'.$this->studiensemester_now->name.'</A>&nbsp;'.$this->crlf;
echo $this->studiensemester_now->name.'<br>'.$this->crlf;
echo ' <A href="'.$kal_link_ws.'&format=html" target="_blank" title="HTML"><IMG src="../../../skin/images/html.png" height="30" alt="HTML" border="0"></A>'.$this->crlf;
echo ' <A href="'.$kal_link_ws.'&format=excel" title="excel"><IMG src="../../../skin/images/xls.png" height="30" alt="Excel" border="0"></A>'.$this->crlf;
echo ' <A href="'.$kal_link_ws.'&format=csv" title="CSV"><IMG src="../../../skin/images/csv.png" height="30" alt="CSV" border="0"></A>'.$this->crlf;
echo ' <A href="'.$kal_link_ws.'&format=csv&target=outlook" title="CSV-Outlook"><IMG src="../../../skin/images/outlook.png" height="30" alt="CSV-Outlook" border="0"></A>'.$this->crlf;
echo ' <A href="'.$kal_link_ws.'&format=ical&version=1&target=ical" title="iCal Version 1.0"><IMG src="../../../skin/images/ical1.0.png" height="30" alt="vCal Version 1.0" border="0"></A>'.$this->crlf;
@@ -508,6 +510,7 @@ class wochenplan extends basis_db
//echo ' &nbsp;&nbsp;&nbsp;&nbsp;'.$p->t('lvplan/uebersicht').':&nbsp;<A href="'.$kal_link_ss.'&format=html" target="_blank" title="HTML">'.$this->studiensemester_next->name.'</A>&nbsp;'.$this->crlf;
echo ' <span style="color:#999">'.$this->studiensemester_next->name.'</span><br>'.$this->crlf;
echo ' <A href="'.$kal_link_ss.'&format=html" target="_blank" title="HTML"><IMG src="../../../skin/images/html_light.png" height="30" alt="HTML" border="0"></A>'.$this->crlf;
echo ' <A href="'.$kal_link_ss.'&format=excel" title="excel"><IMG src="../../../skin/images/xls_light.png" height="30" alt="Excel" border="0"></A>'.$this->crlf;
echo ' <A href="'.$kal_link_ss.'&format=csv" title="CSV"><IMG src="../../../skin/images/csv_light.png" height="30" alt="CSV" border="0"></A>'.$this->crlf;
echo ' <A href="'.$kal_link_ss.'&format=csv&target=outlook" title="CSV-Outlook"><IMG src="../../../skin/images/outlook_light.png" height="30" alt="CSV-Outlook" border="0"></A>'.$this->crlf;
echo ' <A href="'.$kal_link_ss.'&format=ical&version=1&target=ical" title="iCal Version 1.0"><IMG src="../../../skin/images/ical1.0_light.png" height="30" alt="iCal Version 1.0" border="0"></A>'.$this->crlf;
@@ -2264,6 +2267,7 @@ class wochenplan extends basis_db
{
$blocked=array();
$gruppiert=array();
for ($k=0; $k<$num_rows_stunde; $k++)
{
$row = $this->db_fetch_object($this->stunde, $k);
@@ -2280,14 +2284,20 @@ class wochenplan extends basis_db
unset($lehrverband);
if (isset($lehrfach))
unset($lehrfach);
if (isset($lektor_uids))
unset($lektor_uids);
if (isset($stunden_arr))
unset($stunden_arr);
foreach ($this->std_plan[$i][$j] as $lehrstunde)
{
$unr[]=$lehrstunde->unr;
// Lektoren
$lektor[]=$lehrstunde->lektor;
$lektor_uids[]=$lehrstunde->lektor_uid;
// Lehrverband
$lvb=$lehrstunde->stg.'-'.$lehrstunde->sem;
$stunden_arr[]=$j;
if ($lehrstunde->ver!=null && $lehrstunde->ver!='0' && $lehrstunde->ver!='')
{
$lvb.=$lehrstunde->ver;
@@ -2383,49 +2393,38 @@ class wochenplan extends basis_db
if(!$blockcontinue)
{
// Blockungen ueber mehrere Stunden erkennen
if (isset($this->std_plan[$i][$j+1][$idx]) && isset($this->std_plan[$i][$j+1][$idx]->stundenplan_id)
&& ($this->std_plan[$i][$j][$idx]->unr == $this->std_plan[$i][$j+1][$idx]->unr)
&& $this->std_plan[$i][$j][$idx]!='0' && $k<($num_rows_stunde-1)
&& !($this->std_plan[$i][$j][$idx]->reservierung && $this->std_plan[$i][$j][$idx]->lektor!=$this->std_plan[$i][$j+1][$idx]->lektor))
$blockflag=false;
for($blockstunden=1;$blockstunden<=$num_rows_stunde;$blockstunden++)
{
//2er Block
if(isset($blocked[$this->std_plan[$i][$j][$idx]->unr]))
$blocked[$this->std_plan[$i][$j][$idx]->unr]++;
else
$blocked[$this->std_plan[$i][$j][$idx]->unr]=1;
$row = $this->db_fetch_object($this->stunde, ($k+1));
$end_time=$row->ende;
if (isset($this->std_plan[$i][$j+2][$idx]) && isset($this->std_plan[$i][$j+2][$idx]->stundenplan_id)
&& ($this->std_plan[$i][$j][$idx]->unr == $this->std_plan[$i][$j+2][$idx]->unr)
&& $k<($num_rows_stunde-2)
&& !($this->std_plan[$i][$j][$idx]->reservierung && $this->std_plan[$i][$j][$idx]->lektor!=$this->std_plan[$i][$j+2][$idx]->lektor))
if (isset($this->std_plan[$i][$j+$blockstunden][$idx]) && isset($this->std_plan[$i][$j+$blockstunden][$idx]->stundenplan_id)
&& ($this->std_plan[$i][$j][$idx]->unr == $this->std_plan[$i][$j+$blockstunden][$idx]->unr)
&& $this->std_plan[$i][$j][$idx]!='0' && $k<($num_rows_stunde-$blockstunden)
&& !($this->std_plan[$i][$j][$idx]->reservierung && $this->std_plan[$i][$j][$idx]->lektor!=$this->std_plan[$i][$j+$blockstunden][$idx]->lektor))
{
//3er Block
$blocked[$this->std_plan[$i][$j][$idx]->unr]++;
$row = $this->db_fetch_object($this->stunde, ($k+2));
$end_time=$row->ende;
if (isset($this->std_plan[$i][$j+3][$idx]) && isset($this->std_plan[$i][$j+3][$idx]->stundenplan_id)
&& ($this->std_plan[$i][$j][$idx]->unr == $this->std_plan[$i][$j+3][$idx]->unr)
&& $k<($num_rows_stunde-3)
&& !($this->std_plan[$i][$j][$idx]->reservierung && $this->std_plan[$i][$j][$idx]->lektor!=$this->std_plan[$i][$j+3][$idx]->lektor))
{
//4er Block
if(isset($blocked[$this->std_plan[$i][$j][$idx]->unr]))
$blocked[$this->std_plan[$i][$j][$idx]->unr]++;
$row = $this->db_fetch_object($this->stunde, ($k+3));
else
$blocked[$this->std_plan[$i][$j][$idx]->unr]=1;
$row = $this->db_fetch_object($this->stunde, ($k+$blockstunden));
$stunden_arr[]=$row->stunde;
$end_time=$row->ende;
$blockflag=true;
}
else
{
if(!$blockflag)
{
$row = $this->db_fetch_object($this->stunde, $k);
$stunden_arr[]=$row->stunde;
$end_time=$row->ende;
break;
}
}
}
else
{
$row = $this->db_fetch_object($this->stunde, $k);
$end_time=$row->ende;
}
}
//Wenn im selben Raum mehrere Lektoren sind bzw mehrere Gruppen
//dann werden diese zusammengruppiert und als ein Eintrag angezeigt
for($idx1=0;$idx1<count($this->std_plan[$i][$j]);$idx1++)
@@ -2544,9 +2543,19 @@ class wochenplan extends basis_db
$description = str_replace(',',' ',$description);
$return[]=array('UID'=>$UID,
'lehrfach_id'=>(isset($this->std_plan[$i][$j][$idx]->lehrfach_id)?$this->std_plan[$i][$j][$idx]->lehrfach_id:''),
'ort'=>$this->std_plan[$i][$j][$idx]->ort,
'lektor_uid'=>array_unique($lektor_uids),
'gruppen'=>array_unique($lehrverband),
'stunden'=>array_unique($stunden_arr),
'titel'=>$this->std_plan[$i][$j][$idx]->titel,
'unr'=>$unr,
'Summary'=>$Summary,
'Description'=>$description,
'start_date'=>$start_date,
'end_date'=>$end_date,
'start_time'=>$start_time,
'end_time'=>$end_time,
'dtstart'=>$start_date_time_ical,
'dtend'=>$end_date_time_ical,
'reservierung'=>$this->std_plan[$i][$j][$idx]->reservierung,
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB