/add-ons/ical/functions/parse_tzs.php
PHP | 64 lines | 57 code | 4 blank | 3 comment | 14 complexity | c1b23681bf9975145e1f6a8bf26d4b7e MD5 | raw file
Possible License(s): LGPL-2.0, LGPL-2.1, GPL-3.0, Apache-2.0, BSD-3-Clause
- <?php
- $ifile = @fopen($filename, "r");
- if ($ifile == FALSE) exit(error($lang['l_error_cantopen'], $filename));
- $nextline = fgets($ifile, 1024);
- if (trim($nextline) != 'BEGIN:VCALENDAR') exit(error($lang['l_error_invalidcal'], $filename));
- // read file in line by line
- // XXX end line is skipped because of the 1-line readahead
- while (!feof($ifile)) {
- $line = $nextline;
- $nextline = fgets($ifile, 1024);
- $nextline = ereg_replace("[\r\n]", "", $nextline);
- #handle continuation lines that start with either a space or a tab (MS Outlook)
- while (isset($nextline{0}) && ($nextline{0} == " " || $nextline{0} == "\t")) {
- $line = $line . substr($nextline, 1);
- $nextline = fgets($ifile, 1024);
- $nextline = ereg_replace("[\r\n]", "", $nextline);
- }
- $line = trim($line);
-
- switch ($line) {
- case 'BEGIN:VTIMEZONE':
- unset($tz_name, $offset_from, $offset_to, $tz_id);
- break;
- case 'BEGIN:STANDARD':
- unset ($offset_s);
- break;
- case 'END:STANDARD':
- $offset_s = $offset_to;
- break;
- case 'BEGIN:DAYLIGHT':
- unset ($offset_d);
- break;
- case 'END:DAYLIGHT':
- $offset_d = $offset_to;
- break;
- case 'END:VTIMEZONE':
- $tz_array[$tz_id] = array($offset_s, $offset_d); #echo "<pre>$tz_id"; print_r($tz_array[$tz_id]);echo"</pre>";
- break;
- default:
- unset ( $data, $prop_pos, $property);
- if (ereg ("([^:]+):(.*)", $line, $line)){
- $property = $line[1];
- $data = $line[2];
- $prop_pos = strpos($property,';');
- if ($prop_pos !== false) $property = substr($property,0,$prop_pos);
- $property = strtoupper($property);
-
- switch ($property) {
- case 'TZID':
- $tz_id = $data;
- break;
- case 'TZOFFSETFROM':
- $offset_from = $data;
- break;
- case 'TZOFFSETTO':
- $offset_to = $data;
- break;
- }
- }
- }
- }
- ?>