View source
<?php
function nodequeue_rules_event_info() {
$items = array();
$vars = array(
'nodequeue' => array(
'label' => t('Changed nodequeue'),
'type' => 'nodequeue',
),
'node' => array(
'type' => 'node',
'label' => t('Node'),
),
);
$items['nodequeue_added'] = array(
'label' => t('Node has been added to a nodequeue'),
'group' => t('Nodequeue'),
'variables' => $vars,
);
$items['nodequeue_removed'] = array(
'label' => t('Node has been removed from a nodequeue'),
'group' => t('Nodequeue'),
'variables' => $vars,
);
$items['nodequeue_saved'] = array(
'label' => t('A nodequeue has been updated'),
'group' => t('Nodequeue'),
'variables' => array(
'nodequeue' => array(
'label' => t('Changed nodequeue'),
'type' => 'nodequeue',
),
'nodes' => array(
'label' => t('Nodes'),
'type' => 'nodes',
),
),
);
$items['nodequeue_node_changed'] = array(
'label' => t('A nodequeue\'s node has been updated'),
'group' => t('Nodequeue'),
'variables' => $vars,
);
return $items;
}
function nodequeue_rules_data_info() {
return array(
'nodequeue' => array(
'label' => 'nodequeue',
'wrap' => FALSE,
'wrapper class' => 'NodequeueRulesDataWrapper',
),
'nodes' => array(
'label' => 'nodes',
'wrap' => FALSE,
'wrapper class' => 'NodeIdArrayRulesDataWrapper',
),
);
}
class NodequeueRulesDataWrapper extends RulesIdentifiableDataWrapper {
protected function extractIdentifier($nodequeue) {
$nodequeue = current($nodequeue);
return $nodequeue->qid;
}
protected function load($sqid) {
return nodequeue_load_subqueue($sqid);
}
}
class NodeIdArrayRulesDataWrapper extends RulesIdentifiableDataWrapper {
protected function extractIdentifier($rules_node_data) {
if (is_array($rules_node_data)) {
$nids = array();
foreach ($rules_node_data as $node_data) {
$nids[] = $node_data['nid'];
}
return $nids;
}
else {
return $rules_node_data;
}
}
protected function load($nids) {
if (is_array($nids)) {
$nodes = array();
foreach ($nids as $nid) {
$nodes[] = node_load($nid);
}
return $nodes;
}
else {
$node = $nids;
return $nids;
}
}
}
function nodequeue_rules_condition_info() {
$conditions = array();
$conditions['nodequeue_rules_condition_belongs_to_nodequeue'] = array(
'label' => t('Belongs to Nodequeue(s)'),
'group' => t('Nodequeue'),
'parameter' => array(
'nodequeue' => array(
'type' => 'nodequeue',
'label' => t('Nodequeue'),
),
'qid' => array(
'type' => 'list<text>',
'label' => t('Queue ID of nodequeue to check'),
'options list' => 'nodequeue_rules_qid_options_list',
'multiple' => TRUE,
),
),
);
$conditions['nodequeue_rules_condition_node_belongs_to_nodequeue'] = array(
'label' => t('Node Belongs to Nodequeue(s)'),
'group' => t('Nodequeue'),
'parameter' => array(
'node' => array(
'type' => 'node',
'label' => t('Node'),
),
'qids' => array(
'type' => 'list<text>',
'label' => t('Queue ID(s) of nodequeue to check'),
'options list' => 'nodequeue_rules_qid_options_list',
'multiple' => TRUE,
),
),
);
return $conditions;
}
function nodequeue_rules_qid_options_list() {
$queues = nodequeue_load_subqueues_by_queue(array_keys(nodequeue_get_all_qids()));
foreach ($queues as $sqid => $queue) {
$queuenames[$sqid] = $queue->title;
}
return $queuenames;
}
function nodequeue_rules_condition_belongs_to_nodequeue($nodequeue, $qid) {
if (in_array($nodequeue->qid, $qid)) {
return TRUE;
}
else {
return FALSE;
}
}
function nodequeue_rules_condition_node_belongs_to_nodequeue($node, $qids) {
$queues = nodequeue_load_queues(array_keys($qids));
$nodesqueues = nodequeue_get_subqueues_by_node($queues, $node);
if (!empty($nodesqueues)) {
return TRUE;
}
else {
return FALSE;
}
}
function nodequeue_rules_action_info() {
return array(
'nodequeue_action_add_node' => array(
'label' => t('Add node to nodequeue'),
'group' => t('Nodequeue'),
'parameter' => array(
'node' => array(
'type' => 'node',
'label' => t('Node'),
'description' => t('The node you want to add.'),
),
'queue' => array(
'type' => 'text',
'label' => t('Queue'),
'description' => t('The queue where the node should be added to.'),
'options list' => 'nodequeue_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,
),
),
),
'nodequeue_action_remove_node' => array(
'label' => t('Remove node from nodequeue'),
'group' => t('Nodequeue'),
'parameter' => array(
'node' => array(
'type' => 'node',
'label' => t('Node'),
'description' => t('The node you want to remove.'),
),
'queue' => array(
'type' => 'text',
'label' => t('Queue'),
'description' => t('The queue where the node should be removed from.'),
'options list' => 'nodequeue_get_queue_names',
),
),
),
);
}
function nodequeue_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) {
$references = smartqueue_taxonomy_nodequeue_subqueues($queue, $node);
}
$smartqueue_domain_enabled = function_exists('smartqueue_domain_nodequeue_subqueues') ? TRUE : FALSE;
if ($smartqueue_domain_enabled) {
$subqueue_domain = smartqueue_domain_nodequeue_subqueues($queue, $node);
$node_domains = nodequeue_get_node_domains($node);
}
$subqueues = nodequeue_load_subqueues_by_queue($queue->qid);
foreach ($subqueues as $subqueue) {
$add = TRUE;
if ($unique) {
$add = nodequeue_subqueue_position($subqueue->sqid, $node->nid) === FALSE;
}
if ($add) {
if ($smartqueue_domain_enabled) {
if (!empty($subqueue->reference) && !empty($node_domains)) {
$reference_array = explode(':', $subqueue->reference);
$queue_domain_id = end($reference_array);
if (strpos($subqueue->reference, ':domain:') && in_array($queue_domain_id, $node_domains)) {
nodequeue_subqueue_add($queue, $subqueue, $node->nid);
}
}
}
if ($smartqueue_enabled) {
if (in_array($subqueue->reference, $references)) {
nodequeue_subqueue_add($queue, $subqueue, $node->nid);
}
}
if (!$smartqueue_enabled && !$smartqueue_domain_enabled) {
nodequeue_subqueue_add($queue, $subqueue, $node->nid);
}
}
}
}
function nodequeue_action_remove_node($node, $queue_name) {
$queue = nodequeue_load_queue_by_name($queue_name);
$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);
}
}
}
function nodequeue_get_queue_names() {
$items = array();
$queues = nodequeue_load_queues(nodequeue_get_all_qids());
foreach ($queues as $queue) {
$items[$queue->name] = $queue->title;
}
return $items;
}
function nodequeue_get_node_domains($node) {
$node_domains = array();
if (empty($node->nid) || !function_exists('domain_get_node_domains')) {
return $node_domains;
}
$domain_data = domain_get_node_domains($node->nid);
if (!empty($domain_data['domain_id'])) {
return $domain_data['domain_id'];
}
return $node_domains;
}