示例#1
0
 private function split_message($message)
 {
     $data = null;
     $elem_data = array();
     $data_list = array();
     $elem_list = array();
     if (empty($message)) {
         return;
     }
     //print "$message\n";
     $lines = explode("\n", $message);
     foreach ($lines as $line) {
         $a = explode(":", $line);
         //print_r($a);
         $item = strtoupper($a[0]);
         if (count($a) > 2) {
             $elem = '';
             for ($i = 1; $i < count($a); $i++) {
                 if ($elem != '') {
                     $elem .= ':';
                 }
                 $elem .= $a[$i];
             }
             //print "elem: $elem\n";
         } else {
             $elem = $a[1];
         }
         switch ($item) {
             case 'BEGIN':
                 /*if (! in_array($elem, $this->elements)) {
                       $found = TRUE;
                       if (($sub = end($elem_list)) !== FALSE) {
                           if (! array_key_exists($sub, $this->subelem))
                               $found = FALSE;
                       }
                       else
                           $found = FALSE;
                       reset($elem_list);
                       if (! $found)
                           break;
                   }*/
                 if (count($data) > 0) {
                     if (count($elem_list) > 0) {
                         /*$name = array_pop($elem_list);
                           if (array_key_exists($name, $this->subelem)) {
                               print "BEGIN: $name\n";
                               print_r($data);
                           }*/
                         $elem_data[array_pop($elem_list)] = $data;
                     } else {
                         $elem_data[$elem] = $data;
                     }
                 }
                 array_push($elem_list, $elem);
                 $data = array();
                 break;
             case 'END':
                 if (count($elem_list) > 0) {
                     /*$name = array_pop($elem_list);
                       if (array_key_exists($name, $this->subelem)) {
                           print "END: $name\n";
                           print_r($data);
                       }*/
                     $elem_data[array_pop($elem_list)] = $data;
                 }
                 $data = array();
                 if ($elem == 'VCALENDAR' && count($elem_data) > 1) {
                     array_push($data_list, $elem_data);
                     $elem_data = array();
                     $elem_list = array();
                 }
                 break;
             default:
                 if (!is_array($data)) {
                     throw new Exception("Message is not valid [missing 'BEGIN']");
                 }
                 if (($pos = strpos($item, ';')) !== false) {
                     $head = substr($item, 0, $pos);
                     $elem = substr($item, $pos + 1) . ';' . $elem;
                     $item = $head;
                     //print "Ny elem: $item:$elem\n";
                 }
                 $data[$item] = $elem;
         }
     }
     //print_r($data_list);
     foreach ($data_list as $item) {
         $c = $this->remove_value($item, 'VCALENDAR');
         $calendar = new VCalendar($c);
         foreach ($item as $k => $v) {
             if ($k == 'DAYLIGHT' || $k == 'STANDARD') {
                 $object = $calendar->getObject('VTimezone');
                 if (!is_object($object)) {
                     $object = $this->newObject('VTimezone');
                     $calendar->addObject($object);
                 }
                 $object->setProperty($k, $v);
             } else {
                 if (($object = $calendar->getObject($k)) == NULL) {
                     $object = $this->newObject($k, $v);
                     $calendar->addObject($object);
                 } else {
                     $object->setAllProperties($v);
                 }
             }
         }
         array_push($this->items, $calendar);
     }
 }