nodequeue.actions.inc in Nodequeue 5.2
nodequeue.actions.inc Provides actions integration for node queues.
File
nodequeue.actions.incView source
<?php
/**
* @file nodequeue.actions.inc
* Provides actions integration for node queues.
*/
/**
* Implementation of hook_action_info().
*/
function nodequeue_action_info() {
return array(
'nodequeue_add_action' => array(
'type' => 'node',
'description' => t('Add to Node Queues'),
'configurable' => TRUE,
'hooks' => array(
'nodeapi' => array(
'insert',
'update',
),
),
),
'nodequeue_remove_action' => array(
'type' => 'node',
'description' => t('Remove from Node Queues'),
'configurable' => TRUE,
'hooks' => array(
'nodeapi' => array(
'insert',
'update',
),
),
),
);
}
/**
* Configuration form for Add to Node Queues action.
*/
function nodequeue_add_action_form($context) {
// Default values for form.
if (!isset($context['qids'])) {
$context['qids'] = '';
}
$queues = nodequeue_load_queues(nodequeue_get_all_qids(500, TRUE), TRUE);
foreach ($queues as $qid => $queue) {
$options[$qid] = $queue->title;
}
$form = array();
if (count($options)) {
// Add form components.
$form['qids'] = array(
'#type' => 'select',
'#title' => t("Queue"),
'#default_value' => $edit['qids'],
'#multiple' => TRUE,
'#options' => $options,
'#required' => TRUE,
'#description' => t('Specify the queues into which the node should be submitted. If the queue is a smartqueue, the node shall be placed into every subqueue for which it is eligible.'),
);
}
else {
drupal_set_message(t('Please <a href="!url">create</a> a nodequeue first.', array(
'!url' => url('admin/content/nodequeue'),
)));
}
return $form;
}
/**
* Submit handler for Add to Node Queues action configuration.
*/
function nodequeue_add_action_submit($form_id, $form_values) {
return array(
'qids' => $form_values['qids'],
);
}
/**
* Action to add a node to a queue.
*/
function nodequeue_add_action($node, $context) {
$queues = nodequeue_load_queues($context['qids'], TRUE);
// Filter out queues by node type. We choose not to use nodequeue_get_qids() because it checks for access control which only matters if we administering a queue.
$eligible_queues = array();
foreach ($queues as $queue) {
if (in_array($node->type, $queue->types)) {
$eligible_queues[$queue->qid] = $queue;
}
}
if (!empty($eligible_queues)) {
// Remove the node from the eligible queues (if needed).
nodequeue_remove_action($node, array(
'qids' => array_keys($eligible_queues),
));
// Use API to get the eligible subqueues
$eligible_subqueues = nodequeue_get_subqueues_by_node($eligible_queues, $node);
// Add node to each subqueue.
foreach ($eligible_subqueues as $subqueue) {
nodequeue_subqueue_add($queues[$subqueue->qid], $subqueue, $node->nid);
}
}
}
/**
* Old-style action to add a node to a queue.
*/
function action_nodequeue_add($op, $edit = array(), $node) {
switch ($op) {
case 'metadata':
return array(
'description' => t('Add to Node Queues'),
'type' => t('node'),
'batchable' => true,
'configurable' => true,
);
break;
case 'do':
$queues = nodequeue_load_queues($edit['qids'], TRUE);
// Filter out queues by node type. We choose not to use nodequeue_get_qids() because it checks for access control which only matters if we administering a queue.
$eligible_queues = array();
foreach ($queues as $queue) {
if (in_array($node->type, $queue->types)) {
$eligible_queues[$queue->qid] = $queue;
}
}
if (!empty($eligible_queues)) {
// Remove the node from the eligible queues (if needed).
action_nodequeue_remove('do', array(
'qids' => array_keys($eligible_queues),
), $node);
// Use API to get the eligible subqueues
$eligible_subqueues = nodequeue_get_subqueues_by_node($eligible_queues, $node);
// Add node to each subqueue.
foreach ($eligible_subqueues as $subqueue) {
nodequeue_subqueue_add($queues[$subqueue->qid], $subqueue, $node->nid);
}
}
break;
// return an HTML config form for the action
case 'form':
// default values for form
if (!isset($edit['qids'])) {
$edit['qids'] = '';
}
$queues = nodequeue_load_queues(nodequeue_get_all_qids(500, TRUE), TRUE);
foreach ($queues as $qid => $queue) {
$options[$qid] = $queue->title;
}
$form = array();
if (count($options)) {
// add form components
$form['qids'] = array(
'#type' => 'select',
'#title' => t("Queue"),
'#default_value' => $edit['qids'],
'#multiple' => TRUE,
'#options' => $options,
'#required' => TRUE,
'#description' => t('Specify the queues into which the node should be submitted. If the queue is a smartqueue, the node shall be placed into every subqueue for which it is eligible.'),
);
}
else {
drupal_set_message(t('Please <a href="!url">create</a> a nodequeue first.', array(
'!url' => url('admin/content/nodequeue'),
)));
}
return $form;
// validate the HTML form
// process the HTML form to store configuration
case 'submit':
$params = array(
'qids' => $edit['qids'],
);
return $params;
break;
}
}
/**
* Configuration form for Remove from Node Queues action.
*/
function nodequeue_remove_action_form($context) {
// Default values for form.
if (!isset($edit['qids'])) {
$edit['qids'] = array();
}
$queues = nodequeue_load_queues(nodequeue_get_all_qids(500, TRUE), TRUE);
foreach ($queues as $qid => $queue) {
$options[$qid] = $queue->title;
}
// Add form components.
$form['qids'] = array(
'#type' => 'select',
'#title' => t("Queues"),
'#default_value' => $edit['qids'],
'#multiple' => TRUE,
'#decription' => t('Specify the queues from which the node should be removed. If the queue is a smartqueue, the node shall be removed from all subqueues.'),
'#required' => TRUE,
'#options' => $options,
);
return $form;
}
/**
* Submit handler for Remove from Node Queues action configuration.
*/
function nodequeue_remove_action_submit($form_id, $form_values) {
return array(
'qids' => $form_values['qids'],
);
}
function nodequeue_remove_action($node, $context) {
$qids = $context['qids'];
// If a node is being deleted, ensure it's also removed from any queues.
$placeholders = implode(',', array_fill(0, count($qids), '%d'));
$args = $qids;
$args[] = $node->nid;
$result = db_query("SELECT * FROM {nodequeue_nodes} WHERE qid IN ({$placeholders}) AND nid = %d", $args);
while ($obj = db_fetch_object($result)) {
// This removes by nid, not position, because if we happen to have a
// node in a queue twice, the 2nd position would be wrong.
nodequeue_subqueue_remove_node($obj->sqid, $node->nid);
}
}
/**
* Old-style action to remove a node from a queue.
*/
function action_nodequeue_remove($op, $edit = array(), $node) {
switch ($op) {
case 'metadata':
return array(
'description' => t('Remove from Node Queues'),
'type' => t('node'),
'batchable' => true,
'configurable' => true,
);
break;
case 'do':
$qids = $edit['qids'];
// If a node is being deleted, ensure it's also removed from any queues.
$placeholders = implode(',', array_fill(0, count($qids), '%d'));
$args = $qids;
$args[] = $node->nid;
$result = db_query("SELECT * FROM {nodequeue_nodes} WHERE qid IN ({$placeholders}) AND nid = %d", $args);
while ($obj = db_fetch_object($result)) {
// This removes by nid, not position, because if we happen to have a
// node in a queue twice, the 2nd position would be wrong.
nodequeue_subqueue_remove_node($obj->sqid, $node->nid);
}
break;
// return an HTML config form for the action
case 'form':
// default values for form
if (!isset($edit['qids'])) {
$edit['qids'] = array();
}
$queues = nodequeue_load_queues(nodequeue_get_all_qids(500, TRUE), TRUE);
foreach ($queues as $qid => $queue) {
$options[$qid] = $queue->title;
}
// add form components
$form['qids'] = array(
'#type' => 'select',
'#title' => t("Queues"),
'#default_value' => $edit['qids'],
'#multiple' => TRUE,
'#decription' => t('Specify the queues from which the node should be removed. If the queue is a smartqueue, the node shall be removed from all subqueues.'),
'#required' => TRUE,
'#options' => $options,
);
return $form;
break;
// validate the HTML form
// process the HTML form to store configuration
case 'submit':
$params = array(
'qids' => $edit['qids'],
);
return $params;
break;
}
}
Functions
Name | Description |
---|---|
action_nodequeue_add | Old-style action to add a node to a queue. |
action_nodequeue_remove | Old-style action to remove a node from a queue. |
nodequeue_action_info | Implementation of hook_action_info(). |
nodequeue_add_action | Action to add a node to a queue. |
nodequeue_add_action_form | Configuration form for Add to Node Queues action. |
nodequeue_add_action_submit | Submit handler for Add to Node Queues action configuration. |
nodequeue_remove_action | |
nodequeue_remove_action_form | Configuration form for Remove from Node Queues action. |
nodequeue_remove_action_submit | Submit handler for Remove from Node Queues action configuration. |