first import
This commit is contained in:
271
sites/all/modules/nodequeue/includes/views/nodequeue.views.inc
Normal file
271
sites/all/modules/nodequeue/includes/views/nodequeue.views.inc
Normal file
@@ -0,0 +1,271 @@
|
||||
<?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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Implements 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'),
|
||||
),
|
||||
);
|
||||
|
||||
$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_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',
|
||||
),
|
||||
);
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
// 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;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_views_data_alter().
|
||||
*/
|
||||
function nodequeue_views_data_alter(&$data) {
|
||||
// queue relationship
|
||||
$data['node']['nodequeue_rel'] = array(
|
||||
'group' => t('Nodequeue'),
|
||||
'title' => t('Queue'),
|
||||
'help' => t('Create a relationship to a nodequeue.'),
|
||||
'real field' => 'nid',
|
||||
'relationship' => array(
|
||||
'handler' => 'nodequeue_handler_relationship_nodequeue',
|
||||
'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',
|
||||
),
|
||||
);
|
||||
}
|
@@ -0,0 +1,197 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Default views for nodequeue. This modifies an exported view; it might
|
||||
* actually work better to create the view dynamically. It would be less
|
||||
* code and more modifiable later.
|
||||
*/
|
||||
function nodequeue_views_default_views() {
|
||||
$views = array();
|
||||
if (variable_get('nodequeue_view_per_queue', 1) != 1) {
|
||||
return $views;
|
||||
}
|
||||
|
||||
$queues = nodequeue_load_queues(nodequeue_get_all_qids());
|
||||
foreach ($queues as $queue) {
|
||||
$view = new view;
|
||||
$view->name = "nodequeue_$queue->qid";
|
||||
$view->description = t("Display a list of all nodes in queue '@queue'", array('@queue' => $queue->title));
|
||||
$view->tag = t('nodequeue');
|
||||
$view->view_php = '';
|
||||
$view->base_table = 'node';
|
||||
$view->is_cacheable = '0';
|
||||
$view->api_version = 2;
|
||||
$view->disabled = FALSE; // Edit this to true to make a default view disabled initially
|
||||
$view->display = array();
|
||||
$display = new views_display;
|
||||
$display->id = 'default';
|
||||
$display->display_title = t('Defaults');
|
||||
$display->display_plugin = 'default';
|
||||
$display->position = '1';
|
||||
$display->display_options = array(
|
||||
'style_plugin' => 'default',
|
||||
'style_options' => array(),
|
||||
'row_plugin' => 'node',
|
||||
'row_options' => array(
|
||||
'teaser' => 1,
|
||||
'links' => 1,
|
||||
),
|
||||
'relationships' => array(
|
||||
'nodequeue_rel' => array(
|
||||
'id' => 'nodequeue_rel',
|
||||
'table' => 'node',
|
||||
'field' => 'nodequeue_rel',
|
||||
'label' => 'queue',
|
||||
'required' => 1,
|
||||
'limit' => TRUE,
|
||||
'qids' => array($queue->qid => $queue->qid),
|
||||
'relationship' => 'none',
|
||||
),
|
||||
),
|
||||
'fields' => array(
|
||||
'title' => array(
|
||||
'id' => 'title',
|
||||
'table' => 'node',
|
||||
'field' => 'title',
|
||||
'label' => '',
|
||||
'relationship' => 'none',
|
||||
'link_to_node' => 1,
|
||||
),
|
||||
),
|
||||
'sorts' => array(
|
||||
'position' => array(
|
||||
'id' => 'position',
|
||||
'table' => 'nodequeue_nodes',
|
||||
'field' => 'position',
|
||||
'order' => 'ASC',
|
||||
'relationship' => 'nodequeue_rel',
|
||||
),
|
||||
),
|
||||
'arguments' => array(),
|
||||
'filters' => array(
|
||||
'status_extra' => array(
|
||||
'id' => 'status_extra',
|
||||
'table' => 'node',
|
||||
'field' => 'status_extra',
|
||||
'operator' => '=',
|
||||
'value' => '',
|
||||
'group' => 0,
|
||||
'exposed' => FALSE,
|
||||
'expose' => array(
|
||||
'operator' => FALSE,
|
||||
'label' => '',
|
||||
),
|
||||
'relationship' => 'none',
|
||||
),
|
||||
),
|
||||
'items_per_page' => 10,
|
||||
'use_pager' => '1',
|
||||
'pager_element' => 0,
|
||||
'title' => t("Queue '@queue'", array('@queue' => $queue->title)),
|
||||
'use_more' => 1,
|
||||
);
|
||||
$view->display['default'] = $display;
|
||||
$display = new views_display;
|
||||
$display->id = 'page';
|
||||
$display->display_title = t('Page');
|
||||
$display->display_plugin = 'page';
|
||||
$display->position = '2';
|
||||
$display->display_options = array(
|
||||
'defaults' => array(
|
||||
'access' => TRUE,
|
||||
'title' => TRUE,
|
||||
'header' => TRUE,
|
||||
'header_format' => TRUE,
|
||||
'header_empty' => TRUE,
|
||||
'footer' => TRUE,
|
||||
'footer_format' => TRUE,
|
||||
'footer_empty' => TRUE,
|
||||
'empty' => TRUE,
|
||||
'empty_format' => TRUE,
|
||||
'use_ajax' => TRUE,
|
||||
'items_per_page' => TRUE,
|
||||
'offset' => TRUE,
|
||||
'use_pager' => TRUE,
|
||||
'pager_element' => TRUE,
|
||||
'use_more' => TRUE,
|
||||
'distinct' => TRUE,
|
||||
'link_display' => TRUE,
|
||||
'style_plugin' => TRUE,
|
||||
'style_options' => TRUE,
|
||||
'row_plugin' => TRUE,
|
||||
'row_options' => TRUE,
|
||||
'relationships' => TRUE,
|
||||
'fields' => TRUE,
|
||||
'sorts' => TRUE,
|
||||
'arguments' => TRUE,
|
||||
'filters' => TRUE,
|
||||
),
|
||||
'relationships' => array(),
|
||||
'fields' => array(),
|
||||
'sorts' => array(),
|
||||
'arguments' => array(),
|
||||
'filters' => array(),
|
||||
'path' => "nodequeue/$queue->qid",
|
||||
);
|
||||
$view->display['page'] = $display;
|
||||
$display = new views_display;
|
||||
$display->id = 'block';
|
||||
$display->display_title = t('Block');
|
||||
$display->display_plugin = 'block';
|
||||
$display->position = '3';
|
||||
$display->display_options = array(
|
||||
'defaults' => array(
|
||||
'access' => TRUE,
|
||||
'title' => TRUE,
|
||||
'header' => TRUE,
|
||||
'header_format' => TRUE,
|
||||
'header_empty' => TRUE,
|
||||
'footer' => TRUE,
|
||||
'footer_format' => TRUE,
|
||||
'footer_empty' => TRUE,
|
||||
'empty' => TRUE,
|
||||
'empty_format' => TRUE,
|
||||
'use_ajax' => TRUE,
|
||||
'items_per_page' => FALSE,
|
||||
'offset' => FALSE,
|
||||
'use_pager' => FALSE,
|
||||
'pager_element' => FALSE,
|
||||
'use_more' => TRUE,
|
||||
'distinct' => TRUE,
|
||||
'link_display' => TRUE,
|
||||
'style_plugin' => FALSE,
|
||||
'style_options' => FALSE,
|
||||
'row_plugin' => FALSE,
|
||||
'row_options' => FALSE,
|
||||
'relationships' => TRUE,
|
||||
'fields' => TRUE,
|
||||
'sorts' => TRUE,
|
||||
'arguments' => TRUE,
|
||||
'filters' => TRUE,
|
||||
),
|
||||
'relationships' => array(),
|
||||
'fields' => array(),
|
||||
'sorts' => array(),
|
||||
'arguments' => array(),
|
||||
'filters' => array(),
|
||||
'style_plugin' => 'list',
|
||||
'style_options' => array(
|
||||
'type' => 'ul',
|
||||
),
|
||||
'row_plugin' => 'fields',
|
||||
'row_options' => array(
|
||||
'inline' => array(),
|
||||
'separator' => '',
|
||||
),
|
||||
'block_description' => t("Queue '@queue'", array('@queue' => $queue->title)),
|
||||
'items_per_page' => 5,
|
||||
'offset' => 0,
|
||||
'use_pager' => '0',
|
||||
'pager_element' => 0,
|
||||
);
|
||||
$view->display['block'] = $display;
|
||||
$views[$view->name] = $view;
|
||||
}
|
||||
return $views;
|
||||
}
|
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Argument handler for subqueues.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Subqueues have titles that are determined by doing substitution from
|
||||
* the subqueue_title on the queue using the title on the subqueue, which
|
||||
* takes a little extra work to do here.
|
||||
*/
|
||||
class nodequeue_handler_argument_subqueue_qid extends views_handler_argument_numeric {
|
||||
function summary_name_field() {
|
||||
$this->queue_alias = $this->query->ensure_table('nodequeue_queue', $this->relationship);
|
||||
$this->subqueue_alias = $this->name_table_alias = $this->query->ensure_table('nodequeue_subqueue', $this->relationship);
|
||||
|
||||
$this->queue_title_alias = $this->query->add_field($this->queue_alias, 'subqueue_title');
|
||||
$this->subqueue_title_alias = $this->name_alias = $this->query->add_field($this->subqueue_alias, 'title');
|
||||
}
|
||||
|
||||
function summary_name($data) {
|
||||
$queue_title = $data->{$this->queue_title_alias};
|
||||
$subqueue_title = $data->{$this->subqueue_title_alias};
|
||||
|
||||
$value = empty($queue_title) ? $subqueue_title : str_replace('%subqueue', $subqueue_title, $queue_title);
|
||||
|
||||
if (empty($value) && !empty($this->definition['empty field name'])) {
|
||||
$value = $this->definition['empty field name'];
|
||||
}
|
||||
return check_plain($value);
|
||||
}
|
||||
}
|
@@ -0,0 +1,82 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Field handler for all queues.
|
||||
*
|
||||
* @ingroup views_field_handlers
|
||||
*/
|
||||
class nodequeue_handler_field_all_queues extends views_handler_field_prerender_list {
|
||||
/**
|
||||
* Provide meaningful defaults.
|
||||
*/
|
||||
function options(&$options) {
|
||||
parent::options($options);
|
||||
$options['link_to_queue'] = TRUE;
|
||||
$options['limit'] = FALSE;
|
||||
$options['qids'] = array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Provide "link to term" option.
|
||||
*/
|
||||
function options_form(&$form, &$form_state) {
|
||||
parent::options_form($form, $form_state);
|
||||
$form['link_to_queue'] = array(
|
||||
'#title' => t('Link this field to queue arrange page'),
|
||||
'#type' => 'checkbox',
|
||||
'#default_value' => !empty($this->options['link_to_taxonomy']),
|
||||
);
|
||||
|
||||
$form['limit'] = array(
|
||||
'#type' => 'checkbox',
|
||||
'#title' => t('Limit to queues'),
|
||||
'#default_value' => $this->options['limit'],
|
||||
);
|
||||
|
||||
$options = array();
|
||||
$queues = nodequeue_load_queues(nodequeue_get_all_qids());
|
||||
foreach ($queues as $queue) {
|
||||
$options[$queue->qid] = $queue->title;
|
||||
}
|
||||
|
||||
$form['qids'] = array(
|
||||
'#prefix' => '<div><div id="edit-options-qids">',
|
||||
'#suffix' => '</div></div>',
|
||||
'#type' => 'checkboxes',
|
||||
'#title' => t('Queues'),
|
||||
'#options' => $options,
|
||||
'#default_value' => $this->options['qids'],
|
||||
'#states' => array(
|
||||
'visible' => array(
|
||||
':input[name="options[limit]"]' => array('checked' => TRUE)
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
function pre_render($values) {
|
||||
$nids = array();
|
||||
foreach ($values as $result) {
|
||||
$nids[] = $result->{$this->field_alias};
|
||||
}
|
||||
|
||||
if ($nids) {
|
||||
$queue = '';
|
||||
if (!empty($this->options['limit']) && !empty($this->options['qids'])) {
|
||||
$queue = " AND nn.qid IN (" . implode(', ', array_keys(array_filter($this->options['qids']))) . ")";
|
||||
}
|
||||
|
||||
$result = db_query("SELECT nn.nid, nn.qid, nq.title FROM {nodequeue_nodes} nn INNER JOIN {nodequeue_queue} nq ON nq.qid = nn.qid WHERE nn.nid IN (" . implode(', ', $nids) . ")$queue ORDER BY nq.title");
|
||||
|
||||
foreach ($result as $queue) {
|
||||
if (empty($this->options['link_to_queue'])) {
|
||||
$this->items[$queue->nid][$queue->qid] = check_plain($queue->title);
|
||||
}
|
||||
else {
|
||||
$this->items[$queue->nid][$queue->qid] = l($queue->title, "admin/structure/nodequeue/$queue->qid");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Field handler for all subqueues
|
||||
*
|
||||
* @ingroup views_field_handlers
|
||||
*/
|
||||
class nodequeue_handler_field_all_subqueues extends nodequeue_handler_field_all_queues {
|
||||
function pre_render($values) {
|
||||
if (user_access('manipulate queues') || user_access('manipulate all queues')) {
|
||||
$nids = array();
|
||||
foreach ($values as $result) {
|
||||
$nids[] = $result->{$this->field_alias};
|
||||
}
|
||||
|
||||
if ($nids) {
|
||||
$queue = '';
|
||||
if (!empty($this->options['limit']) && !empty($this->options['qids'])) {
|
||||
$queue = " AND nn.qid IN (" . implode(', ', array_keys(array_filter($this->options['qids']))) . ")";
|
||||
}
|
||||
|
||||
$result = db_query("SELECT nn.nid, nn.sqid, nn.qid, nq.subqueue_title, ns.title FROM {nodequeue_nodes} nn INNER JOIN {nodequeue_queue} nq ON nq.qid = nn.qid INNER JOIN {nodequeue_subqueue} ns on nn.sqid = ns.sqid WHERE nn.nid IN (" . implode(', ', $nids) . ")$queue ORDER BY ns.title, nq.subqueue_title");
|
||||
|
||||
foreach ($result as $queue) {
|
||||
$title = empty($queue->subqueue_title) ? $queue->title : str_replace('%subqueue', $queue->title, $queue->subqueue_title);
|
||||
if (empty($this->options['link_to_queue'])) {
|
||||
$this->items[$queue->nid][$queue->sqid] = check_plain($title);
|
||||
}
|
||||
else {
|
||||
$this->items[$queue->nid][$queue->sqid] = l($title, "admin/structure/nodequeue/$queue->qid/view/$queue->sqid");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Views field handler for the nodequeue queue links
|
||||
*/
|
||||
class nodequeue_handler_field_links extends views_handler_field_node_link {
|
||||
function render($values) {
|
||||
if (user_access('manipulate queues') || user_access('manipulate all queues')) {
|
||||
$nid = $values->{$this->aliases['nid']};
|
||||
return theme('links', array('links' => nodequeue_node_links(node_load($nid))));
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Views field handler for the nodequeue queue links
|
||||
*/
|
||||
class nodequeue_handler_field_queue_tab extends views_handler_field_node_link {
|
||||
function render($values) {
|
||||
$text = !empty($this->options['text']) ? $this->options['text'] : t('view');
|
||||
$nid = $values->{$this->aliases['nid']};
|
||||
return l($text, "node/$nid/nodequeue");
|
||||
}
|
||||
}
|
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Handler to filter for nodes that are not in a queue.
|
||||
*/
|
||||
class nodequeue_handler_filter_in_queue extends views_handler_filter_boolean_operator {
|
||||
function query() {
|
||||
$this->ensure_my_table();
|
||||
$this->query->add_where($this->options['group'], $this->table_alias . ".nid", $this->value, ($this->value ? '!=' : 'IS NULL'));
|
||||
}
|
||||
}
|
@@ -0,0 +1,101 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Specialized relationship handler to add nodequeues.
|
||||
*/
|
||||
class nodequeue_handler_relationship_nodequeue extends views_handler_relationship {
|
||||
/**
|
||||
* Init handler to let relationships live on tables other than
|
||||
* the table they operate on.
|
||||
*/
|
||||
function init(&$view, &$options) {
|
||||
parent::init($view, $options);
|
||||
|
||||
// Tranlate an older setting which was using qids instead of machine names.
|
||||
if (!empty($options['qids'])) {
|
||||
$map = array_flip(nodequeue_get_qid_map());
|
||||
foreach ($options['qids'] as $key => $value) {
|
||||
$this->options['names'][$map[$key]] = ($value) ? $map[$key] : 0;
|
||||
}
|
||||
unset($this->options['qids']);
|
||||
}
|
||||
}
|
||||
|
||||
function option_definition() {
|
||||
$options = parent::option_definition();
|
||||
|
||||
$options['limit']['default'] = FALSE;
|
||||
$options['names']['default'] = array();
|
||||
return $options;
|
||||
}
|
||||
|
||||
/**
|
||||
* Default options form that provides the label widget that all fields
|
||||
* should have.
|
||||
*/
|
||||
function options_form(&$form, &$form_state) {
|
||||
parent::options_form($form, $form_state);
|
||||
|
||||
$form['limit'] = array(
|
||||
'#type' => 'checkbox',
|
||||
'#title' => t('Limit to one or more queues (recommended)'),
|
||||
'#default_value' => $this->options['limit'],
|
||||
);
|
||||
|
||||
$options = array();
|
||||
$queues = nodequeue_load_queues(nodequeue_get_all_qids(0, 0, TRUE), TRUE);
|
||||
foreach ($queues as $queue) {
|
||||
$options[$queue->name] = $queue->title;
|
||||
}
|
||||
|
||||
$form['names'] = array(
|
||||
'#prefix' => '<div><div id="edit-options-names">',
|
||||
'#suffix' => '</div></div>',
|
||||
'#type' => 'checkboxes',
|
||||
'#title' => t('Queues'),
|
||||
'#options' => $options,
|
||||
'#default_value' => $this->options['names'],
|
||||
'#process' => array('form_process_checkboxes', 'ctools_dependent_process'),
|
||||
'#dependency' => array('edit-options-limit' => array(TRUE)),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called to implement a relationship in a query.
|
||||
*/
|
||||
function query() {
|
||||
// Figure out what base table this relationship brings to the party.
|
||||
$join = new views_join();
|
||||
$join->definition = array(
|
||||
'table' => 'nodequeue_nodes',
|
||||
'field' => 'nid',
|
||||
'left_table' => 'node',
|
||||
'left_field' => 'nid',
|
||||
);
|
||||
|
||||
if (!empty($this->options['required'])) {
|
||||
$join->definition['type'] = 'INNER';
|
||||
}
|
||||
|
||||
if (!empty($this->options['limit'])) {
|
||||
$names = array_keys(array_filter($this->options['names']));
|
||||
$qids = array();
|
||||
$map = nodequeue_get_qid_map();
|
||||
foreach ($names as $name) {
|
||||
if (isset($map[$name])) {
|
||||
$qids[] = $map[$name];
|
||||
}
|
||||
}
|
||||
|
||||
$join->definition['extra'] = array(array(
|
||||
'field' => 'qid',
|
||||
'value' => $qids,
|
||||
));
|
||||
}
|
||||
|
||||
$join->construct();
|
||||
$alias = $join->definition['table'] . '_' . $join->definition['left_table'];
|
||||
$this->alias = $this->query->add_relationship($alias, $join, 'nodequeue_nodes', $this->relationship);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user