You are here

function nodequeue_load_queues in Nodequeue 7.3

Same name and namespace in other branches
  1. 5.2 nodequeue.module \nodequeue_load_queues()
  2. 6.2 nodequeue.module \nodequeue_load_queues()
  3. 7.2 nodequeue.module \nodequeue_load_queues()

Load an array of $queues.

This exists to provide a way of loading a bunch of queues with the fewest queries. Loading 5 queues results in only 4 queries, not 20. This also caches queues so that they don't get loaded repeatedly.

Parameters

$queue_names: An array of queue names to load.

$bypass_cache: Boolean value indicating whether to bypass the cache or not.

16 calls to nodequeue_load_queues()
action_nodequeue_add in includes/nodequeue.actions.inc
Old-style action to add a node to a queue.
action_nodequeue_remove in includes/nodequeue.actions.inc
Old-style action to remove a node from a queue.
nodequeue_add_action in includes/nodequeue.actions.inc
Action to add a node to a queue.
nodequeue_add_action_form in includes/nodequeue.actions.inc
Configuration form for Add to Nodequeues action.
nodequeue_apachesolr_index_document_node in ./nodequeue.module
Implements hook_apachesolr_index_document_ENTITY_TYPE().

... See full list

File

./nodequeue.module, line 603
Maintains queues of nodes in arbitrary order.

Code

function nodequeue_load_queues($queue_names = array(), $bypass_cache = FALSE) {
  static $cache = array();
  $to_load = $loaded = array();
  foreach ($queue_names as $name) {
    if ($bypass_cache || !isset($cache[$name])) {
      $to_load[] = $name;
    }
  }
  if (!empty($to_load)) {
    $result = db_query("SELECT q.*, (SELECT COUNT(*) FROM {nodequeue_subqueue} s WHERE q.name = s.name) AS subqueues FROM {nodequeue_queue} q WHERE q.name IN (:to_load)", array(
      ':to_load' => $to_load,
    ));
    foreach ($result as $queue) {
      $loaded[$queue->name] = $queue;
      $loaded[$queue->name]->new = FALSE;

      // ensure valid defaults:
      $loaded[$queue->name]->types = array();
      $loaded[$queue->name]->roles = array();
      $loaded[$queue->name]->count = 0;
    }
    $result = db_query("SELECT name, rid FROM {nodequeue_roles} WHERE name IN (:to_load)", array(
      ':to_load' => $to_load,
    ));
    foreach ($result as $obj) {
      $loaded[$obj->name]->roles[] = $obj->rid;
    }
    $result = db_query("SELECT name, type FROM {nodequeue_types} WHERE name IN (:to_load)", array(
      ':to_load' => $to_load,
    ));
    foreach ($result as $obj) {
      $loaded[$obj->name]->types[] = $obj->type;
    }
    $context = 'load_queues';
    drupal_alter('nodequeue', $loaded, $context);
  }
  if ($bypass_cache) {
    return $loaded;
  }
  else {
    if (!empty($loaded)) {
      $cache += $loaded;
    }
    $queues = array();
    foreach ($queue_names as $name) {
      if (isset($cache[$name])) {
        $queues[$name] = $cache[$name];
      }
    }
    return $queues;
  }
}