| 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;}
 |