/**
  * Import events created with: http://www.myeventon.com/
  * into a 'CalendarEvent' Page type from Unclecheese's "Event Calendar" module
  *
  * Step 2) Update the page to 'CalendarEvent' page type and add event data appropriately
  */
 public function importEvents_MyEventOn_Step2($calendarHolder = null)
 {
     $this->logFunctionStart(__FUNCTION__);
     if (!class_exists('CalendarDateTime')) {
         throw new WordpressImportException(__FUNCTION__ . ' requires Unclecheese\'s "Event Calendar" module');
     }
     if (!CalendarDateTime::has_extension('WordpressImportDataExtension')) {
         throw new WordpressImportException('CalendarDateTime requires WordpressImportDataExtension.');
     }
     // Debug
     //Debug::dump($this->_db->getPosts('ajde_events', true)); exit;
     // Get the calendar holder the events should belong to.
     if ($calendarHolder === null) {
         $calendarHolder = Calendar::get()->filter(array('WordpressData' => '1'))->first();
         if (!$calendarHolder) {
             $calendarHolder = Calendar::create();
             $calendarHolder->Title = 'Wordpress Imported Events';
             $calendarHolder->URLSegment = 'events';
             $calendarHolder->WordpressData = 1;
             try {
                 $this->writeAndPublishRecord($calendarHolder);
             } catch (Exception $e) {
                 $this->log($calendarHolder, 'error', $e);
             }
         }
     }
     // Convert to CalendarEvent and attach relevant event data
     $existingWpRecords = singleton('Page')->WordpressRecordsByWordpressID();
     foreach ($this->_db->getPosts('ajde_events') as $wpData) {
         $wpID = $wpData['ID'];
         if (!isset($existingWpRecords[$wpID])) {
             $this->log('Unable to find Wordpress ID #' . $wpID, 'error');
             continue;
         }
         $record = $existingWpRecords[$wpID];
         $wpMeta = $this->_db->attachAndGetPostMeta($wpData);
         if ($record->ClassName !== 'CalendarEvent') {
             $record = $record->newClassInstance('CalendarEvent');
         }
         $record->ParentID = $calendarHolder->ID;
         $startDate = isset($wpMeta['evcal_srow']) && $wpMeta['evcal_srow'] ? (int) $wpMeta['evcal_srow'] : null;
         $endDate = isset($wpMeta['evcal_erow']) && $wpMeta['evcal_erow'] ? (int) $wpMeta['evcal_erow'] : null;
         if ($startDate && $endDate) {
             $subRecord = null;
             if ($record->exists()) {
                 $subRecord = $record->DateTimes()->find('WordpressID', $wpID);
             }
             if (!$subRecord) {
                 $subRecord = CalendarDateTime::create();
             }
             $subRecord->AllDay = isset($wpMeta['evcal_allday']) && $wpMeta['evcal_allday'] === 'yes';
             $subRecord->StartDate = date('Y-m-d', $startDate);
             $subRecord->StartTime = date('H:i:s', $startDate);
             $subRecord->EndDate = date('Y-m-d', $endDate);
             $subRecord->EndTime = date('H:i:s', $endDate);
             $subRecord->WordpressData = $record->WordpressData;
             if (!$subRecord->exists()) {
                 // NOTE(Jake): Will write $subRecord when $record is written if not exists, otherwise
                 //			   it will write it when it's ->add()'d
                 $record->DateTimes()->add($subRecord);
             } else {
                 try {
                     $record->write();
                     $this->log($record, 'changed');
                 } catch (Exception $e) {
                     $this->log($record, 'error', $e);
                 }
             }
         }
         // Support Addressable extension from Addressable module
         if (isset($wpMeta['evcal_location'])) {
             if ($record->Address !== $wpMeta['evcal_location']) {
                 $record->Address = $wpMeta['evcal_location'];
             }
         }
         // Support Geocodable extension from Addressable module
         if (isset($wpMeta['evcal_lat'])) {
             $record->Lat = $wpMeta['evcal_lat'];
         }
         if (isset($wpMeta['evcal_lng'])) {
             $record->Lng = $wpMeta['evcal_lng'];
         }
         $changedFields = $record->getChangedFields(true, DataObject::CHANGE_VALUE);
         unset($changedFields['Lat']);
         unset($changedFields['Lng']);
         if ($changedFields) {
             try {
                 $isPublished = isset($wpData['post_status']) && $wpData['post_status'] === 'publish' || $record->isPublished();
                 $this->writeAndPublishRecord($record, $isPublished);
             } catch (Exception $e) {
                 $this->log($record, 'error', $e);
             }
         } else {
             $this->log($record, 'nochange');
         }
     }
     $this->logFunctionEnd(__FUNCTION__);
 }