PHP Classes

File: iCalParse.example.ics

Recommend this page to a friend!
  Classes of Timo Henke   PHP iCal Parser   iCalParse.example.ics   Download  
File: iCalParse.example.ics
Role: Auxiliary data
Content type: text/plain
Description: Example ICS File
Class: PHP iCal Parser
Parse calendar event information in iCal format
Author: By
Last change: Bad Subject removed
Date: 10 years ago
Size: 3,697 bytes
 

Contents

Class file image Download
BEGIN:VCALENDAR PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:Europe/Berlin X-LIC-LOCATION:Europe/Berlin BEGIN:DAYLIGHT TZOFFSETFROM:+0100 TZOFFSETTO:+0200 TZNAME:CEST DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0200 TZOFFSETTO:+0100 TZNAME:CET DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20140107T092011Z LAST-MODIFIED:20140107T121503Z DTSTAMP:20140107T121503Z UID:20f78720-d755-4de7-92e5-e41af487e4db SUMMARY:Just a Test DTSTART;TZID=Europe/Berlin:20140102T110000 DTEND;TZID=Europe/Berlin:20140102T120000 X-MOZ-GENERATION:4 DESCRIPTION:Here is a new Class:\n\n<?php\n\n/**\n * This is iCalParse\n * \n * @category Parser\n * @author Timo Henke <phpstuff@thenke.de>\n * @l icense http://www.opensource.org/licenses/mit-license.php MIT License\n */\n\n\tclass iCalParse\n\t{\n\t\tconst VERSION = "1.0"\;\n\n\t\tpublic fu nction doParse( $data )\n\t\t{\n\t\t\t$lines = preg_split('/\\r?\\n/'\,$da ta\,-1\, PREG_SPLIT_NO_EMPTY)\;\n \t\tif( preg_match('/^BEGIN:VCALENDAR /i'\,$lines[0]) && preg_match('/^END:VCALENDAR/i'\,$lines[sizeof($lines)-1 ]) )\n \t\t{\n\t\t\t\t$res = array()\;\n\t\t\t\t$addTo = array()\;\n\t\ t\t\t$addToElement = ''\;\n\t\t\t\tforeach ($lines as $line)\n\t\t\t\t{\n\ t\t\t\t\tif( preg_match('/^(BEGIN|END):(VTODO|VEVENT|VCALENDAR|DAYLIGHT|VT IMEZONE|STANDARD)/s'\,$line\,$m) )\n\t\t\t\t\t{\n\t\t\t\t\t\tswitch( $m[1] )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcase 'BEGIN' :\n\t\t\t\t\t\t\t\t$addTo[] = trim( (sizeof($addTo) > 0 ? $addTo[sizeof($addTo)-1] : '') . '/' . $m[2] \,'/')\;\n\t\t\t\t\t\t\t\tbreak\;\n\t\t\t\t\t\t\tcase 'END' :\n\t\t\t\t\t\ t\t\tarray_pop($addTo)\;\n\t\t\t\t\t\t\t\tbreak\;\n\t\t\t\t\t\t}\n\t\t\t\t \t\tif( sizeof($addTo) > 0 )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$addToElement = $addTo[sizeof($addTo)-1]\;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\ t\t\t\t\t{\n\t\t\t\t\t\tif( substr($line\,0\,1) != ' ' )\n\t\t\t\t\t\t{\n\ t\t\t list($lastkey\,$value) = $this->splitKeyValue($line)\ ;\n\t\t\t\t\t\t\t$this->arrayPathSet($res\,$addToElement.'/'.$lastkey\,$va lue)\;\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$t his->arrayPathSet($res\,$addToElement.'/'.$lastkey\,$this->arrayPathGet($r es\,$addToElement.'/'.$lastkey) . substr($line\,1))\;\n\t\t\t\t\t\t}\n\t\t \t\t\t}\n\t\t\t\t}\n \t\t\t}\n \t\t\treturn $res\;\n\t\t}\n\n\t\tfunct ion arrayPathSet(&$a\, $path\, $value)\n\t\t{\n\t\t\t$p = explode('/'\,$pa th)\;\n\t\t\t$key = array_shift($p)\;\n\t\t\tif (empty($p))\n\t\t\t{\n\t\t \t\t$a[$key] = $value\;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (!isset( $a[$key]) || !is_array($a[$key]))\n\t\t\t\t{\n\t\t\t\t\t$a[$key] = array() \;\n\t\t\t\t}\n\t\t\t\t$this->arrayPathSet($a[$key]\, implode('/'\,$p)\, $ value)\;\n\t\t\t}\n\t\t}\n\n\t\tfunction arrayPathGet($data\, $path)\n\t\t {\n\t\t\t$found = true\;\n\t\t\t$path = explode("/"\, trim($path\,'/'))\;\ n\t\t\t$r = count($path)\;\n\t\t\tfor( $x = 0\; ($x < $r && $found)\; $x++ )\n\t\t\t{\n\t\t\t\t$key = $path[$x]\;\n\t\t\t\tif (isset($data[$key]))\n \t\t\t\t{\n\t\t\t\t\t$data = $data[$key]\;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\ t\t{\n\t\t\t\t\t$found = false\;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $found ? $data : false\;\n\t\t}\n\n\t\tpublic function splitKeyValue( $row )\n\t\ t{\n\t\t\tpreg_match("/([^:]+)[:]([\\w\\W]*)/"\, $row\, $matches)\;\n\t\t\ treturn (sizeof($matches) == 0) ? false : array_splice($matches\, 1\, 2)\; \n\t\t}\n\n\t}\n END:VEVENT END:VCALENDAR