Login   Register  
PHP Classes
elePHPant
Icontem

File: iCalParse.example.ics

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  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: 6 months 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