123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- <?php
- /**
- * @file queue_ui.pages.inc
- */
- /**
- * Queue form handler.
- */
- function queue_ui_page($form, &$form_state) {
- //queue_ui_test(); // @todo remove before prod
- // Initialize.
- if ($form_state['rebuild']) {
- $form_state['input'] = array();
- }
- if (empty($form_state['storage'])) {
- // First step, so start with our overview form.
- $form_state['storage'] = array(
- 'step' => 'queue_ui_overview_form',
- );
- }
- // Return the form from the current step.
- $function = $form_state['storage']['step'];
- $form = $function($form, $form_state);
- return $form;
- }
- function queue_ui_page_submit($form, &$form_state) {
- $values = $form_state['values'];
- $queue_classes = _queue_ui_array_keys_contain($values, 'queues');
- $queues = array();
- foreach ($queue_classes as $class_name) {
- foreach ($values[$class_name] as $queue) {
- $queues[] = $queue;
- }
- }
- // Get submitted queues to act on.
- $queues = array_filter($queues);
- if (empty($queues)) {
- // Nothing to do.
- return;
- }
- if (isset($values['step_submit'])) {
- // Pass off to step submit handler.
- $function = $values['step_submit'];
- $function($form, $form_state, $queues);
- }
- return;
- }
- function queue_ui_overview_form() {
- $queues = $options = array();
- // @todo activation status
- $header = array(
- 'name' => array('data' => t('Name')),
- 'title' => array('data' => t('Title')),
- 'items' => array('data' => t('Number of items')),
- 'class' => array('data' => t('Class')),
- 'inspect' => array('data' => t('Inspect')),
- //'operations' => array('data' => t('Operations')),
- );
- // Get queues defined via our hook.
- $defined_queues = queue_ui_defined_queues();
- // Get queues names.
- $queues = queue_ui_queues();
- foreach ($queues as $class => $classed_queues) {
- $options = array();
- $class_info = QueueUI::get('QueueUI' . $class);
- // Output information for each queue of the current class
- foreach($classed_queues as $name => $queue) {
- $title = '';
- $operations = '';
- $inspect = FALSE;
- if (isset($defined_queues[$name])) {
- $title = $defined_queues[$name]['title'];
- }
- if (isset($defined_queues[$name]['batch'])) {
- $operations = 'batch';
- }
- if (is_object($class_info) && $class_info->inspect) {
- $inspect = TRUE;
- }
- $options[$name] = array(
- 'name' => array('data' => $name),
- 'title' => array('data' => $title),
- 'items' => array('data' => $queue['items']),
- 'class' => array('data' => $class),
- //'operations' => array('data' => $operations),
- );
- // If queue inspection is enabled for this class, add to the options array.
- if ($inspect) {
- $options[$name]['inspect'] = array('data' => l(t('Inspect'), QUEUE_UI_BASE . "/inspect/$name"));
- }
- else {
- $options[$name]['inspect'] = '';
- }
- }
- $form[$class] = array(
- '#type' => 'fieldset',
- '#collapsible' => TRUE,
- '#title' => $class,
- );
- $form[$class]['queues_' . $class] = array(
- '#type' => 'tableselect',
- '#header' => $header,
- '#options' => $options,
- '#empty' => t('No queues exist for @class.', array('@class' => $class)),
- );
- }
- // @todo deactivate options
- // Option to run batch.
- $form['batch'] = array(
- '#type' => 'submit',
- '#value' => t('Batch process'),
- );
- // Option to remove lease timestamps.
- $form['release'] = array(
- '#type' => 'submit',
- '#value' => t('Remove leases'),
- );
- // Option to run via cron.
- $form['cron'] = array(
- '#type' => 'submit',
- '#value' => t('Cron process'),
- );
- // Option to delete queue.
- $form['delete'] = array(
- '#type' => 'submit',
- '#value' => t('Delete queues'),
- );
- // Specify our step submit callback.
- $form['step_submit'] = array('#type' => 'value', '#value' => 'queue_ui_overview_submit');
- return $form;
- }
- /**
- * Overview submit handler.
- */
- function queue_ui_overview_submit($form, &$form_state, $queues) {
- $values = $form_state['values'];
- // Switch off submitted action.
- switch ($values['op']) {
- case $values['cron']:
- // Set variables for cron to TRUE.
- $defined_queues = queue_ui_defined_queues();
- $intersect = array_intersect(array_keys($defined_queues), $queues);
- foreach ($intersect as $name) {
- if (isset($defined_queues[$name]['cron'])) {
- variable_set('queue_ui_cron_' . $name, TRUE);
- }
- }
- break;
- case $values['batch']:
- // Process queue(s) with batch.
- // We can only run batch on queues using our hook_queue_info() that define batch.
- $defined_queues = queue_ui_defined_queues();
- $intersect = array_intersect(array_keys($defined_queues), $queues);
- foreach ($intersect as $name) {
- // Only if queue_info implementation defined batch can we set it here.
- if (isset($defined_queues[$name]['batch'])) {
- $batch = $defined_queues[$name]['batch'];
- // Add queue as argument to operations by resetting the operations array.
- $operations = array();
- $queue = DrupalQueue::get($name);
- foreach ($batch['operations'] as $operation) {
- // First element is the batch process callback, second is the argument.
- $operations[] = array($operation[0], array_merge(array($queue), $operation[1]));
- }
- $batch['operations'] = $operations;
- // Set.
- batch_set($batch);
- }
- }
- break;
- case $values['delete']:
- // Confirm before deleting. Go multistep!
- $form_state['rebuild'] = TRUE;
- $form_state['storage']['queues'] = $queues;
- $form_state['storage']['step'] = 'queue_ui_confirm_delete';
- break;
- case $values['release']:
- foreach ($queues as $name) {
- $num_updated = db_update('queue')
- ->fields(array(
- 'expire' => 0,
- ))
- ->condition('name', $name, '=')
- ->execute();
- drupal_set_message(t('!count lease reset in queue !name', array('!count' => $num_updated, '!name' => $name)));
- }
- break;
- }
- return;
- }
- /**
- * Confirm form for deleting queues.
- */
- function queue_ui_confirm_delete($form, &$form_state) {
- $form['queues'] = array('#type' => 'value', '#value' => $form_state['storage']['queues']);
- $description = t('All items in each queue will be deleted, regardless of if leases exist. This operation cannot be undone.');
- // Specify our step submit callback.
- $form['step_submit'] = array('#type' => 'value', '#value' => 'queue_ui_delete_submit');
- return confirm_form($form,
- format_plural(count($form_state['storage']['queues']), 'Are you sure you want to delete the queue?', 'Are you sure you want to delete @count queues?'),
- 'admin/config/system/queue-ui',
- $description,
- t('Delete'),
- t('Cancel')
- );
- }
- /**
- * Submit handler for deleting queues.
- */
- function queue_ui_delete_submit($form, &$form_state, $queues) {
- $values = $form_state['values'];
- $defined_queues = queue_ui_defined_queues();
- foreach ($queues as $name) {
- $queue = DrupalQueue::get($name);
- if (isset($defined_queues[$name]['delete'])) {
- $function = $defined_queues[$name]['delete'];
- $function($queue);
- }
- $queue->deleteQueue();
- }
- drupal_set_message(format_plural(count($values['queues']), 'Queue deleted', '@count queues deleted'));
- return;
- }
- function _queue_ui_array_keys_contain($input, $search_value, $strict = FALSE) {
- $tmpkeys = array();
- $keys = array_keys($input);
- foreach ($keys as $k) {
- if ($strict && strpos($k, $search_value) !== FALSE) {
- $tmpkeys[] = $k;
- }
- elseif (!$strict && stripos($k, $search_value) !== FALSE) {
- $tmpkeys[] = $k;
- }
- }
- return $tmpkeys;
- }
|