From a7c07369e09874e0532d68b4f1f9fc5a9bcfe530 Mon Sep 17 00:00:00 2001 From: Sam Minnee Date: Thu, 15 Oct 2009 22:44:08 +0000 Subject: [PATCH] FEATURE batch actions for setting/resetting embargo/expiry (from r85397) git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/cms/trunk@89221 467b73ca-7a2a-4603-9d3b-597d59a354a9 --- code/CMSBatchAction.php | 9 +++++++-- code/CMSMain.php | 8 ++++---- javascript/CMSMain_left.js | 24 ++++++++++++++++++++++++ templates/Includes/CMSMain_left.ss | 2 +- 4 files changed, 36 insertions(+), 7 deletions(-) diff --git a/code/CMSBatchAction.php b/code/CMSBatchAction.php index 4c8ca127..9c0540fe 100644 --- a/code/CMSBatchAction.php +++ b/code/CMSBatchAction.php @@ -38,10 +38,11 @@ abstract class CMSBatchAction extends Object { * @param $helperMethod The method to call on each of those objects. * @para */ - public function batchaction(DataObjectSet $pages, $helperMethod, $successMessage) { + public function batchaction(DataObjectSet $pages, $helperMethod, $successMessage, $arguments = array()) { foreach($pages as $page) { + // Perform the action - $page->$helperMethod(); + call_user_func_array(array($page, $helperMethod), $arguments); // Now make sure the tree title is appropriately updated $publishedRecord = DataObject::get_by_id('SiteTree', $page->ID); @@ -59,6 +60,10 @@ abstract class CMSBatchAction extends Object { return FormResponse::respond(); } + // if your batchaction has parameters, return a fieldset here + function getParameterFields() { + return false; + } } /** diff --git a/code/CMSMain.php b/code/CMSMain.php index 190f8c35..66b6f959 100755 --- a/code/CMSMain.php +++ b/code/CMSMain.php @@ -1022,18 +1022,18 @@ JS; $batchActions = CMSBatchActionHandler::$batch_actions; $forms = array(); - foreach($batchActions as $batchAction) { + foreach($batchActions as $urlSegment => $batchAction) { if ($fieldset = singleton($batchAction)->getParameterFields()) { $formHtml = ''; foreach($fieldset as $field) { $formHtml .= $field->Field(); } - $forms[$batchAction] = $formHtml; + $forms[$urlSegment] = $formHtml; } } $pageHtml = ''; - foreach($forms as $class => $html) { - $pageHtml .= "
$html
\n\n"; + foreach($forms as $urlSegment => $html) { + $pageHtml .= "
$html
\n\n"; } return new LiteralField("BatchActionParameters", ''); } diff --git a/javascript/CMSMain_left.js b/javascript/CMSMain_left.js index 0b63a612..989b0db0 100755 --- a/javascript/CMSMain_left.js +++ b/javascript/CMSMain_left.js @@ -258,6 +258,19 @@ batchactionsclass.prototype = { return false; }, + actionChanged: function() { + var urlSegment = $('choose_batch_action').value.split('/').pop() + if ($('BatchActionParameters_'+urlSegment)) { + jQuery('#actionParams').empty(); + jQuery('#BatchActionParameters_'+urlSegment).appendTo('#actionParams'); + $('actionParams').style.display = 'block'; + $('actionParams').style.padding = '4px'; + } else { + $('actionParams').innerHTML = ''; + $('actionParams').style.display = 'none'; + } + }, + multiselectTransform : function() { batchActionGlobals.o1 = $('sitetree').observeMethod('SelectionChanged', batchActionGlobals.treeSelectionChanged); batchActionGlobals.o2 = $(_HANDLER_FORMS.batchactions).observeMethod('Close', batchActionGlobals.popupClosed); @@ -388,6 +401,17 @@ batchActionGlobals = { } } + +Behaviour.register({ + '#choose_batch_action' : { + onchange : function() { + $('batchactions').actionChanged(); + }, + } +}); + + + /** * Publish selected pages action */ diff --git a/templates/Includes/CMSMain_left.ss b/templates/Includes/CMSMain_left.ss index 660686fb..b30033bd 100755 --- a/templates/Includes/CMSMain_left.ss +++ b/templates/Includes/CMSMain_left.ss @@ -71,7 +71,7 @@

<% _t('SELECTPAGESACTIONS','Select the pages that you want to change & then click an action:') %>

- +