You are here

nodequeue.views.inc in Nodequeue 6.2

nodequeue.views.inc Provides support for the Views module.

This implementation is almost entirely based around a relationship which is stapled to the 'node' table via hook_views_data_alter.

The relationship allows you to define 0 or more queues that join the queue tables, limiting the join to just the queues selected. Once the queues are joined in, the queue fields will show up, and they have the usual array of arguments, sorts, fields and filters; since the real legwork is done by the relationship, most of these are really quite simple.

File

includes/views/nodequeue.views.inc
View source
<?php

/**
 * @file nodequeue.views.inc
 * Provides support for the Views module.
 *
 * This implementation is almost entirely based around a relationship
 * which is stapled to the 'node' table via hook_views_data_alter.
 *
 * The relationship allows you to define 0 or more queues that join the
 * queue tables, limiting the join to just the queues selected. Once
 * the queues are joined in, the queue fields will show up, and they
 * have the usual array of arguments, sorts, fields and filters; since
 * the real legwork is done by the relationship, most of these are
 * really quite simple.
 */

/**
 * Implementation of hook_views_handlers().
 */
function nodequeue_views_handlers() {
  return array(
    'info' => array(
      'path' => drupal_get_path('module', 'nodequeue') . '/includes/views',
    ),
    'handlers' => array(
      'nodequeue_handler_argument_subqueue_qid' => array(
        'parent' => 'views_handler_filter_numeric',
      ),
      'nodequeue_handler_field_all_queues' => array(
        'parent' => 'views_handler_field_prerender_list',
      ),
      'nodequeue_handler_field_all_subqueues' => array(
        'parent' => 'nodequeue_handler_field_all_queues',
      ),
      'nodequeue_handler_field_links' => array(
        'parent' => 'views_handler_field_node_link',
      ),
      'nodequeue_handler_field_queue_tab' => array(
        'parent' => 'views_handler_field_node_link',
      ),
      'nodequeue_handler_filter_in_queue' => array(
        'parent' => 'views_handler_filter_boolean_operator',
      ),
      'nodequeue_handler_relationship_nodequeue' => array(
        'parent' => 'views_handler_relationship',
      ),
      'nodequeue_handler_relationship_nodequeue_queue_name' => array(
        'parent' => 'views_handler_relationship',
      ),
    ),
  );
}

/**
 * Implementation of hook_views_data().
 */
function nodequeue_views_data() {
  $data = array();

  // ----------------------------------------------------------------
  // nodequeue_nodes table
  $data['nodequeue_nodes']['table']['group'] = t('Nodequeue');

  // The nodequeue_nodes table is how nodequeue connects to the
  // rest of the world, but we will only join it in via relationship.
  // position
  $data['nodequeue_nodes']['position'] = array(
    'title' => t('Position'),
    'help' => t('The position of the node within a queue.'),
    'field' => array(
      'handler' => 'views_handler_field_numeric',
      'click sortable' => TRUE,
    ),
    'sort' => array(
      'handler' => 'views_handler_sort',
    ),
    'filter' => array(
      'handler' => 'views_handler_filter_numeric',
    ),
    'argument' => array(
      'handler' => 'views_handler_argument_numeric',
    ),
  );

  // timestamp
  $data['nodequeue_nodes']['timestamp'] = array(
    'title' => t('Added date'),
    'help' => t('The date the node was added to a queue.'),
    'field' => array(
      'handler' => 'views_handler_field_date',
      'click sortable' => TRUE,
    ),
    'sort' => array(
      'handler' => 'views_handler_sort_date',
    ),
    'filter' => array(
      'handler' => 'views_handler_filter_date',
    ),
  );
  $data['nodequeue_nodes']['qid'] = array(
    'title' => t('Queue ID'),
    'help' => t('The ID of the queue the node belongs to.'),
    'field' => array(
      'handler' => 'views_handler_field_numeric',
      'click sortable' => TRUE,
    ),
    'sort' => array(
      'handler' => 'views_handler_sort',
    ),
    'argument' => array(
      'handler' => 'views_handler_argument_numeric',
      'name field' => 'title',
      'name table' => 'nodequeue_queue',
      'empty field name' => t('No queue'),
    ),
  );
  $data['nodequeue_nodes']['sqid'] = array(
    'title' => t('Subqueue ID'),
    'help' => t('The ID of the subqueue the node belongs to.'),
    'field' => array(
      'handler' => 'views_handler_field_numeric',
      'click sortable' => TRUE,
    ),
    'sort' => array(
      'handler' => 'views_handler_sort',
    ),
    'argument' => array(
      'handler' => 'views_handler_argument_numeric',
      'name field' => 'title',
      'name table' => 'nodequeue_subqueue',
      'empty field name' => t('No queue'),
    ),
  );

  // specialized is null/is not null filter
  $data['nodequeue_nodes']['in_queue'] = array(
    'title' => t('In queue'),
    'help' => t('Filter to ensure a node IS or IS NOT in the related queue'),
    'filter' => array(
      'handler' => 'nodequeue_handler_filter_in_queue',
      'label' => t('In queue'),
    ),
  );

  // ----------------------------------------------------------------
  // nodequeue_queue table
  $data['nodequeue_queue']['table']['group'] = t('Nodequeue');

  // For use with the relationship.
  $data['nodequeue_queue']['table']['join'] = array(
    'nodequeue_nodes' => array(
      'left_field' => 'qid',
      'field' => 'qid',
    ),
  );
  $data['nodequeue_queue']['title'] = array(
    'title' => t('Queue title'),
    'help' => t('The title of the nodequeue.'),
    'field' => array(
      'handler' => 'views_handler_field',
      'click sortable' => TRUE,
    ),
    'sort' => array(
      'handler' => 'views_handler_sort',
    ),
    'filter' => array(
      'handler' => 'views_handler_filter_string',
    ),
    'argument' => array(
      'handler' => 'views_handler_argument_string',
    ),
  );
  $data['nodequeue_queue']['name'] = array(
    'title' => t('Queue machine name'),
    'help' => t('The machine name of the queue.'),
    'field' => array(
      'handler' => 'views_handler_field',
      'click sortable' => TRUE,
    ),
    'sort' => array(
      'handler' => 'views_handler_sort',
    ),
    'filter' => array(
      'handler' => 'views_handler_filter_string',
    ),
    'argument' => array(
      'handler' => 'views_handler_argument_string',
    ),
  );

  // ----------------------------------------------------------------
  // nodequeue_subqueue table
  $data['nodequeue_subqueue']['table']['group'] = t('Nodequeue');

  // For use with the relationship.
  $data['nodequeue_subqueue']['table']['join'] = array(
    'nodequeue_nodes' => array(
      'left_field' => 'sqid',
      'field' => 'sqid',
    ),
  );
  $data['nodequeue_subqueue']['title'] = array(
    'title' => t('Subqueue title'),
    'help' => t('The title of the subqueue.'),
    'field' => array(
      'handler' => 'views_handler_field',
      'click sortable' => TRUE,
    ),
    'sort' => array(
      'handler' => 'views_handler_sort',
    ),
    'filter' => array(
      'handler' => 'views_handler_filter_string',
    ),
    'argument' => array(
      'handler' => 'views_handler_argument_string',
    ),
  );
  $data['nodequeue_subqueue']['reference'] = array(
    'title' => t('Subqueue reference'),
    'help' => t('The reference that defines a subqueue; what this actually is depends upon the type of subqueue, but is a taxonomy tid for smartqueue taxonomy, or a uid for authorview.'),
    'field' => array(
      'handler' => 'views_handler_field',
      'click sortable' => TRUE,
    ),
    'sort' => array(
      'handler' => 'views_handler_sort',
    ),
    'filter' => array(
      'handler' => 'views_handler_filter_string',
    ),
    'argument' => array(
      'handler' => 'views_handler_argument_string',
    ),
  );
  return $data;
}

