/**
  * Overloaded so that form error messages are displayed.
  * 
  * @see OrderFormValidator::php()
  * @see Form::validate()
  */
 function validate()
 {
     if ($this->validator) {
         $errors = $this->validator->validate();
         if ($errors) {
             if (Director::is_ajax() && $this->validator->getJavascriptValidationHandler() == 'prototype') {
                 FormResponse::status_message(_t('Form.VALIDATIONFAILED', 'Validation failed'), 'bad');
                 foreach ($errors as $error) {
                     FormResponse::add(sprintf("validationError('%s', '%s', '%s');\n", Convert::raw2js($error['fieldName']), Convert::raw2js($error['message']), Convert::raw2js($error['messageType'])));
                 }
             } else {
                 $data = $this->getData();
                 $formError = array();
                 if ($formMessageType = $this->MessageType()) {
                     $formError['message'] = $this->Message();
                     $formError['messageType'] = $formMessageType;
                 }
                 // Load errors into session and post back
                 Session::set("FormInfo.{$this->FormName()}", array('errors' => $errors, 'data' => $data, 'formError' => $formError));
             }
             return false;
         }
     }
     return true;
 }
 function run(DataObjectSet $pages)
 {
     $pageIDs = $pages->column('ID');
     foreach ($pageIDs as $pageID) {
         FormResponse::add("\$('Form_EditForm').reloadIfSetTo({$pageID});");
     }
     $this->batchaction($pages, 'batchApprove', _t('BatchApprovePages.APPROVED_PAGES', 'Approved %d pages, %d failures'));
     return FormResponse::respond();
 }
