Inital commit
authorRichard Whitehouse <github@richardwhiuk.com>
Fri, 28 Jan 2011 20:10:08 +0000 (20:10 +0000)
committerRichard Whitehouse <github@richardwhiuk.com>
Fri, 28 Jan 2011 20:10:08 +0000 (20:10 +0000)
index.php [new file with mode: 0644]

diff --git a/index.php b/index.php
new file mode 100644 (file)
index 0000000..3f41850
--- /dev/null
+++ b/index.php
@@ -0,0 +1,87 @@
+<?php
+
+$url = $_GET['url'];
+
+$file = file($url);
+
+$directives = array();
+
+header('Content-type: text/plain; charset=utf-8');
+
+$d = -1;
+
+foreach($file as $line){
+       $line = rtrim($line, "\r\n");
+       if($line[0] == "\t" || $line[0] == " "){
+               $directives[$d] .= substr($line,1);
+       } else {
+               $d ++;
+               $directives[$d] = $line;
+       }
+}
+
+// sanity check
+
+if(
+       ($directives[0] != 'BEGIN:VCALENDAR') ||
+       ($directives[$d] != 'END:VCALENDAR')
+){
+       exit('INVALID .ICAL FILE');
+}
+
+$ical = new ical_obj();
+
+$current = $ical;
+
+class ical_obj {
+       public $_type = NULL;
+       public $_parent = NULL;
+       private $_data = array();
+       function __isset($name){
+               return isset($this->_data[$name]);
+       }
+       function __get($name){
+               return $this->_data[$name];
+       }
+       function __set($name, $value){
+               return ($this->_data[$name][] = $value);
+       }
+       function __unset($name){
+               unset($this->_data[$name]);
+       }
+       function display($t = 0){
+               foreach($this->_data as $k => $l){
+                       foreach($l as $v){
+                               for($i = 0; $i < $t; $i ++){ echo "\t"; }
+                               echo $k . ': ';
+                               if(is_object($v)){
+                                       echo "\r\n";  $v->display($t + 1);
+                               } else {
+                                       echo $v . "\r\n";
+                               }
+                       }
+               }
+       }
+}
+
+foreach($directives as $line){
+       $directive = explode(':', $line, 2);
+       if($directive[0] == 'BEGIN'){
+               $child = new ical_obj();
+               $child->_type = $type = $directive[1];
+               $child->_parent = $current;
+               $current->$type = $child;
+               $current = $child;
+       } elseif($directive[0] == 'END'){
+               if($current->_type != $directive[1]){
+                       exit('INVALID .ICAL FILE');
+               }
+               $current = $current->_parent;
+       } else {
+               $type = $directive[0];
+               $current->$type = $directive[1];
+       }
+}
+
+$ical->display();
+