diff options
author | MaZderMind | 2014-11-03 21:53:30 +0100 |
---|---|---|
committer | MaZderMind | 2014-11-07 00:17:40 +0100 |
commit | db0a85ea97096af4529b0ea3b903d182144c1310 (patch) | |
tree | 7dc8cebc458175627c7dd809ec67d6c2288cc221 /lib | |
parent | 82a054e876424cf055793ae653fbb40b6d5e58ec (diff) |
experimental program view
Diffstat (limited to '')
-rw-r--r-- | lib/config.php (renamed from config.php) | 5 | ||||
-rw-r--r-- | lib/helper.php | 8 | ||||
-rw-r--r-- | lib/program.php | 107 |
3 files changed, 120 insertions, 0 deletions
diff --git a/config.php b/lib/config.php index 4e351ca..2b6b78e 100644 --- a/config.php +++ b/lib/config.php @@ -1,8 +1,13 @@ <?php +date_default_timezone_set('Europe/Berlin'); // guessed automatically // $GLOBALS['CONFIG']['baseurl'] = 'http://foo.com/bar/'; +$GLOBALS['CONFIG']['SCHEDULE'] = 'http://fahrplan.mrmcd.net/schedule.xml'; +$GLOBALS['CONFIG']['SCHEDULE_CACHE_TTL'] = 5*60; +$GLOBALS['CONFIG']['SCHEDULE_SCALE'] = 0.2; // float, px per second + $GLOBALS['CONFIG']['ROOMS'] = array( 'saal1' => 'Saal 1', 'saal2' => 'Saal 2', diff --git a/lib/helper.php b/lib/helper.php index 8951948..4dc6f69 100644 --- a/lib/helper.php +++ b/lib/helper.php @@ -1,5 +1,7 @@ <?php +require_once('program.php'); + function link_index() { return ''; @@ -46,3 +48,9 @@ function baseurl() return $base; } + +function strtoduration($str) +{ + $parts = explode(':', $str); + return ((int)$parts[0] * 60 + (int)$parts[1]) * 60; +} diff --git a/lib/program.php b/lib/program.php new file mode 100644 index 0000000..900d1d9 --- /dev/null +++ b/lib/program.php @@ -0,0 +1,107 @@ +<?php + +function program() +{ + $cacheidx = __FILE__.':'.__FUNCTION__.':program'; + if(function_exists('apc_fetch') && $program = apc_fetch($cacheidx)) + return $program; + + echo 'fresh'; + $program = array(); + $schedule = simplexml_load_file($GLOBALS['CONFIG']['SCHEDULE']); + + $dayidx = 0; + foreach($schedule->day as $day) + { + $dayidx++; + $daystart = strtotime((string)$day['start']); + $dayend = strtotime((string)$day['end']); + + $roomidx = 0; + foreach($day->room as $room) + { + $roomidx++; + $name = (string)$room['name']; + $lastend = false; + + foreach ($room->event as $event) + { + $start = strtotime((string)$event->date); + $duration = strtoduration((string)$event->duration); + $end = $start + $duration; + + if($lastend && $lastend < $start) + { + // synthesize pause event + $pauseduration = $start - $lastend; + $program[$name][] = array( + 'special' => 'pause', + 'title' => round($pauseduration / 60).' minutes pause', + + 'fstart' => date('c', $lastend), + 'fend' => date('c', $start), + + 'start' => $lastend, + 'end' => $start, + 'duration' => $pauseduration, + ); + } + else if(!$lastend && $daystart < $start) + { + $program[$name][] = array( + 'special' => 'gap', + + 'fstart' => date('c', $daystart), + 'fend' => date('c', $start), + + 'start' => $daystart, + 'end' => $start, + 'duration' => $start - $daystart, + ); + } + + $program[$name][] = array( + 'title' => (string)$event->title, + + 'fstart' => date('c', $start), + 'fend' => date('c', $end), + + 'start' => $start, + 'end' => $end, + 'duration' => $duration, + ); + + $lastend = $end; + } + + // synthesize daychange event + if(!$lastend) $lastend = $daystart; + if($lastend < $dayend) + { + $program[$name][] = array( + 'special' => 'gap', + + 'fstart' => date('c', $lastend), + 'fend' => date('c', $dayend), + + 'start' => $lastend, + 'end' => $dayend, + 'duration' => $dayend - $lastend, + ); + } + + if($dayidx < count($schedule->day)) + { + $program[$name][] = array( + 'special' => 'daychange', + 'title' => 'Daychange from Day '.$dayidx.' to '.($dayidx+1), + ); + } + } + } + + if(function_exists('apc_store')) + apc_store($cacheidx, $program, $GLOBALS['CONFIG']['SCHEDULE_CACHE_TTL']); + + return $program; +} |