Exemple #3
0
 public function saveInto($record)
 {
     $data = $this->form->getRecord();
     // if the record was written for the first time (has an arbitrary "new"-ID),
     // update the imagefield to enable uploading
     if ($record->ID && $data && substr($data->ID, 0, 3) == 'new') {
         FormResponse::update_dom_id($this->id(), $this->Field($record->ID));
     }
 }
 function checkFolder()
 {
     if (!$this->RootFolderID) {
         $galleries = Folder::findOrMake('image-gallery');
         $galleries->Title = 'Image Gallery';
         $galleries->write();
         $folder = Folder::findOrMake('image-gallery/' . $this->URLSegment);
         $folder->Title = $this->Title;
         $folder->setName($this->Title);
         $folder->write();
         $this->RootFolderID = $folder->ID;
         $this->write();
         $this->requireDefaultAlbum();
         FormResponse::add("\$( 'Form_EditForm' ).getPageFromServer( {$this->ID} );");
     } else {
         $this->RootFolder()->setName($this->Title);
         $this->RootFolder()->write();
     }
 }
 public function publish($comment, $member, $notify)
 {
     if (!$member) {
         $member = Member::currentUser();
     }
     // We have to mark as completed now, or we'll get
     // recursion from SiteTreeCMSWorkflow::onAfterPublish.
     $this->Status = 'Completed';
     $this->PublisherID = $member->ID;
     $this->write();
     $page = $this->Page();
     $page->doDeleteFromLive();
     // @todo Coupling to UI :-(
     FormResponse::add(LeftAndMain::deleteTreeNodeJS($page));
     if ($notify) {
         // notify
     }
     return _t('SiteTreeCMSWorkflow.PUBLISHMESSAGE', 'Published changes to live version. Emailed %s.');
 }
 function run(DataObjectSet $pages)
 {
     $pageIDs = $pages->column('ID');
     foreach ($pageIDs as $pageID) {
         FormResponse::add("\$('Form_EditForm').reloadIfSetTo({$pageID});");
     }
     $count = array();
     $count['PUBLISH_SUCCESS'] = $count['DELETE_SUCCESS'] = 0;
     $count['PUBLISH_FAILURE'] = $count['DELETE_FAILURE'] = 0;
     $arbitraryPage = $pages->First();
     $arbitraryPage->invokeWithExtensions('onBeforeBatchPublish', $pages);
     foreach ($pages as $page) {
         $type = $page->openWorkflowRequest() instanceof WorkflowDeletionRequest ? 'DELETE' : 'PUBLISH';
         if ($page->batchPublish()) {
             $count[$type . '_SUCCESS']++;
             // Now make sure the tree title is appropriately updated
             $publishedRecord = DataObject::get_by_id('SiteTree', $page->ID);
             if ($publishedRecord) {
                 $JS_title = Convert::raw2js($publishedRecord->TreeTitle());
                 FormResponse::add("\$('sitetree').setNodeTitle({$page->ID}, '{$JS_title}');");
             }
         } else {
             $count[$type . '_FAILURE']++;
             FormResponse::add("\$('sitetree').addNodeClassByIdx('{$page->ID}', 'failed');");
         }
         $page->destroy();
         unset($page);
     }
     $arbitraryPage->invokeWithExtensions('onAfterBatchPublish', $pages);
     $messages = array('PUBLISH_SUCCESS' => _t('BatchPublishPages.PUBLISH_SUCCESS', 'Published %d pages.'), 'PUBLISH_FAILURE' => _t('BatchPublishPages.PUBLISH_FAILURE', 'Failed to publish %d pages.'), 'DELETE_SUCCESS' => _t('BatchPublishPages.DELETE_SUCCESS', 'Deleted %d pages from the published site.'), 'DELETE_FAILURE' => _t('BatchPublishPages.DELETE_FAILURE', 'Failed to delete %d pages from the published site.'), 'PUBLISH_SUCCESS_ONE' => _t('BatchPublishPages.PUBLISH_SUCCESS_ONE', 'Published %d page.'), 'PUBLISH_FAILURE_ONE' => _t('BatchPublishPages.PUBLISH_FAILURE_ONE', 'Failed to publish %d page.'), 'DELETE_SUCCESS_ONE' => _t('BatchPublishPages.DELETE_SUCCESS_ONE', 'Deleted %d page from the published site.'), 'DELETE_FAILURE_ONE' => _t('BatchPublishPages.DELETE_FAILURE_ONE', 'Failed to delete %d page from the published site.'));
     $displayedMessages = array();
     foreach ($count as $type => $count) {
         if ($count) {
             $message = $count == 1 ? $messages[$type . '_ONE'] : $messages[$type];
             $displayedMessages[] = sprintf($message, $count);
         }
     }
     $displayedMessage = implode(" ", $displayedMessages);
     FormResponse::add('statusMessage("' . $displayedMessage . '","good");');
     return FormResponse::respond();
 }
 function moderate()
 {
     $id = (int) $this->urlParams['ID'];
     $className = Convert::raw2sql($this->urlParams['ClassName']);
     $state = Convert::raw2sql($this->urlParams['State']);
     $methods = array("delete" => "moderatorDelete", "isspam" => "markSpam", "isham" => "markHam", "approve" => "markApproved", "unapprove" => "markUnapproved");
     ModeratableState::push_state($state);
     $method = $methods[$this->urlParams['Command']];
     if (!$method) {
         FormResponse::clear();
         FormResponse::status_message("Command invalid", 'bad');
     } else {
         if ($error = DataObject::get_by_id($className, $id)->{$method}()) {
             FormResponse::status_message($error, 'bad');
         } else {
             FormResponse::add('$("moderation").elementMoved(' . $id . ');');
         }
     }
     ModeratableState::pop_state();
     return FormResponse::respond();
 }
