From 606949513cf9024616e85551ef4a5c4801927cf4 Mon Sep 17 00:00:00 2001 From: oesi Date: Mon, 15 Feb 2016 10:19:20 +0100 Subject: [PATCH] =?UTF-8?q?-=20LVPlan=20kann=20als=20Excel=20exportiert=20?= =?UTF-8?q?werden=20-=20Stunden=20werden=20im=20Export=20(ICal,=20Caldav,?= =?UTF-8?q?=20etc)=20nicht=20mehr=20zu=204er=20Bl=C3=B6cken=20geblockt=20s?= =?UTF-8?q?ondern=20auf=20die=20gesammte=20L=C3=A4nge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cis/private/lvplan/stpl_kalender.php | 148 ++++++++++++++++++++++----- include/wochenplan.class.php | 75 ++++++++------ skin/images/xls.png | Bin 0 -> 1271 bytes skin/images/xls_light.png | Bin 0 -> 1172 bytes 4 files changed, 163 insertions(+), 60 deletions(-) create mode 100644 skin/images/xls.png create mode 100644 skin/images/xls_light.png 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 0000000000000000000000000000000000000000..5c88cbde54075708c382dcf97b8e6fe52c2af28f GIT binary patch literal 1271 zcmV>lXf00004b3#c}2nYxW zdbBMMMzs(+G&|7v(KI0 z=^P(OYZ<1UDb(r%|EGJu`~C0tJLi1oo-0T~hLY_CLKEE!OaO6QL|79%^mbFcTx03B zmq2brGDJXm(4=3*&N4Mo4NWp2LKEEt%m6Y#E|Mwow4rp{@cV#Ex2;6V!$^vO3<=8& z0i`6V8dA!Xa5%gccpXTMmsGavC+m^Q>lxi+d0D1N`PzAoqWmlsV9&{`>F*ynWs6FA zkN4|UGh1JoJUY-reN{?%*kCYxEEGlA0<7zewz196tWU~m^@i?=56(1kY~6e=)ZgZ< z-M`Qgy%%D}m?0c}_j$A_y-&Q9a=lO##RHfFA*Ea+#5hF!S^1-(EwyCFahuZ@O6eXq zn{-jXqH3Zs5R*pahWD?Y<+K=e(H`ozODQjz42Fe(TPTVm0YdF+Q)WhbesARUPA>~S zJ;rs1yVnuU9Y36J*UZ7F)ApL@_W7HPy3~B=)~qQSq3hKJ6j;q1U%!|q3T!>*ES*-w zp?Bscgov$~)UN5ST#JbxKU&1p!uu!h&F9APP1&;vdm^6t?f@(%JwJT7kQXM7?24_M zKY`Cnr=t<#L0(B$kF-Z3&WyA)YhTQ2N0imOPB5h~j}}A{%_oXfi$(W z;`RA^e4Y?QO3BGn6C>iAQFV@7YYwAEj_C5V-gaWIzCbV- zV)Uqy7}HF|9s#jR*sMYbnwuSb_QiHwZFg|G+St5xJ5HwyfFs|1PnEs8E5Ej`p7%c3 zz^OA;T&}ssUpHzKLO_yB^Wwqx9G#Ai29+I(61w zP5sRV%2q8$RaJKHJ3!T0J5we<1wcznEB5ohq0^@_c+enjHZ)++>v6hV-jDK<*xi%XfkB9Ts)ug4TVKf-1I8%j;MtQ8D zfZ4NWCI!-U=+!pfvLl(8l&ilaun!+PWFq{BhhD56fyC+&NUR=##OnVCA|O1_#RWp? zyw(DKAU!A3Qs;7egp|TKFc?uKCo8k_FWxIcq0mMl#D;+>-lMh(DWx_X4sQll0OkP( h@CzZf=ybYGe*^!2#={g9sl)&P002ovPDHLkV1lcwP=x>h literal 0 HcmV?d00001 diff --git a/skin/images/xls_light.png b/skin/images/xls_light.png new file mode 100644 index 0000000000000000000000000000000000000000..2f0edf070b1d5a280d2640597b482f648e5fc15e GIT binary patch literal 1172 zcmV;F1Z(?=P)>lXf00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3D^Jt3D^P0pt-F8000McNliru-~tN|1_UiSLE!)Z1R+U8 zK~z}7?UqYyR8<(qe`oHUX{Vj(6gus+1*ub;rV3P$QcSUk*oC^%L^p((plFP#QR7w@ zlCYA5g>m76;6@_}N#n*uA~K1T0x1OJhF7OEW77w;^SJZ6ckbMKTp*=|KBmx2UGVMh zIp4|ucfa#L-#LO3qW^fPMF{x=umkuVoBnSPy)wQ~?k6YCz5^UavH=(;=5QTR0f(KXEqr5b%k!?;|;hq~pKbcbx@ue@PlrN~KsVehz#9I2TI# zaqznTa`=vS?wGI2S^TJP>tw)JWdaP{ob;T!c&lE@`D^#T)PB1w*pOXB-vmyos`|As zP4g)5#Zt7%oWZeQuaeHsuW(J3laKp4iN(|WeEtTuJ%3$$Q!O99x*3NM%N68HVVY(N zs41Am0U>yPv8s$Gvd-h7YxNo3ROXIXx)j?eS`PUDL`%KbIQVkMwA-oJi-;E_{OwZJ zH-V%uO;ZAxmNo9KsAygaJD%0~?zg|Vlgcmods{Zuad7WuoXXM`%p1nIQ&F1dnbjeL zYq|QZudd{?H(p>vooCUUooxXQ?c1^}#Dkh8otnAft#tC~>)U7z_#T?u^V~)b^gdgP zCm!wiJ{XlwmHyYZ(b?jk9qa4d#M`^t5IkDUdc?Br=?a(2zmmnal>Bt=8m$2zJ?+ga z7B>ooX~p62KQ_qYMqbyaoT?glx4Dl3R-7D;F+ zq%9wsD;r2EokrJpXR<_N zF$x8fhK71vE*DbD$L}Mll*Z{ZA+os~*=&x}XF_B$82~O{xyooXHk&&$6X(>xFN}mE zOiWI3`_A;T5G7Y+`?gL-Mk8DrzJipJ>Z&R_w{BiA_hxt$DWSW&YegNlq>8ADLeH+9 zjEqJIN22t+*p0(+f2nOrlA6ZU^bGDwH@0mvbm0;+@%ZYuc(2EE@1nx(u0%HslA1=* zvd9}chEV`1X>4quYsYph%i{ddC9Yk+xjG=WZIjn^LVpgje%(5}9uI$n&XGuIcf}Wo zrp5rhyL$)(8WcDSuCn%e!Ejw|ZP%J!daLp`Uh$eRP4h7D)f(^2F(IW?i^bwM mz^f?&Qe|g0000