function rb_numbers_action_views_sum in Rules Bonus Pack 6
Action for 'rb_numbers_action_views_sum'.
File
- ./
rb_numbers.module, line 238  - Functions for extending number management with Rules.
 
Code
function rb_numbers_action_views_sum($settings) {
  // Get necessary metadata about the view.
  $views_settings = explode('|', $settings['view']);
  $view_name = $views_settings[0];
  $display_name = $views_settings[1];
  $view_arguments = explode("\r", $settings['args']);
  // Build and execute the view.
  $view = views_get_view($view_name);
  $view
    ->set_display($display_name);
  $view
    ->set_arguments($view_arguments);
  $view
    ->set_items_per_page(0);
  $view
    ->execute();
  // Get the sum!
  $sum = 0;
  foreach ($settings['view_fields'] as $field) {
    // Only sum over the selected fields.
    if ($field) {
      // Assign the alias to a variable, for code readability. (We need this
      // alias, since the view results are stored by alias.)
      $alias =& $view->display[$display_name]->handler->handlers['field'][$field]->field_alias;
      foreach ($view->result as &$row) {
        $sum += $row->{$alias};
      }
      // Destroy the $row variable left after doing a foreach-by-reference.
      unset($row);
    }
  }
  // Return the sum.
  return array(
    'sum' => $sum,
  );
}