Exemple #8
0
 /**
  * When an error page is published, create a static HTML page with its
  * content, so the page can be shown even when SilverStripe is not
  * functioning correctly before publishing this page normally.
  * @param string|int $fromStage Place to copy from. Can be either a stage name or a version number.
  * @param string $toStage Place to copy to. Must be a stage name.
  * @param boolean $createNewVersion Set this to true to create a new version number.  By default, the existing version number will be copied over.
  */
 function doPublish()
 {
     parent::doPublish();
     // Run the page
     $response = Director::test(Director::makeRelative($this->Link()));
     $errorContent = $response->getBody();
     // Check we have an assets base directory, creating if it we don't
     if (!file_exists(ASSETS_PATH)) {
         mkdir(ASSETS_PATH, 02775);
     }
     // if the page is published in a language other than default language,
     // write a specific language version of the HTML page
     $filePath = self::get_filepath_for_errorcode($this->ErrorCode, $this->Locale);
     if ($fh = fopen($filePath, "w")) {
         fwrite($fh, $errorContent);
         fclose($fh);
     } else {
         $fileErrorText = sprintf(_t("ErrorPage.ERRORFILEPROBLEM", "Error opening file \"%s\" for writing. Please check file permissions."), $errorFile);
         FormResponse::status_message($fileErrorText, 'bad');
         FormResponse::respond();
         return;
     }
 }
    /**
     * @return String
     */
    function FieldHolder()
    {
        Requirements::javascript(THIRDPARTY_DIR . "/greybox/AmiJS.js");
        Requirements::javascript(THIRDPARTY_DIR . "/greybox/greybox.js");
        Requirements::add_i18n_javascript(SAPPHIRE_DIR . '/javascript/lang');
        Requirements::javascript(SAPPHIRE_DIR . '/javascript/TableListField.js');
        Requirements::javascript(SAPPHIRE_DIR . "/javascript/ComplexTableField.js");
        Requirements::css(THIRDPARTY_DIR . "/greybox/greybox.css");
        Requirements::css(SAPPHIRE_DIR . "/css/TableListField.css");
        Requirements::css(SAPPHIRE_DIR . "/css/ComplexTableField.css");
        // set caption if required
        if ($this->popupCaption) {
            $id = $this->id();
            if (Director::is_ajax()) {
                $js = <<<JS
\$('{$id}').GB_Caption = '{$this->popupCaption}';
JS;
                FormResponse::add($js);
            } else {
                $js = <<<JS
Event.observe(window, 'load', function() { \$('{$id}').GB_Caption = '{$this->popupCaption}'; });
JS;
                Requirements::customScript($js);
            }
        }
        // compute sourceItems here instead of Items() to ensure that
        // pagination and filters are respected on template accessors
        $this->sourceItems();
        return $this->renderWith($this->template);
    }
 /**
  * Custom delete implementation:
  * Remove member from group rather than from the database
  */
 function delete()
 {
     // Protect against CSRF on destructive action
     $token = $this->getForm()->getSecurityToken();
     // TODO Not sure how this is called, using $_REQUEST to be on the safe side
     if (!$token->check($_REQUEST['SecurityID'])) {
         return $this->httpError(400);
     }
     $groupID = Convert::raw2sql($_REQUEST['ctf']['ID']);
     $memberID = Convert::raw2sql($_REQUEST['ctf']['childID']);
     if (is_numeric($groupID) && is_numeric($memberID)) {
         $member = DataObject::get_by_id('Member', $memberID);
         $member->Groups()->remove($groupID);
     } else {
         user_error("MemberTableField::delete: Bad parameters: Group={$groupID}, Member={$memberID}", E_USER_ERROR);
     }
     return FormResponse::respond();
 }
 public function removememberfromgroup()
 {
     $groupID = $this->urlParams['ID'];
     $memberID = $this->urlParams['OtherID'];
     if (is_numeric($groupID) && is_numeric($memberID)) {
         $member = DataObject::get_by_id('Member', (int) $memberID);
         if (!$member->canDelete()) {
             return Security::permissionFailure($this);
         }
         $member->Groups()->remove((int) $groupID);
         FormResponse::add("reloadMemberTableField();");
     } else {
         user_error("SecurityAdmin::removememberfromgroup: Bad parameters: Group={$groupID}, Member={$memberID}", E_USER_ERROR);
     }
     return FormResponse::respond();
 }
