View source
<?php
function queue_ui_permission() {
return array(
'admin queue_ui' => array(
'title' => t('Administer queues'),
'description' => t('View, run, and delete queues'),
),
);
}
function queue_ui_menu() {
$items['admin/config/system/queue-ui'] = array(
'title' => 'Queue manager',
'description' => 'View and manage queues',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'queue_ui_page',
),
'access arguments' => array(
'admin queue_ui',
),
'file' => 'queue_ui.pages.inc',
);
return $items;
}
function queue_ui_queue_load($name) {
return DrupalQueue::get($name);
}
function queue_ui_test() {
$queue = DrupalQueue::get('queue ui test_me');
$queue
->createQueue();
$num = mt_rand(0, 99);
for ($i = 0; $i < $num; $i++) {
$queue
->createItem(time());
}
}
function queue_ui_queue_names() {
$result = db_query("SELECT DISTINCT name FROM {queue}");
return $result
->fetchAll();
}
function queue_ui_queues() {
$queues = array();
$queue_names = queue_ui_queue_names();
if (!empty($queue_names)) {
foreach ($queue_names as $name) {
$queue = DrupalQueue::get($name->name);
$queues[$name->name] = array(
'queue' => $queue,
'items' => $queue
->numberOfItems(),
);
}
}
return $queues;
}
function queue_ui_defined_queues() {
$queues =& drupal_static(__FUNCTION__);
if (!isset($queues)) {
$queues = module_invoke_all('queue_info');
}
return $queues;
}
function queue_ui_cron() {
$defs = queue_ui_defined_queues();
if (!empty($defs)) {
foreach ($defs as $name => $definition) {
$queue = DrupalQueue::get($name);
if (isset($definition['cron']) && is_object($queue) && $queue
->numberOfItems()) {
$active = variable_get('queue_ui_cron_' . $name, FALSE);
if ($active) {
$function = $definition['cron']['callback'];
$args = isset($definition['cron']['callback']) ? $definition['cron']['callback'] : NULL;
$function($queue, $args);
}
}
}
}
}
function queue_ui_queue_info() {
return array(
'queue ui test_me' => array(
'title' => t('Test queue'),
'batch' => array(
'operations' => array(
array(
'queue_ui_batch_test',
array(),
),
),
'finished' => 'queue_ui_batch_finished',
'title' => t('Processing test queue'),
),
'cron' => array(
'callback' => 'queue_ui_test_process',
),
),
);
}
function queue_ui_test_process($queue) {
$count = $queue
->numberOfItems();
for ($i = 0; $i < 20 && $count > 0; $i++) {
$item = $queue
->claimItem(20);
if ($item) {
$queue
->deleteItem($item);
$count--;
}
}
}
function queue_ui_batch_test($queue, &$context) {
if (empty($context['sandbox'])) {
$context['sandbox']['progress'] = 0;
$context['sandbox']['current'] = 0;
$context['sandbox']['max'] = $queue
->numberOfItems();
}
for ($i = 0; $i < 20 && $context['sandbox']['current'] < $context['sandbox']['max']; $i++) {
$item = $queue
->claimItem(20);
if ($item) {
$queue
->deleteItem($item);
}
$context['sandbox']['progress']++;
$context['sandbox']['current']++;
}
if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
$context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
}
}
function queue_ui_batch_finished($success, $results, $operations) {
if ($success) {
$message = 'success';
}
else {
$message = t('An error occured @todo.');
}
drupal_set_message($message);
}