You are here

function views_bulk_operations_active_queue_process in Views Bulk Operations (VBO) 7.3

Batch API callback: processes the active queue.

Parameters

$queue_name: The name of the queue to process.

$operation: The object representing the current operation.

$total_rows: The total number of processable items (across all queue items), used to report progress.

See also

views_bulk_operations_queue_item_process()

2 string references to 'views_bulk_operations_active_queue_process'
views_bulk_operations_drush_execute in ./views_bulk_operations.drush.inc
Implementation of 'vbo execute' command.
views_bulk_operations_execute in ./views_bulk_operations.module
Entry point for executing the chosen operation upon selected rows.

File

./views_bulk_operations.module, line 1042
Allows operations to be performed on items selected in a view.

Code

function views_bulk_operations_active_queue_process($queue_name, $operation, $total_rows, &$context) {
  static $queue;

  // It is still possible to hit the time limit.
  drupal_set_time_limit(0);

  // Prepare the sandbox.
  if (!isset($context['sandbox']['progress'])) {
    $context['sandbox']['progress'] = 0;
    $context['sandbox']['max'] = $total_rows;
    $context['results']['log'] = array();
  }

  // Instantiate the queue.
  if (!isset($queue)) {
    $queue = DrupalQueue::get($queue_name, TRUE);
  }

  // Process the queue as long as it has items for us.
  $queue_item = $queue
    ->claimItem(3600);
  if ($queue_item) {

    // Process the queue item, and update the progress count.
    views_bulk_operations_queue_item_process($queue_item->data, $context['results']['log']);
    $queue
      ->deleteItem($queue_item);

    // Provide an estimation of the completion level we've reached.
    $context['sandbox']['progress'] += count($queue_item->data['arguments'][0]);
    $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
    $context['message'] = t('Processed @current out of @total', array(
      '@current' => $context['sandbox']['progress'],
      '@total' => $context['sandbox']['max'],
    ));
  }
  if (!$queue_item || $context['finished'] === 1) {

    // All done. Provide a status message to the user.
    $context['results']['log'][] = t('Performed %operation on @items.', array(
      '%operation' => $operation
        ->label(),
      '@items' => format_plural($context['sandbox']['progress'], '1 item', '@count items'),
    ));
  }
}