Exemple #12
0
 /** 
  * Saves the Dataobjects contained in the field
  */
 function saveInto(DataObject $record)
 {
     // CMS sometimes tries to set the value to one.
     if (is_array($this->value)) {
         $newFields = array();
         // Sort into proper array
         $value = ArrayLib::invert($this->value);
         $dataObjects = $this->sortData($value, $record->ID);
         // New fields are nested in their own sub-array, and need to be sorted separately
         if (isset($dataObjects['new']) && $dataObjects['new']) {
             $newFields = $this->sortData($dataObjects['new'], $record->ID);
         }
         // Update existing fields
         // @todo Should this be in an else{} statement?
         $savedObjIds = $this->saveData($dataObjects, $this->editExisting);
         // Save newly added record
         if ($savedObjIds || $newFields) {
             $savedObjIds = $this->saveData($newFields, false);
         }
         // Add the new records to the DataList
         if ($savedObjIds) {
             foreach ($savedObjIds as $id => $status) {
                 $this->getDataList()->add($id);
             }
         }
         // Update the internal source items cache
         $this->value = null;
         $items = $this->sourceItems();
         FormResponse::update_dom_id($this->id(), $this->FieldHolder());
     }
 }
	/** 
	 * Saves the Dataobjects contained in the field
	 */
	function saveInto(DataObject $record) {
		// CMS sometimes tries to set the value to one.
		if(is_array($this->value)){
			
			// Sort into proper array
			$this->value = ArrayLib::invert($this->value);
			$dataObjects = $this->sortData($this->value, $record->ID);
			if(isset($dataObjects['new']) && $dataObjects['new']) {
				$newFields = $this->sortData($dataObjects['new'], $record->ID);
			}

			$savedObj = $this->saveData($dataObjects, $this->editExisting);
			if($savedObj && isset($newFields)) {
				$savedObj = $this->saveData($newFields,false);
			} else if(isset($newFields)) {
				$savedObj = $this->saveData($newFields,false);
			}
			$items = $this->sourceItems();
			FormResponse::update_dom_id($this->id(), $this->FieldHolder());
		}
	}
	/**
	 * When an error page is published, create a static HTML page with its
	 * content, so the page can be shown even when SilverStripe is not
	 * functioning correctly before publishing this page normally.
	 * @param string|int $fromStage Place to copy from. Can be either a stage name or a version number.
	 * @param string $toStage Place to copy to. Must be a stage name.
	 * @param boolean $createNewVersion Set this to true to create a new version number.  By default, the existing version number will be copied over.
	 */
	function publish($fromStage, $toStage, $createNewVersion = false) {
		$oldStage = Versioned::current_stage();

		// Run the page
		$response = Director::test(Director::makeRelative($this->Link()));
		$errorContent = $response->getBody();
		
		// Check we have an assets base directory, creating if it we don't
		if(!file_exists(ASSETS_PATH)) {
			mkdir(ASSETS_PATH, 02775);
		}

		// Path to the error file in the file store
		$errorFile = ASSETS_PATH . "/error-$this->ErrorCode.html";

		// Attempt to open the file, writing it if it doesn't exist
		$fh = @fopen($errorFile, "w");
		if($fh) {
			fwrite($fh, $errorContent);
			fclose($fh);
		} else {
			$fileErrorText = sprintf(
				_t(
					"ErrorPage.ERRORFILEPROBLEM",
					"Error opening file \"%s\" for writing. Please check file permissions."
				),
				$errorFile
			);
			FormResponse::status_message($fileErrorText, 'bad');
			FormResponse::respond();
			return;
		}
		
		// Restore the version we're currently connected to.
		Versioned::reading_stage($oldStage);
		
		return $this->extension_instances['Versioned']->publish($fromStage, $toStage, $createNewVersion);
	}
 /**
  * Create a new translation from an existing item, switch to this language and reload the tree.
  */
 function createtranslation($request)
 {
     // Protect against CSRF on destructive action
     if (!SecurityToken::inst()->checkRequest($request)) {
         return $this->httpError(400);
     }
     $langCode = Convert::raw2sql($_REQUEST['newlang']);
     $originalLangID = (int) $_REQUEST['ID'];
     $record = $this->getRecord($originalLangID);
     $this->Locale = $langCode;
     Translatable::set_current_locale($langCode);
     // Create a new record in the database - this is different
     // to the usual "create page" pattern of storing the record
     // in-memory until a "save" is performed by the user, mainly
     // to simplify things a bit.
     // @todo Allow in-memory creation of translations that don't persist in the database before the user requests it
     $translatedRecord = $record->createTranslation($langCode);
     $url = sprintf("%s/%d/?locale=%s", $this->Link('show'), $translatedRecord->ID, $langCode);
     FormResponse::add(sprintf('window.location.href = "%s";', $url));
     return FormResponse::respond();
 }
