You are here

function nodequeue_link in Nodequeue 6.2

Same name and namespace in other branches
  1. 5.2 nodequeue.module \nodequeue_link()
  2. 5 nodequeue.module \nodequeue_link()

Implementation of hook_link().

1 call to nodequeue_link()
nodequeue_handler_field_links::render in includes/views/nodequeue_handler_field_links.inc

File

./nodequeue.module, line 196
Maintains queues of nodes in arbitrary order.

Code

function nodequeue_link($type, $node = NULL, $teaser = FALSE) {
  $links = array();
  if ($type == 'node' && variable_get('nodequeue_links', FALSE) && user_access('manipulate queues')) {
    $queues = nodequeue_load_queues_by_type($node->type, 'links');
    $subqueues = nodequeue_get_subqueues_by_node($queues, $node);
    if (empty($subqueues)) {
      return;
    }

    // resort the subqueues to retain consistent ordering:
    ksort($subqueues);

    // Due to caching, we can accidentally get positions leftover
    // from previous iterations on teaser list pages, so we must
    // remove any existing positions here.
    foreach ($subqueues as $id => $subqueue) {
      unset($subqueues[$id]->position);
    }
    if (!module_exists('translation')) {
      nodequeue_set_subqueue_positions($subqueues, $node->nid);
    }
    foreach ($subqueues as $subqueue) {
      $queue = $queues[$subqueue->qid];
      $id = nodequeue_get_content_id($queue, $node);
      if (module_exists('translation')) {
        $subqueue = array(
          $subqueue->sqid => $subqueue,
        );
        nodequeue_set_subqueue_positions($subqueue, $id);
        $subqueue = array_shift($subqueue);
      }
      $query_string = nodequeue_get_query_string($id, TRUE);
      $class = 'nodequeue-ajax-toggle nodequeue-toggle-q-' . $queue->qid . ' nodequeue-toggle-sq-' . $subqueue->sqid . ' nodequeue-toggle-ref-' . $subqueue->reference;
      if (!isset($subqueue->position)) {
        $links[$class] = array(
          'title' => nodequeue_title_substitute($queue->link, $queue, $subqueue),
          'href' => "admin/content/nodequeue/{$queue->qid}/add/{$subqueue->sqid}/{$id}",
          'attributes' => array(
            'class' => $class . ' toggle-add',
          ),
          'query' => $query_string,
          'purl' => array(
            'disabled' => TRUE,
          ),
        );
      }
      elseif ($queue->link_remove) {
        $links[$class] = array(
          'title' => nodequeue_title_substitute($queue->link_remove, $queue, $subqueue),
          'href' => "admin/content/nodequeue/{$queue->qid}/remove-node/{$subqueue->sqid}/{$id}",
          'attributes' => array(
            'class' => $class . ' toggle-remove',
          ),
          'query' => $query_string,
          'purl' => array(
            'disabled' => TRUE,
          ),
        );
      }
    }
    drupal_add_js(drupal_get_path('module', 'nodequeue') . '/nodequeue.js');
    drupal_add_css(drupal_get_path('module', 'nodequeue') . '/nodequeue.css');
  }
  return $links;
}