Example #1
0
 /**
  * Convert the raw XML into an object
  *
  * @param \SimpleXMLElement $xml
  * @return Event
  */
 public static function createFromXML(\SimpleXMLElement $xml)
 {
     $event = new Event();
     // loop attributes
     foreach ($xml->attributes() as $attributeName => $value) {
         $method = 'set' . ucfirst($attributeName);
         switch ($attributeName) {
             case 'availablefrom':
                 $method = 'setAvailableFrom';
                 $value = new \DateTime($value);
                 break;
             case 'availableto':
                 $method = 'setAvailableTo';
                 $value = new \DateTime($value);
                 break;
             case 'creationdate':
                 $method = 'setCreationDate';
                 $value = new \DateTime($value);
                 break;
             case 'lastupdated':
                 $method = 'setLastUpdated';
                 $value = new \DateTime($value);
                 break;
             case 'pctcomplete':
                 $method = 'setPercentageComplete';
                 $value = (int) $value;
                 break;
             case 'isparent':
                 $method = 'setIsParent';
                 $value = (string) $value == 'true';
                 break;
             case 'published':
             case 'private':
                 $value = (string) $value == 'true';
                 break;
             default:
                 $value = (string) $value;
         }
         if (!method_exists($event, $method)) {
             if (UitDatabank::DEBUG) {
                 throw new Exception('Unknown attribute: ' . $attributeName);
             }
         } else {
             call_user_func(array($event, $method), $value);
         }
     }
     // loop elements
     foreach ($xml as $element) {
         $value = null;
         $elementName = $element->getName();
         $method = 'set' . ucfirst($element->getName());
         switch ($elementName) {
             case 'calendar':
                 $value = Calendar::createFromXML($element);
                 break;
             case 'categories':
                 if (isset($element->category)) {
                     foreach ($element->category as $category) {
                         $event->addCategory(Category::createFromXML($category));
                     }
                 }
                 break;
             case 'contactinfo':
                 $value = ContactInfo::createFromXML($element);
                 break;
             case 'eventdetails':
                 if (isset($element->eventdetail)) {
                     foreach ($element->eventdetail as $eventDetail) {
                         $event->addEventDetail(EventDetail::createFromXML($eventDetail));
                     }
                 }
                 break;
             case 'languages':
                 if (isset($element->language)) {
                     foreach ($element->language as $language) {
                         $event->addLanguage(Language::createFromXML($language));
                     }
                 }
                 break;
             case 'location':
                 $value = Location::createFromXML($element);
                 break;
             case 'organiser':
                 $value = Organiser::createFromXML($element);
                 break;
             case 'agefrom':
                 $value = (int) $value;
                 break;
             case 'bookingperiod':
                 $value = Period::createFromXML($element);
                 break;
             default:
                 $value = (string) $value;
                 break;
         }
         if (!method_exists($event, $method)) {
             if (UitDatabank::DEBUG) {
                 throw new Exception('Unknown element: ' . $elementName);
             }
         } else {
             if ($value !== null) {
                 call_user_func(array($event, $method), $value);
             }
         }
     }
     return $event;
 }