740 lines
21 KiB
PHP
740 lines
21 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file
|
|
* Provide views data and handlers for node.module.
|
|
*
|
|
* @ingroup views_module_handlers
|
|
*/
|
|
|
|
use Drupal\views\Analyzer;
|
|
|
|
/**
|
|
* Implements hook_views_data().
|
|
*/
|
|
function node_views_data() {
|
|
// node table -- basic table information.
|
|
|
|
// Define the base group of this table. Fields that don't
|
|
// have a group defined will go into this field by default.
|
|
$data['node']['table']['group'] = t('Content');
|
|
|
|
// Advertise this table as a possible base table
|
|
$data['node']['table']['base'] = array(
|
|
'field' => 'nid',
|
|
'title' => t('Content'),
|
|
'weight' => -10,
|
|
'access query tag' => 'node_access',
|
|
'defaults' => array(
|
|
'field' => 'title',
|
|
),
|
|
);
|
|
$data['node']['table']['entity type'] = 'node';
|
|
$data['node']['table']['wizard_id'] = 'node';
|
|
|
|
// node table -- fields
|
|
|
|
// nid
|
|
$data['node']['nid'] = array(
|
|
'title' => t('Nid'),
|
|
'help' => t('The node ID.'), // The help that appears on the UI,
|
|
// Information for displaying the nid
|
|
'field' => array(
|
|
'id' => 'node',
|
|
'click sortable' => TRUE,
|
|
),
|
|
// Information for accepting a nid as an argument
|
|
'argument' => array(
|
|
'id' => 'node_nid',
|
|
'name field' => 'title', // the field to display in the summary.
|
|
'numeric' => TRUE,
|
|
'validate type' => 'nid',
|
|
),
|
|
// Information for accepting a nid as a filter
|
|
'filter' => array(
|
|
'id' => 'numeric',
|
|
),
|
|
// Information for sorting on a nid.
|
|
'sort' => array(
|
|
'id' => 'standard',
|
|
),
|
|
);
|
|
|
|
// title
|
|
// This definition has more items in it than it needs to as an example.
|
|
$data['node']['title'] = array(
|
|
'title' => t('Title'), // The item it appears as on the UI,
|
|
'help' => t('The content title.'), // The help that appears on the UI,
|
|
// Information for displaying a title as a field
|
|
'field' => array(
|
|
'field' => 'title', // the real field. This could be left out since it is the same.
|
|
'group' => t('Content'), // The group it appears in on the UI. Could be left out.
|
|
'id' => 'node',
|
|
'click sortable' => TRUE,
|
|
'link_to_node default' => TRUE,
|
|
),
|
|
'sort' => array(
|
|
'id' => 'standard',
|
|
),
|
|
// Information for accepting a title as a filter
|
|
'filter' => array(
|
|
'id' => 'string',
|
|
),
|
|
'argument' => array(
|
|
'id' => 'string',
|
|
),
|
|
);
|
|
|
|
// created field
|
|
$data['node']['created'] = array(
|
|
'title' => t('Post date'), // The item it appears as on the UI,
|
|
'help' => t('The date the content was posted.'), // The help that appears on the UI,
|
|
'field' => array(
|
|
'id' => 'date',
|
|
'click sortable' => TRUE,
|
|
),
|
|
'sort' => array(
|
|
'id' => 'date'
|
|
),
|
|
'filter' => array(
|
|
'id' => 'date',
|
|
),
|
|
);
|
|
|
|
// changed field
|
|
$data['node']['changed'] = array(
|
|
'title' => t('Updated date'), // The item it appears as on the UI,
|
|
'help' => t('The date the content was last updated.'), // The help that appears on the UI,
|
|
'field' => array(
|
|
'id' => 'date',
|
|
'click sortable' => TRUE,
|
|
),
|
|
'sort' => array(
|
|
'id' => 'date'
|
|
),
|
|
'filter' => array(
|
|
'id' => 'date',
|
|
),
|
|
);
|
|
|
|
// Content type
|
|
$data['node']['type'] = array(
|
|
'title' => t('Type'), // The item it appears as on the UI,
|
|
'help' => t('The content type (for example, "blog entry", "forum post", "story", etc).'), // The help that appears on the UI,
|
|
'field' => array(
|
|
'id' => 'node_type',
|
|
'click sortable' => TRUE,
|
|
),
|
|
'sort' => array(
|
|
'id' => 'standard',
|
|
),
|
|
'filter' => array(
|
|
'id' => 'node_type',
|
|
),
|
|
'argument' => array(
|
|
'id' => 'node_type',
|
|
),
|
|
);
|
|
|
|
// published status
|
|
$data['node']['status'] = array(
|
|
'title' => t('Published'),
|
|
'help' => t('Whether or not the content is published.'),
|
|
'field' => array(
|
|
'id' => 'boolean',
|
|
'click sortable' => TRUE,
|
|
'output formats' => array(
|
|
'published-notpublished' => array(t('Published'), t('Not published')),
|
|
),
|
|
),
|
|
'filter' => array(
|
|
'id' => 'boolean',
|
|
'label' => t('Published'),
|
|
'type' => 'yes-no',
|
|
'use_equal' => TRUE, // Use status = 1 instead of status <> 0 in WHERE statment
|
|
),
|
|
'sort' => array(
|
|
'id' => 'standard',
|
|
),
|
|
);
|
|
|
|
// published status + extra
|
|
$data['node']['status_extra'] = array(
|
|
'title' => t('Published or admin'),
|
|
'help' => t('Filters out unpublished content if the current user cannot view it.'),
|
|
'filter' => array(
|
|
'field' => 'status',
|
|
'id' => 'node_status',
|
|
'label' => t('Published or admin'),
|
|
),
|
|
);
|
|
|
|
// promote status
|
|
$data['node']['promote'] = array(
|
|
'title' => t('Promoted to front page'),
|
|
'help' => t('Whether or not the content is promoted to the front page.'),
|
|
'field' => array(
|
|
'id' => 'boolean',
|
|
'click sortable' => TRUE,
|
|
'output formats' => array(
|
|
'promoted-notpromoted' => array(t('Promoted'), t('Not promoted')),
|
|
),
|
|
),
|
|
'filter' => array(
|
|
'id' => 'boolean',
|
|
'label' => t('Promoted to front page'),
|
|
'type' => 'yes-no',
|
|
),
|
|
'sort' => array(
|
|
'id' => 'standard',
|
|
),
|
|
);
|
|
|
|
// sticky
|
|
$data['node']['sticky'] = array(
|
|
'title' => t('Sticky'), // The item it appears as on the UI,
|
|
'help' => t('Whether or not the content is sticky.'), // The help that appears on the UI,
|
|
// Information for displaying a title as a field
|
|
'field' => array(
|
|
'id' => 'boolean',
|
|
'click sortable' => TRUE,
|
|
'output formats' => array(
|
|
'sticky' => array(t('Sticky'), t('Not sticky')),
|
|
),
|
|
),
|
|
'filter' => array(
|
|
'id' => 'boolean',
|
|
'label' => t('Sticky'),
|
|
'type' => 'yes-no',
|
|
),
|
|
'sort' => array(
|
|
'id' => 'standard',
|
|
'help' => t('Whether or not the content is sticky. To list sticky content first, set this to descending.'),
|
|
),
|
|
);
|
|
|
|
// Language field
|
|
if (module_exists('language')) {
|
|
$data['node']['langcode'] = array(
|
|
'title' => t('Language'),
|
|
'help' => t('The language the content is in.'),
|
|
'field' => array(
|
|
'id' => 'node_language',
|
|
'click sortable' => TRUE,
|
|
),
|
|
'filter' => array(
|
|
'id' => 'language',
|
|
),
|
|
'argument' => array(
|
|
'id' => 'language',
|
|
),
|
|
'sort' => array(
|
|
'id' => 'standard',
|
|
),
|
|
);
|
|
}
|
|
|
|
// Define some fields based upon views_handler_field_entity in the entity
|
|
// table so they can be re-used with other query backends.
|
|
// @see views_handler_field_entity
|
|
|
|
$data['views_entity_node']['table']['group'] = t('Content');
|
|
|
|
$data['views_entity_node']['view_node'] = array(
|
|
'field' => array(
|
|
'title' => t('Link'),
|
|
'help' => t('Provide a simple link to the content.'),
|
|
'id' => 'node_link',
|
|
),
|
|
);
|
|
|
|
$data['views_entity_node']['edit_node'] = array(
|
|
'field' => array(
|
|
'title' => t('Edit link'),
|
|
'help' => t('Provide a simple link to edit the content.'),
|
|
'id' => 'node_link_edit',
|
|
),
|
|
);
|
|
|
|
$data['views_entity_node']['delete_node'] = array(
|
|
'field' => array(
|
|
'title' => t('Delete link'),
|
|
'help' => t('Provide a simple link to delete the content.'),
|
|
'id' => 'node_link_delete',
|
|
),
|
|
);
|
|
|
|
$data['node']['path'] = array(
|
|
'field' => array(
|
|
'title' => t('Path'),
|
|
'help' => t('The aliased path to this content.'),
|
|
'id' => 'node_path',
|
|
),
|
|
);
|
|
|
|
// Bogus fields for aliasing purposes.
|
|
|
|
$data['node']['created_fulldate'] = array(
|
|
'title' => t('Created date'),
|
|
'help' => t('Date in the form of CCYYMMDD.'),
|
|
'argument' => array(
|
|
'field' => 'created',
|
|
'id' => 'node_created_fulldate',
|
|
),
|
|
);
|
|
|
|
$data['node']['created_year_month'] = array(
|
|
'title' => t('Created year + month'),
|
|
'help' => t('Date in the form of YYYYMM.'),
|
|
'argument' => array(
|
|
'field' => 'created',
|
|
'id' => 'node_created_year_month',
|
|
),
|
|
);
|
|
|
|
$data['node']['created_year'] = array(
|
|
'title' => t('Created year'),
|
|
'help' => t('Date in the form of YYYY.'),
|
|
'argument' => array(
|
|
'field' => 'created',
|
|
'id' => 'node_created_year',
|
|
),
|
|
);
|
|
|
|
$data['node']['created_month'] = array(
|
|
'title' => t('Created month'),
|
|
'help' => t('Date in the form of MM (01 - 12).'),
|
|
'argument' => array(
|
|
'field' => 'created',
|
|
'id' => 'node_created_month',
|
|
),
|
|
);
|
|
|
|
$data['node']['created_day'] = array(
|
|
'title' => t('Created day'),
|
|
'help' => t('Date in the form of DD (01 - 31).'),
|
|
'argument' => array(
|
|
'field' => 'created',
|
|
'id' => 'node_created_day',
|
|
),
|
|
);
|
|
|
|
$data['node']['created_week'] = array(
|
|
'title' => t('Created week'),
|
|
'help' => t('Date in the form of WW (01 - 53).'),
|
|
'argument' => array(
|
|
'field' => 'created',
|
|
'id' => 'node_created_week',
|
|
),
|
|
);
|
|
|
|
$data['node']['changed_fulldate'] = array(
|
|
'title' => t('Updated date'),
|
|
'help' => t('Date in the form of CCYYMMDD.'),
|
|
'argument' => array(
|
|
'field' => 'changed',
|
|
'id' => 'node_created_fulldate',
|
|
),
|
|
);
|
|
|
|
$data['node']['changed_year_month'] = array(
|
|
'title' => t('Updated year + month'),
|
|
'help' => t('Date in the form of YYYYMM.'),
|
|
'argument' => array(
|
|
'field' => 'changed',
|
|
'id' => 'node_created_year_month',
|
|
),
|
|
);
|
|
|
|
$data['node']['changed_year'] = array(
|
|
'title' => t('Updated year'),
|
|
'help' => t('Date in the form of YYYY.'),
|
|
'argument' => array(
|
|
'field' => 'changed',
|
|
'id' => 'node_created_year',
|
|
),
|
|
);
|
|
|
|
$data['node']['changed_month'] = array(
|
|
'title' => t('Updated month'),
|
|
'help' => t('Date in the form of MM (01 - 12).'),
|
|
'argument' => array(
|
|
'field' => 'changed',
|
|
'id' => 'node_created_month',
|
|
),
|
|
);
|
|
|
|
$data['node']['changed_day'] = array(
|
|
'title' => t('Updated day'),
|
|
'help' => t('Date in the form of DD (01 - 31).'),
|
|
'argument' => array(
|
|
'field' => 'changed',
|
|
'id' => 'node_created_day',
|
|
),
|
|
);
|
|
|
|
$data['node']['changed_week'] = array(
|
|
'title' => t('Updated week'),
|
|
'help' => t('Date in the form of WW (01 - 53).'),
|
|
'argument' => array(
|
|
'field' => 'changed',
|
|
'id' => 'node_created_week',
|
|
),
|
|
);
|
|
|
|
// uid field
|
|
$data['node']['uid'] = array(
|
|
'title' => t('Author uid'),
|
|
'help' => t('The user authoring the content. If you need more fields than the uid add the content: author relationship'),
|
|
'relationship' => array(
|
|
'title' => t('Author'),
|
|
'help' => t('Relate content to the user who created it.'),
|
|
'id' => 'standard',
|
|
'base' => 'users',
|
|
'field' => 'uid',
|
|
'label' => t('author'),
|
|
),
|
|
'filter' => array(
|
|
'id' => 'user_name',
|
|
),
|
|
'argument' => array(
|
|
'id' => 'numeric',
|
|
),
|
|
'field' => array(
|
|
'id' => 'user',
|
|
),
|
|
);
|
|
|
|
$data['node']['uid_revision'] = array(
|
|
'title' => t('User has a revision'),
|
|
'help' => t('All nodes where a certain user has a revision'),
|
|
'real field' => 'nid',
|
|
'filter' => array(
|
|
'id' => 'node_uid_revision',
|
|
),
|
|
'argument' => array(
|
|
'id' => 'node_uid_revision',
|
|
),
|
|
);
|
|
|
|
// Content revision table
|
|
|
|
// Define the base group of this table. Fields that don't
|
|
// have a group defined will go into this field by default.
|
|
$data['node_revision']['table']['entity type'] = 'node';
|
|
$data['node_revision']['table']['group'] = t('Content revision');
|
|
$data['node_revision']['table']['wizard_id'] = 'node_revision';
|
|
|
|
|
|
// Advertise this table as a possible base table
|
|
$data['node_revision']['table']['base'] = array(
|
|
'field' => 'vid',
|
|
'title' => t('Content revision'),
|
|
'help' => t('Content revision is a history of changes to content.'),
|
|
'defaults' => array(
|
|
'field' => 'title',
|
|
),
|
|
);
|
|
|
|
// For other base tables, explain how we join
|
|
$data['node_revision']['table']['join'] = array(
|
|
// Directly links to node table.
|
|
'node' => array(
|
|
'left_field' => 'vid',
|
|
'field' => 'vid',
|
|
),
|
|
);
|
|
|
|
// uid field for node revision
|
|
$data['node_revision']['uid'] = array(
|
|
'title' => t('User'),
|
|
'help' => t('Relate a content revision to the user who created the revision.'),
|
|
'relationship' => array(
|
|
'id' => 'standard',
|
|
'base' => 'users',
|
|
'base field' => 'uid',
|
|
'label' => t('revision user'),
|
|
),
|
|
);
|
|
|
|
// nid
|
|
$data['node_revision']['nid'] = array(
|
|
'title' => t('Nid'),
|
|
// The help that appears on the UI.
|
|
'help' => t('The revision NID of the content revision.'),
|
|
// Information for displaying the nid.
|
|
'field' => array(
|
|
'id' => 'standard',
|
|
'click sortable' => TRUE,
|
|
),
|
|
// Information for accepting a nid as an argument.
|
|
'argument' => array(
|
|
'id' => 'node_nid',
|
|
'click sortable' => TRUE,
|
|
'numeric' => TRUE,
|
|
),
|
|
// Information for accepting a nid as a filter.
|
|
'filter' => array(
|
|
'id' => 'numeric',
|
|
),
|
|
// Information for sorting on a nid.
|
|
'sort' => array(
|
|
'id' => 'standard',
|
|
),
|
|
'relationship' => array(
|
|
'id' => 'standard',
|
|
'base' => 'node',
|
|
'base field' => 'nid',
|
|
'title' => t('Content'),
|
|
'label' => t('Get the actual content from a content revision.'),
|
|
),
|
|
);
|
|
|
|
// vid
|
|
$data['node_revision']['vid'] = array(
|
|
'title' => t('Vid'),
|
|
'help' => t('The revision ID of the content revision.'),
|
|
// Information for displaying the vid
|
|
'field' => array(
|
|
'id' => 'standard',
|
|
'click sortable' => TRUE,
|
|
),
|
|
// Information for accepting a vid as an argument
|
|
'argument' => array(
|
|
'id' => 'node_vid',
|
|
'click sortable' => TRUE,
|
|
'numeric' => TRUE,
|
|
),
|
|
// Information for accepting a vid as a filter
|
|
'filter' => array(
|
|
'id' => 'numeric',
|
|
),
|
|
// Information for sorting on a vid.
|
|
'sort' => array(
|
|
'id' => 'standard',
|
|
),
|
|
'relationship' => array(
|
|
'id' => 'standard',
|
|
'base' => 'node',
|
|
'base field' => 'vid',
|
|
'title' => t('Content'),
|
|
'label' => t('Get the actual content from a content revision.'),
|
|
),
|
|
);
|
|
|
|
// published status
|
|
$data['node_revision']['status'] = array(
|
|
'title' => t('Published'),
|
|
'help' => t('Whether or not the content is published.'),
|
|
'field' => array(
|
|
'id' => 'boolean',
|
|
'click sortable' => TRUE,
|
|
'output formats' => array(
|
|
'published-notpublished' => array(t('Published'), t('Not published')),
|
|
),
|
|
),
|
|
'filter' => array(
|
|
'id' => 'boolean',
|
|
'label' => t('Published'),
|
|
'type' => 'yes-no',
|
|
'use_equal' => TRUE, // Use status = 1 instead of status <> 0 in WHERE statment
|
|
),
|
|
'sort' => array(
|
|
'id' => 'standard',
|
|
),
|
|
);
|
|
|
|
// title
|
|
$data['node_revision']['title'] = array(
|
|
'title' => t('Title'), // The item it appears as on the UI,
|
|
'help' => t('The content title.'), // The help that appears on the UI,
|
|
// Information for displaying a title as a field
|
|
'field' => array(
|
|
'field' => 'title', // the real field
|
|
'id' => 'node_revision',
|
|
'click sortable' => TRUE,
|
|
),
|
|
'sort' => array(
|
|
'id' => 'standard',
|
|
),
|
|
'filter' => array(
|
|
'id' => 'string',
|
|
),
|
|
'argument' => array(
|
|
'id' => 'string',
|
|
),
|
|
);
|
|
|
|
// log field
|
|
$data['node_revision']['log'] = array(
|
|
'title' => t('Log message'), // The item it appears as on the UI,
|
|
'help' => t('The log message entered when the revision was created.'), // The help that appears on the UI,
|
|
// Information for displaying a title as a field
|
|
'field' => array(
|
|
'id' => 'xss',
|
|
),
|
|
'filter' => array(
|
|
'id' => 'string',
|
|
),
|
|
);
|
|
|
|
// revision timestamp
|
|
// changed field
|
|
$data['node_revision']['timestamp'] = array(
|
|
'title' => t('Updated date'), // The item it appears as on the UI,
|
|
'help' => t('The date the node was last updated.'), // The help that appears on the UI,
|
|
'field' => array(
|
|
'id' => 'date',
|
|
'click sortable' => TRUE,
|
|
),
|
|
'sort' => array(
|
|
'id' => 'date'
|
|
),
|
|
'filter' => array(
|
|
'id' => 'date',
|
|
),
|
|
);
|
|
|
|
$data['node_revision']['link_to_revision'] = array(
|
|
'field' => array(
|
|
'title' => t('Link'),
|
|
'help' => t('Provide a simple link to the revision.'),
|
|
'id' => 'node_revision_link',
|
|
),
|
|
);
|
|
|
|
$data['node_revision']['revert_revision'] = array(
|
|
'field' => array(
|
|
'title' => t('Revert link'),
|
|
'help' => t('Provide a simple link to revert to the revision.'),
|
|
'id' => 'node_revision_link_revert',
|
|
),
|
|
);
|
|
|
|
$data['node_revision']['delete_revision'] = array(
|
|
'field' => array(
|
|
'title' => t('Delete link'),
|
|
'help' => t('Provide a simple link to delete the content revision.'),
|
|
'id' => 'node_revision_link_delete',
|
|
),
|
|
);
|
|
|
|
// Node access table
|
|
|
|
// Define the base group of this table. Fields that don't
|
|
// have a group defined will go into this field by default.
|
|
$data['node_access']['table']['group'] = t('Content access');
|
|
|
|
// For other base tables, explain how we join
|
|
$data['node_access']['table']['join'] = array(
|
|
// Directly links to node table.
|
|
'node' => array(
|
|
'left_field' => 'nid',
|
|
'field' => 'nid',
|
|
),
|
|
);
|
|
// nid field
|
|
$data['node_access']['nid'] = array(
|
|
'title' => t('Access'),
|
|
'help' => t('Filter by access.'),
|
|
'filter' => array(
|
|
'id' => 'node_access',
|
|
'help' => t('Filter for content by view access. <strong>Not necessary if you are using node as your base table.</strong>'),
|
|
),
|
|
);
|
|
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* Implements hook_preprocess_node().
|
|
*/
|
|
function node_row_node_view_preprocess_node(&$vars) {
|
|
$node = $vars['node'];
|
|
$options = $vars['view']->style_plugin->row_plugin->options;
|
|
|
|
// Prevent the comment form from showing up if this is not a page display.
|
|
if ($vars['view_mode'] == 'full' && !$vars['view']->display_handler->hasPath()) {
|
|
$node->comment = FALSE;
|
|
}
|
|
|
|
if (!$options['links']) {
|
|
unset($vars['content']['links']);
|
|
}
|
|
|
|
if (!empty($options['comments']) && user_access('access comments') && $node->comment) {
|
|
$vars['content']['comments'] = comment_node_page_additions($node);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Implements hook_views_query_substitutions().
|
|
*/
|
|
function node_views_query_substitutions() {
|
|
return array(
|
|
'***ADMINISTER_NODES***' => intval(user_access('administer nodes')),
|
|
'***VIEW_OWN_UNPUBLISHED_NODES***' => intval(user_access('view own unpublished content')),
|
|
'***BYPASS_NODE_ACCESS***' => intval(user_access('bypass node access')),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Implements hook_views_analyze().
|
|
*/
|
|
function node_views_analyze($view) {
|
|
$ret = array();
|
|
// Check for something other than the default display:
|
|
if ($view->base_table == 'node') {
|
|
foreach ($view->displayHandlers as $id => $display) {
|
|
if (!$display->isDefaulted('access') || !$display->isDefaulted('filters')) {
|
|
// check for no access control
|
|
$access = $display->getOption('access');
|
|
if (empty($access['type']) || $access['type'] == 'none') {
|
|
$select = db_select('role', 'r');
|
|
$select->innerJoin('role_permission', 'p', 'r.rid = p.rid');
|
|
$result = $select->fields('r', array('rid'))
|
|
->fields('p', array('permission'))
|
|
->condition('r.rid', array('anonymous', 'authenticated'), 'IN')
|
|
->condition('p.permission', 'access content')
|
|
->execute();
|
|
|
|
foreach ($result as $role) {
|
|
$role->safe = TRUE;
|
|
$roles[$role->rid] = $role;
|
|
}
|
|
if (!($roles['anonymous']->safe && $roles['authenticated']->safe)) {
|
|
$ret[] = Analyzer::formatMessage(t('Some roles lack permission to access content, but display %display has no access control.', array('%display' => $display['display_title'])), 'warning');
|
|
}
|
|
$filters = $display->getOption('filters');
|
|
foreach ($filters as $filter) {
|
|
if ($filter['table'] == 'node' && ($filter['field'] == 'status' || $filter['field'] == 'status_extra')) {
|
|
continue 2;
|
|
}
|
|
}
|
|
$ret[] = Analyzer::formatMessage(t('Display %display has no access control but does not contain a filter for published nodes.', array('%display' => $display['display_title'])), 'warning');
|
|
}
|
|
}
|
|
}
|
|
}
|
|
foreach ($view->display as $id => $display) {
|
|
if ($display->getPluginId() == 'page') {
|
|
if ($display->getOption('path') == 'node/%') {
|
|
$ret[] = Analyzer::formatMessage(t('Display %display has set node/% as path. This will not produce what you want. If you want to have multiple versions of the node view, use panels.', array('%display' => $display['display_title'])), 'warning');
|
|
}
|
|
}
|
|
}
|
|
|
|
return $ret;
|
|
}
|
|
|
|
/**
|
|
* Implements hook_views_wizard().
|
|
*/
|
|
function node_views_wizard() {
|
|
// @todo: figure this piece out.
|
|
if (module_exists('statistics')) {
|
|
$plugins['node']['available_sorts']['node_counter-totalcount:DESC'] = t('Number of hits');
|
|
}
|
|
|
|
}
|