From 10087645aa931dc38843cb58dba33a2e29abf34f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Mon, 15 Oct 2012 15:23:57 +0000 Subject: [PATCH] Coodle Erweiterungen - Freebusy von Ressourcen anzeigen - Event Handler Move und Resize --- cis/private/coodle/coodle_autocomplete.php | 4 +- cis/private/coodle/coodle_events.php | 145 ++++++++++++++++++ cis/private/coodle/stammdaten.php | 2 +- cis/private/coodle/termin.php | 163 ++++++++++++++------- include/ical.class.php | 30 ++++ 5 files changed, 292 insertions(+), 52 deletions(-) create mode 100755 cis/private/coodle/coodle_events.php diff --git a/cis/private/coodle/coodle_autocomplete.php b/cis/private/coodle/coodle_autocomplete.php index c4eb9afac..c459926e3 100755 --- a/cis/private/coodle/coodle_autocomplete.php +++ b/cis/private/coodle/coodle_autocomplete.php @@ -37,7 +37,7 @@ switch($work) foreach($ort->result as $row) { - echo html_entity_decode($row->ort_kurzbz.'| Ort | '.$row->bezeichnung."\n"); + echo html_entity_decode($row->ort_kurzbz.'|Ort|'.$row->bezeichnung."\n"); } $benutzer = new benutzer(); @@ -47,7 +47,7 @@ switch($work) foreach($benutzer->result as $row) { - echo html_entity_decode($row->uid.'| Person | '.$row->nachname.' '.$row->vorname."\n"); + echo html_entity_decode($row->uid.'|Person|'.$row->nachname.' '.$row->vorname."\n"); } break; default: diff --git a/cis/private/coodle/coodle_events.php b/cis/private/coodle/coodle_events.php new file mode 100755 index 000000000..bfccb2dfa --- /dev/null +++ b/cis/private/coodle/coodle_events.php @@ -0,0 +1,145 @@ + + */ +require_once('../../../config/cis.config.inc.php'); +require_once('../../../include/ort.class.php'); +require_once('../../../include/benutzer.class.php'); +require_once('../../../include/ical.class.php'); +require_once('../../../include/wochenplan.class.php'); + +if(isset($_POST['id'])) + $id = $_POST['id']; + +if(isset($_POST['typ'])) + $typ = $_POST['typ']; + +if(isset($_POST['start'])) + $start = $_POST['start']; +if(isset($_POST['end'])) + $end = $_POST['end']; + +/* + Beispiel JSON Event + [ + { + "id":111, + "title":"Event1", + "start":"2012-10-10", + "url":"http:\/\/yahoo.com\/" + }, + { + "id":222, + "title":"Event2", + "start":"2012-10-20", + "end":"2012-10-22", + "url":"http:\/\/yahoo.com\/" + } + ] + */ +$events=array(); + +switch($typ) +{ + case 'Ort': + // LVPlan/Reservierungen des Raumes holen + + $stdplan = new wochenplan(); + $stdplan->load_data('ort',null,$id); + + while($start<$end) + { + $i++; + if(!date("w",$start)) + $start=jump_day($start,1); + + $stdplan->init_stdplan(); + $datum=$start; + $start+=604800; // eine Woche + + // Stundenplan einer Woche laden + if(!$stdplan->load_week($datum,'stundenplan')) + { + die($stdplan->errormsg); + } + + $result = $stdplan->draw_week_csv('return', LVPLAN_KATEGORIE); + foreach($result as $row) + { + $item['id']=$id.$row['dtstart'].$row['dtend']; + $item['title']=$id; + $item['start']=fixDate($row['dtstart']); + $item['end']=fixDate($row['dtend']); + $item['allDay']=false; + $item['editable']=false; + $events[]=$item; + } + } + break; + + case 'Person': + + //FreeBusy Information holen + $fp = fopen(APP_ROOT.'cis/public/freebusy.php/'.$id,'r'); + if (!$fp) + { + echo "$errstr ($errno)
\n"; + } + else + { + $doc = ''; + while (!feof($fp)) + { + $line = fgets($fp); + $doc.=$line; + } + fclose($fp); + + //FreeBusy Parsen + $ical = new ical(); + $ical->parseFreeBusy($doc); + + foreach($ical->dtresult as $row) + { + $item['id']=$id.$row['dtstart'].$row['dtend']; + $item['title']=$id; + $item['start']=fixDate($row['dtstart']); + $item['end']=fixDate($row['dtend']); + $item['allDay']=false; + $item['editable']=false; + $events[]=$item; + } + } + + break; + default: + break; +} +echo json_encode($events); + +function fixDate($date) +{ + $jahr = mb_substr($date,0,4); + $monat = mb_substr($date,4,2); + $tag = mb_substr($date,6,2); + $stunde = mb_substr($date,9,2); + $minute = mb_substr($date,11,2); + $sekunde = mb_substr($date,13,2); + return $jahr.'-'.$monat.'-'.$tag.'T'.$stunde.':'.$minute.':'.$sekunde; +} +?> \ No newline at end of file diff --git a/cis/private/coodle/stammdaten.php b/cis/private/coodle/stammdaten.php index fff3f3be4..907d199e6 100755 --- a/cis/private/coodle/stammdaten.php +++ b/cis/private/coodle/stammdaten.php @@ -193,7 +193,7 @@ if($coodle->coodle_id=='') echo $p->t('coodle/neuerEintrag'); else echo $p->t('coodle/bearbeiten'); -echo ''; /* echo '
diff --git a/cis/private/coodle/termin.php b/cis/private/coodle/termin.php index b2cdcb804..9dc969c2f 100755 --- a/cis/private/coodle/termin.php +++ b/cis/private/coodle/termin.php @@ -22,6 +22,7 @@ require_once('../../../include/functions.inc.php'); require_once('../../../include/phrasen.class.php'); require_once('../../../include/coodle.class.php'); require_once('../../../include/datum.class.php'); + $uid = get_uid(); $sprache = getSprache(); $p = new phrasen($sprache); @@ -138,42 +139,37 @@ echo ' diff --git a/include/ical.class.php b/include/ical.class.php index fa338a4d4..ef27a921b 100755 --- a/include/ical.class.php +++ b/include/ical.class.php @@ -95,5 +95,35 @@ class ical extends basis_db { return implode($this->result); } + + /** + * Importiert ein FreeBusy File + * + * @param $ical + * @param $typ + */ + public function parseFreeBusy($ical) + { + $rows = explode("\n",$ical); + + $idx = count($this->result); + $status=0; + $dtstart=''; + $dtend=''; + + foreach($rows as $row) + { + if(mb_strstr($row,'FREEBUSY:')) + { + + $len = mb_strlen($row); + $slashpos = mb_strpos($row, '/'); + $fblen = mb_strlen('FREEBUSY:'); + $dtstart = mb_substr($row, $fblen, $len-$slashpos); + $dtend = mb_substr($row, $slashpos+1); + $this->dtresult[]=array('dtstart'=>trim($dtstart),'dtend'=>trim($dtend)); + } + } + } } ?> \ No newline at end of file