Exemple #16
0
 /**
  * When an error page is published, create a static HTML page with its
  * content, so the page can be shown even when SilverStripe is not
  * functioning correctly before publishing this page normally.
  * @param string|int $fromStage Place to copy from. Can be either a stage name or a version number.
  * @param string $toStage Place to copy to. Must be a stage name.
  * @param boolean $createNewVersion Set this to true to create a new version number.  By default, the existing version number will be copied over.
  */
 function doPublish()
 {
     parent::doPublish();
     // Run the page (reset the theme, it might've been disabled by LeftAndMain::init())
     $oldTheme = SSViewer::current_theme();
     SSViewer::set_theme(SSViewer::current_custom_theme());
     $response = Director::test(Director::makeRelative($this->Link()));
     SSViewer::set_theme($oldTheme);
     $errorContent = $response->getBody();
     // Make the base tag dynamic.
     // $errorContent = preg_replace('/<base[^>]+href="' . str_replace('/','\\/', Director::absoluteBaseURL()) . '"[^>]*>/i', '<base href="$BaseURL" />', $errorContent);
     // Check we have an assets base directory, creating if it we don't
     if (!file_exists(ASSETS_PATH)) {
         mkdir(ASSETS_PATH, 02775);
     }
     // if the page is published in a language other than default language,
     // write a specific language version of the HTML page
     $filePath = self::get_filepath_for_errorcode($this->ErrorCode, $this->Locale);
     if ($fh = fopen($filePath, "w")) {
         fwrite($fh, $errorContent);
         fclose($fh);
     } else {
         $fileErrorText = sprintf(_t("ErrorPage.ERRORFILEPROBLEM", "Error opening file \"%s\" for writing. Please check file permissions."), $errorFile);
         FormResponse::status_message($fileErrorText, 'bad');
         FormResponse::respond();
         return;
     }
 }
 function onAfterSave($record)
 {
     if ($record->hasMethod('NormalRelated') && ($record->NormalRelated() || $record->ReverseRelated())) {
         FormResponse::status_message('Saved, please update related pages.', 'good');
     }
 }
 /**
  * Use the URL-Parameter "action_saveComplexTableField"
  * to provide a clue to the main controller if the main form has to be rendered,
  * even if there is no action relevant for the main controller (to provide the instance of ComplexTableField
  * which in turn saves the record.
  *
  * @see {Form::ReferencedField}).
  */
 function saveComplexTableField()
 {
     if (isset($_REQUEST['ctf']['childID']) && is_numeric($_REQUEST['ctf']['childID'])) {
         $childObject = DataObject::get_by_id($this->sourceClass, $_REQUEST['ctf']['childID']);
     } else {
         $childObject = new $this->sourceClass();
         $this->fields->removeByName('ID');
     }
     $this->saveInto($childObject);
     $funcName = $this->controller->itemWriteMethod;
     if (!$funcName) {
         $funcName = "write";
     }
     $childObject->{$funcName}();
     // if ajax-call in an iframe, update window
     if (Director::is_ajax()) {
         // Newly saved objects need their ID reflected in the reloaded form to avoid double saving
         $form = $this->controller->DetailForm($childObject->ID);
         $form->loadDataFrom($childObject);
         FormResponse::update_dom_id($form->FormName(), $form->formHtmlContent(), true, 'update');
         return FormResponse::respond();
     } else {
         Director::redirectBack();
     }
 }
 function run(DataObjectSet $pages)
 {
     $ids = $pages->column('ID');
     $this->batchaction($pages, 'doUnpublish', _t('CMSBatchActions.DELETED_PAGES', 'Deleted %d pages from the published site, %d failures'));
     foreach ($ids as $pageID) {
         $id = $pageID;
         // check to see if the record exists on the stage site, if it doesn't remove the tree node
         $stageRecord = Versioned::get_one_by_stage('SiteTree', 'Stage', "\"SiteTree\".\"ID\"={$id}");
         if ($stageRecord) {
             $stageRecord->IsAddedToStage = true;
             $title = Convert::raw2js($stageRecord->TreeTitle());
             FormResponse::add("\$('sitetree').setNodeTitle({$id}, '{$title}');");
             FormResponse::add("\$('Form_EditForm').reloadIfSetTo({$id});");
         } else {
             FormResponse::add("var node = \$('sitetree').getTreeNodeByIdx('{$id}');");
             FormResponse::add("if(node && node.parentTreeNode)\tnode.parentTreeNode.removeTreeNode(node);");
             FormResponse::add("\$('Form_EditForm').reloadIfSetTo({$id});");
         }
     }
     return FormResponse::respond();
 }
 public function publish($comment, $member, $notify)
 {
     if (!$member) {
         $member = Member::currentUser();
     }
     // We have to mark as completed now, or we'll get
     // recursion from SiteTreeCMSWorkflow::onAfterPublish.
     $page = $this->Page();
     $page->LatestCompletedWorkflowRequestID = $this->ID;
     $page->writeWithoutVersion();
     // Embargo means we go Approved -> Scheduled
     if ($this->EmbargoDate) {
         $this->setSchedule();
         $this->PublisherID = $member->ID;
         $this->write();
         // Otherwise we go Approved -> Published
     } else {
         $this->Status = 'Completed';
         $this->PublisherID = $member->ID;
         $this->write();
         // Only publish the page if it hasn't already been published elsewhere.  This occurs when
         // SiteTree::doPublish() 'auto-closes' an open workflow
         //if($page->getIsModifiedOnStage()) {
         $page->doPublish();
         //}
         if ($notify) {
             $this->notifyPublished($comment);
         }
     }
     $this->addNewChange($comment, $this->Status, DataObject::get_by_id('Member', $this->PublisherID));
     // @todo Coupling to UI :-(
     $title = Convert::raw2js($page->TreeTitle());
     FormResponse::add("\$('sitetree').setNodeTitle({$page->ID}, \"{$title}\");");
     return _t('SiteTreeCMSWorkflow.PUBLISHMESSAGE', 'Published changes to live version. Emailed %s.');
 }
