/** * 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(); }
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 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(); } }
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(); }
/** * Allows you to returns a new data object to the tree (subclass of sitetree) * and updates the tree via javascript. */ public function returnItemToUser($p) { if (Director::is_ajax()) { // Prepare the object for insertion. $parentID = (int) $p->ParentID; $id = $p->ID ? $p->ID : "new-{$p->class}-{$p->ParentID}"; $treeTitle = Convert::raw2js($p->TreeTitle()); $hasChildren = is_numeric($id) && $p->AllChildren() && $p->AllChildren()->Count() ? ' unexpanded' : ''; // Ensure there is definitly a node avaliable. if not, append to the home tree. $response = <<<JS \t\t\t\tvar tree = \$('sitetree'); \t\t\t\tvar newNode = tree.createTreeNode("{$id}", "{$treeTitle}", "{$p->class}{$hasChildren}"); \t\t\t\tnode = \$('record-0'); \t\t\t\tnode.open(); \t\t\t\tnode.appendTreeNode(newNode); \t\t\t\tnewNode.selectTreeNode(); JS; FormResponse::add($response); FormResponse::load_form($this->getitem(), 'Form_EditForm'); return FormResponse::respond(); } else { Director::redirect('admin/' . self::$url_segment . '/show/' . $p->ID); } }
/** * 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 if (Element.hasClassName('LangSelector_holder','onelang')) { Element.removeClassName('LangSelector_holder','onelang'); $('treepanes').resize(); } if ($('LangSelector').options['$langCode'] == undefined) { var option = document.createElement("option"); option.text = '$langName'; option.value = '$langCode'; $('LangSelector').options.add(option); } JS ); FormResponse::add("$('LangSelector').selectValue('$langCode');"); $newrecord = clone $record; $newrecord->ID = $temporalID; return $this->returnItemToUser($newrecord); }
/** * 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(); }
/** * Process a workflow action. * @param string $workflowClass The sub-class of WorkflowRequest that is expected. * @param string $actionName The action method to call on the given WorkflowRequest objec.t * @param int $id The ID# of the page. * @param string $comment The comment to attach. * @param string $successMessage The message to show on success. */ function workflowAction($workflowClass, $actionName, $id, $comment) { if (is_numeric($id)) { // For 2.3 and 2.4 compatibility $bt = defined('DB::USE_ANSI_SQL') ? "\"" : "`"; $page = DataObject::get_by_id("SiteTree", $id); if (!$page) { $page = Versioned::get_one_by_stage("SiteTree", "Live", "{$bt}SiteTree{$bt}.{$bt}ID{$bt} = {$id}"); } if (!$page) { return new HTTPResponse("Can't find Page #{$id}", 400); } } else { return new HTTPResponse("Bad ID", 400); } // If we are creating and approving a workflow in one step, then don't bother emailing $notify = !($actionName == 'action' && !$page->openWorkflowRequest($workflowClass)); if ($request = $page->openOrNewWorkflowRequest($workflowClass, $notify)) { $request->clearMembersEmailed(); if ($successMessage = $request->{$actionName}($comment, null, $notify)) { FormResponse::get_page($id); $title = Convert::raw2js($page->TreeTitle()); FormResponse::add("\$('sitetree').setNodeTitle({$id}, \"{$title}\");"); // gather members for status output if ($notify) { $peeps = $request->getMembersEmailed(); if ($peeps && $peeps->Count()) { $emails = ''; foreach ($peeps as $peep) { if ($peep->Email) { $emails .= $peep->Email . ', '; } } $emails = trim($emails, ', '); } else { $emails = 'no-one'; } } else { $emails = "no-one"; } if ($successMessage) { FormResponse::status_message(sprintf($successMessage, $emails), 'good'); return FormResponse::respond(); } else { return; } } } // Failure FormResponse::status_message(_t('SiteTreeCMSWorkflow.WORKFLOW_ACTION_FAILED', "There was an error when processing your workflow request."), 'bad'); return FormResponse::respond(); }
/** * @return String */ function FieldHolder() { // 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); }
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.'); }
function run(DataObjectSet $pages) { foreach ($pages as $page) { $id = $page->ID; // Perform the action if ($page->canDelete()) { $page->doDeleteFromLive(); } // check to see if the record exists on the live 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});"); } $page->destroy(); unset($page); } $message = sprintf(_t('CMSBatchActions.DELETED_PAGES', 'Deleted %d pages from the published site'), $pages->Count()); FormResponse::add('statusMessage("' . $message . '","good");'); return FormResponse::respond(); }
/** * Delete a number of items */ public function deleteitems($request) { // Protect against CSRF on destructive action if (!SecurityToken::inst()->checkRequest($request)) { return $this->httpError(400); } $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(); }
/** * Delete a number of items */ public function deleteitems() { $ids = split(' *, *', $_REQUEST['csvIDs']); $script = "st = \$('sitetree'); \n"; foreach ($ids as $id) { if (is_numeric($id)) { 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(); }
function acceptmarked() { $numComments = 0; $folderID = 0; $deleteList = ''; if ($_REQUEST['Comments']) { foreach ($_REQUEST['Comments'] as $commentid) { $comment = DataObject::get_by_id('PageComment', $commentid); if ($comment) { $comment->IsSpam = false; $comment->NeedsModeration = false; $comment->write(); $numComments++; } } } else { user_error("No comments in {$commentList} could be found!", E_USER_ERROR); } $msg = sprintf(_t('CommentAdmin.APPROVED', 'Accepted %s comments.'), $numComments); $js = <<<JS \t\t\t\t{$deleteList} \t\t\t\t\$('Form_EditForm').getPageFromServer(\$('Form_EditForm_ID').value); \t\t\t\tstatusMessage("Accepted {$numComments} comments."); JS; FormResponse::add($js); return FormResponse::respond(); }
function savemember() { $data = $_REQUEST; $className = $this->stat('subitem_class'); $id = $_REQUEST['ID']; if ($id == 'new') { $id = null; } if ($id) { if (defined('DB::USE_ANSI_SQL')) { $record = DataObject::get_one($className, "\"{$className}\".ID = {$id}"); } else { $record = DataObject::get_one($className, "`{$className}`.ID = {$id}"); } } else { // send out an email to notify the user that they have been subscribed $record = new $className(); } $record->update($data); $record->ID = $id; $record->write(); $record->Groups()->add($data['GroupID']); $FirstName = Convert::raw2js($record->FirstName); $Surname = Convert::raw2js($record->Surname); $Email = Convert::raw2js($record->Email); $Password = Convert::raw2js($record->Password); $response = <<<JS \t\t\t\$('MemberList').setRecordDetails({$record->ID}, { \t\t\t\tFirstName : "{$FirstName}", \t\t\t\tSurname : "{$Surname}", \t\t\t\tEmail : "{$Email}" \t\t\t}); \t\t\t\$('MemberList').clearAddForm(); JS; FormResponse::add($response); FormResponse::status_message(_t('NewsletterAdmin.SAVED'), 'good'); 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(); }
/** * 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); }
function onBeforeWrite() { if (!$this->owner->ID && !$this->owner->SubsiteID) { $this->owner->SubsiteID = Subsite::currentSubsiteID(); } // If the content has been changed, then the page should be marked as 'custom content' if (!$this->nextWriteDoesntCustomise && $this->owner->ID && $this->owner->MasterPageID && !$this->owner->CustomContent) { $changed = $this->owner->getChangedFields(); foreach (self::$template_fields as $field) { if (isset($changed[$field]) && $changed[$field]) { $this->owner->CustomContent = true; FormResponse::add("if(\$('Form_EditForm_CustomContent')) \$('Form_EditForm_CustomContent').checked = true;"); break; } } } $this->nextWriteDoesntCustomise = false; parent::onBeforeWrite(); }
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(); }
/** * Perform the "delete marked" action. * Called and returns in same way as 'save' function */ public function deletemarked($urlParams, $form) { $fileList = "'" . ereg_replace(' *, *', "','", trim(addslashes($_REQUEST['FileIDs']))) . "'"; $numFiles = 0; $folderID = 0; $deleteList = ''; $brokenPageList = ''; if ($fileList != "''") { $files = DataObject::get("File", "\"File\".\"ID\" IN ({$fileList})"); if ($files) { $brokenPages = array(); foreach ($files as $file) { $brokenPages = array_merge($brokenPages, $file->BackLinkTracking()->toArray()); if ($file instanceof Image) { $file->deleteFormattedImages(); } if (!$folderID) { $folderID = $file->ParentID; } $file->delete(); $numFiles++; } if ($brokenPages) { $brokenPageList = " " . _t('AssetAdmin.NOWBROKEN', 'These pages now have broken links:') . '</ul>'; foreach ($brokenPages as $brokenPage) { $brokenPageList .= "<li style="font-size: 65%">" . $brokenPage->Breadcrumbs(3, true) . '</li>'; } $brokenPageList .= '</ul>'; } else { $brokenPageList = ''; } $deleteList = ''; if ($folderID) { $remaining = DB::query("SELECT COUNT(*) FROM \"File\" WHERE \"ParentID\" = {$folderID}")->value(); if (!$remaining) { $deleteList .= "Element.removeClassName(\$('sitetree').getTreeNodeByIdx('{$folderID}').getElementsByTagName('a')[0],'contents');"; } } } else { user_error("No files in {$fileList} could be found!", E_USER_ERROR); } } $message = sprintf(_t('AssetAdmin.DELETEDX', "Deleted %s files.%s"), $numFiles, $brokenPageList); FormResponse::add($deleteList); FormResponse::status_message($message, "good"); FormResponse::add("\$('Form_EditForm').getPageFromServer(\$('Form_EditForm_ID').value)"); return FormResponse::respond(); }
/** * @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); }
/** * Perform the "delete marked" action. * Called and returns in same way as 'save' function */ public function deletemarked($urlParams, $form) { $fileList = "'" . ereg_replace(' *, *',"','",trim(addslashes($_REQUEST['FileIDs']))) . "'"; $numFiles = 0; $folderID = 0; $deleteList = ''; $brokenPageList = ''; if($fileList != "''") { $files = DataObject::get('File', "`File`.ID IN ($fileList)"); if($files) { foreach($files as $file) { if($file instanceof Image) { $file->deleteFormattedImages(); } if(!$folderID) { $folderID = $file->ParentID; } $file->delete(); $numFiles++; } if($brokenPages = Notifications::getItems('BrokenLink')) { $brokenPageList = " ". _t('AssetAdmin.NOWBROKEN', 'These pages now have broken links:') . '</ul>'; foreach($brokenPages as $brokenPage) { $brokenPageList .= "<li style="font-size: 65%">" . $brokenPage->Breadcrumbs(3, true) . '</li>'; } $brokenPageList .= '</ul>'; Notifications::notifyByEmail("BrokenLink", "Page_BrokenLinkEmail"); } else { $brokenPageList = ''; } $deleteList = ''; if($folderID) { $remaining = DB::query("SELECT COUNT(*) FROM `File` WHERE `ParentID`=$folderID")->value(); if(!$remaining) $deleteList .= "Element.removeClassName(\$('sitetree').getTreeNodeByIdx('$folderID').getElementsByTagName('a')[0],'contents');"; } } else { user_error("No files in $fileList could be found!", E_USER_ERROR); } } $message = sprintf(_t('AssetAdmin.DELETEDX',"Deleted %s files.%s"),$numFiles,$brokenPageList) ; FormResponse::add($deleteList); FormResponse::status_message($message, "good"); FormResponse::add("$('Form_EditForm').getPageFromServer($('Form_EditForm_ID').value)"); 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(); }
function onAfterWrite() { parent::onAfterWrite(); // Don't do this stuff when we're publishing if (!$this->extension_instances['Versioned']->migratingVersion) { if ($this->isChanged('CopyContentFromID') && $this->CopyContentFromID != 0 && $this instanceof VirtualPage) { $this->updateImageTracking(); } } FormResponse::add("\$('Form_EditForm').reloadIfSetTo({$this->ID});", $this->ID . "_VirtualPage_onAfterWrite"); }
/** * 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; }
protected function getRelatedData() { $relatedName = $_REQUEST['RelatedClass']; $id = $_REQUEST[$relatedName]['ID']; $baseClass = $this->stat('data_type'); $relatedClasses = singleton($baseClass)->stat('has_one'); if ($id) { $relatedObject = DataObject::get_by_id($relatedClasses[$relatedName], $id); $response .= <<<JS \t\t\t\$('{$relatedName}').unsetNewRelatedKey(); JS; } elseif ($id !== '0') { //in case of null; $relatedObject = new $relatedClasses[$relatedName](); if ($parentID = $_REQUEST[$relatedName]['ParentID']) { $relatedObject->ParentID = $parentID; } $id = $relatedObject->write(); $response .= <<<JS \t\t\t\$('{$relatedName}').setNewRelatedKey({$id}); JS; } else { // in case of 0 $relatedObject = new $relatedClasses[$relatedName](); if ($parentID = $_REQUEST[$relatedName]['ParentID']) { $relatedObject->ParentID = $parentID; } $response .= <<<JS \t\t\t\$('{$relatedName}').unsetNewRelatedKey(); JS; } if (Director::is_ajax()) { $fields = $_REQUEST[$relatedName]; $response .= <<<JS var dataArray = new Array(); JS; foreach ($fields as $k => $v) { $JS_newKey = Convert::raw2js($relatedName . '[' . $k . ']'); $JS_newValue = Convert::raw2js($relatedObject->{$k}); $response .= <<<JS dataArray['{$JS_newKey}'] = '{$JS_newValue}'; JS; } $response .= <<<JS \$('{$relatedName}').updateChildren(dataArray, true); JS; FormResponse::add($response); } return FormResponse::respond(); }
public function removefile($request) { // Protect against CSRF on destructive action if (!SecurityToken::inst()->checkRequest($request)) { return $this->httpError(400); } if ($fileID = $this->urlParams['ID']) { $file = DataObject::get_by_id('File', $fileID); if (!$file) { return $this->httpError(400); } // Delete the temp verions of this file in assets/_resampled if ($file instanceof Image) { $file->deleteFormattedImages(); } $file->delete(); $file->destroy(); if (Director::is_ajax()) { $js = <<<JS \t\t\t\t\$('Form_EditForm_Files').removeFile({$fileID}); \t\t\t\tstatusMessage('removed file', 'good'); JS; FormResponse::add($js); return FormResponse::respond(); } else { Director::redirectBack(); } } else { user_error("AssetAdmin::removefile: Bad parameters: File={$fileID}", E_USER_ERROR); } }
protected function javascriptRefresh($message = 'Please wait...') { FormResponse::add("\$('Form_EditForm').resetElements();"); FormResponse::add('$$("#sitetree li.current")[0].selectTreeNode();'); FormResponse::status_message($message, "good"); return FormResponse::respond(); }