You are here

function nodequeue_link in Nodequeue 5

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

Implementation of hook_link

File

./nodequeue.module, line 614

Code

function nodequeue_link($type, $node, $teaser) {
  if ($type == 'node' && variable_get('nodequeue_links', FALSE) && user_access('manipulate queues')) {
    $roles_join = $roles_where = '';
    $roles = array();
    if (!user_access('manipulate all queues')) {
      $roles_join = "INNER JOIN {nodequeue_roles} nr ON nr.qid = nq.qid ";
      $roles = array_keys((array) $user->roles) + array(
        DRUPAL_AUTHENTICATED_RID,
      );
      $role_args = array_fill(0, count($roles), '%d');
      $roles_where .= "AND nr.rid IN (" . implode(',', $role_args) . ")";
    }
    $sql = 'SELECT nq.qid, nq.link, nq.link_remove, nqn.position FROM {nodequeue_queue} nq ' . 'INNER JOIN {nodequeue_types} nt ON nt.qid = nq.qid ' . $roles_join . 'LEFT JOIN {nodequeue_nodes} nqn ON nqn.qid = nq.qid AND nqn.nid = %d ' . "WHERE link <> '' AND nt.type = '%s' " . $roles_where;
    $result = db_query($sql, array_merge(array(
      $node->nid,
      $node->type,
    ), $roles));
    $links = array();
    while ($queue = db_fetch_object($result)) {
      if (!$queue->position) {
        $links['nodequeue-ajax-toggle-' . $queue->qid] = array(
          'title' => $queue->link,
          'href' => "node/{$node->nid}/nodequeue/add/{$queue->qid}",
          'attributes' => array(
            'class' => 'nodequeue-ajax-toggle',
          ),
          'query' => drupal_get_destination(),
        );
      }
      else {
        if ($queue->link_remove) {
          $links['nodequeue-ajax-toggle-' . $queue->qid] = array(
            'title' => $queue->link_remove,
            'href' => "node/{$node->nid}/nodequeue/remove/{$queue->qid}",
            'attributes' => array(
              'class' => 'nodequeue-ajax-toggle',
            ),
            'query' => drupal_get_destination(),
          );
        }
      }
    }
    drupal_add_js(drupal_get_path('module', 'nodequeue') . '/nodequeue.js');
  }
  return $links;
}