Exemple #21
0
    /**
     * Create a new translation from an existing item, switch to this language and reload the tree.
     */
    function createtranslation()
    {
        if (!Director::is_ajax()) {
            Director::redirectBack();
            return;
        }
        $langCode = $_REQUEST['newlang'];
        $langName = i18n::get_language_name($langCode);
        $originalLangID = $_REQUEST['ID'];
        $record = $this->getRecord($originalLangID);
        $temporalID = "new-{$record->RecordClassName}-{$record->ParentID}-{$originalLangID}";
        Session::set($temporalID . '_originalLangID', $originalLangID);
        $tree = $this->switchlanguage($langCode, $originalLangID);
        FormResponse::add(<<<JS
\t\tif (Element.hasClassName('LangSelector_holder','onelang')) {
\t\t\tElement.removeClassName('LangSelector_holder','onelang');
\t\t\t\$('treepanes').resize();
\t\t}
\t\tif (\$('LangSelector').options['{$langCode}'] == undefined) {
\t\t\tvar option = document.createElement("option");
\t\t\toption.text = '{$langName}';
\t\t\toption.value = '{$langCode}';
\t\t\t\$('LangSelector').options.add(option);
\t\t}
JS
);
        FormResponse::add("\$('LangSelector').selectValue('{$langCode}');");
        $newrecord = clone $record;
        $newrecord->ID = $temporalID;
        $newrecord->CheckedPublicationDifferences = $newrecord->AddedToStage = true;
        return $this->returnItemToUser($newrecord);
    }
