/**
  * Updates the CMS fields adding the fields defined in this extension
  * @param {FieldList} $fields Field List that new fields will be added to
  */
 public function updateSettingsFields(FieldList $fields)
 {
     $kapostRefID = $this->owner->KapostRefID;
     if (!empty($kapostRefID)) {
         if (CMSPageSettingsController::has_extension('KapostPageSettingsControllerExtension')) {
             $messageContent = _t('KapostSiteTreeExtension.KAPOST_CONTENT_WARNING_RO', '_This Page\'s content is being populated by Kapost, some fields are not editable.');
         } else {
             $messageContent = _t('KapostSiteTreeExtension.KAPOST_CONTENT_WARNING', '_This Page\'s content is being populated by Kapost.');
         }
         //Edit in kapost link
         $kapostBase = KapostAdmin::config()->kapost_base_url;
         if (!empty($kapostBase)) {
             $messageContent .= ' <a href="' . Controller::join_links($kapostBase, 'posts', $kapostRefID) . '" target="_blank">' . _t('KapostSiteTreeExtension.KAPOST_CONTENT_EDIT_LABEL', '_Click here to edit in Kapost') . '</a>';
         }
         $fields->insertBefore(new LiteralField('KapostContentWarning', '<div class="message warning">' . $messageContent . '</div>'), 'ClassName');
         //Detect Incoming Changes
         if (Permission::check('CMS_ACCESS_KapostAdmin')) {
             $incoming = KapostObject::get()->filter('KapostRefID', Convert::raw2sql($kapostRefID));
             if ($incoming->count() >= 1) {
                 $link = Controller::join_links(AdminRootController::config()->url_base, KapostAdmin::config()->url_segment, 'KapostObject/EditForm/field/KapostObject/item', $incoming->first()->ID, 'edit');
                 $messageContent = _t('KapostSiteTreeExtension.KAPOST_INCOMING', '_There are incoming changes from Kapost waiting for this page.') . ' ' . '<a href="' . $link . '" class="cms-panel-link">' . _t('KapostSiteTreeExtension.KAPOST_INCOMING_VIEW', '_Click here to view the changes') . '</a>';
                 $fields->insertBefore(new LiteralField('KapostIncomingWarning', '<div class="message warning">' . $messageContent . '</div>'), 'ClassName');
             }
         }
     }
 }
 /**
  * Gets fields used in the cms
  * @return {FieldList} Fields to be used
  */
 public function getCMSFields()
 {
     $kapostBase = KapostAdmin::config()->kapost_base_url;
     if ($kapostBase[strlen($kapostBase) - 1] != '/') {
         $kapostBase .= '/';
     }
     $fields = new FieldList(new ReadonlyField('Title', $this->fieldLabel('Title')), new ReadonlyField('Created', _t('KapostConversionHistory.CONVERSION_DATE', '_Conversion Date')), new ReadonlyField('ConverterName', $this->fieldLabel('ConverterName')), new ReadonlyField('KapostChangeTypeNice', $this->fieldLabel('KapostChangeType')), new ReadonlyField('KapostAuthor', $this->fieldLabel('KapostAuthor')), new ReadonlyField('DestinationTypeNice', $this->fieldLabel('DestinationType')), $kapostRef = ReadonlyField::create('KapostRefID_linked', $this->fieldLabel('KapostRefID'), !empty($kapostBase) ? '<a href="' . htmlentities($kapostBase . 'posts/' . $this->KapostRefID) . '" target="_blank">' . htmlentities($this->KapostRefID) . '</a>' : $this->KapostRefID), $destination = ReadonlyField::create('Destination', $this->fieldLabel('DestinationID'), '<a href="' . htmlentities($this->getDestinationLink()) . '" class="kapost-panel-link">' . _t('KapostConversionHistory.CONVERTED_TO_OBJECT', '_View Destination Object') . '</a>'));
     $kapostRef->dontEscape = true;
     $destination->dontEscape = true;
     //Allow extensions to add/remove fields
     $this->extend('updateCMSFields', $fields);
     return $fields;
 }
 /**
  * Handles conversion of the current record
  * @param {array} $data Submitted Data
  * @param {Form} $form Submitting Form
  * @return {mixed} Returns an SS_HTTPResponse or an HTML string
  */
 public function doConvertObject($data, Form $form)
 {
     //Make sure the record still exists
     if (empty($this->record) || $this->record === false || !$this->record->exists()) {
         return $this->httpError(404);
     }
     if ($data['ConvertMode'] == 'ReplacePage') {
         if (empty($data['ReplacePageID']) || $data['ReplacePageID'] == 0) {
             $form->sessionMessage(_t('KapostAdmin.NO_REPLACE_PAGE_TARGET', '_You must select a page to replace'), 'error');
             return $this->popupController->redirectBack();
         }
         try {
             $redirectURL = $this->replacePage($data, $form);
         } catch (ValidationException $e) {
             //Catch any validation exception and return it as an error message on the form
             $form->sessionMessage($e->getMessage(), 'error');
             return $this->popupController->redirectBack();
         }
         if ($redirectURL === false) {
             $form->sessionMessage(_t('KapostAdmin.ERROR_COULD_NOT_REPLACE', '_Sorry an error occured and the target page could not be replaced.'), 'error');
             return $this->popupController->redirectBack();
         } else {
             Requirements::clear();
             Requirements::customScript('window.parent.jQuery(\'.cms-edit-form.KapostAdmin\').entwine(\'ss\').panelRedirect(' . json_encode($redirectURL) . ')');
             //Clean up the expired previews
             $this->cleanUpExpiredPreviews();
             return $this->customise(array('Title' => null, 'Content' => null, 'Form' => null))->renderWith('CMSDialog');
         }
     } else {
         if ($data['ConvertMode'] == 'NewPage') {
             try {
                 $redirectURL = $this->newPage($data, $form);
             } catch (ValidationException $e) {
                 //Catch any validation exception and return it as an error message on the form
                 $form->sessionMessage($e->getMessage(), 'error');
                 return $this->popupController->redirectBack();
             }
             if ($redirectURL === false) {
                 $form->sessionMessage(_t('KapostAdmin.ERROR_COULD_NOT_CREATE', '_Sorry an error occured and the page could not be created.'), 'error');
                 return $this->popupController->redirectBack();
             } else {
                 Requirements::clear();
                 Requirements::customScript('window.parent.jQuery(\'.cms-edit-form.KapostAdmin\').entwine(\'ss\').panelRedirect(' . json_encode($redirectURL) . ')');
                 //Clean up the expired previews
                 $this->cleanUpExpiredPreviews();
                 return $this->customise(array('Title' => null, 'Content' => null, 'Form' => null))->renderWith('CMSDialog');
             }
         }
     }
     //Allow extensions to convert the object
     if (in_array($data['ConvertMode'], KapostAdmin::config()->extra_conversion_modes)) {
         try {
             $results = $this->extend('doConvert' . $data['ConvertMode'], $this->record, $data, $form);
         } catch (ValidationException $e) {
             //Catch any validation exception and return it as an error message on the form
             $form->sessionMessage($e->getMessage(), 'error');
             return $this->popupController->redirectBack();
         }
         if (count($results) > 0) {
             foreach ($results as $result) {
                 if ($result !== false) {
                     Requirements::clear();
                     Requirements::customScript('window.parent.jQuery(\'.cms-edit-form.KapostAdmin\').entwine(\'ss\').panelRedirect(' . json_encode($result) . ')');
                     //Clean up the expired previews
                     $this->cleanUpExpiredPreviews();
                     return $this->customise(array('Title' => null, 'Content' => null, 'Form' => null))->renderWith('CMSDialog');
                 }
             }
             $message = $form->Message();
             if (empty($message)) {
                 $form->sessionMessage(_t('KapostAdmin.GENERIC_CONVERSION_ERROR', '_Conversion method returns an error and no specific message'), 'error');
             }
             //All failed redirect back
             return $this->popupController->redirectBack();
         }
     }
     $form->sessionMessage(_t('KapostAdmin.UNKNOWN_CONVERSION_MODE', '_Unknown conversion mode: {mode}', array('mode' => $data['ConvertMode'])), 'error');
     return $this->popupController->redirectBack();
 }
 /**
  * Gets the edit link for the Kapost Object
  * @return {string} Edit link for the Kapost Object
  */
 public function CMSEditLink()
 {
     return Controller::join_links(LeftAndMain::config()->url_base, KapostAdmin::config()->url_segment, 'KapostObject/EditForm/field/KapostObject/item', $this->ID, 'edit');
 }