You are here

function nodequeue_menu in Nodequeue 5.2

Same name and namespace in other branches
  1. 5 nodequeue.module \nodequeue_menu()
  2. 6.2 nodequeue.module \nodequeue_menu()
  3. 7.3 nodequeue.module \nodequeue_menu()
  4. 7.2 nodequeue.module \nodequeue_menu()

Implementation of hook_menu

File

./nodequeue.module, line 40

Code

function nodequeue_menu($may_cache) {
  $items = array();
  global $user;
  $admin_access = user_access('administer nodequeue');
  $access = user_access('manipulate queues');
  if ($may_cache) {
    $manipulate = user_access('manipulate all queues');

    // administrative items
    $items[] = array(
      'path' => 'admin/content/nodequeue',
      'title' => t('Node queue'),
      'access' => $admin_access || $access,
      'callback' => 'nodequeue_view_queues',
      'description' => t('Create and maintain simple node queues.'),
      'type' => MENU_NORMAL_ITEM,
    );
    $items[] = array(
      'path' => 'admin/content/nodequeue/list',
      'title' => t('List'),
      'access' => $admin_access || $access,
      'callback' => 'nodequeue_view_queues',
      'weight' => -1,
      'type' => MENU_DEFAULT_LOCAL_TASK,
    );
    $items[] = array(
      'path' => 'admin/content/nodequeue/settings',
      'title' => t('Settings'),
      'access' => $admin_access,
      'callback' => 'drupal_get_form',
      'callback arguments' => array(
        'nodequeue_admin_settings',
      ),
      'type' => MENU_LOCAL_TASK,
    );
    $items[] = array(
      'path' => 'nodequeue/autocomplete',
      'title' => t('Autocomplete'),
      'access' => $access,
      'callback' => 'nodequeue_autocomplete',
      'type' => MENU_CALLBACK,
    );
    $items[] = array(
      'path' => 'nodequeue/ajax/add',
      'title' => t('ajax add'),
      'access' => $access,
      'callback' => 'nodequeue_ajax_add',
      'type' => MENU_CALLBACK,
    );
    $info = nodequeue_api_info();
    foreach ($info as $key => $data) {
      $items[] = array(
        'path' => 'admin/content/nodequeue/add/' . $key,
        'title' => t('Add @type', array(
          '@type' => strtolower($data['title']),
        )),
        'access' => $admin_access,
        'callback' => 'drupal_get_form',
        'callback arguments' => array(
          'nodequeue_edit_queue_form',
          $key,
        ),
        'type' => MENU_LOCAL_TASK,
      );
    }
  }
  else {
    if ($user && arg(0) == 'node' && is_numeric(arg(1)) && arg(1) > 0 && $access && variable_get('nodequeue_use_tab', 1)) {
      $node = node_load(arg(1));

      // nodequeue tab for a node.
      if ($node && ($queues = nodequeue_load_queues_by_type($node->type, 'tab'))) {
        $items[] = array(
          'path' => 'node/' . arg(1) . '/nodequeue',
          'title' => variable_get('nodequeue_tab_name', t('Node queue')),
          'access' => $access,
          'callback' => 'nodequeue_node_tab',
          'callback arguments' => array(
            $node,
            $queues,
          ),
          'type' => MENU_LOCAL_TASK,
          'weight' => 5,
        );
      }
    }

    // Administrative items for an individual queue.
    if ($access && arg(0) == 'admin' && arg(1) == 'content' && arg(2) == 'nodequeue' && is_numeric(arg(3)) && ($queue = nodequeue_load(arg(3)))) {
      $access = nodequeue_queue_access($queue);
      drupal_set_title(t("Nodequeue '@title'", array(
        '@title' => $queue->title,
      )));
      $items[] = array(
        'path' => 'admin/content/nodequeue/' . $queue->qid,
        'access' => $access,
        'callback' => 'nodequeue_admin_view',
        'callback arguments' => array(
          $queue,
        ),
        'type' => MENU_CALLBACK,
      );
      $items[] = array(
        'path' => 'admin/content/nodequeue/' . $queue->qid . '/view',
        'title' => t('View'),
        'access' => $access,
        'callback' => 'nodequeue_admin_view',
        'callback arguments' => array(
          $queue,
        ),
        'weight' => -10,
        'type' => MENU_DEFAULT_LOCAL_TASK,
      );

      // Actual administrative items.
      $items[] = array(
        'path' => 'admin/content/nodequeue/' . $queue->qid . '/edit',
        'title' => t('Edit'),
        'access' => $admin_access,
        'callback' => 'drupal_get_form',
        'callback arguments' => array(
          'nodequeue_edit_queue_form',
          $queue,
        ),
        'type' => MENU_LOCAL_TASK,
      );
      $items[] = array(
        'path' => 'admin/content/nodequeue/' . $queue->qid . '/delete',
        'title' => t('Delete'),
        'access' => $admin_access,
        'callback' => 'drupal_get_form',
        'callback arguments' => array(
          'nodequeue_admin_delete',
          $queue,
        ),
        'weight' => 5,
        'type' => MENU_CALLBACK,
      );
      $sqid = arg(5);
      if (is_numeric($sqid) && ($subqueue = nodequeue_load_subqueue($sqid))) {
        $access = $access && nodequeue_api_subqueue_access($subqueue, $user, $queue);

        // The following operations require a sqid and a nid.
        $nid = arg(6);
        if (in_array(arg(4), array(
          'add',
          'remove-node',
        )) && is_numeric($nid)) {
          $node = node_load($nid);
        }
        if ($node && nodequeue_node_access($node->type)) {
          $items[] = array(
            'path' => "admin/content/nodequeue/{$queue->qid}/add/{$sqid}/{$nid}",
            'access' => $access,
            'callback' => 'nodequeue_admin_add_node',
            'callback arguments' => array(
              $queue,
              $subqueue,
              $node,
            ),
            'type' => MENU_CALLBACK,
          );
          $items[] = array(
            'path' => "admin/content/nodequeue/{$queue->qid}/remove-node/{$sqid}/{$nid}",
            'access' => $access,
            'callback' => 'nodequeue_admin_remove_node',
            'callback arguments' => array(
              $queue,
              $subqueue,
              $node,
            ),
            'type' => MENU_CALLBACK,
          );
        }
        if (is_numeric($nid)) {

          // IN this case, $nid is actually $pos but why rename the var?
          $items[] = array(
            'path' => "admin/content/nodequeue/{$queue->qid}/up/{$sqid}",
            'access' => $access,
            'callback' => 'nodequeue_admin_up',
            'callback arguments' => array(
              $queue,
              $subqueue,
              $nid,
            ),
            'type' => MENU_CALLBACK,
          );
          $items[] = array(
            'path' => "admin/content/nodequeue/{$queue->qid}/down/{$sqid}",
            'access' => $access,
            'callback' => 'nodequeue_admin_down',
            'callback arguments' => array(
              $queue,
              $subqueue,
              $nid,
            ),
            'type' => MENU_CALLBACK,
          );
          $items[] = array(
            'path' => "admin/content/nodequeue/{$queue->qid}/front/{$sqid}",
            'access' => $access,
            'callback' => 'nodequeue_admin_front',
            'callback arguments' => array(
              $queue,
              $subqueue,
              $nid,
            ),
            'type' => MENU_CALLBACK,
          );
          $items[] = array(
            'path' => "admin/content/nodequeue/{$queue->qid}/back/{$sqid}",
            'access' => $access,
            'callback' => 'nodequeue_admin_back',
            'callback arguments' => array(
              $queue,
              $subqueue,
              $nid,
            ),
            'type' => MENU_CALLBACK,
          );
          $items[] = array(
            'path' => "admin/content/nodequeue/{$queue->qid}/remove/{$sqid}",
            'access' => $access,
            'callback' => 'nodequeue_admin_remove',
            'callback arguments' => array(
              $queue,
              $subqueue,
              $nid,
            ),
            'type' => MENU_CALLBACK,
          );
        }
        $items[] = array(
          'path' => "admin/content/nodequeue/{$queue->qid}/clear/{$sqid}",
          'title' => t('Clear'),
          'access' => $access,
          'callback' => 'drupal_get_form',
          'callback arguments' => array(
            'nodequeue_clear_confirm',
            $queue,
            $subqueue,
          ),
          'type' => MENU_CALLBACK,
        );
      }
    }
  }
  return $items;
}