From 03469230ff1f2027a85487f086e4986ce300fde5 Mon Sep 17 00:00:00 2001 From: Hamish Friedlander Date: Fri, 22 Jun 2012 13:59:08 +1200 Subject: [PATCH] BUGFIX: Add batch handler status messages (fixes #7427) 7427 was mostly fixed by Ingos previous patch. But two batch actions, delete from draft site and delete from published site werent returning status messages. Abstracted out the status preperation code that the batch actions that were returning status messages were using, and used that to add status messages to the problem two --- admin/code/CMSBatchAction.php | 43 +++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/admin/code/CMSBatchAction.php b/admin/code/CMSBatchAction.php index 1e190ca6d..25d04229f 100644 --- a/admin/code/CMSBatchAction.php +++ b/admin/code/CMSBatchAction.php @@ -27,7 +27,38 @@ abstract class CMSBatchAction extends Object { * Return a set of status-updated JavaScript to return to the CMS. */ abstract function run(SS_List $objs); - + + /** + * Helper method for responding to a back action request + * @param $successMessage string - The message to return as a notification. + * Can have up to two %d's in it. The first will be replaced by the number of successful + * changes, the second by the number of failures + * @param $status array - A status array like batchactions builds. Should be + * key => value pairs, the key can be any string: "error" indicates errors, anything + * else indicates a type of success. The value is an array. We don't care what's in it, + * we just use count($value) to find the number of items that succeeded or failed + */ + public function response($successMessage, $status) { + $count = 0; + $errors = 0; + + foreach($status as $k => $v) { + if ($k == 'errors') $errors = count($v); + else $count += count($v); + } + + $response = Controller::curr()->getResponse(); + + if($response) { + $response->setStatusCode( + 200, + sprintf($successMessage, $count, $errors) + ); + } + + return Convert::raw2json($status); + } + /** * Helper method for processing batch actions. * Returns a set of status-updating JavaScript to return to the CMS. @@ -67,15 +98,7 @@ abstract class CMSBatchAction extends Object { unset($obj); } - $response = Controller::curr()->getResponse(); - if($response) { - $response->setStatusCode( - 200, - sprintf($successMessage, $objs->Count(), count($status['error'])) - ); - } - - return Convert::raw2json($status); + return $this->response($successMessage, $status); }