diff --git a/cis/private/lvplan/stpl_kalender.php b/cis/private/lvplan/stpl_kalender.php index 6d1d2f42e..47258eab2 100644 --- a/cis/private/lvplan/stpl_kalender.php +++ b/cis/private/lvplan/stpl_kalender.php @@ -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->t('lvplan/fehlerUndFeedback').' '.$p->t('lvplan/lvKoordinationsstelle').'

'; echo ''; } + + +/** + * + */ +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); +} + ?> diff --git a/include/wochenplan.class.php b/include/wochenplan.class.php index f7b1dd8d8..76e420778 100644 --- a/include/wochenplan.class.php +++ b/include/wochenplan.class.php @@ -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 '        '.$p->t('global/kalender').':   '.$this->crlf; echo $this->crlf; //echo ' '.$p->t('lvplan/uebersicht').': '.$this->studiensemester_now->name.' '.$this->crlf; echo $this->studiensemester_now->name.'
'.$this->crlf; echo ' HTML'.$this->crlf; + echo ' Excel'.$this->crlf; echo ' CSV'.$this->crlf; echo ' CSV-Outlook'.$this->crlf; echo ' vCal Version 1.0'.$this->crlf; @@ -508,6 +510,7 @@ class wochenplan extends basis_db //echo '     '.$p->t('lvplan/uebersicht').': '.$this->studiensemester_next->name.' '.$this->crlf; echo ' '.$this->studiensemester_next->name.'
'.$this->crlf; echo ' HTML'.$this->crlf; + echo ' Excel'.$this->crlf; echo ' CSV'.$this->crlf; echo ' CSV-Outlook'.$this->crlf; echo ' iCal Version 1.0'.$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;$idx1std_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, diff --git a/skin/images/xls.png b/skin/images/xls.png new file mode 100644 index 000000000..5c88cbde5 Binary files /dev/null and b/skin/images/xls.png differ diff --git a/skin/images/xls_light.png b/skin/images/xls_light.png new file mode 100644 index 000000000..2f0edf070 Binary files /dev/null and b/skin/images/xls_light.png differ