Example #1
0
 /**
  * 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']);
 }