/** * Process Bulk Request * * Operates on $Model object and assumes that bulk processing will be delegated * to BulkProcessBehavior * * Options: * - redirect URL to redirect in array format * - messageMap Map of error name and its message * * @param Model $Model Model instance * @param string $action Action name to process * @param array $ids Array of IDs * @param array $options Options * @return void */ public function process(Model $Model, $action, $ids, $options = array()) { $Controller = $this->_controller; $emptyMessage = __d('croogo', 'No item selected'); $noMultipleMessage = __d('croogo', 'Please choose only one item for this operation'); $options = Hash::merge(array('multiple' => array(), 'redirect' => array('action' => 'index'), 'messageMap' => array('empty' => $emptyMessage, 'noMultiple' => $noMultipleMessage)), $options); $messageMap = $options['messageMap']; $itemCount = count($ids); $noItems = $itemCount === 0 || $action == null; $valid = $this->_validateSelection($noItems, $options, 'empty'); if (!$valid) { return; } $tooMany = isset($options['multiple'][$action]) && $options['multiple'][$action] === false && $itemCount > 1; $valid = $this->_validateSelection($tooMany, $options, 'noMultiple'); if (!$valid) { return false; } if (!$Model->Behaviors->loaded('BulkProcess')) { $Model->Behaviors->load('Croogo.BulkProcess'); } $processed = $Model->processAction($action, $ids); $eventName = 'Controller.' . $Controller->name . '.after' . ucfirst($action); if ($processed) { if (!empty($messageMap[$action])) { $message = $messageMap[$action]; } else { $message = __d('croogo', '%s processed', Inflector::humanize($Model->alias)); } $setFlashOptions = array('class' => 'success'); Croogo::dispatchEvent($eventName, $Controller, compact($ids)); } else { $message = __d('croogo', 'An error occured'); $setFlashOptions = array('class' => 'error'); } $this->Session->setFlash($message, 'flash', $setFlashOptions); return $Controller->redirect($options['redirect']); }