You are here

nodequeue.workflow_ng.inc in Nodequeue 5.2

nodequeue_workflow_ng.inc

This include file is enabled when Workflow-ng module is enabled. It adds some actions that allow nodequeue manipualtion and interaction.

File

nodequeue.workflow_ng.inc
View source
<?php

/**
 * @file nodequeue_workflow_ng.inc
 * 
 * This include file is enabled when Workflow-ng module is enabled. 
 * It adds some actions that allow nodequeue manipualtion and interaction. 
 */

/*
 * Implementation of hook_action_info().
 */
function nodequeue_action_info() {
  $info = array();
  $info['nodequeue_workflow_ng_action_load_nodequeue'] = array(
    '#label' => t('Load nodequeue'),
    '#new arguments' => array(
      'nodequeue' => array(
        '#entity' => 'nodequeue',
        '#label' => t('Nodequeue'),
      ),
    ),
    '#description' => t('Load a nodequeue as a new argument. This action must be used before any other action on
        a nodequeue can be performed.'),
    '#module' => 'Nodequeue',
  );
  $info['nodequeue_workflow_ng_action_add_node_to_nodequeue'] = array(
    '#label' => t('Add content to nodequeue'),
    '#arguments' => array(
      'node' => array(
        '#entity' => 'node',
        '#label' => t('Content which will be added to the nodequeue'),
      ),
      'nodequeue' => array(
        '#entity' => 'nodequeue',
        '#label' => t('Nodequeue that content will be added to'),
      ),
    ),
    '#description' => t('Add content to a loaded nodequeue.'),
    '#module' => 'Nodequeue',
  );
  $info['nodequeue_workflow_ng_action_remove_node_from_nodequeue'] = array(
    '#label' => t('Remove content from nodequeue'),
    '#arguments' => array(
      'node' => array(
        '#entity' => 'node',
        '#label' => t('Content which will be removed from the nodequeue'),
      ),
      'nodequeue' => array(
        '#entity' => 'nodequeue',
        '#label' => t('Nodequeue that content will be removed from'),
      ),
    ),
    '#description' => t('Remove content from a loaded nodequeue. If a content is in the queue more than once,
        only the first (closest to 0 position, or the front of the queue) will be removed.'),
    '#module' => 'Nodequeue',
  );
  $info['nodequeue_workflow_ng_action_delete_nodequeue'] = array(
    '#label' => t('Delete a nodequeue'),
    '#arguments' => array(
      'nodequeue' => array(
        '#entity' => 'nodequeue',
        '#label' => t('The nodequeue which will be deleted'),
      ),
    ),
    '#description' => t('Delete a nodequeue.'),
    '#module' => 'Nodequeue',
  );
  $info['nodequeue_workflow_ng_action_add_nodequeue'] = array(
    '#label' => t('Add nodequeue'),
    '#new arguments' => array(
      'nodequeue' => array(
        '#entity' => 'nodequeue',
        '#label' => t('Nodequeue'),
      ),
    ),
    '#description' => t('Create a new nodequeue.'),
    '#module' => 'Nodequeue',
  );
  return $info;
}

/*
 * Action: Load nodequeue.
 */
function nodequeue_workflow_ng_action_load_nodequeue($settings, &$arguments, &$log) {
  if ($settings['nodequeue_token']) {
    extract(workflow_ng_token_replace_all(array(
      'nodequeue_token',
    ), $settings, $arguments, $log));
    $qid[] = $nodequeue_token;
  }
  else {
    $qid[] = $settings['nodequeue_list'];
  }
  $queues = nodequeue_load_queues($qid);

  //We load only a single nodequeue.
  $queue = array_shift($queues);
  if ($queue) {
    return array(
      '#new arguments' => array(
        'nodequeue' => $queue,
      ),
    );
  }
}
function _nodequeue_workflow_ng_action_get_nodequeue() {
  $options = array();
  $queues = nodequeue_load_queues(nodequeue_get_all_qids(500));
  foreach ($queues as $qid => $queue) {
    $options[$qid] = $queue->title;
  }
  return $options;
}

/*
 * Load nodequeue form.
 *
 * @ingroup forms
 * @see nodequeue_workflow_ng_action_load_nodequeue_submit 
 */
function nodequeue_workflow_ng_action_load_nodequeue_form($settings = array(), $argument_info) {

  //Get existing nodequeues.
  $options = _nodequeue_workflow_ng_action_get_nodequeue();
  if ($options) {
    $description = t('Specify the queue 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 {
    $description = t('There are no existing queues. Create a nodequeue manually through the !url or using a workflow_ng action.', array(
      '!url' => l('settings', 'admin/content/nodequeue'),
    ));
  }
  $form = array();
  $form['nodequeue_list'] = array(
    '#type' => 'select',
    '#title' => t('Select nodequeue'),
    '#description' => $description,
    '#options' => $options,
    '#default_value' => $settings['nodequeue_list'],
    '#disabled' => empty($options),
  );
  $form['nodequeue_token'] = array(
    '#type' => 'textfield',
    '#title' => t('Nodequeue id'),
    '#description' => t('Enter the queue id (qid) of the nodequeue into which the node should be submitted, or leave blank if you have selected one from the list above.'),
    '#default_value' => $settings['nodequeue_token'],
  );
  workflow_ng_token_replacement_help($form, $argument_info);
  return $form;
}
function nodequeue_workflow_ng_action_load_nodequeue_submit($form_id, $form_values) {
  $token = workflow_ng_token_get_settings(array(
    'nodequeue_token',
  ), $form_values);
  $settings = array(
    'nodequeue_list' => $form_values['nodequeue_list'],
    'nodequeue_token' => $form_values['nodequeue_token'],
  );
  return $token + $settings;
}

/*
 * Action: Add node to nodequeue.
 */
function nodequeue_workflow_ng_action_add_node_to_nodequeue($node, $nodequeue, $settings, &$arguments, &$log) {

  // Get the eligible subqueues.
  $eligible_subqueues = nodequeue_get_subqueues_by_node(array(
    $nodequeue,
  ), $node);

  //Remove the node from the eligible queues.
  foreach ($eligible_subqueues as $eligible_subqueue) {
    nodequeue_subqueue_remove_node($eligible_subqueue->sqid, $node->nid);
  }

  // Add node to each subqueue.
  foreach ($eligible_subqueues as $eligible_subqueue) {
    nodequeue_subqueue_add($nodequeue, $eligible_subqueue, $node->nid);
  }
}

/*
 * Action: Remove node from nodequeue.
 */
function nodequeue_workflow_ng_action_remove_node_from_nodequeue($node, $nodequeue, $settings, &$arguments, &$log) {

  // Get the eligible subqueues.
  $eligible_subqueues = nodequeue_get_subqueues_by_node(array(
    $nodequeue,
  ), $node);

  //Remove the node from the eligible queues.
  foreach ($eligible_subqueues as $eligible_subqueue) {
    nodequeue_subqueue_remove_node($eligible_subqueue->sqid, $node->nid);
  }
}

/*
 * Action: Delete a nodequeue.
 */
function nodequeue_workflow_ng_action_delete_nodequeue($nodequeue, $settings, &$arguments, &$log) {
  nodequeue_delete($nodequeue->qid);

  // Unload arguments.
  $arguments['data']['nodequeue'] = NULL;
  $arguments['info']['nodequeue'] = NULL;
}

/*
 * Action: Add a nodequeue.
 */
function nodequeue_workflow_ng_action_add_nodequeue($settings, &$arguments, &$log) {
  extract(workflow_ng_token_replace_all(array(
    'title',
    'link',
    'link_remove',
  ), $settings, $arguments, $log));
  $queue = (object) array();

  //Set the nodequeue object before creating it.
  $queue->roles = array_keys(array_filter($settings['roles']));
  $queue->types = array_keys(array_filter($settings['types']));
  $queue->title = $title;
  $queue->subqueue_title = $title;
  $queue->size = $settings['size'];
  $queue->reverse = $settings['reverse'];
  $queue->add_subqueue = array(
    TRUE,
  );

  //For consistency with workflow_ng becoming rules module in D6,

  //set the nodequeue owner accordingly.
  $queue->owner = 'nodequeue_rules';
  $queue->link = $link;
  $queue->link_remove = $link_remove;
  $queue->show_in_links = !empty($queue->link) && !empty($queue->link_remove);
  $queue->show_in_tab = $settings['show_in_tab'];
  $queue->show_in_ui = $settings['show_in_ui'];
  nodequeue_save($queue);
}
function nodequeue_workflow_ng_action_add_nodequeue_form($settings = array(), $argument_info) {
  $queue = (object) $settings;
  $form = nodequeue_edit_queue_form($queue);

  //Remove redundent fields.
  unset($form['description']);
  unset($form['submit']);

  //Add 'show in tab' option, taken from nodequeue admin settings.
  $nodequeue_tab = nodequeue_admin_settings();
  $form['tab_settings'] = array(
    '#type' => 'fieldset',
    '#title' => t('Tab settings'),
  );
  $form['tab_settings']['show_in_tab'] = $nodequeue_tab['nodequeue_use_tab'];
  $form['tab_settings']['show_in_ui'] = array(
    '#type' => 'checkbox',
    '#title' => t('Show in UI'),
    '#description' => t('Determine if the nodequeue should be visible via the nodequeue !url page.', array(
      '!url' => l('settings', 'admin/content/nodequeue'),
    )),
    '#default_value' => $settings['show_in_ui'],
  );
  workflow_ng_token_replacement_help($form, $argument_info);
  return $form;
}
function nodequeue_workflow_ng_action_add_nodequeue_submit($form_id, $form_values) {
  $form_list = array(
    'title',
    'size',
    'reverse',
    'link',
    'link_remove',
    'roles',
    'types',
    'show_in_tab',
    'show_in_ui',
  );
  $token = workflow_ng_token_get_settings(array(
    'title',
    'link',
    'link_remove',
  ), $form_values);
  $settings = array();
  foreach ($form_list as $form_item) {
    $settings[$form_item] = $form_values[$form_item];
  }
  return $token + $settings;
}