Exemple #22
0
 /**
  * Processing that occurs before a form is executed.
  * This includes form validation, if it fails, we redirect back
  * to the form with appropriate error messages
  */
 function beforeProcessing()
 {
     if ($this->validator) {
         $errors = $this->validator->validate();
         if ($errors) {
             if (Director::is_ajax()) {
                 // Send validation errors back as JSON with a flag at the start
                 //echo "VALIDATIONERROR:" . Convert::array2json($errors);
                 FormResponse::status_message(_t('Form.VALIDATIONFAILED', 'Validation failed'), 'bad');
                 foreach ($errors as $error) {
                     FormResponse::add(sprintf("validationError('%s', '%s', '%s');\n", Convert::raw2js($error['fieldName']), Convert::raw2js($error['message']), Convert::raw2js($error['messageType'])));
                 }
                 echo FormResponse::respond();
                 return false;
             } else {
                 $data = $this->getData();
                 // People will get worried if you leave credit card information in session..
                 if (isset($data['CreditCardNumber'])) {
                     unset($data['CreditCardNumber']);
                 }
                 if (isset($data['DateExpiry'])) {
                     unset($data['Expiry']);
                 }
                 // Load errors into session and post back
                 Session::set("FormInfo.{$this->FormName()}", array('errors' => $errors, 'data' => $data));
                 Director::redirectBack();
             }
             return false;
         }
     }
     return true;
 }
	/**
	 * Custom delete implementation:
	 * Remove member from group rather than from the database
	 */
	function delete() {
		$groupID = Convert::raw2sql($_REQUEST['ctf']['ID']);
		$memberID = Convert::raw2sql($_REQUEST['ctf']['childID']);
		if(is_numeric($groupID) && is_numeric($memberID)) {
			$member = DataObject::get_by_id('Member', $memberID);
			$member->Groups()->remove($groupID);
		} else {
			user_error("MemberTableField::delete: Bad parameters: Group=$groupID, Member=$memberID", E_USER_ERROR);
		}

		return FormResponse::respond();

	}
 public function exportastarball()
 {
     $template = $this->getCurrentDynamicTemplate();
     if (!$template) {
         FormResponse::status_message("No template selected, Please select template");
         FormResponse::load_form($this->getitem(), 'Form_EditForm');
         return FormResponse::respond();
     } else {
         $fileData = $template->exportAs("tar.gz");
         $fileName = $template->Name . ".tar.gz";
         return SS_HTTPRequest::send_file($fileData, $fileName, "application/x-tar");
     }
 }
	/**
	 * Returns the content of the TableListField as a piece of FormResponse javascript
	 * @deprecated Please use the standard URL through Link() which gives you the FieldHolder as an HTML fragment.
	 */
	function ajax_refresh() {
		// compute sourceItems here instead of Items() to ensure that
		// pagination and filters are respected on template accessors
		//$this->sourceItems();

		$response = $this->renderWith($this->template);
		FormResponse::update_dom_id($this->id(), $response, 1);
		FormResponse::set_non_ajax_content($response);
		return FormResponse::respond();
	}
 /** 
  * Saves the Dataobjects contained in the field
  */
 function saveInto(DataObject $record)
 {
     // CMS sometimes tries to set the value to one.
     if (is_array($this->value)) {
         $newFields = array();
         // Sort into proper array
         $value = ArrayLib::invert($this->value);
         $dataObjects = $this->sortData($value, $record->ID);
         // New fields are nested in their own sub-array, and need to be sorted separately
         if (isset($dataObjects['new']) && $dataObjects['new']) {
             $newFields = $this->sortData($dataObjects['new'], $record->ID);
         }
         // Update existing fields
         // @todo Should this be in an else{} statement?
         $savedObjIds = $this->saveData($dataObjects, $this->editExisting);
         // Save newly added record
         if ($savedObjIds || $newFields) {
             $savedObjIds = $this->saveData($newFields, false);
         }
         // Optionally save the newly created records into a relationship
         // on $record. This assumes the name of this formfield instance
         // is set to a relationship name on $record.
         if ($this->relationAutoSetting) {
             $relationName = $this->Name();
             if ($record->has_many($relationName) || $record->many_many($relationName)) {
                 if ($savedObjIds) {
                     foreach ($savedObjIds as $id => $status) {
                         $record->{$relationName}()->add($id);
                     }
                 }
             }
         }
         // Update the internal source items cache
         $this->value = null;
         $items = $this->sourceItems();
         FormResponse::update_dom_id($this->id(), $this->FieldHolder());
     }
 }
 public function updatereport()
 {
     FormResponse::load_form($this->EditForm()->forTemplate());
     return FormResponse::respond();
 }
	/**
	 * Delete a number of items
	 */
	public function deleteitems() {
		$ids = split(' *, *', $_REQUEST['csvIDs']);

		$script = "st = \$('sitetree'); \n";
		foreach($ids as $id) {
			if(is_numeric($id)) {
				$record = DataObject::get_by_id($this->stat('tree_class'), $id);
				if($record && !$record->canDelete()) return Security::permissionFailure($this);
				
				DataObject::delete_by_id($this->stat('tree_class'), $id);
				$script .= "node = st.getTreeNodeByIdx($id); if(node) node.parentTreeNode.removeTreeNode(node); $('Form_EditForm').closeIfSetTo($id); \n";
			}
		}
		FormResponse::add($script);

		return FormResponse::respond();
	}
 /**
  * Removes all unused thumbnails from the file store
  * and returns the status of the process to the user.
  */
 public function deleteunusedthumbnails($request)
 {
     // Protect against CSRF on destructive action
     if (!SecurityToken::inst()->checkRequest($request)) {
         return $this->httpError(400);
     }
     $count = 0;
     $thumbnails = $this->getUnusedThumbnails();
     if ($thumbnails) {
         foreach ($thumbnails as $thumbnail) {
             unlink(ASSETS_PATH . "/" . $thumbnail);
             $count++;
         }
     }
     $message = sprintf(_t('AssetAdmin.THUMBSDELETED', '%s unused thumbnails have been deleted'), $count);
     FormResponse::status_message($message, 'good');
     echo FormResponse::respond();
 }
Exemple #30
0
 /**
  * Removes all unused thumbnails from the file store
  * and returns the status of the process to the user.
  */
 public function deleteunusedthumbnails()
 {
     $count = 0;
     $thumbnails = $this->getUnusedThumbnails();
     if ($thumbnails) {
         foreach ($thumbnails as $thumbnail) {
             unlink(ASSETS_PATH . "/" . $thumbnail);
             $count++;
         }
     }
     $message = sprintf(_t('AssetAdmin.THUMBSDELETED', '%s unused thumbnails have been deleted'), $count);
     FormResponse::status_message($message, 'good');
     echo FormResponse::respond();
 }