function run($request)
 {
     $id = $request->getVar('ID');
     if (!is_numeric($id) && !preg_match('/^[0-9]+_[0-9]+$/', $id) || !$id) {
         echo "<p>Specify ?ID=(number) or ?ID=(ID)_(Code)</p>\n";
         return;
     }
     $includeSelected = false;
     $includeChildren = true;
     $duplicates = 'Duplicate';
     $selected = $id;
     $target = new Page();
     $target->Title = "Import on " . date('Y-m-d H:i:s');
     $target->write();
     $targetType = 'SiteTree';
     $from = ExternalContent::getDataObjectFor($selected);
     if ($from instanceof ExternalContentSource) {
         $selected = false;
     }
     $importer = null;
     $importer = $from->getContentImporter($targetType);
     if ($importer) {
         $importer->import($from, $target, $includeSelected, $includeChildren, $duplicates);
     }
 }
 public function getSource()
 {
     if ($this->sourceObjectID && !$this->source) {
         $this->source = ExternalContent::getDataObjectFor($this->sourceObjectID);
     }
     return $this->source;
 }
 /**
  * Get the object where the $keyField is equal to a certain value
  *
  * @param string|int $key
  * @return DataObject
  */
 protected function objectForKey($key)
 {
     if ($this->keyField == 'ID') {
         return ExternalContent::getDataObjectFor($key);
     } else {
         return DataObject::get_one($this->sourceObject, "\"{$this->keyField}\" = '" . Convert::raw2sql($key) . "'");
     }
 }
 public function embedUrl()
 {
     $id = $this->request->param('ID');
     if ($id) {
         $remoteItem = ExternalContent::getDataObjectFor($id);
         if ($remoteItem) {
             return $remoteItem->embedUrl;
         }
     }
 }
 public function crawlsite($request)
 {
     $selected = isset($request['ID']) ? $request['ID'] : 0;
     if (!$selected) {
         $messageType = 'bad';
         $message = _t('ExternalContent.NOITEMSELECTED', 'No item selected to crawl.');
     } else {
         $source = ExternalContent::getDataObjectFor($selected);
         if (!$source instanceof ExternalContentSource) {
             $source = $from->getSource();
         }
         $messageType = 'good';
         $message = _t('ExternalContent.CONTENTMIGRATED', 'Crawling successful.');
         try {
             $source->crawl();
         } catch (Exception $e) {
             $messageType = 'bad';
             $message = "Error crawling: " . $e->getMessage();
         }
     }
     Session::set("FormInfo.Form_EditForm.formError.message", $message);
     Session::set("FormInfo.Form_EditForm.formError.type", $messageType);
     return $this->owner->getResponseNegotiator()->respond($this->owner->getRequest());
 }
 /**
  * Save the content source/item.
  */
 public function save($urlParams, $form)
 {
     // Retrieve the record.
     $record = null;
     if (isset($urlParams['ID'])) {
         $record = ExternalContent::getDataObjectFor($urlParams['ID']);
     }
     if (!$record) {
         return parent::save($urlParams, $form);
     }
     if ($record->canEdit()) {
         // lets load the params that have been sent and set those that have an editable mapping
         if ($record->hasMethod('editableFieldMapping')) {
             $editable = $record->editableFieldMapping();
             $form->saveInto($record, array_keys($editable));
             $record->remoteWrite();
         } else {
             $form->saveInto($record);
             $record->write();
         }
         // Set the form response.
         $this->response->addHeader('X-Status', rawurlencode(_t('LeftAndMain.SAVEDUP', 'Saved.')));
     } else {
         $this->response->addHeader('X-Status', rawurlencode(_t('LeftAndMain.SAVEDUP', 'You don\'t have write access.')));
     }
     return $this->getResponseNegotiator()->respond($this->request);
 }
 /**
  * Called to download this content item and stream it directly to the browser
  * 
  * @param HTTP_Request $request
  */
 public function download($request)
 {
     if ($request->param('ID')) {
         $object = ExternalContent::getDataObjectFor($request->param('ID'));
         if ($object && $object instanceof ExternalContentItem) {
             $object->streamContent();
         }
     }
 }
 /**
  * Lets process a single node, and collect its children
  */
 public function process()
 {
     $remainingChildren = $this->remainingChildren;
     if (!count($remainingChildren)) {
         $this->isComplete = true;
         return;
     }
     $this->currentStep++;
     // lets process our first item
     $pair = array_shift($remainingChildren);
     $sourceObject = ExternalContent::getDataObjectFor($pair->sourceID);
     if (!$sourceObject) {
         $this->addMessage("Missing source object for " . $pair->sourceID, 'WARNING');
         $this->remainingChildren = $remainingChildren;
         return;
     }
     $targetObject = DataObject::get_by_id($pair->targetType, $pair->targetID);
     if (!$targetObject) {
         $this->addMessage("Missing target object for {$pair->targetType} {$pair->sourceID}", 'WARNING');
         $this->remainingChildren = $remainingChildren;
         return;
     }
     // lets do a single import first, then check the children and append them
     $pageType = $this->getExternalType($sourceObject);
     if (isset($this->contentTransforms[$pageType])) {
         $transformer = $this->contentTransforms[$pageType];
         $result = $transformer->transform($sourceObject, $targetObject, $this->duplicateStrategy);
         // if there's more, then transform them
         if ($this->includeChildren && $result && $result->children && count($result->children)) {
             foreach ($result->children as $child) {
                 $remainingChildren[] = new EC_SourceTarget($child->ID, $result->page->ID, $result->page->ClassName);
                 $this->totalSteps++;
             }
         }
     }
     $this->remainingChildren = $remainingChildren;
     if (!count($remainingChildren)) {
         $this->isComplete = true;
         return;
     }
 }