You are here

function smartqueue_taxonomy_nodequeue_subqueues in Nodequeue 7.2

Same name and namespace in other branches
  1. 5.2 smartqueue.module \smartqueue_taxonomy_nodequeue_subqueues()
  2. 6.2 smartqueue.module \smartqueue_taxonomy_nodequeue_subqueues()
  3. 7.3 smartqueue.module \smartqueue_taxonomy_nodequeue_subqueues()

Implements hook_nodequeue_subqueues().

Returns list of references for subqueues that can host a given node.

1 call to smartqueue_taxonomy_nodequeue_subqueues()
nodequeue_action_add_node in ./nodequeue.rules.inc
Action: Add the given node to the given nodequeue.
1 string reference to 'smartqueue_taxonomy_nodequeue_subqueues'
nodequeue_action_add_node in ./nodequeue.rules.inc
Action: Add the given node to the given nodequeue.

File

modules/smartqueue/smartqueue.module, line 241

Code

function smartqueue_taxonomy_nodequeue_subqueues(&$queue, $node) {
  $field_names = array();

  // Check if at least one supported field exists in node and load
  // selected tids.
  foreach (explode('-', $queue->reference) as $field_name) {

    // Save tids.
    if ($field_values = field_get_items('node', $node, $field_name)) {
      $field_names[$field_name] = array();
      foreach ($field_values as $field_value) {
        $field_names[$field_name][] = $field_value['tid'];
      }
    }
  }
  if (!empty($field_names) && !empty($queue->use_parents)) {

    // Replace taxonomy IDs with their parents'.
    foreach ($field_names as $field_name => &$tids) {
      $tids = smartqueue_taxonomy_get_parents($tids);
    }
  }
  if (!empty($field_names) && !empty($queue->use_parents_all)) {

    // Replace taxonomy IDs with all their parents'.
    foreach ($field_names as $field_name => &$tids) {
      $tids = smartqueue_taxonomy_get_children($tids);
    }
  }

  // Forbid NO terms being set, but allow various non-terms to be set.
  $empty = TRUE;
  foreach ($field_names as $field_name => $tids) {
    if (!empty($tids)) {
      $empty = FALSE;
    }
    if (!count($field_names[$field_name])) {
      $field_names[$field_name][] = 0;
    }
  }
  if ($empty) {
    return;
  }

  // Build reference strings for all subqueues.
  $references = smartqueue_build_string(array_filter($field_names));

  // We're returning an array of references for efficiency, but we also have
  // to check to see if the references we've generated exist. If they don't,
  // we have to create them.
  $exists = array();
  $subqueues = nodequeue_load_subqueues_by_reference(array(
    $queue->qid => $references,
  ));
  foreach ($subqueues as $subqueue) {
    $exists[$subqueue->reference] = TRUE;
  }

  // Create subqueues if needed.
  foreach ($references as $reference) {
    if (empty($exists[$reference])) {
      nodequeue_add_subqueue($queue, smartqueue_taxonomy_nodequeue_subqueue_title($queue, $reference), $reference);
    }
  }
  return $references;
}