function smartqueue_taxonomy_nodequeue_subqueues in Nodequeue 7.3
Same name and namespace in other branches
- 5.2 smartqueue.module \smartqueue_taxonomy_nodequeue_subqueues()
- 6.2 smartqueue.module \smartqueue_taxonomy_nodequeue_subqueues()
- 7.2 modules/smartqueue/smartqueue.module \smartqueue_taxonomy_nodequeue_subqueues()
Implements hook_nodequeue_subqueues().
Returns list of references for subqueues that can host a given node.
File
- ./
smartqueue.module, line 101
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) && $queue->use_parents) {
// Replace taxonomy IDs with their parents'.
foreach ($field_names as $field_name => &$tids) {
$tids = smartqueue_taxonomy_get_parents($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->name => $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;
}