/**
 * Implementation of hook_views_data_alter().
 */
function nodequeue_views_data_alter(&$data) {

  // queue relationship
  $data['node']['nodequeue_rel'] = array(
    'group' => t('Nodequeue'),
    'title' => t('Queue (qid)'),
    'help' => t('Create a relationship to a nodequeue. This relationship requires one less JOIN than the queue name relationship, but is less useful if you are exporting this view across sites.'),
    'real field' => 'nid',
    'relationship' => array(
      'handler' => 'nodequeue_handler_relationship_nodequeue',
      'base' => 'nodequeue_nodes',
      'field' => 'nid',
      'label' => t('queue'),
    ),
  );
  $data['node']['nodequeue_rel_queue_name'] = array(
    'group' => t('Nodequeue'),
    'title' => t('Queue (name)'),
    'help' => t('Create a relationship to a nodequeue. This relationship requires an additional JOIN versus the queue qid based relationship, but is more useful for exporting views across sites.'),
    'real field' => 'nid',
    'relationship' => array(
      'handler' => 'nodequeue_handler_relationship_nodequeue_queue_name',
      'base' => 'nodequeue_nodes',
      'field' => 'nid',
      'label' => t('queue'),
    ),
  );

  // links
  $data['node']['nodequeue_links'] = array(
    'group' => t('Nodequeue'),
    'title' => t('Add/remove links'),
    'help' => t('Display add/remove links for all eligible nodequeues. Note that this performs a node_load so could add many extra queries to a view.'),
    'real field' => 'nid',
    'field' => array(
      'handler' => 'nodequeue_handler_field_links',
    ),
  );
  $data['node']['nodequeue_queue_tab'] = array(
    'group' => t('Nodequeue'),
    'title' => t('Link to tab'),
    'help' => t('Display add/remove links for all eligible nodequeues. Note that this performs a node_load so could add many extra queries to a view.'),
    'real field' => 'nid',
    'field' => array(
      'handler' => 'nodequeue_handler_field_queue_tab',
    ),
  );

  // all queues
  $data['node']['nodequeue_all_queues'] = array(
    'group' => t('Nodequeue'),
    'title' => t('All queues'),
    'help' => t('Display all queues a node is a member of.'),
    'real field' => 'nid',
    'field' => array(
      'handler' => 'nodequeue_handler_field_all_queues',
    ),
  );

  // all subqueues
  $data['node']['nodequeue_all_subqueues'] = array(
    'group' => t('Nodequeue'),
    'title' => t('All subqueues'),
    'help' => t('Display all subqueues a node is a member of.'),
    'real field' => 'nid',
    'field' => array(
      'handler' => 'nodequeue_handler_field_all_subqueues',
    ),
  );
}

Functions