You are here

function nodequeue_page_form in Nodequeue 5

Display the queue controls for a node.

1 string reference to 'nodequeue_page_form'
nodequeue_page in ./nodequeue.module
Display the queue page for a node, allowing the user to control how the node exists in various queues. This controls a couple of different paths.

File

./nodequeue.module, line 183

Code

function nodequeue_page_form($node) {

  // Determine which queues are appropriate for this nodetype.
  global $user;
  $roles_where = $roles_join = '';
  $roles = array();
  if (!user_access('manipulate all queues')) {
    $roles = array_keys((array) $user->roles) + array(
      DRUPAL_AUTHENTICATED_RID,
    );
    $role_args = array_fill(0, count($roles), '%d');
    $roles_join = "INNER JOIN {nodequeue_roles} nr ON nr.qid = nq.qid ";
    $roles_where = "AND nr.rid IN (" . implode(',', $role_args) . ") ";
  }

  // db_rewrite_sql should not be used here because the queue info needs
  // to always be correct here.
  $result = db_query("SELECT nq.qid, nq.title, nq.size, MAX(nqn.position) AS num_nodes " . "FROM {nodequeue_queue} nq " . "INNER JOIN {nodequeue_types} nt ON nt.qid = nq.qid " . "LEFT JOIN {nodequeue_nodes} nqn ON nqn.qid = nq.qid " . $roles_join . "WHERE nt.type = '%s' " . $roles_where . "GROUP BY nq.qid, nq.title, nq.size, nqn.position ORDER BY nq.title", array_merge(array(
    $node->type,
  ), $roles));
  $form = array();
  while ($queue = db_fetch_object($result)) {
    $form['title'][$queue->qid] = array(
      '#type' => 'markup',
      '#value' => $queue->title,
    );
    $form['size'][$queue->qid] = array(
      '#type' => 'markup',
      '#value' => $queue->size,
    );
    $form['num_nodes'][$queue->qid] = array(
      '#type' => 'markup',
      '#value' => $queue->num_nodes . ($queue->size && $queue->size == $queue->num_nodes ? ' ' . t('QUEUE FULL') : ''),
    );
    $ops = array(
      l(t('View queue'), "admin/content/nodequeue/{$queue->qid}/view"),
    );
    if (is_numeric($pos = db_result(db_query("SELECT position FROM {nodequeue_nodes} WHERE nid = %d AND qid = %d", $node->nid, $queue->qid)))) {
      $ops[] = l(t("Remove from queue"), "node/{$node->nid}/nodequeue/remove/{$queue->qid}/{$pos}");
    }
    else {
      $ops[] = l(t("Add to queue"), "node/{$node->nid}/nodequeue/add/{$queue->qid}");
    }
    $form['operations'][$queue->qid] = array(
      '#type' => 'markup',
      '#value' => implode(' | ', $ops),
    );
  }
  return $form;
}