You are here

function nodequeue_load_queues in Nodequeue 7.2

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.3 nodequeue.module \nodequeue_load_queues()

Load an array of $qids.

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

$qids: An array of queue IDs to load.

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

Return value

array if $bypass_cache is TRUE then it will return data from catch else from database.

21 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.
NodequeueAPICRUDUnitTest::testNodequeueModify in tests/nodequeue.test
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.

... See full list

File

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

Code

function nodequeue_load_queues($qids = array(), $bypass_cache = FALSE) {
  $static = drupal_static(__FUNCTION__, array(
    'queues' => array(),
    'qids' => array(),
  ));

  // Create a list of queues that need to be loaded.
  $to_load = array();
  foreach ($qids as $qid) {
    if ($bypass_cache || !isset($static['qids'][$qid])) {
      $to_load[] = $qid;
    }
  }

  // Load fresh queues from the database.
  $new_queues = array();
  if (!empty($to_load)) {
    $result = db_query("SELECT q.*, (SELECT count(*) FROM {nodequeue_subqueue} s WHERE q.qid = s.qid) AS subqueues FROM {nodequeue_queue} q WHERE q.qid IN (:to_load)", array(
      ':to_load' => $to_load,
    ));
    foreach ($result as $queue) {
      $qid = $queue->qid;
      if (!isset($static['queues'][$qid])) {
        $new_queues[$qid] = $queue;

        // Add valid defaults values.
        $new_queues[$qid]->types = array();
        $new_queues[$qid]->roles = array();
        $new_queues[$qid]->count = 0;
      }
    }

    // Add role data to all new queues.
    $result = db_query("SELECT qid, rid FROM {nodequeue_roles} WHERE qid IN (:to_load)", array(
      ':to_load' => $to_load,
    ));
    foreach ($result as $obj) {
      $qid = $obj->qid;
      $new_queues[$qid]->roles[] = $obj->rid;
    }

    // Add type data to all new queues.
    $result = db_query("SELECT qid, type FROM {nodequeue_types} WHERE qid IN (:to_load)", array(
      ':to_load' => $to_load,
    ));
    foreach ($result as $obj) {
      $qid = $obj->qid;
      $new_queues[$qid]->types[] = $obj->type;
    }

    // Allow other modules to load additional data to the new queues.
    $context = 'load_queues';
    drupal_alter('nodequeue', $new_queues, $context);
  }
  if ($bypass_cache) {
    return $new_queues;
  }
  if (!empty($new_queues)) {
    $static['queues'] += $new_queues;
    $static['qids'] += array_keys($new_queues);
  }

  // Return only the requested queues.
  $return = array();
  foreach ($qids as $qid) {
    if (isset($static['queues'][$qid])) {
      $return[$qid] = $static['queues'][$qid];
    }
  }
  return $return;
}