/** * 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__); }