diff --git a/addons/nodequeue_rules/nodequeue_rules.rules.inc b/addons/nodequeue_rules/nodequeue_rules.rules.inc index 5d2368f..69b744d 100644 --- a/addons/nodequeue_rules/nodequeue_rules.rules.inc +++ b/addons/nodequeue_rules/nodequeue_rules.rules.inc @@ -102,6 +102,12 @@ function nodequeue_rules_rules_action_info() { 'description' => t('The queue where the node should be added to.'), 'options list' => 'nodequeue_rules_get_queue_names', ), + 'unique' => array( + 'type' => 'boolean', + 'label' => t('Prevent duplication'), + 'description' => t('Selecting this option will prevent the node from being added more than once to any subqueue.'), + 'default value' => TRUE, + ) ), ), // Action: Remove the given node from the given nodequeue. @@ -128,7 +134,7 @@ function nodequeue_rules_rules_action_info() { /** * Action: Add the given node to the given nodequeue. */ -function nodequeue_rules_action_add_node($node, $queue_name) { +function nodequeue_rules_action_add_node($node, $queue_name, $unique) { $queue = nodequeue_load_queue_by_name($queue_name); $smartqueue_enabled = function_exists('smartqueue_taxonomy_nodequeue_subqueues') ? TRUE : FALSE; if ($smartqueue_enabled) { @@ -136,14 +142,21 @@ function nodequeue_rules_action_add_node($node, $queue_name) { } $subqueues = nodequeue_load_subqueues_by_queue($queue->qid); foreach($subqueues as $subqueue) { - if ($smartqueue_enabled) { - if (in_array($subqueue->reference, $references)) { + $add = TRUE; + // unique means we don't add it if it's in the queue already + if ($unique) { + $add = nodequeue_subqueue_position($subqueue->sqid, $node->nid) === FALSE; + } + if ($add) { + if ($smartqueue_enabled) { + if (in_array($subqueue->reference, $references)) { + nodequeue_subqueue_add($queue, $subqueue, $node->nid); + } + } + else { nodequeue_subqueue_add($queue, $subqueue, $node->nid); } } - else { - nodequeue_subqueue_add($queue, $subqueue, $node->nid); - } } } @@ -152,9 +165,11 @@ function nodequeue_rules_action_add_node($node, $queue_name) { */ function nodequeue_rules_action_remove_node($node, $queue_name) { $queue = nodequeue_load_queue_by_name($queue_name); - $subqueue = array_shift(nodequeue_load_subqueues_by_queue($queue->qid)); - if (!$queue->i18n || (isset($node->tnid) && empty($node->tnid))) { - nodequeue_subqueue_remove_node($subqueue->qid, $node->nid); + $subqueues = nodequeue_load_subqueues_by_queue($queue->qid); + foreach ($subqueues as $subqueue) { + if (!$queue->i18n || (isset($node->tnid) && empty($node->tnid))) { + nodequeue_subqueue_remove_node($subqueue->sqid, $node->nid); + } } }