Issue #1827286 by dawehner, damiankloip: Fixed hook_views_analyze() is missing from hook_hook_info() so never gets executed.

8.0.x
catch 2013-01-10 17:14:16 +00:00
parent b36b17edb7
commit acf577ed72
5 changed files with 42 additions and 9 deletions

View File

@ -8,6 +8,7 @@
*/
use Drupal\views\Analyzer;
use Drupal\views\ViewExecutable;
/**
* Implements hook_views_data().
@ -681,10 +682,10 @@ function node_views_query_substitutions() {
/**
* Implements hook_views_analyze().
*/
function node_views_analyze($view) {
function node_views_analyze(ViewExecutable $view) {
$ret = array();
// Check for something other than the default display:
if ($view->base_table == 'node') {
if ($view->storage->get('base_table') == 'node') {
foreach ($view->displayHandlers as $id => $display) {
if (!$display->isDefaulted('access') || !$display->isDefaulted('filters')) {
// check for no access control
@ -703,7 +704,7 @@ function node_views_analyze($view) {
$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');
$ret[] = Analyzer::formatMessage(t('Some roles lack permission to access content, but display %display has no access control.', array('%display' => $display->display['display_title'])), 'warning');
}
$filters = $display->getOption('filters');
foreach ($filters as $filter) {
@ -711,15 +712,15 @@ function node_views_analyze($view) {
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');
$ret[] = Analyzer::formatMessage(t('Display %display has no access control but does not contain a filter for published nodes.', array('%display' => $display->display['display_title'])), 'warning');
}
}
}
}
foreach ($view->display as $id => $display) {
foreach ($view->displayHandlers as $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');
$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['display_title'])), 'warning');
}
}
}

View File

@ -30,6 +30,8 @@ class AnalyzeTest extends ViewTestBase {
public function setUp() {
parent::setUp();
$this->enableViewsTestModule();
// Add an admin user will full rights;
$this->admin = $this->drupalCreateUser(array('administer views'));
}
@ -45,10 +47,15 @@ class AnalyzeTest extends ViewTestBase {
$this->drupalGet('admin/structure/views/view/frontpage/edit');
$this->assertLink(t('analyze view'));
// This redirects the user to the form.
// This redirects the user to the analyze form.
$this->clickLink(t('analyze view'));
$this->assertText(t('View analysis'));
foreach (array('ok', 'warning', 'error') as $type) {
$xpath = $this->xpath('//div[contains(@class, :class)]', array(':class' => $type));
$this->assertTrue(count($xpath), format_string('Analyse messages with @type found', array('@type' => $type)));
}
// This redirects the user back to the main views edit page.
$this->drupalPost(NULL, array(), t('Ok'));
}

View File

@ -0,0 +1,22 @@
<?php
/**
* @file
* Provides views data and hooks for views_test_data module.
*/
use Drupal\views\Analyzer;
use Drupal\views\ViewExecutable;
/**
* Implements hook_views_analyze().
*/
function views_test_data_views_analyze(ViewExecutable $view) {
$ret = array();
$ret[] = Analyzer::formatMessage(t('Test ok message'), 'ok');
$ret[] = Analyzer::formatMessage(t('Test warning message'), 'warning');
$ret[] = Analyzer::formatMessage(t('Test error message'), 'error');
return $ret;
}

View File

@ -897,6 +897,9 @@ function views_hook_info() {
$hooks['views_form_substitutions'] = array(
'group' => 'views',
);
$hooks['views_analyze'] = array(
'group' => 'views',
);
return $hooks;
}

View File

@ -628,7 +628,7 @@ function views_ui_library_alter(&$libraries, $module) {
* There are other analysis tools in core specific sections, such as
* node.views.inc as well.
*/
function views_ui_views_analyze($view) {
function views_ui_views_analyze(ViewExecutable $view) {
$ret = array();
// Check for something other than the default display:
if (count($view->displayHandlers) < 2) {
@ -644,7 +644,7 @@ function views_ui_views_analyze($view) {
if ($display->hasPath() && $path = $display->getOption('path')) {
$normal_path = drupal_container()->get('path.alias_manager.cached')->getSystemPath($path);
if ($path != $normal_path) {
$ret[] = Analyzer::formatMessage(t('You have configured display %display with a path which is an path alias as well. This might lead to unwanted effects so better use an internal path.', array('%display' => $display['display_title'])), 'warning');
$ret[] = Analyzer::formatMessage(t('You have configured display %display with a path which is an path alias as well. This might lead to unwanted effects so better use an internal path.', array('%display' => $display->display['display_title'])), 'warning');
}
}
}